aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--body/c_fl.cpp4
-rw-r--r--body/c_fl.h4
-rw-r--r--body/c_fl_box.cpp10
-rw-r--r--body/c_fl_box.h3
-rw-r--r--body/c_fl_button.cpp7
-rw-r--r--body/c_fl_button.h1
-rw-r--r--body/c_fl_check_button.cpp7
-rw-r--r--body/c_fl_check_button.h1
-rw-r--r--body/c_fl_event.cpp15
-rw-r--r--body/c_fl_event.h5
-rw-r--r--body/c_fl_input.cpp7
-rw-r--r--body/c_fl_input.h1
-rw-r--r--body/c_fl_label.cpp4
-rw-r--r--body/c_fl_label.h1
-rw-r--r--body/c_fl_menu_button.cpp7
-rw-r--r--body/c_fl_menu_button.h1
-rw-r--r--body/c_fl_scroll.cpp7
-rw-r--r--body/c_fl_scroll.h1
-rw-r--r--body/c_fl_scrollbar.cpp7
-rw-r--r--body/c_fl_scrollbar.h1
-rw-r--r--body/c_fl_static.cpp154
-rw-r--r--body/c_fl_static.h37
-rw-r--r--body/fltk-args_marshal.adb (renamed from body/fltk-show_argv.adb)22
-rw-r--r--body/fltk-args_marshal.ads (renamed from body/fltk-show_argv.ads)15
-rw-r--r--body/fltk-asks.adb69
-rw-r--r--body/fltk-box_draw_marshal.adb693
-rw-r--r--body/fltk-box_draw_marshal.ads28
-rw-r--r--body/fltk-devices-surface-paged-postscript.adb17
-rw-r--r--body/fltk-devices-surface-paged-printers.adb2
-rw-r--r--body/fltk-devices-surface-paged.adb1
-rw-r--r--body/fltk-draw.adb65
-rw-r--r--body/fltk-environment.adb60
-rw-r--r--body/fltk-events.adb140
-rw-r--r--body/fltk-file_choosers.adb63
-rw-r--r--body/fltk-filenames.adb55
-rw-r--r--body/fltk-help_dialogs.adb7
-rw-r--r--body/fltk-images-bitmaps.adb26
-rw-r--r--body/fltk-images-pixmaps.adb3
-rw-r--r--body/fltk-images-rgb-jpeg.adb4
-rw-r--r--body/fltk-images-rgb-png.adb4
-rw-r--r--body/fltk-images-rgb.adb28
-rw-r--r--body/fltk-images-shared.adb2
-rw-r--r--body/fltk-images.adb4
-rw-r--r--body/fltk-label_draw_marshal.adb113
-rw-r--r--body/fltk-label_draw_marshal.ads28
-rw-r--r--body/fltk-labels.adb25
-rw-r--r--body/fltk-menu_items.adb8
-rw-r--r--body/fltk-pixmap_marshal.adb5
-rw-r--r--body/fltk-registry.ads32
-rw-r--r--body/fltk-static.adb556
-rw-r--r--body/fltk-text_buffers.adb72
-rw-r--r--body/fltk-widgets-boxes.adb24
-rw-r--r--body/fltk-widgets-buttons-light-check.adb16
-rw-r--r--body/fltk-widgets-buttons.adb16
-rw-r--r--body/fltk-widgets-clocks-updated-round.adb2
-rw-r--r--body/fltk-widgets-clocks-updated.adb3
-rw-r--r--body/fltk-widgets-clocks.adb3
-rw-r--r--body/fltk-widgets-groups-browsers-check.adb4
-rw-r--r--body/fltk-widgets-groups-browsers-textline-file.adb9
-rw-r--r--body/fltk-widgets-groups-browsers-textline.adb17
-rw-r--r--body/fltk-widgets-groups-browsers.adb61
-rw-r--r--body/fltk-widgets-groups-color_choosers.adb8
-rw-r--r--body/fltk-widgets-groups-help_views.adb12
-rw-r--r--body/fltk-widgets-groups-input_choices.adb18
-rw-r--r--body/fltk-widgets-groups-packed.adb2
-rw-r--r--body/fltk-widgets-groups-scrolls.adb27
-rw-r--r--body/fltk-widgets-groups-spinners.adb4
-rw-r--r--body/fltk-widgets-groups-tables-row.adb12
-rw-r--r--body/fltk-widgets-groups-tables.adb67
-rw-r--r--body/fltk-widgets-groups-text_displays-text_editors.adb34
-rw-r--r--body/fltk-widgets-groups-text_displays.adb76
-rw-r--r--body/fltk-widgets-groups-windows-double-cairo.adb4
-rw-r--r--body/fltk-widgets-groups-windows-double-overlay.adb6
-rw-r--r--body/fltk-widgets-groups-windows-double.adb4
-rw-r--r--body/fltk-widgets-groups-windows-opengl.adb7
-rw-r--r--body/fltk-widgets-groups-windows-single.adb4
-rw-r--r--body/fltk-widgets-groups-windows.adb24
-rw-r--r--body/fltk-widgets-groups.adb18
-rw-r--r--body/fltk-widgets-inputs-text-file.adb4
-rw-r--r--body/fltk-widgets-inputs-text-floating_point.adb2
-rw-r--r--body/fltk-widgets-inputs-text-multiline.adb3
-rw-r--r--body/fltk-widgets-inputs-text-outputs-multiline.adb3
-rw-r--r--body/fltk-widgets-inputs-text-outputs.adb3
-rw-r--r--body/fltk-widgets-inputs-text-secret.adb3
-rw-r--r--body/fltk-widgets-inputs-text-whole_number.adb2
-rw-r--r--body/fltk-widgets-inputs-text.adb16
-rw-r--r--body/fltk-widgets-inputs.adb32
-rw-r--r--body/fltk-widgets-menus-choices.adb3
-rw-r--r--body/fltk-widgets-menus-menu_bars-systemwide.adb22
-rw-r--r--body/fltk-widgets-menus-menu_buttons.adb20
-rw-r--r--body/fltk-widgets-menus.adb78
-rw-r--r--body/fltk-widgets-positioners.adb14
-rw-r--r--body/fltk-widgets-progress_bars.adb2
-rw-r--r--body/fltk-widgets-valuators-adjusters.adb2
-rw-r--r--body/fltk-widgets-valuators-counters-simple.adb2
-rw-r--r--body/fltk-widgets-valuators-counters.adb5
-rw-r--r--body/fltk-widgets-valuators-dials-fill.adb2
-rw-r--r--body/fltk-widgets-valuators-dials-line.adb2
-rw-r--r--body/fltk-widgets-valuators-dials.adb7
-rw-r--r--body/fltk-widgets-valuators-rollers.adb3
-rw-r--r--body/fltk-widgets-valuators-sliders-fill.adb3
-rw-r--r--body/fltk-widgets-valuators-sliders-horizontal.adb2
-rw-r--r--body/fltk-widgets-valuators-sliders-horizontal_fill.adb2
-rw-r--r--body/fltk-widgets-valuators-sliders-horizontal_nice.adb3
-rw-r--r--body/fltk-widgets-valuators-sliders-nice.adb3
-rw-r--r--body/fltk-widgets-valuators-sliders-scrollbars.adb16
-rw-r--r--body/fltk-widgets-valuators-sliders-value-horizontal.adb2
-rw-r--r--body/fltk-widgets-valuators-sliders-value.adb2
-rw-r--r--body/fltk-widgets-valuators-sliders.adb4
-rw-r--r--body/fltk-widgets-valuators-value_inputs.adb10
-rw-r--r--body/fltk-widgets-valuators-value_outputs.adb2
-rw-r--r--body/fltk-widgets-valuators.adb4
-rw-r--r--body/fltk-widgets.adb37
-rw-r--r--body/fltk.adb9
-rw-r--r--doc/fl.html10
-rw-r--r--doc/fl_(fltk-events).html35
-rw-r--r--doc/fl_(fltk-static).html172
-rw-r--r--doc/fl_bitmap.html33
-rw-r--r--doc/fl_draw.html22
-rw-r--r--doc/fl_rgb_image.html25
-rw-r--r--fltkada.gpr8
-rw-r--r--progress.txt8
-rw-r--r--proj/common.gpr93
-rw-r--r--readme.md87
-rw-r--r--readme.txt61
-rw-r--r--spec/fltk-asks.ads4
-rw-r--r--spec/fltk-draw.ads22
-rw-r--r--spec/fltk-environment.ads1
-rw-r--r--spec/fltk-events.ads44
-rw-r--r--spec/fltk-images-bitmaps.ads23
-rw-r--r--spec/fltk-images-rgb.ads22
-rw-r--r--spec/fltk-static.ads220
-rw-r--r--spec/fltk-widgets-groups-windows.ads4
-rw-r--r--spec/fltk-widgets-inputs.ads3
-rw-r--r--spec/fltk-widgets-menus-menu_buttons.ads4
-rw-r--r--spec/fltk.ads12
-rw-r--r--test/animated.adb21
-rw-r--r--test/ask.adb10
-rw-r--r--test/bitmap.adb2
-rw-r--r--test/button.adb4
-rw-r--r--test/buttons.adb1
-rw-r--r--test/clock.adb8
-rw-r--r--test/color_chooser.adb14
-rw-r--r--test/compare.adb10
-rw-r--r--test/dirlist.adb11
-rw-r--r--test/filename.adb40
-rw-r--r--test/pixmap.adb8
-rw-r--r--tests.gpr13
-rw-r--r--tests_2022.gpr11
-rw-r--r--tool/template.adb2
-rw-r--r--tools.gpr11
151 files changed, 3123 insertions, 1199 deletions
diff --git a/body/c_fl.cpp b/body/c_fl.cpp
index 871b32d..7bfc444 100644
--- a/body/c_fl.cpp
+++ b/body/c_fl.cpp
@@ -147,9 +147,9 @@ int fl_enum_down(int b) {
-const char * fl_clip_image_char_ptr = Fl::clipboard_image;
+const char * const fl_clip_image_char_ptr = Fl::clipboard_image;
-const char * fl_clip_plain_text_char_ptr = Fl::clipboard_plain_text;
+const char * const fl_clip_plain_text_char_ptr = Fl::clipboard_plain_text;
diff --git a/body/c_fl.h b/body/c_fl.h
index 88d229d..2149640 100644
--- a/body/c_fl.h
+++ b/body/c_fl.h
@@ -80,8 +80,8 @@ extern "C" int fl_enum_frame(int b);
extern "C" int fl_enum_down(int b);
-extern "C" const char * fl_clip_image_char_ptr;
-extern "C" const char * fl_clip_plain_text_char_ptr;
+extern "C" const char * const fl_clip_image_char_ptr;
+extern "C" const char * const fl_clip_plain_text_char_ptr;
extern "C" int fl_abi_check(int v);
diff --git a/body/c_fl_box.cpp b/body/c_fl_box.cpp
index 8bedec1..22ef21e 100644
--- a/body/c_fl_box.cpp
+++ b/body/c_fl_box.cpp
@@ -11,6 +11,16 @@
+// Telprot stopover
+
+extern "C" void box_extra_init_hook(void * aobj, int x, int y, int w, int h, const char * l);
+void fl_box_extra_init(void * adaobj, int x, int y, int w, int h, const char * label) {
+ box_extra_init_hook(adaobj, x, y, w, h, label);
+}
+
+
+
+
// Exports from Ada
extern "C" void widget_draw_hook(void * ud);
diff --git a/body/c_fl_box.h b/body/c_fl_box.h
index 5143c3f..f0f8352 100644
--- a/body/c_fl_box.h
+++ b/body/c_fl_box.h
@@ -8,6 +8,9 @@
#define FL_BOX_GUARD
+extern "C" void fl_box_extra_init(void * adaobj, int x, int y, int w, int h, const char * label);
+
+
typedef void* BOX;
diff --git a/body/c_fl_button.cpp b/body/c_fl_button.cpp
index df87ecc..ba08bc9 100644
--- a/body/c_fl_button.cpp
+++ b/body/c_fl_button.cpp
@@ -11,18 +11,13 @@
-// Telprot stopovers
+// Telprot stopover
extern "C" void button_extra_init_hook(void * aobj, int x, int y, int w, int h, const char * l);
void fl_button_extra_init(void * adaobj, int x, int y, int w, int h, const char * label) {
button_extra_init_hook(adaobj, x, y, w, h, label);
}
-extern "C" void button_extra_final_hook(void * aobj);
-void fl_button_extra_final(void * adaobj) {
- button_extra_final_hook(adaobj);
-}
-
diff --git a/body/c_fl_button.h b/body/c_fl_button.h
index f644a50..dfc0631 100644
--- a/body/c_fl_button.h
+++ b/body/c_fl_button.h
@@ -9,7 +9,6 @@
extern "C" void fl_button_extra_init(void * adaobj, int x, int y, int w, int h, const char * label);
-extern "C" void fl_button_extra_final(void * adaobj);
typedef void* BUTTON;
diff --git a/body/c_fl_check_button.cpp b/body/c_fl_check_button.cpp
index b12bf68..f590aa0 100644
--- a/body/c_fl_check_button.cpp
+++ b/body/c_fl_check_button.cpp
@@ -11,7 +11,7 @@
-// Telprot stopovers
+// Telprot stopover
extern "C" void check_button_extra_init_hook
(void * aobj, int x, int y, int w, int h, const char * l);
@@ -19,11 +19,6 @@ void fl_check_button_extra_init (void * adaobj, int x, int y, int w, int h, cons
check_button_extra_init_hook(adaobj, x, y, w, h, label);
}
-extern "C" void check_button_extra_final_hook(void * aobj);
-void fl_check_button_extra_final(void * adaobj) {
- check_button_extra_final_hook(adaobj);
-}
-
diff --git a/body/c_fl_check_button.h b/body/c_fl_check_button.h
index cfa6bff..88f1a00 100644
--- a/body/c_fl_check_button.h
+++ b/body/c_fl_check_button.h
@@ -10,7 +10,6 @@
extern "C" void fl_check_button_extra_init
(void * adaobj, int x, int y, int w, int h, const char * label);
-extern "C" void fl_check_button_extra_final(void * adaobj);
typedef void* CHECKBUTTON;
diff --git a/body/c_fl_event.cpp b/body/c_fl_event.cpp
index d88dfc2..7bfb466 100644
--- a/body/c_fl_event.cpp
+++ b/body/c_fl_event.cpp
@@ -16,6 +16,21 @@ void fl_event_add_handler(void * f) {
Fl::add_handler(reinterpret_cast<Fl_Event_Handler>(f));
}
+void fl_event_remove_handler(void * f) {
+ Fl::remove_handler(reinterpret_cast<Fl_Event_Handler>(f));
+}
+
+void fl_event_add_system_handler(void * h, void * f) {
+ Fl::add_system_handler(reinterpret_cast<Fl_System_Handler>(h), f);
+}
+
+void fl_event_remove_system_handler(void * h) {
+ Fl::remove_system_handler(reinterpret_cast<Fl_System_Handler>(h));
+}
+
+
+
+
void fl_event_set_dispatch(void * f) {
Fl::event_dispatch(reinterpret_cast<Fl_Event_Dispatch>(f));
}
diff --git a/body/c_fl_event.h b/body/c_fl_event.h
index 0acf999..4cb87cb 100644
--- a/body/c_fl_event.h
+++ b/body/c_fl_event.h
@@ -9,6 +9,11 @@
extern "C" void fl_event_add_handler(void * f);
+extern "C" void fl_event_remove_handler(void * f);
+extern "C" void fl_event_add_system_handler(void * h, void * f);
+extern "C" void fl_event_remove_system_handler(void * h);
+
+
extern "C" void fl_event_set_dispatch(void * f);
extern "C" int fl_event_handle_dispatch(int e, void * w);
extern "C" int fl_event_handle(int e, void * w);
diff --git a/body/c_fl_input.cpp b/body/c_fl_input.cpp
index 799c76e..73517a7 100644
--- a/body/c_fl_input.cpp
+++ b/body/c_fl_input.cpp
@@ -11,18 +11,13 @@
-// Telprot stopovers
+// Telprot stopover
extern "C" void text_input_extra_init_hook(void * aobj, int x, int y, int w, int h, const char * l);
void fl_text_input_extra_init(void * adaobj, int x, int y, int w, int h, const char * label) {
text_input_extra_init_hook(adaobj, x, y, w, h, label);
}
-extern "C" void text_input_extra_final_hook(void * aobj);
-void fl_text_input_extra_final(void * adaobj) {
- text_input_extra_final_hook(adaobj);
-}
-
diff --git a/body/c_fl_input.h b/body/c_fl_input.h
index 06a8a0c..dec6265 100644
--- a/body/c_fl_input.h
+++ b/body/c_fl_input.h
@@ -10,7 +10,6 @@
extern "C" void fl_text_input_extra_init
(void * adaobj, int x, int y, int w, int h, const char * label);
-extern "C" void fl_text_input_extra_final(void * adaobj);
typedef void* TEXTINPUT;
diff --git a/body/c_fl_label.cpp b/body/c_fl_label.cpp
index 2200c51..b80d3d3 100644
--- a/body/c_fl_label.cpp
+++ b/body/c_fl_label.cpp
@@ -29,6 +29,10 @@ void free_fl_label(LABEL l) {
+const char * fl_label_get_value(LABEL l) {
+ return static_cast<Fl_Label*>(l)->value;
+}
+
void fl_label_set_value(LABEL l, const char * v) {
static_cast<Fl_Label*>(l)->value = v;
}
diff --git a/body/c_fl_label.h b/body/c_fl_label.h
index 806aa72..6da3aca 100644
--- a/body/c_fl_label.h
+++ b/body/c_fl_label.h
@@ -15,6 +15,7 @@ extern "C" LABEL new_fl_label(const char * v, int f, int s, unsigned int h, int
extern "C" void free_fl_label(LABEL l);
+extern "C" const char * fl_label_get_value(LABEL l);
extern "C" void fl_label_set_value(LABEL l, const char * v);
extern "C" int fl_label_get_font(LABEL l);
extern "C" void fl_label_set_font(LABEL l, int f);
diff --git a/body/c_fl_menu_button.cpp b/body/c_fl_menu_button.cpp
index 8c04884..4537e8d 100644
--- a/body/c_fl_menu_button.cpp
+++ b/body/c_fl_menu_button.cpp
@@ -11,7 +11,7 @@
-// Telprot stopovers
+// Telprot stopover
extern "C" void menu_button_extra_init_hook
(void * aobj, int x, int y, int w, int h, const char * l);
@@ -19,11 +19,6 @@ void fl_menu_button_extra_init(void * adaobj, int x, int y, int w, int h, const
menu_button_extra_init_hook(adaobj, x, y, w, h, label);
}
-extern "C" void menu_button_extra_final_hook(void * aobj);
-void fl_menu_button_extra_final(void * adaobj) {
- menu_button_extra_final_hook(adaobj);
-}
-
diff --git a/body/c_fl_menu_button.h b/body/c_fl_menu_button.h
index d567e4f..f8f721b 100644
--- a/body/c_fl_menu_button.h
+++ b/body/c_fl_menu_button.h
@@ -10,7 +10,6 @@
extern "C" void fl_menu_button_extra_init
(void * adaobj, int x, int y, int w, int h, const char * label);
-extern "C" void fl_menu_button_extra_final(void * adaobj);
typedef void* MENUBUTTON;
diff --git a/body/c_fl_scroll.cpp b/body/c_fl_scroll.cpp
index 3aa4364..325d8cf 100644
--- a/body/c_fl_scroll.cpp
+++ b/body/c_fl_scroll.cpp
@@ -11,18 +11,13 @@
-// Telprot stopovers
+// Telprot stopover
extern "C" void scroll_extra_init_hook(void * aobj, int x, int y, int w, int h, const char * l);
void fl_scroll_extra_init(void * adaobj, int x, int y, int w, int h, const char * label) {
scroll_extra_init_hook(adaobj, x, y, w, h, label);
}
-extern "C" void scroll_extra_final_hook(void * aobj);
-void fl_scroll_extra_final(void * adaobj) {
- scroll_extra_final_hook(adaobj);
-}
-
diff --git a/body/c_fl_scroll.h b/body/c_fl_scroll.h
index 17dec0f..e39e469 100644
--- a/body/c_fl_scroll.h
+++ b/body/c_fl_scroll.h
@@ -9,7 +9,6 @@
extern "C" void fl_scroll_extra_init(void * adaobj, int x, int y, int w, int h, const char * label);
-extern "C" void fl_scroll_extra_final(void * adaobj);
typedef void* SCROLL;
diff --git a/body/c_fl_scrollbar.cpp b/body/c_fl_scrollbar.cpp
index b71148a..bf5ceaa 100644
--- a/body/c_fl_scrollbar.cpp
+++ b/body/c_fl_scrollbar.cpp
@@ -11,18 +11,13 @@
-// Telprot stopovers
+// Telprot stopover
extern "C" void scrollbar_extra_init_hook(void * aobj, int x, int y, int w, int h, const char * l);
void fl_scrollbar_extra_init (void * adaobj, int x, int y, int w, int h, const char * label) {
scrollbar_extra_init_hook(adaobj, x, y, w, h, label);
}
-extern "C" void scrollbar_extra_final_hook(void * aobj);
-void fl_scrollbar_extra_final(void * adaobj) {
- scrollbar_extra_final_hook(adaobj);
-}
-
diff --git a/body/c_fl_scrollbar.h b/body/c_fl_scrollbar.h
index 870f256..6dd599d 100644
--- a/body/c_fl_scrollbar.h
+++ b/body/c_fl_scrollbar.h
@@ -10,7 +10,6 @@
extern "C" void fl_scrollbar_extra_init
(void * adaobj, int x, int y, int w, int h, const char * label);
-extern "C" void fl_scrollbar_extra_final(void * adaobj);
typedef void* SCROLLBAR;
diff --git a/body/c_fl_static.cpp b/body/c_fl_static.cpp
index 31cb3af..5dd90e2 100644
--- a/body/c_fl_static.cpp
+++ b/body/c_fl_static.cpp
@@ -12,16 +12,47 @@
-void fl_static_add_awake_handler(void * h, void * f) {
- Fl::add_awake_handler_(reinterpret_cast<Fl_Awake_Handler>(h),f);
+void fl_static_box_draw_marshal(void * f, int x, int y, int w, int h, unsigned int t) {
+ reinterpret_cast<Fl_Box_Draw_F*>(f)(x, y, w, h, static_cast<Fl_Color>(t));
}
-void fl_static_get_awake_handler(void * &h, void * &f) {
- Fl::get_awake_handler_(reinterpret_cast<Fl_Awake_Handler&>(h),f);
+
+
+
+const char * const fl_help_usage_string_ptr = Fl::help;
+
+
+
+
+int fl_static_arg(int c, void * v, int &i) {
+ return Fl::arg(c, static_cast<char**>(v), i);
+}
+
+void fl_static_args(int c, void * v) {
+ Fl::args(c, static_cast<char**>(v));
+}
+
+int fl_static_args2(int c, void * v, int &i, void * h) {
+ return Fl::args(c, static_cast<char**>(v), i, reinterpret_cast<Fl_Args_Handler>(h));
+}
+
+
+
+
+int fl_static_add_awake_handler(void * h, void * f) {
+ return Fl::add_awake_handler_(reinterpret_cast<Fl_Awake_Handler>(h), f);
+}
+
+int fl_static_get_awake_handler(void * &h, void * &f) {
+ return Fl::get_awake_handler_(reinterpret_cast<Fl_Awake_Handler&>(h), f);
}
-void fl_static_awake() {
- Fl::awake();
+int fl_static_awake2(void * h, void * f) {
+ return Fl::awake(reinterpret_cast<Fl_Awake_Handler>(h), f);
+}
+
+void fl_static_awake(void * msg) {
+ Fl::awake(msg);
}
void fl_static_lock() {
@@ -36,52 +67,56 @@ void fl_static_unlock() {
void fl_static_add_check(void * h, void * f) {
- Fl::add_check(reinterpret_cast<Fl_Timeout_Handler>(h),f);
+ Fl::add_check(reinterpret_cast<Fl_Timeout_Handler>(h), f);
}
int fl_static_has_check(void * h, void * f) {
- return Fl::has_check(reinterpret_cast<Fl_Timeout_Handler>(h),f);
+ return Fl::has_check(reinterpret_cast<Fl_Timeout_Handler>(h), f);
}
void fl_static_remove_check(void * h, void * f) {
- Fl::remove_check(reinterpret_cast<Fl_Timeout_Handler>(h),f);
+ Fl::remove_check(reinterpret_cast<Fl_Timeout_Handler>(h), f);
}
void fl_static_add_timeout(double s, void * h, void * f) {
- Fl::add_timeout(s,reinterpret_cast<Fl_Timeout_Handler>(h),f);
+ Fl::add_timeout(s, reinterpret_cast<Fl_Timeout_Handler>(h), f);
}
int fl_static_has_timeout(void * h, void * f) {
- return Fl::has_timeout(reinterpret_cast<Fl_Timeout_Handler>(h),f);
+ return Fl::has_timeout(reinterpret_cast<Fl_Timeout_Handler>(h), f);
}
void fl_static_remove_timeout(void * h, void * f) {
- Fl::remove_timeout(reinterpret_cast<Fl_Timeout_Handler>(h),f);
+ Fl::remove_timeout(reinterpret_cast<Fl_Timeout_Handler>(h), f);
}
void fl_static_repeat_timeout(double s, void * h, void * f) {
- Fl::repeat_timeout(s,reinterpret_cast<Fl_Timeout_Handler>(h),f);
+ Fl::repeat_timeout(s, reinterpret_cast<Fl_Timeout_Handler>(h), f);
}
void fl_static_add_clipboard_notify(void * h, void * f) {
- Fl::add_clipboard_notify(reinterpret_cast<Fl_Clipboard_Notify_Handler>(h),f);
+ Fl::add_clipboard_notify(reinterpret_cast<Fl_Clipboard_Notify_Handler>(h), f);
+}
+
+void fl_static_remove_clipboard_notify(void * h) {
+ Fl::remove_clipboard_notify(reinterpret_cast<Fl_Clipboard_Notify_Handler>(h));
}
void fl_static_add_fd(int d, void * h, void * f) {
- Fl::add_fd(d,reinterpret_cast<Fl_FD_Handler>(h),f);
+ Fl::add_fd(d,reinterpret_cast<Fl_FD_Handler>(h), f);
}
void fl_static_add_fd2(int d, int m, void * h, void * f) {
- Fl::add_fd(d,m,reinterpret_cast<Fl_FD_Handler>(h),f);
+ Fl::add_fd(d,m,reinterpret_cast<Fl_FD_Handler>(h), f);
}
void fl_static_remove_fd(int d) {
@@ -89,49 +124,73 @@ void fl_static_remove_fd(int d) {
}
void fl_static_remove_fd2(int d, int m) {
- Fl::remove_fd(d,m);
+ Fl::remove_fd(d, m);
}
void fl_static_add_idle(void * h, void * f) {
- Fl::add_idle(reinterpret_cast<Fl_Idle_Handler>(h),f);
+ Fl::add_idle(reinterpret_cast<Fl_Idle_Handler>(h), f);
}
int fl_static_has_idle(void * h, void * f) {
- return Fl::has_idle(reinterpret_cast<Fl_Idle_Handler>(h),f);
+ return Fl::has_idle(reinterpret_cast<Fl_Idle_Handler>(h), f);
}
void fl_static_remove_idle(void * h, void * f) {
- Fl::remove_idle(reinterpret_cast<Fl_Idle_Handler>(h),f);
+ Fl::remove_idle(reinterpret_cast<Fl_Idle_Handler>(h), f);
}
+unsigned int fl_static_get_color2(unsigned int c) {
+ return Fl::get_color(c);
+}
+
void fl_static_get_color(unsigned int c, unsigned char &r, unsigned char &g, unsigned char &b) {
- Fl::get_color(c,r,g,b);
+ Fl::get_color(c, r, g, b);
+}
+
+void fl_static_set_color2(unsigned int t, unsigned int f) {
+ Fl::set_color(t, f);
}
void fl_static_set_color(unsigned int c, unsigned char r, unsigned char g, unsigned char b) {
- Fl::set_color(c,r,g,b);
+ Fl::set_color(c, r, g, b);
}
void fl_static_free_color(unsigned int c, int b) {
- Fl::free_color(c,b);
+ Fl::free_color(c, b);
+}
+
+unsigned int fl_static_get_box_color(unsigned int t) {
+ return Fl::box_color(static_cast<Fl_Color>(t));
+}
+
+void fl_static_set_box_color(unsigned int t) {
+ Fl::set_box_color(static_cast<Fl_Color>(t));
+}
+
+void fl_static_own_colormap() {
+ Fl::own_colormap();
}
void fl_static_foreground(unsigned int r, unsigned int g, unsigned int b) {
- Fl::foreground(r,g,b);
+ Fl::foreground(r, g, b);
}
void fl_static_background(unsigned int r, unsigned int g, unsigned int b) {
- Fl::background(r,g,b);
+ Fl::background(r, g, b);
}
void fl_static_background2(unsigned int r, unsigned int g, unsigned int b) {
- Fl::background2(r,g,b);
+ Fl::background2(r, g, b);
+}
+
+void fl_static_get_system_colors() {
+ Fl::get_system_colors();
}
@@ -146,7 +205,11 @@ const char * fl_static_get_font_name(int f) {
}
void fl_static_set_font(int t, int f) {
- Fl::set_font(t,f);
+ Fl::set_font(static_cast<Fl_Font>(t), static_cast<Fl_Font>(f));
+}
+
+void fl_static_set_font2(int t, char * s) {
+ Fl::set_font(static_cast<Fl_Font>(t), s);
}
int fl_static_get_font_sizes(int f, int * &a) {
@@ -180,10 +243,20 @@ int fl_static_box_dy(int b) {
return Fl::box_dy(static_cast<Fl_Boxtype>(b));
}
+void * fl_static_get_boxtype(int t) {
+ return reinterpret_cast<void*>(Fl::get_boxtype(static_cast<Fl_Boxtype>(t)));
+}
+
void fl_static_set_boxtype(int t, int f) {
Fl::set_boxtype(static_cast<Fl_Boxtype>(t),static_cast<Fl_Boxtype>(f));
}
+void fl_static_set_boxtype2(int t, void * f,
+ unsigned char dx, unsigned char dy, unsigned char dw, unsigned char dh)
+{
+ Fl::set_boxtype(static_cast<Fl_Boxtype>(t), reinterpret_cast<Fl_Box_Draw_F*>(f), dx, dy, dw, dh);
+}
+
int fl_static_draw_box_active() {
return Fl::draw_box_active();
}
@@ -191,8 +264,16 @@ int fl_static_draw_box_active() {
+void fl_static_set_labeltype(int k, void * d, void * m) {
+ Fl::set_labeltype(static_cast<Fl_Labeltype>(k),
+ reinterpret_cast<Fl_Label_Draw_F*>(d), reinterpret_cast<Fl_Label_Measure_F*>(m));
+}
+
+
+
+
void fl_static_copy(const char * t, int l, int k) {
- Fl::copy(t,l,k);
+ Fl::copy(t, l, k);
}
void fl_static_paste(void * r, int s) {
@@ -205,11 +286,15 @@ void fl_static_selection(void * o, char * t, int l) {
Fl::selection(ref, t, l);
}
+int fl_static_clipboard_contains(const char * k) {
+ return Fl::clipboard_contains(k);
+}
+
-void fl_static_dnd() {
- Fl::dnd();
+int fl_static_dnd() {
+ return Fl::dnd();
}
int fl_static_get_dnd_text_ops() {
@@ -234,8 +319,8 @@ void fl_static_disable_im() {
-void fl_static_default_atclose(void * w) {
- Fl::default_atclose(static_cast<Fl_Window*>(w), 0);
+void fl_static_default_atclose(void * w, void * u) {
+ Fl::default_atclose(static_cast<Fl_Window*>(w), u);
}
void * fl_static_get_first_window() {
@@ -277,6 +362,7 @@ int fl_static_is_scheme(const char *n) {
}
void fl_static_reload_scheme() {
+ // this always returns 1 for some reason so we can ignore the return value
Fl::reload_scheme();
}
@@ -284,11 +370,11 @@ void fl_static_reload_scheme() {
int fl_static_get_option(int o) {
- return Fl::option(static_cast<Fl::Fl_Option>(o));
+ return Fl::option(static_cast<Fl::Fl_Option>(o)) ? 1 : 0;
}
void fl_static_set_option(int o, int t) {
- Fl::option(static_cast<Fl::Fl_Option>(o),t);
+ Fl::option(static_cast<Fl::Fl_Option>(o), t!=0);
}
diff --git a/body/c_fl_static.h b/body/c_fl_static.h
index c0a6c2f..f39e557 100644
--- a/body/c_fl_static.h
+++ b/body/c_fl_static.h
@@ -8,9 +8,21 @@
#define FL_STATIC_GUARD
-extern "C" void fl_static_add_awake_handler(void * h, void * f);
-extern "C" void fl_static_get_awake_handler(void * &h, void * &f);
-extern "C" void fl_static_awake();
+extern "C" void fl_static_box_draw_marshal(void * f, int x, int y, int w, int h, unsigned int t);
+
+
+extern "C" const char * const fl_help_usage_string_ptr;
+
+
+extern "C" int fl_static_arg(int c, void * v, int &i);
+extern "C" void fl_static_args(int c, void * v);
+extern "C" int fl_static_args2(int c, void * v, int &i, void * h);
+
+
+extern "C" int fl_static_add_awake_handler(void * h, void * f);
+extern "C" int fl_static_get_awake_handler(void * &h, void * &f);
+extern "C" int fl_static_awake2(void * h, void * f);
+extern "C" void fl_static_awake(void * msg);
extern "C" void fl_static_lock();
extern "C" void fl_static_unlock();
@@ -27,6 +39,7 @@ extern "C" void fl_static_repeat_timeout(double s, void * h, void * f);
extern "C" void fl_static_add_clipboard_notify(void * h, void * f);
+extern "C" void fl_static_remove_clipboard_notify(void * h);
extern "C" void fl_static_add_fd(int d, void * h, void * f);
@@ -40,19 +53,26 @@ extern "C" int fl_static_has_idle(void * h, void * f);
extern "C" void fl_static_remove_idle(void * h, void * f);
+extern "C" unsigned int fl_static_get_color2(unsigned int c);
extern "C" void fl_static_get_color(unsigned int c,
unsigned char &r, unsigned char &g, unsigned char &b);
+extern "C" void fl_static_set_color2(unsigned int t, unsigned int f);
extern "C" void fl_static_set_color(unsigned int c,
unsigned char r, unsigned char g, unsigned char b);
extern "C" void fl_static_free_color(unsigned int c, int b);
+extern "C" unsigned int fl_static_get_box_color(unsigned int t);
+extern "C" void fl_static_set_box_color(unsigned int t);
+extern "C" void fl_static_own_colormap();
extern "C" void fl_static_foreground(unsigned int r, unsigned int g, unsigned int b);
extern "C" void fl_static_background(unsigned int r, unsigned int g, unsigned int b);
extern "C" void fl_static_background2(unsigned int r, unsigned int g, unsigned int b);
+extern "C" void fl_static_get_system_colors();
extern "C" const char * fl_static_get_font(int f);
extern "C" const char * fl_static_get_font_name(int f);
extern "C" void fl_static_set_font(int t, int f);
+extern "C" void fl_static_set_font2(int t, char * s);
extern "C" int fl_static_get_font_sizes(int f, int * &a);
extern "C" int fl_static_font_size_array_get(int * a, int i);
extern "C" int fl_static_set_fonts();
@@ -62,16 +82,23 @@ extern "C" int fl_static_box_dh(int b);
extern "C" int fl_static_box_dw(int b);
extern "C" int fl_static_box_dx(int b);
extern "C" int fl_static_box_dy(int b);
+extern "C" void * fl_static_get_boxtype(int t);
extern "C" void fl_static_set_boxtype(int t, int f);
+extern "C" void fl_static_set_boxtype2(int t, void * f,
+ unsigned char dx, unsigned char dy, unsigned char dw, unsigned char dh);
extern "C" int fl_static_draw_box_active();
+extern "C" void fl_static_set_labeltype(int k, void * d, void * m);
+
+
extern "C" void fl_static_copy(const char * t, int l, int k);
extern "C" void fl_static_paste(void * r, int s);
extern "C" void fl_static_selection(void * o, char * t, int l);
+extern "C" int fl_static_clipboard_contains(const char * k);
-extern "C" void fl_static_dnd();
+extern "C" int fl_static_dnd();
extern "C" int fl_static_get_dnd_text_ops();
extern "C" void fl_static_set_dnd_text_ops(int t);
@@ -80,7 +107,7 @@ extern "C" void fl_static_enable_im();
extern "C" void fl_static_disable_im();
-extern "C" void fl_static_default_atclose(void * w);
+extern "C" void fl_static_default_atclose(void * w, void * u);
extern "C" void * fl_static_get_first_window();
extern "C" void fl_static_set_first_window(void * w);
extern "C" void * fl_static_next_window(void * w);
diff --git a/body/fltk-show_argv.adb b/body/fltk-args_marshal.adb
index 52e22e2..f08e025 100644
--- a/body/fltk-show_argv.adb
+++ b/body/fltk-args_marshal.adb
@@ -7,10 +7,10 @@
with
Ada.Command_Line,
- Interfaces.C.Strings;
+ Interfaces.C;
-package body FLTK.Show_Argv is
+package body FLTK.Args_Marshal is
package ACom renames Ada.Command_Line;
@@ -31,20 +31,26 @@ package body FLTK.Show_Argv is
end Create_Argv;
+ procedure Free_Argv
+ (Argv : in out Interfaces.C.Strings.chars_ptr_array) is
+ begin
+ for Ptr of Argv loop
+ ICS.Free (Ptr);
+ end loop;
+ end Free_Argv;
+
+
procedure Dispatch
(Func : in Show_With_Args_Func;
CObj : in Storage.Integer_Address)
is
Argv : ICS.chars_ptr_array := Create_Argv;
begin
- Func (CObj, IntC.int (ACom.Argument_Count + 1),
- Storage.To_Integer (Argv (Argv'First)'Address));
- for Ptr of Argv loop
- ICS.Free (Ptr);
- end loop;
+ Func (CObj, Argv'Length, Storage.To_Integer (Argv (Argv'First)'Address));
+ Free_Argv (Argv);
end Dispatch;
-end FLTK.Show_Argv;
+end FLTK.Args_Marshal;
diff --git a/body/fltk-show_argv.ads b/body/fltk-args_marshal.ads
index faa93a4..b19c182 100644
--- a/body/fltk-show_argv.ads
+++ b/body/fltk-args_marshal.ads
@@ -6,10 +6,19 @@
with
- Interfaces.C;
+ Interfaces.C.Strings;
+
+
+private package FLTK.Args_Marshal is
+
+
+ function Create_Argv
+ return Interfaces.C.Strings.chars_ptr_array;
+
+ procedure Free_Argv
+ (Argv : in out Interfaces.C.Strings.chars_ptr_array);
-private package FLTK.Show_Argv is
-- Used for implementing show(argc,argv)
@@ -32,6 +41,6 @@ private
pragma Convention (C, Show_With_Args_Func);
-end FLTK.Show_Argv;
+end FLTK.Args_Marshal;
diff --git a/body/fltk-asks.adb b/body/fltk-asks.adb
index 034a674..8d4f900 100644
--- a/body/fltk-asks.adb
+++ b/body/fltk-asks.adb
@@ -234,9 +234,9 @@ package body FLTK.Asks is
- ---------------
- -- Cleanup --
- ---------------
+ -------------------
+ -- Destructors --
+ -------------------
procedure Finalize
(This : in out Dialog_String_Final_Controller)
@@ -254,6 +254,21 @@ package body FLTK.Asks is
+ --------------------
+ -- Constructors --
+ --------------------
+
+ -- You can get out of a hole by digging deeper, right?
+ procedure fl_box_extra_init
+ (Ada_Obj : in Storage.Integer_Address;
+ X, Y, W, H : in Interfaces.C.int;
+ C_Str : in Interfaces.C.char_array);
+ pragma Import (C, fl_box_extra_init, "fl_box_extra_init");
+ pragma Inline (fl_box_extra_init);
+
+
+
+
-----------------------
-- API Subprograms --
-----------------------
@@ -362,13 +377,17 @@ package body FLTK.Asks is
(Message, Button1 : in String)
return Choice_Result
is
- Result : Interfaces.C.int := fl_ask_choice
+ Result : constant Interfaces.C.int := fl_ask_choice
(Interfaces.C.To_C (Message),
Interfaces.C.To_C (Button1),
Interfaces.C.Strings.Null_Ptr,
Interfaces.C.Strings.Null_Ptr);
begin
return Choice_Result'Val (Result);
+ exception
+ when Constraint_Error => raise Internal_FLTK_Error with
+ "fl_choice returned unexpected int value of " &
+ Interfaces.C.int'Image (Result);
end Choice;
@@ -377,13 +396,17 @@ package body FLTK.Asks is
return Choice_Result
is
Str2 : aliased Interfaces.C.char_array := Interfaces.C.To_C (Button2);
- Result : Interfaces.C.int := fl_ask_choice
+ Result : constant Interfaces.C.int := fl_ask_choice
(Interfaces.C.To_C (Message),
Interfaces.C.To_C (Button1),
Interfaces.C.Strings.To_Chars_Ptr (Str2'Unchecked_Access),
Interfaces.C.Strings.Null_Ptr);
begin
return Choice_Result'Val (Result);
+ exception
+ when Constraint_Error => raise Internal_FLTK_Error with
+ "fl_choice returned unexpected int value of " &
+ Interfaces.C.int'Image (Result);
end Choice;
@@ -393,13 +416,17 @@ package body FLTK.Asks is
is
Str2 : aliased Interfaces.C.char_array := Interfaces.C.To_C (Button2);
Str3 : aliased Interfaces.C.char_array := Interfaces.C.To_C (Button3);
- Result : Interfaces.C.int := fl_ask_choice
+ Result : constant Interfaces.C.int := fl_ask_choice
(Interfaces.C.To_C (Message),
Interfaces.C.To_C (Button1),
Interfaces.C.Strings.To_Chars_Ptr (Str2'Unchecked_Access),
Interfaces.C.Strings.To_Chars_Ptr (Str3'Unchecked_Access));
begin
return Choice_Result'Val (Result);
+ exception
+ when Constraint_Error => raise Internal_FLTK_Error with
+ "fl_choice returned unexpected int value of " &
+ Interfaces.C.int'Image (Result);
end Choice;
@@ -407,7 +434,7 @@ package body FLTK.Asks is
(Message, Button1 : in String)
return Extended_Choice_Result
is
- Result : Interfaces.C.int := fl_ask_choice_n
+ Result : constant Interfaces.C.int := fl_ask_choice_n
(Interfaces.C.To_C (Message),
Interfaces.C.To_C (Button1),
Interfaces.C.Strings.Null_Ptr,
@@ -427,7 +454,7 @@ package body FLTK.Asks is
return Extended_Choice_Result
is
Str2 : aliased Interfaces.C.char_array := Interfaces.C.To_C (Button2);
- Result : Interfaces.C.int := fl_ask_choice_n
+ Result : constant Interfaces.C.int := fl_ask_choice_n
(Interfaces.C.To_C (Message),
Interfaces.C.To_C (Button1),
Interfaces.C.Strings.To_Chars_Ptr (Str2'Unchecked_Access),
@@ -448,7 +475,7 @@ package body FLTK.Asks is
is
Str2 : aliased Interfaces.C.char_array := Interfaces.C.To_C (Button2);
Str3 : aliased Interfaces.C.char_array := Interfaces.C.To_C (Button3);
- Result : Interfaces.C.int := fl_ask_choice_n
+ Result : constant Interfaces.C.int := fl_ask_choice_n
(Interfaces.C.To_C (Message),
Interfaces.C.To_C (Button1),
Interfaces.C.Strings.To_Chars_Ptr (Str2'Unchecked_Access),
@@ -468,7 +495,7 @@ package body FLTK.Asks is
Default : in String := "")
return String
is
- Result : Interfaces.C.Strings.chars_ptr := fl_ask_input
+ Result : constant Interfaces.C.Strings.chars_ptr := fl_ask_input
(Interfaces.C.To_C (Message),
Interfaces.C.To_C (Default));
begin
@@ -493,7 +520,7 @@ package body FLTK.Asks is
Default : in String := "")
return String
is
- Result : Interfaces.C.Strings.chars_ptr := fl_ask_password
+ Result : constant Interfaces.C.Strings.chars_ptr := fl_ask_password
(Interfaces.C.To_C (Message),
Interfaces.C.To_C (Default));
begin
@@ -520,8 +547,8 @@ package body FLTK.Asks is
C_R : Interfaces.C.double := Interfaces.C.double (R);
C_G : Interfaces.C.double := Interfaces.C.double (G);
C_B : Interfaces.C.double := Interfaces.C.double (B);
- M : Interfaces.C.int := FLTK.Widgets.Groups.Color_Choosers.Color_Mode'Pos (Mode);
- Result : Interfaces.C.int := fl_ask_color_chooser
+ M : constant Interfaces.C.int := FLTK.Widgets.Groups.Color_Choosers.Color_Mode'Pos (Mode);
+ Result : constant Interfaces.C.int := fl_ask_color_chooser
(Interfaces.C.To_C (Title), C_R, C_G, C_B, M);
begin
if Result = 1 then
@@ -550,8 +577,8 @@ package body FLTK.Asks is
C_R : Interfaces.C.unsigned_char := Interfaces.C.unsigned_char (R);
C_G : Interfaces.C.unsigned_char := Interfaces.C.unsigned_char (G);
C_B : Interfaces.C.unsigned_char := Interfaces.C.unsigned_char (B);
- M : Interfaces.C.int := FLTK.Widgets.Groups.Color_Choosers.Color_Mode'Pos (Mode);
- Result : Interfaces.C.int := fl_ask_color_chooser2
+ M : constant Interfaces.C.int := FLTK.Widgets.Groups.Color_Choosers.Color_Mode'Pos (Mode);
+ Result : constant Interfaces.C.int := fl_ask_color_chooser2
(Interfaces.C.To_C (Title), C_R, C_G, C_B, M);
begin
if Result = 1 then
@@ -583,7 +610,7 @@ package body FLTK.Asks is
Relative : in Boolean := False)
return String
is
- Result : Interfaces.C.Strings.chars_ptr := fl_ask_dir_chooser
+ Result : constant Interfaces.C.Strings.chars_ptr := fl_ask_dir_chooser
(Interfaces.C.To_C (Message),
Interfaces.C.To_C (Default),
Boolean'Pos (Relative));
@@ -602,7 +629,7 @@ package body FLTK.Asks is
Relative : in Boolean := False)
return String
is
- Result : Interfaces.C.Strings.chars_ptr := fl_ask_file_chooser
+ Result : constant Interfaces.C.Strings.chars_ptr := fl_ask_file_chooser
(Interfaces.C.To_C (Message),
Interfaces.C.To_C (Filter_Pattern),
Interfaces.C.To_C (Default),
@@ -685,6 +712,14 @@ begin
Wrapper (Icon_Box).Void_Ptr := fl_ask_message_icon;
Wrapper (Icon_Box).Needs_Dealloc := False;
+ fl_box_extra_init
+ (Storage.To_Integer (Icon_Box'Address),
+ Interfaces.C.int (Icon_Box.Get_X),
+ Interfaces.C.int (Icon_Box.Get_Y),
+ Interfaces.C.int (Icon_Box.Get_W),
+ Interfaces.C.int (Icon_Box.Get_H),
+ Interfaces.C.To_C (Icon_Box.Get_Label));
+
fl_ask_file_chooser_callback (Storage.To_Integer (File_Chooser_Callback_Hook'Address));
diff --git a/body/fltk-box_draw_marshal.adb b/body/fltk-box_draw_marshal.adb
new file mode 100644
index 0000000..95a33ba
--- /dev/null
+++ b/body/fltk-box_draw_marshal.adb
@@ -0,0 +1,693 @@
+
+
+-- Programmed by Jedidiah Barber
+-- Released into the public domain
+
+
+with
+
+ Ada.Assertions,
+ FLTK.Static,
+ Interfaces.C;
+
+use type
+
+ FLTK.Static.Box_Draw_Function;
+
+
+package body FLTK.Box_Draw_Marshal is
+
+
+ package Chk renames Ada.Assertions;
+
+
+
+
+ C_Ptr_Array : array (Box_Kind) of Storage.Integer_Address;
+ Ada_Access_Array : array (Box_Kind) of FLTK.Static.Box_Draw_Function;
+
+
+
+
+ procedure fl_static_box_draw_marshal
+ (F : in Storage.Integer_Address;
+ X, Y, W, H : in Interfaces.C.int;
+ T : in Interfaces.C.unsigned);
+ pragma Import (C, fl_static_box_draw_marshal, "fl_static_box_draw_marshal");
+ pragma Inline (fl_static_box_draw_marshal);
+
+
+
+
+ generic
+ Kind : Box_Kind;
+ procedure Generic_Box_Draw
+ (X, Y, W, H : in Integer;
+ Tone : in Color)
+ with Inline;
+
+ procedure Generic_Box_Draw
+ (X, Y, W, H : in Integer;
+ Tone : in Color) is
+ begin
+ fl_static_box_draw_marshal
+ (C_Ptr_Array (Kind),
+ Interfaces.C.int (X),
+ Interfaces.C.int (Y),
+ Interfaces.C.int (W),
+ Interfaces.C.int (H),
+ Interfaces.C.unsigned (Tone));
+ end Generic_Box_Draw;
+
+ procedure No_Box_Draw is new Generic_Box_Draw (No_Box);
+ procedure Flat_Box_Draw is new Generic_Box_Draw (Flat_Box);
+ procedure Up_Box_Draw is new Generic_Box_Draw (Up_Box);
+ procedure Down_Box_Draw is new Generic_Box_Draw (Down_Box);
+ procedure Up_Frame_Draw is new Generic_Box_Draw (Up_Frame);
+ procedure Down_Frame_Draw is new Generic_Box_Draw (Down_Frame);
+ procedure Thin_Up_Box_Draw is new Generic_Box_Draw (Thin_Up_Box);
+ procedure Thin_Down_Box_Draw is new Generic_Box_Draw (Thin_Down_Box);
+ procedure Thin_Up_Frame_Draw is new Generic_Box_Draw (Thin_Up_Frame);
+ procedure Thin_Down_Frame_Draw is new Generic_Box_Draw (Thin_Down_Frame);
+ procedure Engraved_Box_Draw is new Generic_Box_Draw (Engraved_Box);
+ procedure Embossed_Box_Draw is new Generic_Box_Draw (Embossed_Box);
+ procedure Engraved_Frame_Draw is new Generic_Box_Draw (Engraved_Frame);
+ procedure Embossed_Frame_Draw is new Generic_Box_Draw (Embossed_Frame);
+ procedure Border_Box_Draw is new Generic_Box_Draw (Border_Box);
+ procedure Shadow_Box_Draw is new Generic_Box_Draw (Shadow_Box);
+ procedure Border_Frame_Draw is new Generic_Box_Draw (Border_Frame);
+ procedure Shadow_Frame_Draw is new Generic_Box_Draw (Shadow_Frame);
+ procedure Rounded_Box_Draw is new Generic_Box_Draw (Rounded_Box);
+ procedure RShadow_Box_Draw is new Generic_Box_Draw (RShadow_Box);
+ procedure Rounded_Frame_Draw is new Generic_Box_Draw (Rounded_Frame);
+ procedure RFlat_Box_Draw is new Generic_Box_Draw (RFlat_Box);
+ procedure Round_Up_Box_Draw is new Generic_Box_Draw (Round_Up_Box);
+ procedure Round_Down_Box_Draw is new Generic_Box_Draw (Round_Down_Box);
+ procedure Diamond_Up_Box_Draw is new Generic_Box_Draw (Diamond_Up_Box);
+ procedure Diamond_Down_Box_Draw is new Generic_Box_Draw (Diamond_Down_Box);
+ procedure Oval_Box_Draw is new Generic_Box_Draw (Oval_Box);
+ procedure OShadow_Box_Draw is new Generic_Box_Draw (OShadow_Box);
+ procedure Oval_Frame_Draw is new Generic_Box_Draw (Oval_Frame);
+ procedure OFlat_Box_Draw is new Generic_Box_Draw (OFlat_Box);
+ procedure Plastic_Up_Box_Draw is new Generic_Box_Draw (Plastic_Up_Box);
+ procedure Plastic_Down_Box_Draw is new Generic_Box_Draw (Plastic_Down_Box);
+ procedure Plastic_Up_Frame_Draw is new Generic_Box_Draw (Plastic_Up_Frame);
+ procedure Plastic_Down_Frame_Draw is new Generic_Box_Draw (Plastic_Down_Frame);
+ procedure Plastic_Thin_Up_Box_Draw is new Generic_Box_Draw (Plastic_Thin_Up_Box);
+ procedure Plastic_Thin_Down_Box_Draw is new Generic_Box_Draw (Plastic_Thin_Down_Box);
+ procedure Plastic_Round_Up_Box_Draw is new Generic_Box_Draw (Plastic_Round_Up_Box);
+ procedure Plastic_Round_Down_Box_Draw is new Generic_Box_Draw (Plastic_Round_Down_Box);
+ procedure Gtk_Up_Box_Draw is new Generic_Box_Draw (Gtk_Up_Box);
+ procedure Gtk_Down_Box_Draw is new Generic_Box_Draw (Gtk_Down_Box);
+ procedure Gtk_Up_Frame_Draw is new Generic_Box_Draw (Gtk_Up_Frame);
+ procedure Gtk_Down_Frame_Draw is new Generic_Box_Draw (Gtk_Down_Frame);
+ procedure Gtk_Thin_Up_Box_Draw is new Generic_Box_Draw (Gtk_Thin_Up_Box);
+ procedure Gtk_Thin_Down_Box_Draw is new Generic_Box_Draw (Gtk_Thin_Down_Box);
+ procedure Gtk_Thin_Up_Frame_Draw is new Generic_Box_Draw (Gtk_Thin_Up_Frame);
+ procedure Gtk_Thin_Down_Frame_Draw is new Generic_Box_Draw (Gtk_Thin_Down_Frame);
+ procedure Gtk_Round_Up_Box_Draw is new Generic_Box_Draw (Gtk_Round_Up_Box);
+ procedure Gtk_Round_Down_Box_Draw is new Generic_Box_Draw (Gtk_Round_Down_Box);
+ procedure Gleam_Up_Box_Draw is new Generic_Box_Draw (Gleam_Up_Box);
+ procedure Gleam_Down_Box_Draw is new Generic_Box_Draw (Gleam_Down_Box);
+ procedure Gleam_Up_Frame_Draw is new Generic_Box_Draw (Gleam_Up_Frame);
+ procedure Gleam_Down_Frame_Draw is new Generic_Box_Draw (Gleam_Down_Frame);
+ procedure Gleam_Thin_Up_Box_Draw is new Generic_Box_Draw (Gleam_Thin_Up_Box);
+ procedure Gleam_Thin_Down_Box_Draw is new Generic_Box_Draw (Gleam_Thin_Down_Box);
+ procedure Gleam_Round_Up_Box_Draw is new Generic_Box_Draw (Gleam_Round_Up_Box);
+ procedure Gleam_Round_Down_Box_Draw is new Generic_Box_Draw (Gleam_Round_Down_Box);
+ procedure Free_Box_Draw is new Generic_Box_Draw (Free_Box);
+
+
+
+
+ generic
+ Kind : Box_Kind;
+ procedure Generic_Box_Draw_Hook
+ (X, Y, W, H : in Interfaces.C.int;
+ Tone : in Interfaces.C.unsigned)
+ with Inline, Convention => C;
+
+ procedure Generic_Box_Draw_Hook
+ (X, Y, W, H : in Interfaces.C.int;
+ Tone : in Interfaces.C.unsigned) is
+ begin
+ pragma Assert (Ada_Access_Array (Kind) /= null);
+ Ada_Access_Array (Kind)
+ (Integer (X), Integer (Y),
+ Integer (W), Integer (H),
+ Color (Tone));
+ exception
+ when Chk.Assertion_Error => raise Internal_FLTK_Error with
+ "Box_Draw_Function hook tried to get a null subprogram access";
+ end Generic_Box_Draw_Hook;
+
+ procedure No_Box_Hook is new Generic_Box_Draw_Hook (No_Box);
+ procedure Flat_Box_Hook is new Generic_Box_Draw_Hook (Flat_Box);
+ procedure Up_Box_Hook is new Generic_Box_Draw_Hook (Up_Box);
+ procedure Down_Box_Hook is new Generic_Box_Draw_Hook (Down_Box);
+ procedure Up_Frame_Hook is new Generic_Box_Draw_Hook (Up_Frame);
+ procedure Down_Frame_Hook is new Generic_Box_Draw_Hook (Down_Frame);
+ procedure Thin_Up_Box_Hook is new Generic_Box_Draw_Hook (Thin_Up_Box);
+ procedure Thin_Down_Box_Hook is new Generic_Box_Draw_Hook (Thin_Down_Box);
+ procedure Thin_Up_Frame_Hook is new Generic_Box_Draw_Hook (Thin_Up_Frame);
+ procedure Thin_Down_Frame_Hook is new Generic_Box_Draw_Hook (Thin_Down_Frame);
+ procedure Engraved_Box_Hook is new Generic_Box_Draw_Hook (Engraved_Box);
+ procedure Embossed_Box_Hook is new Generic_Box_Draw_Hook (Embossed_Box);
+ procedure Engraved_Frame_Hook is new Generic_Box_Draw_Hook (Engraved_Frame);
+ procedure Embossed_Frame_Hook is new Generic_Box_Draw_Hook (Embossed_Frame);
+ procedure Border_Box_Hook is new Generic_Box_Draw_Hook (Border_Box);
+ procedure Shadow_Box_Hook is new Generic_Box_Draw_Hook (Shadow_Box);
+ procedure Border_Frame_Hook is new Generic_Box_Draw_Hook (Border_Frame);
+ procedure Shadow_Frame_Hook is new Generic_Box_Draw_Hook (Shadow_Frame);
+ procedure Rounded_Box_Hook is new Generic_Box_Draw_Hook (Rounded_Box);
+ procedure RShadow_Box_Hook is new Generic_Box_Draw_Hook (RShadow_Box);
+ procedure Rounded_Frame_Hook is new Generic_Box_Draw_Hook (Rounded_Frame);
+ procedure RFlat_Box_Hook is new Generic_Box_Draw_Hook (RFlat_Box);
+ procedure Round_Up_Box_Hook is new Generic_Box_Draw_Hook (Round_Up_Box);
+ procedure Round_Down_Box_Hook is new Generic_Box_Draw_Hook (Round_Down_Box);
+ procedure Diamond_Up_Box_Hook is new Generic_Box_Draw_Hook (Diamond_Up_Box);
+ procedure Diamond_Down_Box_Hook is new Generic_Box_Draw_Hook (Diamond_Down_Box);
+ procedure Oval_Box_Hook is new Generic_Box_Draw_Hook (Oval_Box);
+ procedure OShadow_Box_Hook is new Generic_Box_Draw_Hook (OShadow_Box);
+ procedure Oval_Frame_Hook is new Generic_Box_Draw_Hook (Oval_Frame);
+ procedure OFlat_Box_Hook is new Generic_Box_Draw_Hook (OFlat_Box);
+ procedure Plastic_Up_Box_Hook is new Generic_Box_Draw_Hook (Plastic_Up_Box);
+ procedure Plastic_Down_Box_Hook is new Generic_Box_Draw_Hook (Plastic_Down_Box);
+ procedure Plastic_Up_Frame_Hook is new Generic_Box_Draw_Hook (Plastic_Up_Frame);
+ procedure Plastic_Down_Frame_Hook is new Generic_Box_Draw_Hook (Plastic_Down_Frame);
+ procedure Plastic_Thin_Up_Box_Hook is new Generic_Box_Draw_Hook (Plastic_Thin_Up_Box);
+ procedure Plastic_Thin_Down_Box_Hook is new Generic_Box_Draw_Hook (Plastic_Thin_Down_Box);
+ procedure Plastic_Round_Up_Box_Hook is new Generic_Box_Draw_Hook (Plastic_Round_Up_Box);
+ procedure Plastic_Round_Down_Box_Hook is new Generic_Box_Draw_Hook (Plastic_Round_Down_Box);
+ procedure Gtk_Up_Box_Hook is new Generic_Box_Draw_Hook (Gtk_Up_Box);
+ procedure Gtk_Down_Box_Hook is new Generic_Box_Draw_Hook (Gtk_Down_Box);
+ procedure Gtk_Up_Frame_Hook is new Generic_Box_Draw_Hook (Gtk_Up_Frame);
+ procedure Gtk_Down_Frame_Hook is new Generic_Box_Draw_Hook (Gtk_Down_Frame);
+ procedure Gtk_Thin_Up_Box_Hook is new Generic_Box_Draw_Hook (Gtk_Thin_Up_Box);
+ procedure Gtk_Thin_Down_Box_Hook is new Generic_Box_Draw_Hook (Gtk_Thin_Down_Box);
+ procedure Gtk_Thin_Up_Frame_Hook is new Generic_Box_Draw_Hook (Gtk_Thin_Up_Frame);
+ procedure Gtk_Thin_Down_Frame_Hook is new Generic_Box_Draw_Hook (Gtk_Thin_Down_Frame);
+ procedure Gtk_Round_Up_Box_Hook is new Generic_Box_Draw_Hook (Gtk_Round_Up_Box);
+ procedure Gtk_Round_Down_Box_Hook is new Generic_Box_Draw_Hook (Gtk_Round_Down_Box);
+ procedure Gleam_Up_Box_Hook is new Generic_Box_Draw_Hook (Gleam_Up_Box);
+ procedure Gleam_Down_Box_Hook is new Generic_Box_Draw_Hook (Gleam_Down_Box);
+ procedure Gleam_Up_Frame_Hook is new Generic_Box_Draw_Hook (Gleam_Up_Frame);
+ procedure Gleam_Down_Frame_Hook is new Generic_Box_Draw_Hook (Gleam_Down_Frame);
+ procedure Gleam_Thin_Up_Box_Hook is new Generic_Box_Draw_Hook (Gleam_Thin_Up_Box);
+ procedure Gleam_Thin_Down_Box_Hook is new Generic_Box_Draw_Hook (Gleam_Thin_Down_Box);
+ procedure Gleam_Round_Up_Box_Hook is new Generic_Box_Draw_Hook (Gleam_Round_Up_Box);
+ procedure Gleam_Round_Down_Box_Hook is new Generic_Box_Draw_Hook (Gleam_Round_Down_Box);
+ procedure Free_Box_Hook is new Generic_Box_Draw_Hook (Free_Box);
+
+
+
+
+ function To_Ada
+ (Kind : in Box_Kind;
+ Ptr : in Storage.Integer_Address)
+ return FLTK.Static.Box_Draw_Function is
+ begin
+ if Ptr = Null_Pointer then
+ return null;
+ end if;
+ C_Ptr_Array (Kind) := Ptr;
+ case Kind is
+ when No_Box => return
+ (if Ptr = Storage.To_Integer (No_Box_Hook'Address)
+ then Ada_Access_Array (Kind)
+ else No_Box_Draw'Access);
+ when Flat_Box => return
+ (if Ptr = Storage.To_Integer (Flat_Box_Hook'Address)
+ then Ada_Access_Array (Kind)
+ else Flat_Box_Draw'Access);
+ when Up_Box => return
+ (if Ptr = Storage.To_Integer (Up_Box_Hook'Address)
+ then Ada_Access_Array (Kind)
+ else Up_Box_Draw'Access);
+ when Down_Box => return
+ (if Ptr = Storage.To_Integer (Down_Box_Hook'Address)
+ then Ada_Access_Array (Kind)
+ else Down_Box_Draw'Access);
+ when Up_Frame => return
+ (if Ptr = Storage.To_Integer (Up_Frame_Hook'Address)
+ then Ada_Access_Array (Kind)
+ else Up_Frame_Draw'Access);
+ when Down_Frame => return
+ (if Ptr = Storage.To_Integer (Down_Frame_Hook'Address)
+ then Ada_Access_Array (Kind)
+ else Down_Frame_Draw'Access);
+ when Thin_Up_Box => return
+ (if Ptr = Storage.To_Integer (Thin_Up_Box_Hook'Address)
+ then Ada_Access_Array (Kind)
+ else Thin_Up_Box_Draw'Access);
+ when Thin_Down_Box => return
+ (if Ptr = Storage.To_Integer (Thin_Down_Box_Hook'Address)
+ then Ada_Access_Array (Kind)
+ else Thin_Down_Box_Draw'Access);
+ when Thin_Up_Frame => return
+ (if Ptr = Storage.To_Integer (Thin_Up_Frame_Hook'Address)
+ then Ada_Access_Array (Kind)
+ else Thin_Up_Frame_Draw'Access);
+ when Thin_Down_Frame => return
+ (if Ptr = Storage.To_Integer (Thin_Down_Frame_Hook'Address)
+ then Ada_Access_Array (Kind)
+ else Thin_Down_Frame_Draw'Access);
+ when Engraved_Box => return
+ (if Ptr = Storage.To_Integer (Engraved_Box_Hook'Address)
+ then Ada_Access_Array (Kind)
+ else Engraved_Box_Draw'Access);
+ when Embossed_Box => return
+ (if Ptr = Storage.To_Integer (Embossed_Box_Hook'Address)
+ then Ada_Access_Array (Kind)
+ else Embossed_Box_Draw'Access);
+ when Engraved_Frame => return
+ (if Ptr = Storage.To_Integer (Engraved_Frame_Hook'Address)
+ then Ada_Access_Array (Kind)
+ else Engraved_Frame_Draw'Access);
+ when Embossed_Frame => return
+ (if Ptr = Storage.To_Integer (Embossed_Frame_Hook'Address)
+ then Ada_Access_Array (Kind)
+ else Embossed_Frame_Draw'Access);
+ when Border_Box => return
+ (if Ptr = Storage.To_Integer (Border_Box_Hook'Address)
+ then Ada_Access_Array (Kind)
+ else Border_Box_Draw'Access);
+ when Shadow_Box => return
+ (if Ptr = Storage.To_Integer (Shadow_Box_Hook'Address)
+ then Ada_Access_Array (Kind)
+ else Shadow_Box_Draw'Access);
+ when Border_Frame => return
+ (if Ptr = Storage.To_Integer (Border_Frame_Hook'Address)
+ then Ada_Access_Array (Kind)
+ else Border_Frame_Draw'Access);
+ when Shadow_Frame => return
+ (if Ptr = Storage.To_Integer (Shadow_Frame_Hook'Address)
+ then Ada_Access_Array (Kind)
+ else Shadow_Frame_Draw'Access);
+ when Rounded_Box => return
+ (if Ptr = Storage.To_Integer (Rounded_Box_Hook'Address)
+ then Ada_Access_Array (Kind)
+ else Rounded_Box_Draw'Access);
+ when RShadow_Box => return
+ (if Ptr = Storage.To_Integer (RShadow_Box_Hook'Address)
+ then Ada_Access_Array (Kind)
+ else RShadow_Box_Draw'Access);
+ when Rounded_Frame => return
+ (if Ptr = Storage.To_Integer (Rounded_Frame_Hook'Address)
+ then Ada_Access_Array (Kind)
+ else Rounded_Frame_Draw'Access);
+ when RFlat_Box => return
+ (if Ptr = Storage.To_Integer (RFlat_Box_Hook'Address)
+ then Ada_Access_Array (Kind)
+ else RFlat_Box_Draw'Access);
+ when Round_Up_Box => return
+ (if Ptr = Storage.To_Integer (Round_Up_Box_Hook'Address)
+ then Ada_Access_Array (Kind)
+ else Round_Up_Box_Draw'Access);
+ when Round_Down_Box => return
+ (if Ptr = Storage.To_Integer (Round_Down_Box_Hook'Address)
+ then Ada_Access_Array (Kind)
+ else Round_Down_Box_Draw'Access);
+ when Diamond_Up_Box => return
+ (if Ptr = Storage.To_Integer (Diamond_Up_Box_Hook'Address)
+ then Ada_Access_Array (Kind)
+ else Diamond_Up_Box_Draw'Access);
+ when Diamond_Down_Box => return
+ (if Ptr = Storage.To_Integer (Diamond_Down_Box_Hook'Address)
+ then Ada_Access_Array (Kind)
+ else Diamond_Down_Box_Draw'Access);
+ when Oval_Box => return
+ (if Ptr = Storage.To_Integer (Oval_Box_Hook'Address)
+ then Ada_Access_Array (Kind)
+ else Oval_Box_Draw'Access);
+ when OShadow_Box => return
+ (if Ptr = Storage.To_Integer (OShadow_Box_Hook'Address)
+ then Ada_Access_Array (Kind)
+ else OShadow_Box_Draw'Access);
+ when Oval_Frame => return
+ (if Ptr = Storage.To_Integer (Oval_Frame_Hook'Address)
+ then Ada_Access_Array (Kind)
+ else Oval_Frame_Draw'Access);
+ when OFlat_Box => return
+ (if Ptr = Storage.To_Integer (OFlat_Box_Hook'Address)
+ then Ada_Access_Array (Kind)
+ else OFlat_Box_Draw'Access);
+ when Plastic_Up_Box => return
+ (if Ptr = Storage.To_Integer (Plastic_Up_Box_Hook'Address)
+ then Ada_Access_Array (Kind)
+ else Plastic_Up_Box_Draw'Access);
+ when Plastic_Down_Box => return
+ (if Ptr = Storage.To_Integer (Plastic_Down_Box_Hook'Address)
+ then Ada_Access_Array (Kind)
+ else Plastic_Down_Box_Draw'Access);
+ when Plastic_Up_Frame => return
+ (if Ptr = Storage.To_Integer (Plastic_Up_Frame_Hook'Address)
+ then Ada_Access_Array (Kind)
+ else Plastic_Up_Frame_Draw'Access);
+ when Plastic_Down_Frame => return
+ (if Ptr = Storage.To_Integer (Plastic_Down_Frame_Hook'Address)
+ then Ada_Access_Array (Kind)
+ else Plastic_Down_Frame_Draw'Access);
+ when Plastic_Thin_Up_Box => return
+ (if Ptr = Storage.To_Integer (Plastic_Thin_Up_Box_Hook'Address)
+ then Ada_Access_Array (Kind)
+ else Plastic_Thin_Up_Box_Draw'Access);
+ when Plastic_Thin_Down_Box => return
+ (if Ptr = Storage.To_Integer (Plastic_Thin_Down_Box_Hook'Address)
+ then Ada_Access_Array (Kind)
+ else Plastic_Thin_Down_Box_Draw'Access);
+ when Plastic_Round_Up_Box => return
+ (if Ptr = Storage.To_Integer (Plastic_Round_Up_Box_Hook'Address)
+ then Ada_Access_Array (Kind)
+ else Plastic_Round_Up_Box_Draw'Access);
+ when Plastic_Round_Down_Box => return
+ (if Ptr = Storage.To_Integer (Plastic_Round_Down_Box_Hook'Address)
+ then Ada_Access_Array (Kind)
+ else Plastic_Round_Down_Box_Draw'Access);
+ when Gtk_Up_Box => return
+ (if Ptr = Storage.To_Integer (Gtk_Up_Box_Hook'Address)
+ then Ada_Access_Array (Kind)
+ else Gtk_Up_Box_Draw'Access);
+ when Gtk_Down_Box => return
+ (if Ptr = Storage.To_Integer (Gtk_Down_Box_Hook'Address)
+ then Ada_Access_Array (Kind)
+ else Gtk_Down_Box_Draw'Access);
+ when Gtk_Up_Frame => return
+ (if Ptr = Storage.To_Integer (Gtk_Up_Frame_Hook'Address)
+ then Ada_Access_Array (Kind)
+ else Gtk_Up_Frame_Draw'Access);
+ when Gtk_Down_Frame => return
+ (if Ptr = Storage.To_Integer (Gtk_Down_Frame_Hook'Address)
+ then Ada_Access_Array (Kind)
+ else Gtk_Down_Frame_Draw'Access);
+ when Gtk_Thin_Up_Box => return
+ (if Ptr = Storage.To_Integer (Gtk_Thin_Up_Box_Hook'Address)
+ then Ada_Access_Array (Kind)
+ else Gtk_Thin_Up_Box_Draw'Access);
+ when Gtk_Thin_Down_Box => return
+ (if Ptr = Storage.To_Integer (Gtk_Thin_Down_Box_Hook'Address)
+ then Ada_Access_Array (Kind)
+ else Gtk_Thin_Down_Box_Draw'Access);
+ when Gtk_Thin_Up_Frame => return
+ (if Ptr = Storage.To_Integer (Gtk_Thin_Up_Frame_Hook'Address)
+ then Ada_Access_Array (Kind)
+ else Gtk_Thin_Up_Frame_Draw'Access);
+ when Gtk_Thin_Down_Frame => return
+ (if Ptr = Storage.To_Integer (Gtk_Thin_Down_Frame_Hook'Address)
+ then Ada_Access_Array (Kind)
+ else Gtk_Thin_Down_Frame_Draw'Access);
+ when Gtk_Round_Up_Box => return
+ (if Ptr = Storage.To_Integer (Gtk_Round_Up_Box_Hook'Address)
+ then Ada_Access_Array (Kind)
+ else Gtk_Round_Up_Box_Draw'Access);
+ when Gtk_Round_Down_Box => return
+ (if Ptr = Storage.To_Integer (Gtk_Round_Down_Box_Hook'Address)
+ then Ada_Access_Array (Kind)
+ else Gtk_Round_Down_Box_Draw'Access);
+ when Gleam_Up_Box => return
+ (if Ptr = Storage.To_Integer (Gleam_Up_Box_Hook'Address)
+ then Ada_Access_Array (Kind)
+ else Gleam_Up_Box_Draw'Access);
+ when Gleam_Down_Box => return
+ (if Ptr = Storage.To_Integer (Gleam_Down_Box_Hook'Address)
+ then Ada_Access_Array (Kind)
+ else Gleam_Down_Box_Draw'Access);
+ when Gleam_Up_Frame => return
+ (if Ptr = Storage.To_Integer (Gleam_Up_Frame_Hook'Address)
+ then Ada_Access_Array (Kind)
+ else Gleam_Up_Frame_Draw'Access);
+ when Gleam_Down_Frame => return
+ (if Ptr = Storage.To_Integer (Gleam_Down_Frame_Hook'Address)
+ then Ada_Access_Array (Kind)
+ else Gleam_Down_Frame_Draw'Access);
+ when Gleam_Thin_Up_Box => return
+ (if Ptr = Storage.To_Integer (Gleam_Thin_Up_Box_Hook'Address)
+ then Ada_Access_Array (Kind)
+ else Gleam_Thin_Up_Box_Draw'Access);
+ when Gleam_Thin_Down_Box => return
+ (if Ptr = Storage.To_Integer (Gleam_Thin_Down_Box_Hook'Address)
+ then Ada_Access_Array (Kind)
+ else Gleam_Thin_Down_Box_Draw'Access);
+ when Gleam_Round_Up_Box => return
+ (if Ptr = Storage.To_Integer (Gleam_Round_Up_Box_Hook'Address)
+ then Ada_Access_Array (Kind)
+ else Gleam_Round_Up_Box_Draw'Access);
+ when Gleam_Round_Down_Box => return
+ (if Ptr = Storage.To_Integer (Gleam_Round_Down_Box_Hook'Address)
+ then Ada_Access_Array (Kind)
+ else Gleam_Round_Down_Box_Draw'Access);
+ when Free_Box => return
+ (if Ptr = Storage.To_Integer (Free_Box_Hook'Address)
+ then Ada_Access_Array (Kind)
+ else Free_Box_Draw'Access);
+ end case;
+ end To_Ada;
+
+
+
+
+ function To_C
+ (Kind : in Box_Kind;
+ Func : in FLTK.Static.Box_Draw_Function)
+ return Storage.Integer_Address is
+ begin
+ if Func = null then
+ return Null_Pointer;
+ end if;
+ Ada_Access_Array (Kind) := Func;
+ case Kind is
+ when No_Box => return
+ (if Func = No_Box_Draw'Access
+ then C_Ptr_Array (Kind)
+ else Storage.To_Integer (No_Box_Hook'Address));
+ when Flat_Box => return
+ (if Func = Flat_Box_Draw'Access
+ then C_Ptr_Array (Kind)
+ else Storage.To_Integer (Flat_Box_Hook'Address));
+ when Up_Box => return
+ (if Func = Up_Box_Draw'Access
+ then C_Ptr_Array (Kind)
+ else Storage.To_Integer (Up_Box_Hook'Address));
+ when Down_Box => return
+ (if Func = Down_Box_Draw'Access
+ then C_Ptr_Array (Kind)
+ else Storage.To_Integer (Down_Box_Hook'Address));
+ when Up_Frame => return
+ (if Func = Up_Frame_Draw'Access
+ then C_Ptr_Array (Kind)
+ else Storage.To_Integer (Up_Frame_Hook'Address));
+ when Down_Frame => return
+ (if Func = Down_Frame_Draw'Access
+ then C_Ptr_Array (Kind)
+ else Storage.To_Integer (Down_Frame_Hook'Address));
+ when Thin_Up_Box => return
+ (if Func = Thin_Up_Box_Draw'Access
+ then C_Ptr_Array (Kind)
+ else Storage.To_Integer (Thin_Up_Box_Hook'Address));
+ when Thin_Down_Box => return
+ (if Func = Thin_Down_Box_Draw'Access
+ then C_Ptr_Array (Kind)
+ else Storage.To_Integer (Thin_Down_Box_Hook'Address));
+ when Thin_Up_Frame => return
+ (if Func = Thin_Up_Frame_Draw'Access
+ then C_Ptr_Array (Kind)
+ else Storage.To_Integer (Thin_Up_Frame_Hook'Address));
+ when Thin_Down_Frame => return
+ (if Func = Thin_Down_Frame_Draw'Access
+ then C_Ptr_Array (Kind)
+ else Storage.To_Integer (Thin_Down_Frame_Hook'Address));
+ when Engraved_Box => return
+ (if Func = Engraved_Box_Draw'Access
+ then C_Ptr_Array (Kind)
+ else Storage.To_Integer (Engraved_Box_Hook'Address));
+ when Embossed_Box => return
+ (if Func = Embossed_Box_Draw'Access
+ then C_Ptr_Array (Kind)
+ else Storage.To_Integer (Embossed_Box_Hook'Address));
+ when Engraved_Frame => return
+ (if Func = Engraved_Frame_Draw'Access
+ then C_Ptr_Array (Kind)
+ else Storage.To_Integer (Engraved_Frame_Hook'Address));
+ when Embossed_Frame => return
+ (if Func = Embossed_Frame_Draw'Access
+ then C_Ptr_Array (Kind)
+ else Storage.To_Integer (Embossed_Frame_Hook'Address));
+ when Border_Box => return
+ (if Func = Border_Box_Draw'Access
+ then C_Ptr_Array (Kind)
+ else Storage.To_Integer (Border_Box_Hook'Address));
+ when Shadow_Box => return
+ (if Func = Shadow_Box_Draw'Access
+ then C_Ptr_Array (Kind)
+ else Storage.To_Integer (Shadow_Box_Hook'Address));
+ when Border_Frame => return
+ (if Func = Border_Frame_Draw'Access
+ then C_Ptr_Array (Kind)
+ else Storage.To_Integer (Border_Frame_Hook'Address));
+ when Shadow_Frame => return
+ (if Func = Shadow_Frame_Draw'Access
+ then C_Ptr_Array (Kind)
+ else Storage.To_Integer (Shadow_Frame_Hook'Address));
+ when Rounded_Box => return
+ (if Func = Rounded_Box_Draw'Access
+ then C_Ptr_Array (Kind)
+ else Storage.To_Integer (Rounded_Box_Hook'Address));
+ when RShadow_Box => return
+ (if Func = RShadow_Box_Draw'Access
+ then C_Ptr_Array (Kind)
+ else Storage.To_Integer (RShadow_Box_Hook'Address));
+ when Rounded_Frame => return
+ (if Func = Rounded_Frame_Draw'Access
+ then C_Ptr_Array (Kind)
+ else Storage.To_Integer (Rounded_Frame_Hook'Address));
+ when RFlat_Box => return
+ (if Func = RFlat_Box_Draw'Access
+ then C_Ptr_Array (Kind)
+ else Storage.To_Integer (RFlat_Box_Hook'Address));
+ when Round_Up_Box => return
+ (if Func = Round_Up_Box_Draw'Access
+ then C_Ptr_Array (Kind)
+ else Storage.To_Integer (Round_Up_Box_Hook'Address));
+ when Round_Down_Box => return
+ (if Func = Round_Down_Box_Draw'Access
+ then C_Ptr_Array (Kind)
+ else Storage.To_Integer (Round_Down_Box_Hook'Address));
+ when Diamond_Up_Box => return
+ (if Func = Diamond_Up_Box_Draw'Access
+ then C_Ptr_Array (Kind)
+ else Storage.To_Integer (Diamond_Up_Box_Hook'Address));
+ when Diamond_Down_Box => return
+ (if Func = Diamond_Down_Box_Draw'Access
+ then C_Ptr_Array (Kind)
+ else Storage.To_Integer (Diamond_Down_Box_Hook'Address));
+ when Oval_Box => return
+ (if Func = Oval_Box_Draw'Access
+ then C_Ptr_Array (Kind)
+ else Storage.To_Integer (Oval_Box_Hook'Address));
+ when OShadow_Box => return
+ (if Func = OShadow_Box_Draw'Access
+ then C_Ptr_Array (Kind)
+ else Storage.To_Integer (OShadow_Box_Hook'Address));
+ when Oval_Frame => return
+ (if Func = Oval_Frame_Draw'Access
+ then C_Ptr_Array (Kind)
+ else Storage.To_Integer (Oval_Frame_Hook'Address));
+ when OFlat_Box => return
+ (if Func = OFlat_Box_Draw'Access
+ then C_Ptr_Array (Kind)
+ else Storage.To_Integer (OFlat_Box_Hook'Address));
+ when Plastic_Up_Box => return
+ (if Func = Plastic_Up_Box_Draw'Access
+ then C_Ptr_Array (Kind)
+ else Storage.To_Integer (Plastic_Up_Box_Hook'Address));
+ when Plastic_Down_Box => return
+ (if Func = Plastic_Down_Box_Draw'Access
+ then C_Ptr_Array (Kind)
+ else Storage.To_Integer (Plastic_Down_Box_Hook'Address));
+ when Plastic_Up_Frame => return
+ (if Func = Plastic_Up_Frame_Draw'Access
+ then C_Ptr_Array (Kind)
+ else Storage.To_Integer (Plastic_Up_Frame_Hook'Address));
+ when Plastic_Down_Frame => return
+ (if Func = Plastic_Down_Frame_Draw'Access
+ then C_Ptr_Array (Kind)
+ else Storage.To_Integer (Plastic_Down_Frame_Hook'Address));
+ when Plastic_Thin_Up_Box => return
+ (if Func = Plastic_Thin_Up_Box_Draw'Access
+ then C_Ptr_Array (Kind)
+ else Storage.To_Integer (Plastic_Thin_Up_Box_Hook'Address));
+ when Plastic_Thin_Down_Box => return
+ (if Func = Plastic_Thin_Down_Box_Draw'Access
+ then C_Ptr_Array (Kind)
+ else Storage.To_Integer (Plastic_Thin_Down_Box_Hook'Address));
+ when Plastic_Round_Up_Box => return
+ (if Func = Plastic_Round_Up_Box_Draw'Access
+ then C_Ptr_Array (Kind)
+ else Storage.To_Integer (Plastic_Round_Up_Box_Hook'Address));
+ when Plastic_Round_Down_Box => return
+ (if Func = Plastic_Round_Down_Box_Draw'Access
+ then C_Ptr_Array (Kind)
+ else Storage.To_Integer (Plastic_Round_Down_Box_Hook'Address));
+ when Gtk_Up_Box => return
+ (if Func = Gtk_Up_Box_Draw'Access
+ then C_Ptr_Array (Kind)
+ else Storage.To_Integer (Gtk_Up_Box_Hook'Address));
+ when Gtk_Down_Box => return
+ (if Func = Gtk_Down_Box_Draw'Access
+ then C_Ptr_Array (Kind)
+ else Storage.To_Integer (Gtk_Down_Box_Hook'Address));
+ when Gtk_Up_Frame => return
+ (if Func = Gtk_Up_Frame_Draw'Access
+ then C_Ptr_Array (Kind)
+ else Storage.To_Integer (Gtk_Up_Frame_Hook'Address));
+ when Gtk_Down_Frame => return
+ (if Func = Gtk_Down_Frame_Draw'Access
+ then C_Ptr_Array (Kind)
+ else Storage.To_Integer (Gtk_Down_Frame_Hook'Address));
+ when Gtk_Thin_Up_Box => return
+ (if Func = Gtk_Thin_Up_Box_Draw'Access
+ then C_Ptr_Array (Kind)
+ else Storage.To_Integer (Gtk_Thin_Up_Box_Hook'Address));
+ when Gtk_Thin_Down_Box => return
+ (if Func = Gtk_Thin_Down_Box_Draw'Access
+ then C_Ptr_Array (Kind)
+ else Storage.To_Integer (Gtk_Thin_Down_Box_Hook'Address));
+ when Gtk_Thin_Up_Frame => return
+ (if Func = Gtk_Thin_Up_Frame_Draw'Access
+ then C_Ptr_Array (Kind)
+ else Storage.To_Integer (Gtk_Thin_Up_Frame_Hook'Address));
+ when Gtk_Thin_Down_Frame => return
+ (if Func = Gtk_Thin_Down_Frame_Draw'Access
+ then C_Ptr_Array (Kind)
+ else Storage.To_Integer (Gtk_Thin_Down_Frame_Hook'Address));
+ when Gtk_Round_Up_Box => return
+ (if Func = Gtk_Round_Up_Box_Draw'Access
+ then C_Ptr_Array (Kind)
+ else Storage.To_Integer (Gtk_Round_Up_Box_Hook'Address));
+ when Gtk_Round_Down_Box => return
+ (if Func = Gtk_Round_Down_Box_Draw'Access
+ then C_Ptr_Array (Kind)
+ else Storage.To_Integer (Gtk_Round_Down_Box_Hook'Address));
+ when Gleam_Up_Box => return
+ (if Func = Gleam_Up_Box_Draw'Access
+ then C_Ptr_Array (Kind)
+ else Storage.To_Integer (Gleam_Up_Box_Hook'Address));
+ when Gleam_Down_Box => return
+ (if Func = Gleam_Down_Box_Draw'Access
+ then C_Ptr_Array (Kind)
+ else Storage.To_Integer (Gleam_Down_Box_Hook'Address));
+ when Gleam_Up_Frame => return
+ (if Func = Gleam_Up_Frame_Draw'Access
+ then C_Ptr_Array (Kind)
+ else Storage.To_Integer (Gleam_Up_Frame_Hook'Address));
+ when Gleam_Down_Frame => return
+ (if Func = Gleam_Down_Frame_Draw'Access
+ then C_Ptr_Array (Kind)
+ else Storage.To_Integer (Gleam_Down_Frame_Hook'Address));
+ when Gleam_Thin_Up_Box => return
+ (if Func = Gleam_Thin_Up_Box_Draw'Access
+ then C_Ptr_Array (Kind)
+ else Storage.To_Integer (Gleam_Thin_Up_Box_Hook'Address));
+ when Gleam_Thin_Down_Box => return
+ (if Func = Gleam_Thin_Down_Box_Draw'Access
+ then C_Ptr_Array (Kind)
+ else Storage.To_Integer (Gleam_Thin_Down_Box_Hook'Address));
+ when Gleam_Round_Up_Box => return
+ (if Func = Gleam_Round_Up_Box_Draw'Access
+ then C_Ptr_Array (Kind)
+ else Storage.To_Integer (Gleam_Round_Up_Box_Hook'Address));
+ when Gleam_Round_Down_Box => return
+ (if Func = Gleam_Round_Down_Box_Draw'Access
+ then C_Ptr_Array (Kind)
+ else Storage.To_Integer (Gleam_Round_Down_Box_Hook'Address));
+ when Free_Box => return
+ (if Func = Free_Box_Draw'Access
+ then C_Ptr_Array (Kind)
+ else Storage.To_Integer (Free_Box_Hook'Address));
+ end case;
+ end To_C;
+
+
+end FLTK.Box_Draw_Marshal;
+
+
diff --git a/body/fltk-box_draw_marshal.ads b/body/fltk-box_draw_marshal.ads
new file mode 100644
index 0000000..373a3a8
--- /dev/null
+++ b/body/fltk-box_draw_marshal.ads
@@ -0,0 +1,28 @@
+
+
+-- Programmed by Jedidiah Barber
+-- Released into the public domain
+
+
+limited with
+
+ FLTK.Static;
+
+
+private package FLTK.Box_Draw_Marshal is
+
+
+ function To_Ada
+ (Kind : in Box_Kind;
+ Ptr : in Storage.Integer_Address)
+ return FLTK.Static.Box_Draw_Function;
+
+ function To_C
+ (Kind : in Box_Kind;
+ Func : in FLTK.Static.Box_Draw_Function)
+ return Storage.Integer_Address;
+
+
+end FLTK.Box_Draw_Marshal;
+
+
diff --git a/body/fltk-devices-surface-paged-postscript.adb b/body/fltk-devices-surface-paged-postscript.adb
index 76553b1..07284bb 100644
--- a/body/fltk-devices-surface-paged-postscript.adb
+++ b/body/fltk-devices-surface-paged-postscript.adb
@@ -7,7 +7,7 @@
with
Ada.Assertions,
- Interfaces.C.Strings;
+ Interfaces.C;
use type
@@ -75,11 +75,12 @@ package body FLTK.Devices.Surface.Paged.Postscript is
-- Driver --
- function fl_postscript_file_device_get_driver
- (D : in Storage.Integer_Address)
- return Storage.Integer_Address;
- pragma Import (C, fl_postscript_file_device_get_driver, "fl_postscript_file_device_get_driver");
- pragma Inline (fl_postscript_file_device_get_driver);
+ -- function fl_postscript_file_device_get_driver
+ -- (D : in Storage.Integer_Address)
+ -- return Storage.Integer_Address;
+ -- pragma Import (C, fl_postscript_file_device_get_driver,
+ -- "fl_postscript_file_device_get_driver");
+ -- pragma Inline (fl_postscript_file_device_get_driver);
@@ -362,7 +363,7 @@ package body FLTK.Devices.Surface.Paged.Postscript is
Format : in Page_Format := A4;
Layout : in Page_Layout := Portrait)
is
- Code : Interfaces.C.int := fl_postscript_file_device_start_job3
+ Code : constant Interfaces.C.int := fl_postscript_file_device_start_job3
(This.Void_Ptr,
Output.C_File,
Interfaces.C.int (Count),
@@ -383,7 +384,7 @@ package body FLTK.Devices.Surface.Paged.Postscript is
Format : in Page_Format := A4;
Layout : in Page_Layout := Portrait)
is
- Code : Interfaces.C.int := fl_postscript_file_device_start_job4
+ Code : constant Interfaces.C.int := fl_postscript_file_device_start_job4
(This.Void_Ptr,
Interfaces.C.int (Count),
To_Cint (Format),
diff --git a/body/fltk-devices-surface-paged-printers.adb b/body/fltk-devices-surface-paged-printers.adb
index e460eb1..8ee0660 100644
--- a/body/fltk-devices-surface-paged-printers.adb
+++ b/body/fltk-devices-surface-paged-printers.adb
@@ -6,7 +6,7 @@
with
- Interfaces.C.Strings;
+ Interfaces.C;
use type
diff --git a/body/fltk-devices-surface-paged.adb b/body/fltk-devices-surface-paged.adb
index 950d3ce..fbc8dc6 100644
--- a/body/fltk-devices-surface-paged.adb
+++ b/body/fltk-devices-surface-paged.adb
@@ -7,7 +7,6 @@
with
Ada.Assertions,
- Ada.Strings.Unbounded,
Interfaces.C.Strings;
use type
diff --git a/body/fltk-draw.adb b/body/fltk-draw.adb
index e7119ed..38ccb80 100644
--- a/body/fltk-draw.adb
+++ b/body/fltk-draw.adb
@@ -14,8 +14,7 @@ with
use type
- Interfaces.C.int,
- Interfaces.C.size_t;
+ Interfaces.C.int;
package body FLTK.Draw is
@@ -642,7 +641,7 @@ package body FLTK.Draw is
function Can_Do_Alpha_Blending
return Boolean
is
- Result : Interfaces.C.int := fl_draw_can_do_alpha_blending;
+ Result : constant Interfaces.C.int := fl_draw_can_do_alpha_blending;
begin
if Result = 1 then
return True;
@@ -662,7 +661,7 @@ package body FLTK.Draw is
return String is
begin
return Interfaces.C.Strings.Value
- (fl_draw_shortcut_label (Interfaces.C.unsigned (To_C (Keys))));
+ (fl_draw_shortcut_label (To_C (Keys)));
end Shortcut_Label;
@@ -716,7 +715,7 @@ package body FLTK.Draw is
return Boolean
is
CX, CY, CW, CH : Interfaces.C.int;
- Result : Interfaces.C.int := fl_draw_clip_box
+ Result : constant Interfaces.C.int := fl_draw_clip_box
(Interfaces.C.int (X),
Interfaces.C.int (Y),
Interfaces.C.int (W),
@@ -1007,12 +1006,12 @@ package body FLTK.Draw is
(X, Y, W, H : in Integer;
Data : in Color_Component_Array;
Depth : in Positive := 3;
- Line_Data : in Natural := 0;
+ Line_Size : in Natural := 0;
Flip_Horizontal : in Boolean := False;
Flip_Vertical : in Boolean := False)
is
Real_Depth : Integer := Depth;
- Real_Line_Data : Integer := Line_Data;
+ Real_Line_Data : Integer := Line_Size;
begin
if Flip_Horizontal then
Real_Depth := Real_Depth * (-1);
@@ -1025,7 +1024,9 @@ package body FLTK.Draw is
end if;
end if;
fl_draw_draw_image
- (Storage.To_Integer (Data (Data'First)'Address),
+ ((if Data'Length > 0
+ then Storage.To_Integer (Data (Data'First)'Address)
+ else Null_Pointer),
Interfaces.C.int (X),
Interfaces.C.int (Y),
Interfaces.C.int (W),
@@ -1038,18 +1039,17 @@ package body FLTK.Draw is
Image_Func_Ptr : Image_Draw_Function;
procedure Draw_Image_Hook
- (User : in Storage.Integer_Address;
+ (Ignore : in Storage.Integer_Address;
X, Y, W : in Interfaces.C.int;
Buf_Ptr : in Storage.Integer_Address);
-
pragma Convention (C, Draw_Image_Hook);
procedure Draw_Image_Hook
- (User : in Storage.Integer_Address;
+ (Ignore : in Storage.Integer_Address;
X, Y, W : in Interfaces.C.int;
Buf_Ptr : in Storage.Integer_Address)
is
- Data_Buffer : Color_Component_Array (1 .. Integer (W));
+ Data_Buffer : Color_Component_Array (1 .. Size_Type (W));
for Data_Buffer'Address use Storage.To_Address (Buf_Ptr);
pragma Import (Ada, Data_Buffer);
begin
@@ -1077,12 +1077,12 @@ package body FLTK.Draw is
(X, Y, W, H : in Integer;
Data : in Color_Component_Array;
Depth : in Positive := 1;
- Line_Data : in Natural := 0;
+ Line_Size : in Natural := 0;
Flip_Horizontal : Boolean := False;
Flip_Vertical : Boolean := False)
is
Real_Depth : Integer := Depth;
- Real_Line_Data : Integer := Line_Data;
+ Real_Line_Data : Integer := Line_Size;
begin
if Flip_Horizontal then
Real_Depth := Real_Depth * (-1);
@@ -1095,7 +1095,9 @@ package body FLTK.Draw is
end if;
end if;
fl_draw_draw_image_mono
- (Storage.To_Integer (Data (Data'First)'Address),
+ ((if Data'Length > 0
+ then Storage.To_Integer (Data (Data'First)'Address)
+ else Null_Pointer),
Interfaces.C.int (X),
Interfaces.C.int (Y),
Interfaces.C.int (W),
@@ -1108,18 +1110,17 @@ package body FLTK.Draw is
Mono_Image_Func_Ptr : Image_Draw_Function;
procedure Draw_Image_Mono_Hook
- (User : in Storage.Integer_Address;
+ (Ignore : in Storage.Integer_Address;
X, Y, W : in Interfaces.C.int;
Buf_Ptr : in Storage.Integer_Address);
-
pragma Convention (C, Draw_Image_Mono_Hook);
procedure Draw_Image_Mono_Hook
- (User : in Storage.Integer_Address;
+ (Ignore : in Storage.Integer_Address;
X, Y, W : in Interfaces.C.int;
Buf_Ptr : in Storage.Integer_Address)
is
- Data_Buffer : Color_Component_Array (1 .. Integer (W));
+ Data_Buffer : Color_Component_Array (1 .. Size_Type (W));
for Data_Buffer'Address use Storage.To_Address (Buf_Ptr);
pragma Import (Ada, Data_Buffer);
begin
@@ -1148,15 +1149,15 @@ package body FLTK.Draw is
Colors : in FLTK.Images.Pixmaps.Color_Definition_Array;
Pixels : in FLTK.Images.Pixmaps.Pixmap_Data;
X, Y : in Integer;
- Hue : in Color := Grey0_Color)
+ Tone : in Color := Grey0_Color)
is
C_Data : Pixmap_Marshal.chars_ptr_array_access :=
Pixmap_Marshal.Marshal_Data (Values, Colors, Pixels);
- Result : Interfaces.C.int := fl_draw_draw_pixmap
+ Result : constant Interfaces.C.int := fl_draw_draw_pixmap
(Storage.To_Integer (C_Data (C_Data'First)'Address),
Interfaces.C.int (X),
Interfaces.C.int (Y),
- Interfaces.C.unsigned (Hue));
+ Interfaces.C.unsigned (Tone));
begin
pragma Assert (Result /= 0);
Pixmap_Marshal.Free_Recursive (C_Data);
@@ -1172,18 +1173,26 @@ package body FLTK.Draw is
Alpha : in Integer := 0)
return Color_Component_Array
is
- My_Len : Integer := (if Alpha = 0 then W * H * 3 else W * H * 4);
+ My_Len : constant Size_Type :=
+ (if Alpha = 0
+ then Size_Type (W) * Size_Type (H) * 3
+ else Size_Type (W) * Size_Type (H) * 4);
Result : Color_Component_Array (1 .. My_Len);
Buffer : Storage.Integer_Address;
begin
Buffer := fl_draw_read_image
- (Storage.To_Integer (Result (Result'First)'Address),
+ ((if Result'Length > 0
+ then Storage.To_Integer (Result (Result'First)'Address)
+ else Null_Pointer),
Interfaces.C.int (X),
Interfaces.C.int (Y),
Interfaces.C.int (W),
Interfaces.C.int (H),
Interfaces.C.int (Alpha));
- pragma Assert (Buffer = Storage.To_Integer (Result (Result'First)'Address));
+ pragma Assert
+ ((if Result'Length > 0
+ then Buffer = Storage.To_Integer (Result (Result'First)'Address)
+ else Buffer = Null_Pointer));
return Result;
exception
when Chk.Assertion_Error => raise Internal_FLTK_Error with
@@ -1201,7 +1210,7 @@ package body FLTK.Draw is
Callback : in Symbol_Draw_Function;
Scalable : in Boolean)
is
- Ret_Val : Interfaces.C.int := fl_draw_add_symbol
+ Ret_Val : constant Interfaces.C.int := fl_draw_add_symbol
(Interfaces.C.To_C (Text),
Storage.To_Integer (Callback.all'Address),
Boolean'Pos (Scalable));
@@ -1374,7 +1383,7 @@ package body FLTK.Draw is
Name : in String;
Hue : in Color)
is
- Ret_Val : Interfaces.C.int := fl_draw_draw_symbol
+ Ret_Val : constant Interfaces.C.int := fl_draw_draw_symbol
(Interfaces.C.To_C (Name),
Interfaces.C.int (X),
Interfaces.C.int (Y),
@@ -1479,7 +1488,7 @@ package body FLTK.Draw is
Buffer : Interfaces.C.Strings.chars_ptr;
Length : Interfaces.C.int;
Temp : Interfaces.C.char_array := Interfaces.C.To_C (Text);
- Result : Char_Pointers.Pointer := fl_draw_expand_text
+ Result : constant Char_Pointers.Pointer := fl_draw_expand_text
(Temp, Buffer, 0,
Interfaces.C.double (Max_Width),
Length,
diff --git a/body/fltk-environment.adb b/body/fltk-environment.adb
index f09795f..c510e26 100644
--- a/body/fltk-environment.adb
+++ b/body/fltk-environment.adb
@@ -125,9 +125,9 @@ package body FLTK.Environment is
pragma Inline (fl_preferences_flush);
function fl_preferences_getuserdatapath
- (E : in Storage.Integer_Address;
- P : in Interfaces.C.char_array;
- L : in Interfaces.C.int)
+ (E : in Storage.Integer_Address;
+ P : out Interfaces.C.char_array;
+ L : in Interfaces.C.int)
return Interfaces.C.int;
pragma Import (C, fl_preferences_getuserdatapath, "fl_preferences_getuserdatapath");
pragma Inline (fl_preferences_getuserdatapath);
@@ -285,11 +285,11 @@ package body FLTK.Environment is
pragma Inline (fl_preferences_get_str);
function fl_preferences_get_str_limit
- (E : in Storage.Integer_Address;
- K : in Interfaces.C.char_array;
- V : in Interfaces.C.char_array;
- D : in Interfaces.C.char_array;
- M : in Interfaces.C.int)
+ (E : in Storage.Integer_Address;
+ K : in Interfaces.C.char_array;
+ V : out Interfaces.C.char_array;
+ D : in Interfaces.C.char_array;
+ M : in Interfaces.C.int)
return Interfaces.C.int;
pragma Import (C, fl_preferences_get_str_limit, "fl_preferences_get_str_limit");
pragma Inline (fl_preferences_get_str_limit);
@@ -552,7 +552,7 @@ package body FLTK.Environment is
function New_UUID
return String
is
- Text : Interfaces.C.Strings.chars_ptr := fl_preferences_new_uuid;
+ Text : constant Interfaces.C.Strings.chars_ptr := fl_preferences_new_uuid;
begin
return Interfaces.C.Strings.Value (Text);
end New_UUID;
@@ -655,7 +655,7 @@ package body FLTK.Environment is
Index : in Positive)
return String
is
- Key : Interfaces.C.Strings.chars_ptr :=
+ Key : constant Interfaces.C.Strings.chars_ptr :=
fl_preferences_entry (This.Void_Ptr, Interfaces.C.int (Index) - 1);
begin
-- no need for dealloc?
@@ -702,7 +702,7 @@ package body FLTK.Environment is
Index : in Positive)
return String
is
- Name : Interfaces.C.Strings.chars_ptr :=
+ Name : constant Interfaces.C.Strings.chars_ptr :=
fl_preferences_group (This.Void_Ptr, Interfaces.C.int (Index) - 1);
begin
-- no need for dealloc?
@@ -731,7 +731,7 @@ package body FLTK.Environment is
(This : in Pref_Group)
return String
is
- Text : Interfaces.C.Strings.chars_ptr := fl_preferences_name (This.Void_Ptr);
+ Text : constant Interfaces.C.Strings.chars_ptr := fl_preferences_name (This.Void_Ptr);
begin
if Text = Interfaces.C.Strings.Null_Ptr then
return "";
@@ -745,7 +745,7 @@ package body FLTK.Environment is
(This : in Pref_Group)
return String
is
- Text : Interfaces.C.Strings.chars_ptr := fl_preferences_path (This.Void_Ptr);
+ Text : constant Interfaces.C.Strings.chars_ptr := fl_preferences_path (This.Void_Ptr);
begin
if Text = Interfaces.C.Strings.Null_Ptr then
return "";
@@ -783,9 +783,9 @@ package body FLTK.Environment is
Default : in Integer)
return Integer
is
- Value, X : Interfaces.C.int;
+ Value, Ignore : Interfaces.C.int;
begin
- X := fl_preferences_get_int
+ Ignore := fl_preferences_get_int
(This.Void_Ptr,
Interfaces.C.To_C (Key),
Value,
@@ -819,9 +819,9 @@ package body FLTK.Environment is
return Float
is
Value : Interfaces.C.C_float;
- X : Interfaces.C.int;
+ Ignore : Interfaces.C.int;
begin
- X := fl_preferences_get_float
+ Ignore := fl_preferences_get_float
(This.Void_Ptr,
Interfaces.C.To_C (Key),
Value,
@@ -855,9 +855,9 @@ package body FLTK.Environment is
return Long_Float
is
Value : Interfaces.C.double;
- X : Interfaces.C.int;
+ Ignore : Interfaces.C.int;
begin
- X := fl_preferences_get_double
+ Ignore := fl_preferences_get_double
(This.Void_Ptr,
Interfaces.C.To_C (Key),
Value,
@@ -872,7 +872,7 @@ package body FLTK.Environment is
return String
is
Text : Interfaces.C.Strings.chars_ptr;
- Check : Interfaces.C.int := fl_preferences_get_str
+ Check : constant Interfaces.C.int := fl_preferences_get_str
(This.Void_Ptr,
Interfaces.C.To_C (Key),
Text,
@@ -884,7 +884,7 @@ package body FLTK.Environment is
if Text = Interfaces.C.Strings.Null_Ptr then
return "";
end if;
- return Str : String := Interfaces.C.Strings.Value (Text) do
+ return Str : constant String := Interfaces.C.Strings.Value (Text) do
Interfaces.C.Strings.Free (Text);
end return;
end Get;
@@ -897,7 +897,7 @@ package body FLTK.Environment is
return String
is
Text : Interfaces.C.Strings.chars_ptr;
- X : Interfaces.C.int := fl_preferences_get_str
+ Ignore : Interfaces.C.int := fl_preferences_get_str
(This.Void_Ptr,
Interfaces.C.To_C (Key),
Text,
@@ -906,7 +906,7 @@ package body FLTK.Environment is
if Text = Interfaces.C.Strings.Null_Ptr then
return Default;
end if;
- return Str : String := Interfaces.C.Strings.Value (Text) do
+ return Str : constant String := Interfaces.C.Strings.Value (Text) do
Interfaces.C.Strings.Free (Text);
end return;
end Get;
@@ -920,7 +920,7 @@ package body FLTK.Environment is
return String
is
Text : Interfaces.C.char_array := (1 .. Interfaces.C.size_t (Max_Length + 1) => ' ');
- Check : Interfaces.C.int := fl_preferences_get_str_limit
+ Check : constant Interfaces.C.int := fl_preferences_get_str_limit
(This.Void_Ptr,
Interfaces.C.To_C (Key),
Text,
@@ -942,7 +942,7 @@ package body FLTK.Environment is
is
Thing : Storage.Integer_Address;
Dummy : Interfaces.C.int := 42;
- Check : Interfaces.C.int := fl_preferences_get_void
+ Check : constant Interfaces.C.int := fl_preferences_get_void
(This.Void_Ptr,
Interfaces.C.To_C (Key),
Thing,
@@ -954,12 +954,12 @@ package body FLTK.Environment is
raise Preference_Error;
end if;
declare
- Length : Natural := This.Value_Size (Key) * Natural (c_pointer_size);
+ Length : constant Natural := This.Value_Size (Key) * Natural (c_pointer_size);
Actual : Binary_Data (1 .. Length);
for Actual'Address use Storage.To_Address (Thing);
pragma Import (Ada, Actual);
begin
- return Result : Binary_Data := Actual do
+ return Result : constant Binary_Data := Actual do
free_fl_preferences_void_data (Thing);
end return;
end;
@@ -979,12 +979,12 @@ package body FLTK.Environment is
Thing,
Storage.To_Integer (Default'Address),
Default'Length / Interfaces.C.int (c_pointer_size));
- Length : Natural := This.Value_Size (Key) * Natural (c_pointer_size);
+ Length : constant Natural := This.Value_Size (Key) * Natural (c_pointer_size);
Actual : Binary_Data (1 .. Length);
for Actual'Address use Storage.To_Address (Thing);
pragma Import (Ada, Actual);
begin
- return Result : Binary_Data := Actual do
+ return Result : constant Binary_Data := Actual do
free_fl_preferences_void_data (Thing);
end return;
end Get;
@@ -1005,7 +1005,7 @@ package body FLTK.Environment is
Storage.To_Integer (Default'Address),
Default'Length / Interfaces.C.int (c_pointer_size),
Interfaces.C.int (Max_Length) / Interfaces.C.int (c_pointer_size));
- Length : Natural := This.Value_Size (Key) * Natural (c_pointer_size);
+ Length : constant Natural := This.Value_Size (Key) * Natural (c_pointer_size);
begin
return Actual (1 .. Length);
end Get;
diff --git a/body/fltk-events.adb b/body/fltk-events.adb
index a15c55b..7a5932f 100644
--- a/body/fltk-events.adb
+++ b/body/fltk-events.adb
@@ -7,6 +7,7 @@
with
Ada.Assertions,
+ Ada.Containers.Vectors,
Interfaces.C.Strings;
use type
@@ -71,6 +72,26 @@ package body FLTK.Events is
pragma Import (C, fl_event_add_handler, "fl_event_add_handler");
pragma Inline (fl_event_add_handler);
+ procedure fl_event_remove_handler
+ (F : in Storage.Integer_Address);
+ pragma Import (C, fl_event_remove_handler, "fl_event_remove_handler");
+ pragma Inline (fl_event_remove_handler);
+
+ procedure fl_event_add_system_handler
+ (H, F : in Storage.Integer_Address);
+ pragma Import (C, fl_event_add_system_handler, "fl_event_add_system_handler");
+ pragma Inline (fl_event_add_system_handler);
+
+ procedure fl_event_remove_system_handler
+ (H : in Storage.Integer_Address);
+ pragma Import (C, fl_event_remove_system_handler, "fl_event_remove_system_handler");
+ pragma Inline (fl_event_remove_system_handler);
+
+
+
+
+ -- Dispatch --
+
procedure fl_event_set_dispatch
(F : in Storage.Integer_Address);
pragma Import (C, fl_event_set_dispatch, "fl_event_set_dispatch");
@@ -369,22 +390,65 @@ package body FLTK.Events is
-- Hooks --
-------------
+ -- This is handled on the Ada side since otherwise marshalling the
+ -- types from C++ to Ada would be extremely difficult. This hook is
+ -- passed during package init.
+ package Handler_Vectors is new Ada.Containers.Vectors
+ (Index_Type => Positive,
+ Element_Type => Event_Handler);
+
+ Handlers : Handler_Vectors.Vector;
+
function Event_Handler_Hook
(Num : in Interfaces.C.int)
- return Interfaces.C.int
- is
- Ret_Val : Event_Outcome;
+ return Interfaces.C.int;
+ pragma Convention (C, Event_Handler_Hook);
+
+ function Event_Handler_Hook
+ (Num : in Interfaces.C.int)
+ return Interfaces.C.int is
begin
- for Func of reverse Handlers loop
- Ret_Val := Func (Event_Kind'Val (Num));
- if Ret_Val /= Not_Handled then
- return Event_Outcome'Pos (Ret_Val);
+ for Call of reverse Handlers loop
+ if Call (Event_Kind'Val (Num)) /= Not_Handled then
+ return Event_Outcome'Pos (Handled);
end if;
end loop;
return Event_Outcome'Pos (Not_Handled);
+ exception
+ when Constraint_Error => raise Internal_FLTK_Error with
+ "Event_Handler hook received unexpected event int value of " &
+ Interfaces.C.int'Image (Num);
end Event_Handler_Hook;
+ -- This is handled on the Ada side because otherwise there would be
+ -- no way to specify which callback to remove in FLTK once one was
+ -- added. This is because Fl::remove_system_handler does not pay
+ -- attention to the void * data. This hook is passed during package init.
+ package System_Handler_Vectors is new Ada.Containers.Vectors
+ (Index_Type => Positive,
+ Element_Type => System_Handler);
+
+ System_Handlers : System_Handler_Vectors.Vector;
+
+ function System_Handler_Hook
+ (E, U : in Storage.Integer_Address)
+ return Interfaces.C.int;
+ pragma Convention (C, System_Handler_Hook);
+
+ function System_Handler_Hook
+ (E, U : in Storage.Integer_Address)
+ return Interfaces.C.int is
+ begin
+ for Call of reverse System_Handlers loop
+ if Call (System_Event (Storage.To_Address (E))) = Handled then
+ return Event_Outcome'Pos (Handled);
+ end if;
+ end loop;
+ return Event_Outcome'Pos (Not_Handled);
+ end System_Handler_Hook;
+
+
function Dispatch_Hook
(Num : in Interfaces.C.int;
Ptr : in Storage.Integer_Address)
@@ -403,13 +467,27 @@ package body FLTK.Events is
when Chk.Assertion_Error => raise Internal_FLTK_Error with
"Window passed to Event_Dispatch hook did not have user_data pointer back to Ada";
when Constraint_Error => raise Internal_FLTK_Error with
- "Event_Dispatch hook passed unexpected event int value of " &
+ "Event_Dispatch hook received unexpected event int value of " &
Interfaces.C.int'Image (Num);
end Dispatch_Hook;
+ -------------------
+ -- Destructors --
+ -------------------
+
+ procedure Finalize
+ (This : in out FLTK_Events_Final_Controller) is
+ begin
+ fl_event_remove_handler (Storage.To_Integer (Event_Handler_Hook'Address));
+ fl_event_remove_system_handler (Storage.To_Integer (System_Handler_Hook'Address));
+ end Finalize;
+
+
+
+
-----------------------
-- API Subprograms --
-----------------------
@@ -417,14 +495,14 @@ package body FLTK.Events is
-- Handlers --
procedure Add_Handler
- (Func : in Event_Handler) is
+ (Func : in not null Event_Handler) is
begin
Handlers.Append (Func);
end Add_Handler;
procedure Remove_Handler
- (Func : in Event_Handler) is
+ (Func : in not null Event_Handler) is
begin
for I in reverse Handlers.First_Index .. Handlers.Last_Index loop
if Handlers (I) = Func then
@@ -435,6 +513,29 @@ package body FLTK.Events is
end Remove_Handler;
+ procedure Add_System_Handler
+ (Func : in not null System_Handler) is
+ begin
+ System_Handlers.Append (Func);
+ end Add_System_Handler;
+
+
+ procedure Remove_System_Handler
+ (Func : in not null System_Handler) is
+ begin
+ for I in reverse System_Handlers.First_Index .. System_Handlers.Last_Index loop
+ if System_Handlers (I) = Func then
+ System_Handlers.Delete (I);
+ return;
+ end if;
+ end loop;
+ end Remove_System_Handler;
+
+
+
+
+ -- Dispatch --
+
function Get_Dispatch
return Event_Dispatch is
begin
@@ -459,7 +560,7 @@ package body FLTK.Events is
Origin : in out FLTK.Widgets.Groups.Windows.Window'Class)
return Event_Outcome
is
- Result : Interfaces.C.int := fl_event_handle_dispatch
+ Result : constant Interfaces.C.int := fl_event_handle_dispatch
(Event_Kind'Pos (Event),
Wrapper (Origin).Void_Ptr);
begin
@@ -475,7 +576,7 @@ package body FLTK.Events is
Origin : in out FLTK.Widgets.Groups.Windows.Window'Class)
return Event_Outcome
is
- Result : Interfaces.C.int := fl_event_handle
+ Result : constant Interfaces.C.int := fl_event_handle
(Event_Kind'Pos (Event),
Wrapper (Origin).Void_Ptr);
begin
@@ -617,7 +718,7 @@ package body FLTK.Events is
function Clipboard_Text
return String
is
- Text_Ptr : Interfaces.C.Strings.chars_ptr := fl_event_clipboard_text;
+ Text_Ptr : constant Interfaces.C.Strings.chars_ptr := fl_event_clipboard_text;
begin
if Text_Ptr = Interfaces.C.Strings.Null_Ptr then
return "";
@@ -630,7 +731,7 @@ package body FLTK.Events is
function Clipboard_Kind
return String
is
- Text_Ptr : Interfaces.C.Strings.chars_ptr := fl_event_clipboard_type;
+ Text_Ptr : constant Interfaces.C.Strings.chars_ptr := fl_event_clipboard_type;
begin
if Text_Ptr = Interfaces.C.Strings.Null_Ptr then
return "";
@@ -655,7 +756,7 @@ package body FLTK.Events is
function Text
return String
is
- Str : Interfaces.C.Strings.chars_ptr := fl_event_text;
+ Str : constant Interfaces.C.Strings.chars_ptr := fl_event_text;
begin
if Str = Interfaces.C.Strings.Null_Ptr then
return "";
@@ -687,7 +788,7 @@ package body FLTK.Events is
function Last
return Event_Kind
is
- Value : Interfaces.C.int := fl_event_get;
+ Value : constant Interfaces.C.int := fl_event_get;
begin
return Event_Kind'Val (Value);
exception
@@ -788,7 +889,7 @@ package body FLTK.Events is
function Get_Clicks
return Natural
is
- Raw : Interfaces.C.int := fl_event_get_clicks;
+ Raw : constant Interfaces.C.int := fl_event_get_clicks;
begin
if Is_Click then
return Positive (Raw + 1);
@@ -819,7 +920,7 @@ package body FLTK.Events is
function Last_Button
return Mouse_Button
is
- Code : Interfaces.C.int := fl_event_button;
+ Code : constant Interfaces.C.int := fl_event_button;
begin
pragma Assert (Last = Push or Last = Release);
if Code = fl_enum_left_mouse then
@@ -881,7 +982,7 @@ package body FLTK.Events is
(Left, Middle, Right, Back, Forward : out Boolean)
is
type Cint_Mod is mod 2 ** Interfaces.C.int'Size;
- Mask : Interfaces.C.int := fl_event_buttons;
+ Mask : constant Interfaces.C.int := fl_event_buttons;
begin
Left := (Cint_Mod (Mask) and Cint_Mod (fl_enum_button1)) /= 0;
Middle := (Cint_Mod (Mask) and Cint_Mod (fl_enum_button2)) /= 0;
@@ -981,6 +1082,7 @@ begin
fl_event_add_handler (Storage.To_Integer (Event_Handler_Hook'Address));
+ fl_event_add_system_handler (Storage.To_Integer (System_Handler_Hook'Address), Null_Pointer);
end FLTK.Events;
diff --git a/body/fltk-file_choosers.adb b/body/fltk-file_choosers.adb
index a1ef4f7..ef33753 100644
--- a/body/fltk-file_choosers.adb
+++ b/body/fltk-file_choosers.adb
@@ -39,16 +39,16 @@ package body FLTK.File_Choosers is
pragma Import (C, fl_widget_get_user_data, "fl_widget_get_user_data");
pragma Inline (fl_widget_get_user_data);
- procedure fl_widget_set_user_data
- (W, D : in Storage.Integer_Address);
- pragma Import (C, fl_widget_set_user_data, "fl_widget_set_user_data");
- pragma Inline (fl_widget_set_user_data);
+ -- procedure fl_widget_set_user_data
+ -- (W, D : in Storage.Integer_Address);
+ -- pragma Import (C, fl_widget_set_user_data, "fl_widget_set_user_data");
+ -- pragma Inline (fl_widget_set_user_data);
- function fl_file_chooser_get_user_data
- (F : in Storage.Integer_Address)
- return Storage.Integer_Address;
- pragma Import (C, fl_file_chooser_get_user_data, "fl_file_chooser_get_user_data");
- pragma Inline (fl_file_chooser_get_user_data);
+ -- function fl_file_chooser_get_user_data
+ -- (F : in Storage.Integer_Address)
+ -- return Storage.Integer_Address;
+ -- pragma Import (C, fl_file_chooser_get_user_data, "fl_file_chooser_get_user_data");
+ -- pragma Inline (fl_file_chooser_get_user_data);
procedure fl_file_chooser_set_user_data
(F, U : in Storage.Integer_Address);
@@ -514,14 +514,13 @@ package body FLTK.File_Choosers is
procedure File_Chooser_Callback_Hook
- (C_Addr, User_Data : in Storage.Integer_Address);
-
+ (Ignore, User_Data : in Storage.Integer_Address);
pragma Convention (C, File_Chooser_Callback_Hook);
procedure File_Chooser_Callback_Hook
- (C_Addr, User_Data : in Storage.Integer_Address)
+ (Ignore, User_Data : in Storage.Integer_Address)
is
- Ada_Obj : access File_Chooser'Class :=
+ Ada_Obj : constant access File_Chooser'Class :=
File_Chooser_Convert.To_Pointer (Storage.To_Address (User_Data));
begin
if Ada_Obj.My_Callback /= null then
@@ -536,28 +535,11 @@ package body FLTK.File_Choosers is
-- Destructors --
-------------------
- -- Releasing carrier pigeon
- procedure fl_button_extra_final
- (Ada_Obj : in Storage.Integer_Address);
- pragma Import (C, fl_button_extra_final, "fl_button_extra_final");
- pragma Inline (fl_button_extra_final);
-
-
- -- Entering wormhole
- procedure fl_check_button_extra_final
- (Ada_Obj : in Storage.Integer_Address);
- pragma Import (C, fl_check_button_extra_final, "fl_check_button_extra_final");
- pragma Inline (fl_check_button_extra_final);
-
-
procedure Extra_Final
(This : in out File_Chooser)
is
use Interfaces.C.Strings;
begin
- fl_button_extra_final (Storage.To_Integer (This.New_Butt'Address));
- fl_check_button_extra_final (Storage.To_Integer (This.Preview_Butt'Address));
- fl_check_button_extra_final (Storage.To_Integer (This.Hidden_Butt'Address));
Free (This.My_Label);
Free (This.My_OK_Label);
end Extra_Final;
@@ -960,18 +942,19 @@ package body FLTK.File_Choosers is
(This : in out File_Chooser;
Item : in out Widgets.Widget'Class)
is
- C_Addr : Storage.Integer_Address;
+ Ignore : Storage.Integer_Address :=
+ fl_file_chooser_add_extra (This.Void_Ptr, Wrapper (Item).Void_Ptr);
begin
- C_Addr := fl_file_chooser_add_extra (This.Void_Ptr, Wrapper (Item).Void_Ptr);
+ null;
end Add_Extra;
procedure Remove_Extra
(This : in out File_Chooser)
is
- C_Addr : Storage.Integer_Address;
+ Ignore : Storage.Integer_Address := fl_file_chooser_add_extra (This.Void_Ptr, Null_Pointer);
begin
- C_Addr := fl_file_chooser_add_extra (This.Void_Ptr, Null_Pointer);
+ null;
end Remove_Extra;
@@ -1080,7 +1063,7 @@ package body FLTK.File_Choosers is
(This : in File_Chooser)
return Boolean
is
- Ret : Interfaces.C.int := fl_file_chooser_get_preview (This.Void_Ptr);
+ Ret : constant Interfaces.C.int := fl_file_chooser_get_preview (This.Void_Ptr);
begin
pragma Assert (Ret in 0 .. 1);
return Boolean'Val (Ret);
@@ -1151,7 +1134,7 @@ package body FLTK.File_Choosers is
(This : in File_Chooser)
return Chooser_Kind
is
- Ret : Interfaces.C.int := fl_file_chooser_get_type (This.Void_Ptr);
+ Ret : constant Interfaces.C.int := fl_file_chooser_get_type (This.Void_Ptr);
begin
pragma Assert (Ret in 0 .. Chooser_Kind'Pos (Chooser_Kind'Last));
return Chooser_Kind'Val (Ret);
@@ -1186,7 +1169,8 @@ package body FLTK.File_Choosers is
(This : in File_Chooser)
return String
is
- C_Ptr : Interfaces.C.Strings.chars_ptr := fl_file_chooser_get_directory (This.Void_Ptr);
+ C_Ptr : constant Interfaces.C.Strings.chars_ptr :=
+ fl_file_chooser_get_directory (This.Void_Ptr);
begin
if C_Ptr = Interfaces.C.Strings.Null_Ptr then
return "";
@@ -1217,7 +1201,8 @@ package body FLTK.File_Choosers is
(This : in File_Chooser)
return String
is
- C_Ptr : Interfaces.C.Strings.chars_ptr := fl_file_chooser_get_filter (This.Void_Ptr);
+ C_Ptr : constant Interfaces.C.Strings.chars_ptr :=
+ fl_file_chooser_get_filter (This.Void_Ptr);
begin
if C_Ptr = Interfaces.C.Strings.Null_Ptr then
return "";
@@ -1279,7 +1264,7 @@ package body FLTK.File_Choosers is
Index : in Positive := 1)
return String
is
- C_Ptr : Interfaces.C.Strings.chars_ptr :=
+ C_Ptr : constant Interfaces.C.Strings.chars_ptr :=
fl_file_chooser_get_value (This.Void_Ptr, Interfaces.C.int (Index));
begin
if C_Ptr = Interfaces.C.Strings.Null_Ptr then
diff --git a/body/fltk-filenames.adb b/body/fltk-filenames.adb
index 0612810..9e41b7d 100644
--- a/body/fltk-filenames.adb
+++ b/body/fltk-filenames.adb
@@ -63,17 +63,17 @@ package body FLTK.Filenames is
pragma Inline (filename_decode_uri);
function filename_absolute
- (To : in Interfaces.C.char_array;
- Len : in Interfaces.C.int;
- From : in Interfaces.C.char_array)
+ (To : out Interfaces.C.char_array;
+ Len : in Interfaces.C.int;
+ From : in Interfaces.C.char_array)
return Interfaces.C.int;
pragma Import (C, filename_absolute, "filename_absolute");
pragma Inline (filename_absolute);
function filename_expand
- (To : in Interfaces.C.char_array;
- Len : in Interfaces.C.int;
- From : in Interfaces.C.char_array)
+ (To : out Interfaces.C.char_array;
+ Len : in Interfaces.C.int;
+ From : in Interfaces.C.char_array)
return Interfaces.C.int;
pragma Import (C, filename_expand, "filename_expand");
pragma Inline (filename_expand);
@@ -111,9 +111,9 @@ package body FLTK.Filenames is
pragma Inline (filename_name);
function filename_relative
- (To : in Interfaces.C.char_array;
- Len : in Interfaces.C.int;
- From : in Interfaces.C.char_array)
+ (To : out Interfaces.C.char_array;
+ Len : in Interfaces.C.int;
+ From : in Interfaces.C.char_array)
return Interfaces.C.int;
pragma Import (C, filename_relative, "filename_relative");
pragma Inline (filename_relative);
@@ -127,8 +127,9 @@ package body FLTK.Filenames is
pragma Inline (filename_setext);
function filename_open_uri
- (U, M : in Interfaces.C.char_array;
- Len : in Interfaces.C.int)
+ (U : in Interfaces.C.char_array;
+ M : out Interfaces.C.char_array;
+ Len : in Interfaces.C.int)
return Interfaces.C.int;
pragma Import (C, filename_open_uri, "filename_open_uri");
pragma Inline (filename_open_uri);
@@ -171,7 +172,7 @@ package body FLTK.Filenames is
(A, B : in String)
return Comparison
is
- Result : Interfaces.C.int :=
+ Result : constant Interfaces.C.int :=
filename_alphasort (Interfaces.C.To_C (A), Interfaces.C.To_C (B));
begin
pragma Assert
@@ -188,7 +189,7 @@ package body FLTK.Filenames is
(A, B : in String)
return Comparison
is
- Result : Interfaces.C.int :=
+ Result : constant Interfaces.C.int :=
filename_casealphasort (Interfaces.C.To_C (A), Interfaces.C.To_C (B));
begin
pragma Assert
@@ -205,7 +206,7 @@ package body FLTK.Filenames is
(A, B : in String)
return Comparison
is
- Result : Interfaces.C.int :=
+ Result : constant Interfaces.C.int :=
filename_numericsort (Interfaces.C.To_C (A), Interfaces.C.To_C (B));
begin
pragma Assert
@@ -222,7 +223,7 @@ package body FLTK.Filenames is
(A, B : in String)
return Comparison
is
- Result : Interfaces.C.int :=
+ Result : constant Interfaces.C.int :=
filename_casenumericsort (Interfaces.C.To_C (A), Interfaces.C.To_C (B));
begin
pragma Assert
@@ -279,7 +280,7 @@ package body FLTK.Filenames is
(URI : in Path_String)
return Path_String
is
- C_Ptr : Interfaces.C.char_array := Interfaces.C.To_C (URI);
+ C_Ptr : constant Interfaces.C.char_array := Interfaces.C.To_C (URI);
begin
filename_decode_uri (C_Ptr);
return Interfaces.C.To_Ada (C_Ptr);
@@ -291,7 +292,7 @@ package body FLTK.Filenames is
is
Message : Interfaces.C.char_array (1 .. Interfaces.C.size_t (error_bsize)) :=
(others => Interfaces.C.char'Val (0));
- Result : Interfaces.C.int := filename_open_uri
+ Result : constant Interfaces.C.int := filename_open_uri
(Interfaces.C.To_C (URI),
Message,
error_bsize);
@@ -317,7 +318,7 @@ package body FLTK.Filenames is
is
Result : Interfaces.C.char_array (1 .. Interfaces.C.size_t (Max_Path_Length)) :=
(others => Interfaces.C.char'Val (0));
- Code : Interfaces.C.int := filename_absolute
+ Ignore : constant Interfaces.C.int := filename_absolute
(Result,
Interfaces.C.int (Max_Path_Length),
Interfaces.C.To_C (Name));
@@ -333,7 +334,7 @@ package body FLTK.Filenames is
is
Result : Interfaces.C.char_array (1 .. Interfaces.C.size_t (Max_Path_Length)) :=
(others => Interfaces.C.char'Val (0));
- Code : Interfaces.C.int := filename_absolute
+ Code : constant Interfaces.C.int := filename_absolute
(Result,
Interfaces.C.int (Max_Path_Length),
Interfaces.C.To_C (Name));
@@ -349,7 +350,7 @@ package body FLTK.Filenames is
is
Result : Interfaces.C.char_array (1 .. Interfaces.C.size_t (Max_Path_Length)) :=
(others => Interfaces.C.char'Val (0));
- Code : Interfaces.C.int := filename_relative
+ Ignore : constant Interfaces.C.int := filename_relative
(Result,
Interfaces.C.int (Max_Path_Length),
Interfaces.C.To_C (Name));
@@ -365,7 +366,7 @@ package body FLTK.Filenames is
is
Result : Interfaces.C.char_array (1 .. Interfaces.C.size_t (Max_Path_Length)) :=
(others => Interfaces.C.char'Val (0));
- Code : Interfaces.C.int := filename_relative
+ Code : constant Interfaces.C.int := filename_relative
(Result,
Interfaces.C.int (Max_Path_Length),
Interfaces.C.To_C (Name));
@@ -381,7 +382,7 @@ package body FLTK.Filenames is
is
Result : Interfaces.C.char_array (1 .. Interfaces.C.size_t (Max_Path_Length)) :=
(others => Interfaces.C.char'Val (0));
- Code : Interfaces.C.int := filename_expand
+ Ignore : constant Interfaces.C.int := filename_expand
(Result,
Interfaces.C.int (Max_Path_Length),
Interfaces.C.To_C (Name));
@@ -397,7 +398,7 @@ package body FLTK.Filenames is
is
Result : Interfaces.C.char_array (1 .. Interfaces.C.size_t (Max_Path_Length)) :=
(others => Interfaces.C.char'Val (0));
- Code : Interfaces.C.int := filename_expand
+ Code : constant Interfaces.C.int := filename_expand
(Result,
Interfaces.C.int (Max_Path_Length),
Interfaces.C.To_C (Name));
@@ -415,7 +416,7 @@ package body FLTK.Filenames is
(Name : in Path_String)
return Path_String
is
- Data : Interfaces.C.char_array := Interfaces.C.To_C (Name);
+ Data : constant Interfaces.C.char_array := Interfaces.C.To_C (Name);
begin
return Interfaces.C.Strings.Value (filename_name (Data));
end Base_Name;
@@ -425,8 +426,8 @@ package body FLTK.Filenames is
(Name : in Path_String)
return Path_String
is
- Data : Interfaces.C.char_array := Interfaces.C.To_C (Name);
- Result : Interfaces.C.Strings.chars_ptr := filename_ext (Data);
+ Data : constant Interfaces.C.char_array := Interfaces.C.To_C (Name);
+ Result : constant Interfaces.C.Strings.chars_ptr := filename_ext (Data);
begin
if Result = Interfaces.C.Strings.Null_Ptr then
return "";
@@ -478,7 +479,7 @@ package body FLTK.Filenames is
(DA, DB : in Storage.Integer_Address)
return Interfaces.C.int
is
- Result : Comparison := Current_Sort
+ Result : constant Comparison := Current_Sort
(Interfaces.C.Strings.Value (filename_dname (DA, 0)),
Interfaces.C.Strings.Value (filename_dname (DB, 0)));
begin
diff --git a/body/fltk-help_dialogs.adb b/body/fltk-help_dialogs.adb
index 48cdf18..d316662 100644
--- a/body/fltk-help_dialogs.adb
+++ b/body/fltk-help_dialogs.adb
@@ -6,7 +6,7 @@
with
- FLTK.Show_Argv,
+ FLTK.Args_Marshal,
Interfaces.C.Strings;
use type
@@ -227,7 +227,7 @@ package body FLTK.Help_Dialogs is
procedure Show_With_Args
(This : in out Help_Dialog) is
begin
- FLTK.Show_Argv.Dispatch (fl_help_dialog_show2'Access, This.Void_Ptr);
+ FLTK.Args_Marshal.Dispatch (fl_help_dialog_show2'Access, This.Void_Ptr);
end Show_With_Args;
@@ -282,7 +282,8 @@ package body FLTK.Help_Dialogs is
(This : in Help_Dialog)
return String
is
- Raw_Chars : Interfaces.C.Strings.chars_ptr := fl_help_dialog_get_value (This.Void_Ptr);
+ Raw_Chars : constant Interfaces.C.Strings.chars_ptr :=
+ fl_help_dialog_get_value (This.Void_Ptr);
use type Interfaces.C.Strings.chars_ptr;
begin
if Raw_Chars = Interfaces.C.Strings.Null_Ptr then
diff --git a/body/fltk-images-bitmaps.adb b/body/fltk-images-bitmaps.adb
index cfb63d7..5b59c13 100644
--- a/body/fltk-images-bitmaps.adb
+++ b/body/fltk-images-bitmaps.adb
@@ -118,7 +118,9 @@ package body FLTK.Images.Bitmaps is
begin
return This : Bitmap do
This.Void_Ptr := new_fl_bitmap
- (Storage.To_Integer (Data (Data'First)'Address),
+ ((if Data'Length > 0
+ then Storage.To_Integer (Data (Data'First)'Address)
+ else Null_Pointer),
Interfaces.C.int (Width),
Interfaces.C.int (Height));
end return;
@@ -135,13 +137,13 @@ package body FLTK.Images.Bitmaps is
-- Contracts --
- function To_Next_Byte
+ function Bytes_Needed
(Bits : in Natural)
return Natural is
begin
- return Integer (Float'Ceiling (Float (Bits) / Float (Color_Component_Array'Component_Size)))
- * Color_Component_Array'Component_Size;
- end To_Next_Byte;
+ return Integer (Float'Ceiling
+ (Float (Bits) / Float (Color_Component_Array'Component_Size)));
+ end Bytes_Needed;
@@ -189,15 +191,15 @@ package body FLTK.Images.Bitmaps is
function Data_Size
(This : in Bitmap)
- return Natural is
+ return Size_Type is
begin
- return To_Next_Byte (This.Get_W) * This.Get_H;
+ return Size_Type (Bytes_Needed (This.Get_W)) * Size_Type (This.Get_H);
end Data_Size;
function Get_Datum
(This : in Bitmap;
- Place : in Positive)
+ Place : in Positive_Size)
return Color_Component
is
The_Data : Color_Component_Array (1 .. This.Data_Size);
@@ -210,7 +212,7 @@ package body FLTK.Images.Bitmaps is
procedure Set_Datum
(This : in out Bitmap;
- Place : in Positive;
+ Place : in Positive_Size;
Value : in Color_Component)
is
The_Data : Color_Component_Array (1 .. This.Data_Size);
@@ -223,8 +225,8 @@ package body FLTK.Images.Bitmaps is
function Slice
(This : in Bitmap;
- Low : in Positive;
- High : in Natural)
+ Low : in Positive_Size;
+ High : in Size_Type)
return Color_Component_Array
is
The_Data : Color_Component_Array (1 .. This.Data_Size);
@@ -237,7 +239,7 @@ package body FLTK.Images.Bitmaps is
procedure Overwrite
(This : in out Bitmap;
- Place : in Positive;
+ Place : in Positive_Size;
Values : in Color_Component_Array)
is
The_Data : Color_Component_Array (1 .. This.Data_Size);
diff --git a/body/fltk-images-pixmaps.adb b/body/fltk-images-pixmaps.adb
index 80d6c03..8487459 100644
--- a/body/fltk-images-pixmaps.adb
+++ b/body/fltk-images-pixmaps.adb
@@ -6,8 +6,7 @@
with
- FLTK.Pixmap_Marshal,
- Interfaces.C.Strings;
+ FLTK.Pixmap_Marshal;
package body FLTK.Images.Pixmaps is
diff --git a/body/fltk-images-rgb-jpeg.adb b/body/fltk-images-rgb-jpeg.adb
index 8706778..61d06e6 100644
--- a/body/fltk-images-rgb-jpeg.adb
+++ b/body/fltk-images-rgb-jpeg.adb
@@ -81,7 +81,9 @@ package body FLTK.Images.RGB.JPEG is
return This : JPEG_Image do
This.Void_Ptr := new_fl_jpeg_image2
(Interfaces.C.To_C (Name),
- Storage.To_Integer (Data (Data'First)'Address));
+ (if Data'Length > 0
+ then Storage.To_Integer (Data (Data'First)'Address)
+ else Null_Pointer));
Raise_Fail_Errors (This);
end return;
end Create;
diff --git a/body/fltk-images-rgb-png.adb b/body/fltk-images-rgb-png.adb
index aa25b7b..1f6e7b9 100644
--- a/body/fltk-images-rgb-png.adb
+++ b/body/fltk-images-rgb-png.adb
@@ -82,7 +82,9 @@ package body FLTK.Images.RGB.PNG is
return This : PNG_Image do
This.Void_Ptr := new_fl_png_image2
(Interfaces.C.To_C (Name),
- Storage.To_Integer (Data (Data'First)'Address),
+ (if Data'Length > 0
+ then Storage.To_Integer (Data (Data'First)'Address)
+ else Null_Pointer),
Data'Length);
Raise_Fail_Errors (This);
end return;
diff --git a/body/fltk-images-rgb.adb b/body/fltk-images-rgb.adb
index f3dff61..71d2520 100644
--- a/body/fltk-images-rgb.adb
+++ b/body/fltk-images-rgb.adb
@@ -159,7 +159,9 @@ package body FLTK.Images.RGB is
begin
return This : RGB_Image do
This.Void_Ptr := new_fl_rgb_image
- (Storage.To_Integer (Data (Data'First)'Address),
+ ((if Data'Length > 0
+ then Storage.To_Integer (Data (Data'First)'Address)
+ else Null_Pointer),
Interfaces.C.int (Width),
Interfaces.C.int (Height),
Interfaces.C.int (Depth),
@@ -192,14 +194,14 @@ package body FLTK.Images.RGB is
-- Static Settings --
function Get_Max_Size
- return Natural is
+ return Size_Type is
begin
- return Natural (fl_rgb_image_get_max_size);
+ return Size_Type (fl_rgb_image_get_max_size);
end Get_Max_Size;
procedure Set_Max_Size
- (Value : in Natural) is
+ (Value : in Size_Type) is
begin
fl_rgb_image_set_max_size (Interfaces.C.size_t (Value));
end Set_Max_Size;
@@ -273,21 +275,21 @@ package body FLTK.Images.RGB is
function Data_Size
(This : in RGB_Image)
- return Natural
+ return Size_Type
is
- Per_Line : Natural := This.Get_Line_Size;
+ Per_Line : constant Natural := This.Get_Line_Size;
begin
if Per_Line = 0 then
- return This.Get_W * This.Get_D * This.Get_H;
+ return Size_Type (This.Get_W) * Size_Type (This.Get_D) * Size_Type (This.Get_H);
else
- return Per_Line * This.Get_H;
+ return Size_Type (Per_Line) * Size_Type (This.Get_H);
end if;
end Data_Size;
function Get_Datum
(This : in RGB_Image;
- Place : in Positive)
+ Place : in Positive_Size)
return Color_Component
is
The_Data : Color_Component_Array (1 .. This.Data_Size);
@@ -300,7 +302,7 @@ package body FLTK.Images.RGB is
procedure Set_Datum
(This : in out RGB_Image;
- Place : in Positive;
+ Place : in Positive_Size;
Value : in Color_Component)
is
The_Data : Color_Component_Array (1 .. This.Data_Size);
@@ -313,8 +315,8 @@ package body FLTK.Images.RGB is
function Slice
(This : in RGB_Image;
- Low : in Positive;
- High : in Natural)
+ Low : in Positive_Size;
+ High : in Size_Type)
return Color_Component_Array
is
The_Data : Color_Component_Array (1 .. This.Data_Size);
@@ -327,7 +329,7 @@ package body FLTK.Images.RGB is
procedure Overwrite
(This : in out RGB_Image;
- Place : in Positive;
+ Place : in Positive_Size;
Values : in Color_Component_Array)
is
The_Data : Color_Component_Array (1 .. This.Data_Size);
diff --git a/body/fltk-images-shared.adb b/body/fltk-images-shared.adb
index e932a09..b8de511 100644
--- a/body/fltk-images-shared.adb
+++ b/body/fltk-images-shared.adb
@@ -287,7 +287,7 @@ package body FLTK.Images.Shared is
(This : in Shared_Image)
return String
is
- Ptr : Interfaces.C.Strings.chars_ptr := fl_shared_image_name (This.Void_Ptr);
+ Ptr : constant Interfaces.C.Strings.chars_ptr := fl_shared_image_name (This.Void_Ptr);
begin
if Ptr = Interfaces.C.Strings.Null_Ptr then
return "";
diff --git a/body/fltk-images.adb b/body/fltk-images.adb
index 3ce3bee..3d5dce7 100644
--- a/body/fltk-images.adb
+++ b/body/fltk-images.adb
@@ -6,7 +6,7 @@
with
- Interfaces.C.Strings;
+ Interfaces.C;
use type
@@ -181,7 +181,7 @@ package body FLTK.Images is
procedure Raise_Fail_Errors
(This : in Image'Class)
is
- Result : Interfaces.C.int := fl_image_fail (This.Void_Ptr);
+ Result : constant Interfaces.C.int := fl_image_fail (This.Void_Ptr);
begin
if Result = fl_image_err_no_image and This.Is_Empty then
raise No_Image_Error;
diff --git a/body/fltk-label_draw_marshal.adb b/body/fltk-label_draw_marshal.adb
new file mode 100644
index 0000000..c5a2031
--- /dev/null
+++ b/body/fltk-label_draw_marshal.adb
@@ -0,0 +1,113 @@
+
+
+-- Programmed by Jedidiah Barber
+-- Released into the public domain
+
+
+with
+
+ Ada.Assertions,
+ FLTK.Labels,
+ FLTK.Registry,
+ FLTK.Static,
+ Interfaces.C;
+
+use type
+
+ FLTK.Static.Label_Draw_Function,
+ FLTK.Static.Label_Measure_Function;
+
+
+package body FLTK.Label_Draw_Marshal is
+
+
+ package Chk renames Ada.Assertions;
+
+
+
+
+ Draw_Array : array (Label_Kind) of FLTK.Static.Label_Draw_Function;
+ Measure_Array : array (Label_Kind) of FLTK.Static.Label_Measure_Function;
+
+
+
+
+ procedure Label_Draw_Hook
+ (L : in Storage.Integer_Address;
+ X, Y, W, H : in Interfaces.C.int;
+ A : in Interfaces.Unsigned_16)
+ with Convention => C;
+
+ procedure Label_Draw_Hook
+ (L : in Storage.Integer_Address;
+ X, Y, W, H : in Interfaces.C.int;
+ A : in Interfaces.Unsigned_16)
+ is
+ My_Label : access FLTK.Labels.Label'Class;
+ begin
+ pragma Assert (FLTK.Registry.Label_Store.Contains (L));
+ My_Label := FLTK.Registry.Label_Store.Element (L);
+ Draw_Array (My_Label.Get_Kind)
+ (My_Label.all,
+ Integer (X), Integer (Y),
+ Integer (W), Integer (H),
+ Alignment (A));
+ exception
+ when Chk.Assertion_Error => raise Internal_FLTK_Error with
+ "Label_Draw_Hook was handed Label with no back reference to Ada in registry";
+ end Label_Draw_Hook;
+
+
+ procedure Label_Measure_Hook
+ (L : in Storage.Integer_Address;
+ W, H : out Interfaces.C.int)
+ with Convention => C;
+
+ procedure Label_Measure_Hook
+ (L : in Storage.Integer_Address;
+ W, H : out Interfaces.C.int)
+ is
+ My_Label : access FLTK.Labels.Label'Class;
+ begin
+ pragma Assert (FLTK.Registry.Label_Store.Contains (L));
+ My_Label := FLTK.Registry.Label_Store.Element (L);
+ Measure_Array (My_Label.Get_Kind)
+ (My_Label.all,
+ Integer (W), Integer (H));
+ exception
+ when Chk.Assertion_Error => raise Internal_FLTK_Error with
+ "Label_Measure_Hook was handed Label with no back reference to Ada in registry";
+ end Label_Measure_Hook;
+
+
+
+
+ function To_C
+ (Kind : in Label_Kind;
+ Func : in FLTK.Static.Label_Draw_Function)
+ return Storage.Integer_Address is
+ begin
+ if Func = null then
+ return Null_Pointer;
+ end if;
+ Draw_Array (Kind) := Func;
+ return Storage.To_Integer (Label_Draw_Hook'Address);
+ end To_C;
+
+
+ function To_C
+ (Kind : in Label_Kind;
+ Func : in FLTK.Static.Label_Measure_Function)
+ return Storage.Integer_Address is
+ begin
+ if Func = null then
+ return Null_Pointer;
+ end if;
+ Measure_Array (Kind) := Func;
+ return Storage.To_Integer (Label_Measure_Hook'Address);
+ end To_C;
+
+
+end FLTK.Label_Draw_Marshal;
+
+
diff --git a/body/fltk-label_draw_marshal.ads b/body/fltk-label_draw_marshal.ads
new file mode 100644
index 0000000..77d3885
--- /dev/null
+++ b/body/fltk-label_draw_marshal.ads
@@ -0,0 +1,28 @@
+
+
+-- Programmed by Jedidiah Barber
+-- Released into the public domain
+
+
+limited with
+
+ FLTK.Static;
+
+
+private package FLTK.Label_Draw_Marshal is
+
+
+ function To_C
+ (Kind : in Label_Kind;
+ Func : in FLTK.Static.Label_Draw_Function)
+ return Storage.Integer_Address;
+
+ function To_C
+ (Kind : in Label_Kind;
+ Func : in FLTK.Static.Label_Measure_Function)
+ return Storage.Integer_Address;
+
+
+end FLTK.Label_Draw_Marshal;
+
+
diff --git a/body/fltk-labels.adb b/body/fltk-labels.adb
index e03e5c5..1cbf6fc 100644
--- a/body/fltk-labels.adb
+++ b/body/fltk-labels.adb
@@ -6,8 +6,13 @@
with
+ FLTK.Registry,
Interfaces.C.Strings;
+use type
+
+ Interfaces.C.Strings.chars_ptr;
+
package body FLTK.Labels is
@@ -39,6 +44,12 @@ package body FLTK.Labels is
-- Attributes --
+ function fl_label_get_value
+ (L : in Storage.Integer_Address)
+ return Interfaces.C.Strings.chars_ptr;
+ pragma Import (C, fl_label_get_value, "fl_label_get_value");
+ pragma Inline (fl_label_get_value);
+
procedure fl_label_set_value
(L : in Storage.Integer_Address;
V : in Interfaces.C.Strings.chars_ptr);
@@ -144,10 +155,11 @@ package body FLTK.Labels is
(This : in out Label) is
begin
if This.Void_Ptr /= Null_Pointer and This.Needs_Dealloc then
+ FLTK.Registry.Label_Store.Delete (This.Void_Ptr);
free_fl_label (This.Void_Ptr);
This.Void_Ptr := Null_Pointer;
- Interfaces.C.Strings.Free (This.My_Text);
end if;
+ Interfaces.C.Strings.Free (This.My_Text);
end Finalize;
@@ -181,6 +193,7 @@ package body FLTK.Labels is
Interfaces.C.unsigned (Place));
This.Set_Active (Active);
This.Set_Inactive (Inactive);
+ FLTK.Registry.Label_Store.Insert (This.Void_Ptr, This'Unchecked_Access);
end return;
end Create;
@@ -197,9 +210,15 @@ package body FLTK.Labels is
function Get_Value
(This : in Label)
- return String is
+ return String
+ is
+ Text : constant Interfaces.C.Strings.chars_ptr := fl_label_get_value (This.Void_Ptr);
begin
- return Interfaces.C.Strings.Value (This.My_Text);
+ if Text = Interfaces.C.Strings.Null_Ptr then
+ return "";
+ else
+ return Interfaces.C.Strings.Value (Text);
+ end if;
end Get_Value;
diff --git a/body/fltk-menu_items.adb b/body/fltk-menu_items.adb
index dfb579a..d75dd4a 100644
--- a/body/fltk-menu_items.adb
+++ b/body/fltk-menu_items.adb
@@ -419,7 +419,7 @@ package body FLTK.Menu_Items is
(This : in Menu_Item)
return String
is
- Ptr : Interfaces.C.Strings.chars_ptr := fl_menu_item_get_label (This.Void_Ptr);
+ Ptr : constant Interfaces.C.Strings.chars_ptr := fl_menu_item_get_label (This.Void_Ptr);
begin
if Ptr = Interfaces.C.Strings.Null_Ptr then
return "";
@@ -466,7 +466,7 @@ package body FLTK.Menu_Items is
(This : in Menu_Item)
return Font_Kind
is
- Result : Interfaces.C.int := fl_menu_item_get_labelfont (This.Void_Ptr);
+ Result : constant Interfaces.C.int := fl_menu_item_get_labelfont (This.Void_Ptr);
begin
return Font_Kind'Val (Result);
exception
@@ -488,7 +488,7 @@ package body FLTK.Menu_Items is
(This : in Menu_Item)
return Font_Size
is
- Result : Interfaces.C.int := fl_menu_item_get_labelsize (This.Void_Ptr);
+ Result : constant Interfaces.C.int := fl_menu_item_get_labelsize (This.Void_Ptr);
begin
return Font_Size (Result);
exception
@@ -510,7 +510,7 @@ package body FLTK.Menu_Items is
(This : in Menu_Item)
return Label_Kind
is
- Result : Interfaces.C.int := fl_menu_item_get_labeltype (This.Void_Ptr);
+ Result : constant Interfaces.C.int := fl_menu_item_get_labeltype (This.Void_Ptr);
begin
return Label_Kind'Val (Result);
exception
diff --git a/body/fltk-pixmap_marshal.adb b/body/fltk-pixmap_marshal.adb
index 768cd08..966e29b 100644
--- a/body/fltk-pixmap_marshal.adb
+++ b/body/fltk-pixmap_marshal.adb
@@ -9,8 +9,7 @@ with
Ada.Strings.Fixed,
Ada.Strings.Unbounded,
Ada.Unchecked_Deallocation,
- FLTK.Images.Pixmaps,
- Interfaces.C.Strings;
+ FLTK.Images.Pixmaps;
package body FLTK.Pixmap_Marshal is
@@ -45,7 +44,7 @@ package body FLTK.Pixmap_Marshal is
Pixels : in Pix.Pixmap_Data)
return chars_ptr_array_access
is
- C_Data : chars_ptr_array_access := new CS.chars_ptr_array
+ C_Data : constant chars_ptr_array_access := new CS.chars_ptr_array
(1 .. C.size_t (1 + Colors'Length + Pixels'Length (1)));
begin
-- Header values line
diff --git a/body/fltk-registry.ads b/body/fltk-registry.ads
new file mode 100644
index 0000000..9911925
--- /dev/null
+++ b/body/fltk-registry.ads
@@ -0,0 +1,32 @@
+
+
+-- Programmed by Jedidiah Barber
+-- Released into the public domain
+
+
+with
+
+ Ada.Containers.Ordered_Maps,
+ FLTK.Labels;
+
+
+private package FLTK.Registry is
+
+
+ -- It finally became untenable to keep only ad hoc back-references to Ada
+ -- when some crucial structs and objects don't have handy built-in space
+ -- for user data already available.
+
+
+ type Label_Access is access all FLTK.Labels.Label'Class;
+
+ package Label_Backref_Maps is new Ada.Containers.Ordered_Maps
+ (Key_Type => Storage.Integer_Address,
+ Element_Type => Label_Access);
+
+ Label_Store : Label_Backref_Maps.Map;
+
+
+end FLTK.Registry;
+
+
diff --git a/body/fltk-static.adb b/body/fltk-static.adb
index bd64a9e..663a7c7 100644
--- a/body/fltk-static.adb
+++ b/body/fltk-static.adb
@@ -10,6 +10,8 @@ with
Ada.Containers.Vectors,
Interfaces.C.Strings,
System.Address_To_Access_Conversions,
+ FLTK.Box_Draw_Marshal,
+ FLTK.Label_Draw_Marshal,
FLTK.Static_Callback_Conversions;
use type
@@ -27,22 +29,94 @@ package body FLTK.Static is
+ -----------------
+ -- Operators --
+ -----------------
+
+ type File_Mode_Bitmask is mod 2 ** Interfaces.C.int'Size;
+
+ function FMode_To_Bits is new
+ Ada.Unchecked_Conversion (File_Mode, File_Mode_Bitmask);
+
+ function Bits_To_FMode is new
+ Ada.Unchecked_Conversion (File_Mode_Bitmask, File_Mode);
+
+
+ function "+"
+ (Left, Right : in File_Mode)
+ return File_Mode is
+ begin
+ return Bits_To_FMode (FMode_To_Bits (Left) or FMode_To_Bits (Right));
+ end "+";
+
+
+ function "-"
+ (Left, Right : in File_Mode)
+ return File_Mode is
+ begin
+ return Bits_To_FMode (FMode_To_Bits (Left) and not FMode_To_Bits (Right));
+ end "-";
+
+
+
+
------------------------
-- Functions From C --
------------------------
- -- Interthread Notify --
+ -- Command Line Arguments --
- procedure fl_static_add_awake_handler
- (H, F : in Storage.Integer_Address);
+ function fl_static_arg
+ (C : in Interfaces.C.int;
+ V : in Storage.Integer_Address;
+ I : in out Interfaces.C.int)
+ return Interfaces.C.int;
+ pragma Import (C, fl_static_arg, "fl_static_arg");
+ pragma Inline (fl_static_arg);
+
+ procedure fl_static_args
+ (C : in Interfaces.C.int;
+ V : in Storage.Integer_Address);
+ pragma Import (C, fl_static_args, "fl_static_args");
+ pragma Inline (fl_static_args);
+
+ function fl_static_args2
+ (C : in Interfaces.C.int;
+ V : in Storage.Integer_Address;
+ I : in out Interfaces.C.int;
+ H : in Storage.Integer_Address)
+ return Interfaces.C.int;
+ pragma Import (C, fl_static_args2, "fl_static_args2");
+ pragma Inline (fl_static_args2);
+
+
+
+
+ -- Thread Notify --
+
+ function fl_static_add_awake_handler
+ (H, F : in Storage.Integer_Address)
+ return Interfaces.C.int;
pragma Import (C, fl_static_add_awake_handler, "fl_static_add_awake_handler");
pragma Inline (fl_static_add_awake_handler);
- procedure fl_static_get_awake_handler
- (H, F : out Storage.Integer_Address);
+ function fl_static_get_awake_handler
+ (H, F : out Storage.Integer_Address)
+ return Interfaces.C.int;
pragma Import (C, fl_static_get_awake_handler, "fl_static_get_awake_handler");
pragma Inline (fl_static_get_awake_handler);
+ function fl_static_awake2
+ (H, F : in Storage.Integer_Address)
+ return Interfaces.C.int;
+ pragma Import (C, fl_static_awake2, "fl_static_awake2");
+ pragma Inline (fl_static_awake2);
+
+ procedure fl_static_awake
+ (M : in Storage.Integer_Address);
+ pragma Import (C, fl_static_awake, "fl_static_awake");
+ pragma Inline (fl_static_awake);
+
@@ -102,6 +176,11 @@ package body FLTK.Static is
pragma Import (C, fl_static_add_clipboard_notify, "fl_static_add_clipboard_notify");
pragma Inline (fl_static_add_clipboard_notify);
+ procedure fl_static_remove_clipboard_notify
+ (H : in Storage.Integer_Address);
+ pragma Import (C, fl_static_remove_clipboard_notify, "fl_static_remove_clipboard_notify");
+ pragma Inline (fl_static_remove_clipboard_notify);
+
@@ -155,12 +234,23 @@ package body FLTK.Static is
-- Custom Colors --
+ function fl_static_get_color2
+ (C : in Interfaces.C.unsigned)
+ return Interfaces.C.unsigned;
+ pragma Import (C, fl_static_get_color2, "fl_static_get_color2");
+ pragma Inline (fl_static_get_color2);
+
procedure fl_static_get_color
(C : in Interfaces.C.unsigned;
R, G, B : out Interfaces.C.unsigned_char);
pragma Import (C, fl_static_get_color, "fl_static_get_color");
pragma Inline (fl_static_get_color);
+ procedure fl_static_set_color2
+ (T, F : in Interfaces.C.unsigned);
+ pragma Import (C, fl_static_set_color2, "fl_static_set_color2");
+ pragma Inline (fl_static_set_color2);
+
procedure fl_static_set_color
(C : in Interfaces.C.unsigned;
R, G, B : in Interfaces.C.unsigned_char);
@@ -173,6 +263,17 @@ package body FLTK.Static is
pragma Import (C, fl_static_free_color, "fl_static_free_color");
pragma Inline (fl_static_free_color);
+ function fl_static_get_box_color
+ (T : in Interfaces.C.unsigned)
+ return Interfaces.C.unsigned;
+ pragma Import (C, fl_static_get_box_color, "fl_static_get_box_color");
+ pragma Inline (fl_static_get_box_color);
+
+ procedure fl_static_set_box_color
+ (T : in Interfaces.C.unsigned);
+ pragma Import (C, fl_static_set_box_color, "fl_static_set_box_color");
+ pragma Inline (fl_static_set_box_color);
+
procedure fl_static_foreground
(R, G, B : in Interfaces.C.unsigned_char);
pragma Import (C, fl_static_foreground, "fl_static_foreground");
@@ -210,6 +311,12 @@ package body FLTK.Static is
pragma Import (C, fl_static_set_font, "fl_static_set_font");
pragma Inline (fl_static_set_font);
+ procedure fl_static_set_font2
+ (T : in Interfaces.C.int;
+ S : in Interfaces.C.Strings.chars_ptr);
+ pragma Import (C, fl_static_set_font2, "fl_static_set_font2");
+ pragma Inline (fl_static_set_font2);
+
function fl_static_get_font_sizes
(F : in Interfaces.C.int;
A : out Storage.Integer_Address)
@@ -258,11 +365,24 @@ package body FLTK.Static is
pragma Import (C, fl_static_box_dy, "fl_static_box_dy");
pragma Inline (fl_static_box_dy);
+ function fl_static_get_boxtype
+ (T : in Interfaces.C.int)
+ return Storage.Integer_Address;
+ pragma Import (C, fl_static_get_boxtype, "fl_static_get_boxtype");
+ pragma Inline (fl_static_get_boxtype);
+
procedure fl_static_set_boxtype
(T, F : in Interfaces.C.int);
pragma Import (C, fl_static_set_boxtype, "fl_static_set_boxtype");
pragma Inline (fl_static_set_boxtype);
+ procedure fl_static_set_boxtype2
+ (T : in Interfaces.C.int;
+ F : in Storage.Integer_Address;
+ DX, DY, DW, DH : in Interfaces.C.unsigned_char);
+ pragma Import (C, fl_static_set_boxtype2, "fl_static_set_boxtype2");
+ pragma Inline (fl_static_set_boxtype2);
+
function fl_static_draw_box_active
return Interfaces.C.int;
pragma Import (C, fl_static_draw_box_active, "fl_static_draw_box_active");
@@ -271,6 +391,17 @@ package body FLTK.Static is
+ -- Label_Kind Attributes --
+
+ procedure fl_static_set_labeltype
+ (K : in Interfaces.C.int;
+ D, M : in Storage.Integer_Address);
+ pragma Import (C, fl_static_set_labeltype, "fl_static_set_labeltype");
+ pragma Inline (fl_static_set_labeltype);
+
+
+
+
-- Clipboard / Selection --
procedure fl_static_copy
@@ -292,11 +423,22 @@ package body FLTK.Static is
pragma Import (C, fl_static_selection, "fl_static_selection");
pragma Inline (fl_static_selection);
+ function fl_static_clipboard_contains
+ (K : in Interfaces.C.char_array)
+ return Interfaces.C.int;
+ pragma Import (C, fl_static_clipboard_contains, "fl_static_clipboard_contains");
+ pragma Inline (fl_static_clipboard_contains);
+
-- Dragon Drop --
+ function fl_static_dnd
+ return Interfaces.C.int;
+ pragma Import (C, fl_static_dnd, "fl_static_dnd");
+ pragma Inline (fl_static_dnd);
+
function fl_static_get_dnd_text_ops
return Interfaces.C.int;
pragma Import (C, fl_static_get_dnd_text_ops, "fl_static_get_dnd_text_ops");
@@ -313,7 +455,7 @@ package body FLTK.Static is
-- Windows --
procedure fl_static_default_atclose
- (W : in Storage.Integer_Address);
+ (W, U : in Storage.Integer_Address);
pragma Import (C, fl_static_default_atclose, "fl_static_default_atclose");
pragma Inline (fl_static_default_atclose);
@@ -422,6 +564,37 @@ package body FLTK.Static is
-- Callback Hooks --
----------------------
+ Current_Args_Handler : Args_Handler;
+
+ function Args_Hook
+ (C : in Interfaces.C.int;
+ V : in Storage.Integer_Address;
+ I : in out Interfaces.C.int)
+ return Interfaces.C.int;
+ pragma Convention (C, Args_Hook);
+
+ function Args_Hook
+ (C : in Interfaces.C.int;
+ V : in Storage.Integer_Address;
+ I : in out Interfaces.C.int)
+ return Interfaces.C.int
+ is
+ Result : Natural;
+ begin
+ pragma Assert (I < C and V /= Null_Pointer);
+ Result := Current_Args_Handler (Positive (I));
+ I := I + Interfaces.C.int (Result);
+ return Interfaces.C.int (Result);
+ exception
+ when Constraint_Error => raise Internal_FLTK_Error with
+ "Args_Handler callback was supplied unexpected int i value of " &
+ Interfaces.C.int'Image (I);
+ when Chk.Assertion_Error => raise Internal_FLTK_Error with
+ "Args_Handler callback was supplied irregular argc and argv values of " &
+ Interfaces.C.int'Image (C) & " and " & Storage.Integer_Address'Image (V);
+ end Args_Hook;
+
+
procedure Awake_Hook
(U : in Storage.Integer_Address);
pragma Convention (C, Awake_Hook);
@@ -429,7 +602,9 @@ package body FLTK.Static is
procedure Awake_Hook
(U : in Storage.Integer_Address) is
begin
- Conv.To_Awake_Access (U).all;
+ if U /= Null_Pointer then
+ Conv.To_Awake_Access (U).all;
+ end if;
end Awake_Hook;
@@ -446,7 +621,8 @@ package body FLTK.Static is
-- This is handled on the Ada side because otherwise there would be
-- no way to specify which callback to remove in FLTK once one was
- -- added. The hook is passed during package init.
+ -- added. This is because Fl::remove_clipboard_notify does not pay
+ -- attention to the void * data. This hook is passed during package init.
package Clipboard_Notify_Vectors is new Ada.Containers.Vectors
(Index_Type => Positive,
Element_Type => Clipboard_Notify_Handler);
@@ -462,9 +638,15 @@ package body FLTK.Static is
(S : in Interfaces.C.int;
U : in Storage.Integer_Address) is
begin
+ pragma Assert (S in
+ Buffer_Kind'Pos (Buffer_Kind'First) .. Buffer_Kind'Pos (Buffer_Kind'Last));
for Call of Current_Clip_Notes loop
Call.all (Buffer_Kind'Val (S));
end loop;
+ exception
+ when Chk.Assertion_Error => raise Internal_FLTK_Error with
+ "Clipboard_Notify_Hook was passed unexpected Buffer_Kind int value of " &
+ Interfaces.C.int'Image (S);
end Clipboard_Notify_Hook;
@@ -494,17 +676,99 @@ package body FLTK.Static is
+ -------------------
+ -- Destructors --
+ -------------------
+
+ procedure Finalize
+ (This : in out FLTK_Static_Final_Controller) is
+ begin
+ FLTK.Args_Marshal.Free_Argv (The_Argv);
+ for Override of Font_Overrides loop
+ Interfaces.C.Strings.Free (Override);
+ end loop;
+ fl_static_remove_clipboard_notify (Storage.To_Integer (Clipboard_Notify_Hook'Address));
+ end Finalize;
+
+
+
+
-----------------------
-- API Subprograms --
-----------------------
- -- Interthread Notify --
+ -- Command Line Arguments --
+
+ function Parse_Arg
+ (Index : in Positive)
+ return Natural
+ is
+ Count : Interfaces.C.int := Interfaces.C.int (Index);
+ begin
+ return Natural (fl_static_arg
+ (The_Argv'Length,
+ Storage.To_Integer (The_Argv (The_Argv'First)'Address),
+ Count));
+ end Parse_Arg;
+
+
+ procedure Parse_Args is
+ begin
+ fl_static_args (The_Argv'Length, Storage.To_Integer (The_Argv (The_Argv'First)'Address));
+ end Parse_Args;
+
+
+ procedure Parse_Args
+ (Count : out Natural;
+ Func : in Args_Handler := null)
+ is
+ My_Count : Interfaces.C.int := 1;
+ Result : Interfaces.C.int;
+ begin
+ Current_Args_Handler := Func;
+ Result := fl_static_args2
+ (The_Argv'Length,
+ Storage.To_Integer (The_Argv (The_Argv'First)'Address),
+ My_Count,
+ (if Func = null then Null_Pointer else Storage.To_Integer (Args_Hook'Address)));
+ Count := Integer (My_Count) - 1;
+ if Result = 0 then
+ raise Argument_Error with
+ "Fl::args could not recognise switch at argument number " &
+ Interfaces.C.int'Image (My_Count);
+ else
+ pragma Assert (Result > 0);
+ end if;
+ exception
+ when Constraint_Error => raise Internal_FLTK_Error with
+ "Fl::args produced unexpected i parameter of " & Interfaces.C.int'Image (My_Count);
+ when Chk.Assertion_Error => raise Internal_FLTK_Error with
+ "Fl::args returned unexpected int value of " & Interfaces.C.int'Image (Result);
+ end Parse_Args;
+
+
+
+
+ -- Thread Notify --
procedure Add_Awake_Handler
- (Func : in Awake_Handler) is
+ (Func : in Awake_Handler)
+ is
+ Result : constant Interfaces.C.int := fl_static_add_awake_handler
+ (Storage.To_Integer (Awake_Hook'Address),
+ Conv.To_Address (Func));
begin
- fl_static_add_awake_handler
- (Storage.To_Integer (Awake_Hook'Address), Conv.To_Address (Func));
+ pragma Assert (Result = 0);
+ exception
+ when Chk.Assertion_Error =>
+ if Result = -1 then
+ raise Tasking_Error with
+ "Fl::add_awake_handler_ failed to register Awake_Handler callback";
+ else
+ raise Internal_FLTK_Error with
+ "Fl::add_awake_handler_ returned unexpected int value of " &
+ Interfaces.C.int'Image (Result);
+ end if;
end Add_Awake_Handler;
@@ -512,40 +776,77 @@ package body FLTK.Static is
return Awake_Handler
is
Hook, Func : Storage.Integer_Address;
+ Result : constant Interfaces.C.int := fl_static_get_awake_handler (Hook, Func);
begin
- fl_static_get_awake_handler (Hook, Func);
+ pragma Assert (Result = 0);
return Conv.To_Awake_Access (Func);
+ exception
+ when Chk.Assertion_Error =>
+ if Result = -1 then
+ raise Tasking_Error with
+ "Fl::get_awake_handler_ invoked without prior awake setup";
+ else
+ raise Internal_FLTK_Error with
+ "Fl::get_awake_handler_ returned unexpected int value of " &
+ Interfaces.C.int'Image (Result);
+ end if;
end Get_Awake_Handler;
+ procedure Awake
+ (Func : in Awake_Handler)
+ is
+ Result : constant Interfaces.C.int := fl_static_awake2
+ (Storage.To_Integer (Awake_Hook'Address),
+ Conv.To_Address (Func));
+ begin
+ pragma Assert (Result = 0);
+ exception
+ when Chk.Assertion_Error =>
+ if Result = -1 then
+ raise Tasking_Error with "Fl::awake failed to register Awake_Handler callback";
+ else
+ raise Internal_FLTK_Error with "Fl::awake returned unexpected int value of " &
+ Interfaces.C.int'Image (Result);
+ end if;
+ end Awake;
+
+
+ procedure Awake is
+ begin
+ fl_static_awake (Null_Pointer);
+ end Awake;
+
+
-- Pre-Eventloop Callbacks --
procedure Add_Check
- (Func : in Timeout_Handler) is
+ (Func : in not null Timeout_Handler) is
begin
fl_static_add_check
- (Storage.To_Integer (Timeout_Hook'Address), Conv.To_Address (Func));
+ (Storage.To_Integer (Timeout_Hook'Address),
+ Conv.To_Address (Timeout_Handler'(Func)));
end Add_Check;
function Has_Check
- (Func : in Timeout_Handler)
+ (Func : in not null Timeout_Handler)
return Boolean is
begin
return fl_static_has_check
(Storage.To_Integer (Timeout_Hook'Address),
- Conv.To_Address (Func)) /= 0;
+ Conv.To_Address (Timeout_Handler'(Func))) /= 0;
end Has_Check;
procedure Remove_Check
- (Func : in Timeout_Handler) is
+ (Func : in not null Timeout_Handler) is
begin
fl_static_remove_check
(Storage.To_Integer (Timeout_Hook'Address),
- Conv.To_Address (Func));
+ Conv.To_Address (Timeout_Handler'(Func)));
end Remove_Check;
@@ -554,43 +855,43 @@ package body FLTK.Static is
-- Timer Callbacks --
procedure Add_Timeout
- (Seconds : in Long_Float;
- Func : in Timeout_Handler) is
+ (Seconds : in Long_Float;
+ Func : in not null Timeout_Handler) is
begin
fl_static_add_timeout
(Interfaces.C.double (Seconds),
Storage.To_Integer (Timeout_Hook'Address),
- Conv.To_Address (Func));
+ Conv.To_Address (Timeout_Handler'(Func)));
end Add_Timeout;
function Has_Timeout
- (Func : in Timeout_Handler)
+ (Func : in not null Timeout_Handler)
return Boolean is
begin
return fl_static_has_timeout
(Storage.To_Integer (Timeout_Hook'Address),
- Conv.To_Address (Func)) /= 0;
+ Conv.To_Address (Timeout_Handler'(Func))) /= 0;
end Has_Timeout;
procedure Remove_Timeout
- (Func : in Timeout_Handler) is
+ (Func : in not null Timeout_Handler) is
begin
fl_static_remove_timeout
(Storage.To_Integer (Timeout_Hook'Address),
- Conv.To_Address (Func));
+ Conv.To_Address (Timeout_Handler'(Func)));
end Remove_Timeout;
procedure Repeat_Timeout
- (Seconds : in Long_Float;
- Func : in Timeout_Handler) is
+ (Seconds : in Long_Float;
+ Func : in not null Timeout_Handler) is
begin
fl_static_repeat_timeout
(Interfaces.C.double (Seconds),
Storage.To_Integer (Timeout_Hook'Address),
- Conv.To_Address (Func));
+ Conv.To_Address (Timeout_Handler'(Func)));
end Repeat_Timeout;
@@ -599,16 +900,16 @@ package body FLTK.Static is
-- Clipboard Callbacks --
procedure Add_Clipboard_Notify
- (Func : in Clipboard_Notify_Handler) is
+ (Func : in not null Clipboard_Notify_Handler) is
begin
Current_Clip_Notes.Append (Func);
end Add_Clipboard_Notify;
procedure Remove_Clipboard_Notify
- (Func : in Clipboard_Notify_Handler) is
+ (Func : in not null Clipboard_Notify_Handler) is
begin
- for Index in Current_Clip_Notes.First_Index .. Current_Clip_Notes.Last_Index loop
+ for Index in reverse Current_Clip_Notes.First_Index .. Current_Clip_Notes.Last_Index loop
if Current_Clip_Notes (Index) = Func then
Current_Clip_Notes.Delete (Index);
return;
@@ -622,8 +923,8 @@ package body FLTK.Static is
-- File Descriptor Waiting Callbacks --
procedure Add_File_Descriptor
- (FD : in File_Descriptor;
- Func : in File_Handler) is
+ (FD : in File_Descriptor;
+ Func : in not null File_Handler) is
begin
fl_static_add_fd
(Interfaces.C.int (FD),
@@ -633,13 +934,13 @@ package body FLTK.Static is
procedure Add_File_Descriptor
- (FD : in File_Descriptor;
- Mode : in File_Mode;
- Func : in File_Handler) is
+ (FD : in File_Descriptor;
+ Mode : in File_Mode;
+ Func : in not null File_Handler) is
begin
fl_static_add_fd2
(Interfaces.C.int (FD),
- File_Mode_Codes (Mode),
+ FMode_To_Cint (Mode),
Storage.To_Integer (FD_Hook'Address),
Conv.To_Address (Func));
end Add_File_Descriptor;
@@ -656,7 +957,7 @@ package body FLTK.Static is
(FD : in File_Descriptor;
Mode : in File_Mode) is
begin
- fl_static_remove_fd2 (Interfaces.C.int (FD), File_Mode_Codes (Mode));
+ fl_static_remove_fd2 (Interfaces.C.int (FD), FMode_To_Cint (Mode));
end Remove_File_Descriptor;
@@ -665,30 +966,30 @@ package body FLTK.Static is
-- Idle Callbacks --
procedure Add_Idle
- (Func : in Idle_Handler) is
+ (Func : in not null Idle_Handler) is
begin
fl_static_add_idle
(Storage.To_Integer (Idle_Hook'Address),
- Conv.To_Address (Func));
+ Conv.To_Address (Idle_Handler'(Func)));
end Add_Idle;
function Has_Idle
- (Func : in Idle_Handler)
+ (Func : in not null Idle_Handler)
return Boolean is
begin
return fl_static_has_idle
(Storage.To_Integer (Idle_Hook'Address),
- Conv.To_Address (Func)) /= 0;
+ Conv.To_Address (Idle_Handler'(Func))) /= 0;
end Has_Idle;
procedure Remove_Idle
- (Func : in Idle_Handler) is
+ (Func : in not null Idle_Handler) is
begin
fl_static_remove_idle
(Storage.To_Integer (Idle_Hook'Address),
- Conv.To_Address (Func));
+ Conv.To_Address (Idle_Handler'(Func)));
end Remove_Idle;
@@ -696,6 +997,14 @@ package body FLTK.Static is
-- Custom Colors --
+ function Get_Color
+ (From : in Color)
+ return Color is
+ begin
+ return Color (fl_static_get_color2 (Interfaces.C.unsigned (From)));
+ end Get_Color;
+
+
procedure Get_Color
(From : in Color;
R, G, B : out Color_Component) is
@@ -709,11 +1018,20 @@ package body FLTK.Static is
procedure Set_Color
- (To : in Color;
+ (Target, Source : in Color) is
+ begin
+ fl_static_set_color2
+ (Interfaces.C.unsigned (Target),
+ Interfaces.C.unsigned (Source));
+ end Set_Color;
+
+
+ procedure Set_Color
+ (Target : in Color;
R, G, B : in Color_Component) is
begin
fl_static_set_color
- (Interfaces.C.unsigned (To),
+ (Interfaces.C.unsigned (Target),
Interfaces.C.unsigned_char (R),
Interfaces.C.unsigned_char (G),
Interfaces.C.unsigned_char (B));
@@ -730,6 +1048,21 @@ package body FLTK.Static is
end Free_Color;
+ function Get_Box_Color
+ (Tone : in Color)
+ return Color is
+ begin
+ return Color (fl_static_get_box_color (Interfaces.C.unsigned (Tone)));
+ end Get_Box_Color;
+
+
+ procedure Set_Box_Color
+ (Tone : in Color) is
+ begin
+ fl_static_set_box_color (Interfaces.C.unsigned (Tone));
+ end Set_Box_Color;
+
+
procedure Set_Foreground
(R, G, B : in Color_Component) is
begin
@@ -783,9 +1116,19 @@ package body FLTK.Static is
procedure Set_Font_Kind
- (To, From : in Font_Kind) is
+ (Target, Source : in Font_Kind) is
+ begin
+ fl_static_set_font (Font_Kind'Pos (Target), Font_Kind'Pos (Source));
+ end Set_Font_Kind;
+
+
+ procedure Set_Font_Kind
+ (Target : in Font_Kind;
+ Source : in String) is
begin
- fl_static_set_font (Font_Kind'Pos (To), Font_Kind'Pos (From));
+ Interfaces.C.Strings.Free (Font_Overrides (Target));
+ Font_Overrides (Target) := Interfaces.C.Strings.New_String (Source);
+ fl_static_set_font2 (Font_Kind'Pos (Target), Font_Overrides (Target));
end Set_Font_Kind;
@@ -806,9 +1149,15 @@ package body FLTK.Static is
procedure Setup_Fonts
- (How_Many_Set_Up : out Natural) is
+ (How_Many_Set_Up : out Natural)
+ is
+ Result : constant Interfaces.C.int := fl_static_set_fonts;
begin
- How_Many_Set_Up := Natural (fl_static_set_fonts);
+ How_Many_Set_Up := Natural (Result);
+ exception
+ when Constraint_Error => raise Internal_FLTK_Error with
+ "Fl::set_fonts returned unexpected int value of " &
+ Interfaces.C.int'Image (Result);
end Setup_Fonts;
@@ -862,22 +1211,53 @@ package body FLTK.Static is
end Draw_Box_Active;
- -- function Get_Box_Draw_Function
- -- (Kind : in Box_Kind)
- -- return Box_Draw_Function is
- -- begin
- -- return null;
- -- end Get_Box_Draw_Function;
+ function Get_Box_Draw_Function
+ (Kind : in Box_Kind)
+ return Box_Draw_Function is
+ begin
+ return FLTK.Box_Draw_Marshal.To_Ada (Kind, fl_static_get_boxtype (Box_Kind'Pos (Kind)));
+ end Get_Box_Draw_Function;
+
+
+ procedure Set_Box_Draw_Function
+ (Kind : in Box_Kind;
+ Func : in Box_Draw_Function;
+ Offset_X, Offset_Y : in Byte_Integer := 0;
+ Offset_W, Offset_H : in Byte_Integer := 0) is
+ begin
+ fl_static_set_boxtype2
+ (Box_Kind'Pos (Kind),
+ FLTK.Box_Draw_Marshal.To_C (Kind, Func),
+ Interfaces.C.unsigned_char (Offset_X),
+ Interfaces.C.unsigned_char (Offset_Y),
+ Interfaces.C.unsigned_char (Offset_W),
+ Interfaces.C.unsigned_char (Offset_H));
+ end Set_Box_Draw_Function;
- -- procedure Set_Box_Draw_Function
- -- (Kind : in Box_Kind;
- -- Func : in Box_Draw_Function;
- -- Offset_X, Offset_Y : in Integer := 0;
- -- Offset_W, Offset_H : in Integer := 0) is
- -- begin
- -- null;
- -- end Set_Box_Draw_Function;
+
+
+ -- Label_Kind Attributes --
+
+ procedure Set_Label_Kind
+ (Target, Source : in Label_Kind) is
+ begin
+ -- As of FLTK 1.3.11 there is no definition given for this function
+ -- so this is null to avoid linker errors.
+ null;
+ end Set_Label_Kind;
+
+
+ procedure Set_Label_Draw_Function
+ (Kind : in Label_Kind;
+ Draw_Func : in Label_Draw_Function;
+ Measure_Func : in Label_Measure_Function) is
+ begin
+ fl_static_set_labeltype
+ (Label_Kind'Pos (Kind),
+ FLTK.Label_Draw_Marshal.To_C (Kind, Draw_Func),
+ FLTK.Label_Draw_Marshal.To_C (Kind, Measure_Func));
+ end Set_Label_Draw_Function;
@@ -916,10 +1296,25 @@ package body FLTK.Static is
end Selection;
+ function Clipboard_Contains
+ (Kind : in String)
+ return Boolean is
+ begin
+ return fl_static_clipboard_contains (Interfaces.C.To_C (Kind)) /= 0;
+ end Clipboard_Contains;
+
+
-- Dragon Drop --
+ procedure Drag_Drop_Start is
+ Ignore : Interfaces.C.int := fl_static_dnd;
+ begin
+ null;
+ end Drag_Drop_Start;
+
+
function Get_Drag_Drop_Text_Support
return Boolean is
begin
@@ -941,7 +1336,13 @@ package body FLTK.Static is
procedure Default_Window_Close
(Item : in out FLTK.Widgets.Widget'Class) is
begin
- fl_static_default_atclose (Wrapper (Item).Void_Ptr);
+ pragma Assert (Wrapper (Item).Void_Ptr /= Null_Pointer);
+ fl_static_default_atclose
+ (Wrapper (Item).Void_Ptr,
+ fl_widget_get_user_data (Wrapper (Item).Void_Ptr));
+ exception
+ when Chk.Assertion_Error => raise Internal_FLTK_Error with
+ "Fl::default_atclose received uninitialised widget";
end Default_Window_Close;
@@ -1036,7 +1437,7 @@ package body FLTK.Static is
function Get_Scheme
return String
is
- Ptr : Interfaces.C.Strings.chars_ptr := fl_static_get_scheme;
+ Ptr : constant Interfaces.C.Strings.chars_ptr := fl_static_get_scheme;
begin
if Ptr = Interfaces.C.Strings.Null_Ptr then
return "";
@@ -1049,15 +1450,22 @@ package body FLTK.Static is
procedure Set_Scheme
(To : in String) is
begin
+ -- A copy of the Scheme string is stored in FLTK
fl_static_set_scheme (Interfaces.C.To_C (To));
end Set_Scheme;
function Is_Scheme
(Scheme : in String)
- return Boolean is
+ return Boolean
+ is
+ Result : constant Interfaces.C.int := fl_static_is_scheme (Interfaces.C.To_C (Scheme));
begin
- return fl_static_is_scheme (Interfaces.C.To_C (Scheme)) /= 0;
+ return Boolean'Val (Result);
+ exception
+ when Constraint_Error => raise Internal_FLTK_Error with
+ "Fl::is_scheme returned unexpected int value of " &
+ Interfaces.C.int'Image (Result);
end Is_Scheme;
@@ -1086,9 +1494,15 @@ package body FLTK.Static is
-- Scrollbars --
function Get_Default_Scrollbar_Size
- return Natural is
+ return Natural
+ is
+ Result : constant Interfaces.C.int := fl_static_get_scrollbar_size;
begin
- return Natural (fl_static_get_scrollbar_size);
+ return Natural (Result);
+ exception
+ when Constraint_Error => raise Internal_FLTK_Error with
+ "Fl::scrollbar_size returned unexpected int value of " &
+ Interfaces.C.int'Image (Result);
end Get_Default_Scrollbar_Size;
diff --git a/body/fltk-text_buffers.adb b/body/fltk-text_buffers.adb
index f113e22..a870ece 100644
--- a/body/fltk-text_buffers.adb
+++ b/body/fltk-text_buffers.adb
@@ -498,11 +498,11 @@ package body FLTK.Text_Buffers is
UD : in Storage.Integer_Address)
is
Action : Modification;
- Place : Position := Position (Pos);
+ Place : constant Position := Position (Pos);
Length : Natural;
Deleted_Text : Unbounded_String := To_Unbounded_String ("");
- Ada_Text_Buffer : access Text_Buffer :=
+ Ada_Text_Buffer : constant access Text_Buffer :=
Text_Buffer_Convert.To_Pointer (Storage.To_Address (UD));
begin
if Ada_Text_Buffer.CB_Active then
@@ -534,10 +534,10 @@ package body FLTK.Text_Buffers is
(Pos, Deleted : in Interfaces.C.int;
UD : in Storage.Integer_Address)
is
- Place : Position := Position (Pos);
- Length : Natural := Natural (Deleted);
+ Place : constant Position := Position (Pos);
+ Length : constant Natural := Natural (Deleted);
- Ada_Text_Buffer : access Text_Buffer :=
+ Ada_Text_Buffer : constant access Text_Buffer :=
Text_Buffer_Convert.To_Pointer (Storage.To_Address (UD));
begin
if Ada_Text_Buffer.CB_Active then
@@ -682,10 +682,10 @@ package body FLTK.Text_Buffers is
Name : in String;
Buffer : in Natural := 128 * 1024)
is
- Err_No : Interfaces.C.int := fl_text_buffer_loadfile
- (This.Void_Ptr,
- Interfaces.C.To_C (Name),
- Interfaces.C.int (Buffer));
+ Err_No : constant Interfaces.C.int := fl_text_buffer_loadfile
+ (This.Void_Ptr,
+ Interfaces.C.To_C (Name),
+ Interfaces.C.int (Buffer));
begin
if Err_No /= 0 then
raise Storage_Error with Interfaces.C.Strings.Value (strerror (Err_No));
@@ -698,7 +698,7 @@ package body FLTK.Text_Buffers is
Name : in String;
Buffer : in Natural := 128 * 1024)
is
- Err_No : Interfaces.C.int := fl_text_buffer_appendfile
+ Err_No : constant Interfaces.C.int := fl_text_buffer_appendfile
(This.Void_Ptr,
Interfaces.C.To_C (Name),
Interfaces.C.int (Buffer));
@@ -715,7 +715,7 @@ package body FLTK.Text_Buffers is
Place : in Position;
Buffer : in Natural := 128 * 1024)
is
- Err_No : Interfaces.C.int := fl_text_buffer_insertfile
+ Err_No : constant Interfaces.C.int := fl_text_buffer_insertfile
(This.Void_Ptr,
Interfaces.C.To_C (Name),
Interfaces.C.int (Place),
@@ -733,7 +733,7 @@ package body FLTK.Text_Buffers is
Start, Finish : in Position;
Buffer : in Natural := 128 * 1024)
is
- Err_No : Interfaces.C.int := fl_text_buffer_outputfile
+ Err_No : constant Interfaces.C.int := fl_text_buffer_outputfile
(This.Void_Ptr,
Interfaces.C.To_C (Name),
Interfaces.C.int (Start),
@@ -751,10 +751,10 @@ package body FLTK.Text_Buffers is
Name : in String;
Buffer : in Natural := 128 * 1024)
is
- Err_No : Interfaces.C.int := fl_text_buffer_savefile
- (This.Void_Ptr,
- Interfaces.C.To_C (Name),
- Interfaces.C.int (Buffer));
+ Err_No : constant Interfaces.C.int := fl_text_buffer_savefile
+ (This.Void_Ptr,
+ Interfaces.C.To_C (Name),
+ Interfaces.C.int (Buffer));
begin
if Err_No /= 0 then
raise Storage_Error with Interfaces.C.Strings.Value (strerror (Err_No));
@@ -772,9 +772,9 @@ package body FLTK.Text_Buffers is
Text : in String) is
begin
fl_text_buffer_insert
- (This.Void_Ptr,
- Interfaces.C.int (Place),
- Interfaces.C.To_C (Text));
+ (This.Void_Ptr,
+ Interfaces.C.int (Place),
+ Interfaces.C.To_C (Text));
end Insert_Text;
@@ -806,9 +806,9 @@ package body FLTK.Text_Buffers is
Start, Finish : in Position) is
begin
fl_text_buffer_remove
- (This.Void_Ptr,
- Interfaces.C.int (Start),
- Interfaces.C.int (Finish));
+ (This.Void_Ptr,
+ Interfaces.C.int (Start),
+ Interfaces.C.int (Finish));
end Remove_Text;
@@ -823,7 +823,7 @@ package body FLTK.Text_Buffers is
return "";
else
declare
- Ada_String : String := Interfaces.C.Strings.Value (Raw);
+ Ada_String : constant String := Interfaces.C.Strings.Value (Raw);
begin
Interfaces.C.Strings.Free (Raw);
return Ada_String;
@@ -856,8 +856,8 @@ package body FLTK.Text_Buffers is
return Character is
begin
return Character'Val (fl_text_buffer_char_at
- (This.Void_Ptr,
- Interfaces.C.int (Place)));
+ (This.Void_Ptr,
+ Interfaces.C.int (Place)));
end Character_At;
@@ -867,15 +867,15 @@ package body FLTK.Text_Buffers is
return String
is
C_Str : Interfaces.C.Strings.chars_ptr := fl_text_buffer_text_range
- (This.Void_Ptr,
- Interfaces.C.int (Start),
- Interfaces.C.int (Finish));
+ (This.Void_Ptr,
+ Interfaces.C.int (Start),
+ Interfaces.C.int (Finish));
begin
if C_Str = Interfaces.C.Strings.Null_Ptr then
return "";
else
declare
- The_Text : String := Interfaces.C.Strings.Value (C_Str);
+ The_Text : constant String := Interfaces.C.Strings.Value (C_Str);
begin
Interfaces.C.Strings.Free (C_Str);
return The_Text;
@@ -1001,9 +1001,9 @@ package body FLTK.Text_Buffers is
Start, Finish : in Position) is
begin
fl_text_buffer_select
- (This.Void_Ptr,
- Interfaces.C.int (Start),
- Interfaces.C.int (Finish));
+ (This.Void_Ptr,
+ Interfaces.C.int (Start),
+ Interfaces.C.int (Finish));
end Set_Selection;
@@ -1045,7 +1045,7 @@ package body FLTK.Text_Buffers is
return "";
else
declare
- Ada_String : String := Interfaces.C.Strings.Value (Raw);
+ Ada_String : constant String := Interfaces.C.Strings.Value (Raw);
begin
Interfaces.C.Strings.Free (Raw);
return Ada_String;
@@ -1065,7 +1065,7 @@ package body FLTK.Text_Buffers is
return "";
else
declare
- Ada_String : String := Interfaces.C.Strings.Value (Raw);
+ Ada_String : constant String := Interfaces.C.Strings.Value (Raw);
begin
Interfaces.C.Strings.Free (Raw);
return Ada_String;
@@ -1155,7 +1155,7 @@ package body FLTK.Text_Buffers is
return "";
else
declare
- Ada_String : String := Interfaces.C.Strings.Value (Raw);
+ Ada_String : constant String := Interfaces.C.Strings.Value (Raw);
begin
Interfaces.C.Strings.Free (Raw);
return Ada_String;
@@ -1324,7 +1324,7 @@ package body FLTK.Text_Buffers is
return "";
else
declare
- Ada_String : String := Interfaces.C.Strings.Value (Raw);
+ Ada_String : constant String := Interfaces.C.Strings.Value (Raw);
begin
Interfaces.C.Strings.Free (Raw);
return Ada_String;
diff --git a/body/fltk-widgets-boxes.adb b/body/fltk-widgets-boxes.adb
index 6bd11f4..efe6e54 100644
--- a/body/fltk-widgets-boxes.adb
+++ b/body/fltk-widgets-boxes.adb
@@ -86,6 +86,30 @@ package body FLTK.Widgets.Boxes is
-- Constructors --
--------------------
+ -- Hole successfully dug out of
+ procedure box_extra_init_hook
+ (Ada_Obj : in Storage.Integer_Address;
+ X, Y, W, H : in Interfaces.C.int;
+ C_Str : in Interfaces.C.Strings.chars_ptr);
+ pragma Export (C, box_extra_init_hook, "box_extra_init_hook");
+
+ procedure box_extra_init_hook
+ (Ada_Obj : in Storage.Integer_Address;
+ X, Y, W, H : in Interfaces.C.int;
+ C_Str : in Interfaces.C.Strings.chars_ptr)
+ is
+ My_Box : Box;
+ for My_Box'Address use Storage.To_Address (Ada_Obj);
+ pragma Import (Ada, My_Box);
+ begin
+ Extra_Init
+ (My_Box,
+ Integer (X), Integer (Y),
+ Integer (W), Integer (H),
+ Interfaces.C.Strings.Value (C_Str));
+ end box_extra_init_hook;
+
+
procedure Extra_Init
(This : in out Box;
X, Y, W, H : in Integer;
diff --git a/body/fltk-widgets-buttons-light-check.adb b/body/fltk-widgets-buttons-light-check.adb
index b75ef64..c3f1971 100644
--- a/body/fltk-widgets-buttons-light-check.adb
+++ b/body/fltk-widgets-buttons-light-check.adb
@@ -55,22 +55,6 @@ package body FLTK.Widgets.Buttons.Light.Check is
-- Destructors --
-------------------
- -- Round the world and home again, that's the sailor's way!
- procedure check_button_extra_final_hook
- (Ada_Obj : in Storage.Integer_Address);
- pragma Export (C, check_button_extra_final_hook, "check_button_extra_final_hook");
-
- procedure check_button_extra_final_hook
- (Ada_Obj : in Storage.Integer_Address)
- is
- My_Check_Button : Check_Button;
- for My_Check_Button'Address use Storage.To_Address (Ada_Obj);
- pragma Import (Ada, My_Check_Button);
- begin
- Extra_Final (My_Check_Button);
- end check_button_extra_final_hook;
-
-
procedure Extra_Final
(This : in out Check_Button) is
begin
diff --git a/body/fltk-widgets-buttons.adb b/body/fltk-widgets-buttons.adb
index bc78d8d..2d1e169 100644
--- a/body/fltk-widgets-buttons.adb
+++ b/body/fltk-widgets-buttons.adb
@@ -116,22 +116,6 @@ package body FLTK.Widgets.Buttons is
-- Destructors --
-------------------
- -- Clipper route successfully navigated
- procedure button_extra_final_hook
- (Ada_Obj : in Storage.Integer_Address);
- pragma Export (C, button_extra_final_hook, "button_extra_final_hook");
-
- procedure button_extra_final_hook
- (Ada_Obj : in Storage.Integer_Address)
- is
- My_Button : Button;
- for My_Button'Address use Storage.To_Address (Ada_Obj);
- pragma Import (Ada, My_Button);
- begin
- Extra_Final (My_Button);
- end button_extra_final_hook;
-
-
procedure Extra_Final
(This : in out Button) is
begin
diff --git a/body/fltk-widgets-clocks-updated-round.adb b/body/fltk-widgets-clocks-updated-round.adb
index 0b7590b..a91584e 100644
--- a/body/fltk-widgets-clocks-updated-round.adb
+++ b/body/fltk-widgets-clocks-updated-round.adb
@@ -7,7 +7,7 @@
with
FLTK.Widgets.Groups,
- Interfaces.C.Strings;
+ Interfaces.C;
package body FLTK.Widgets.Clocks.Updated.Round is
diff --git a/body/fltk-widgets-clocks-updated.adb b/body/fltk-widgets-clocks-updated.adb
index 035ffda..63337f1 100644
--- a/body/fltk-widgets-clocks-updated.adb
+++ b/body/fltk-widgets-clocks-updated.adb
@@ -6,8 +6,7 @@
with
- FLTK.Widgets.Groups,
- Interfaces.C.Strings;
+ FLTK.Widgets.Groups;
package body FLTK.Widgets.Clocks.Updated is
diff --git a/body/fltk-widgets-clocks.adb b/body/fltk-widgets-clocks.adb
index 0d78df0..dc2ee6d 100644
--- a/body/fltk-widgets-clocks.adb
+++ b/body/fltk-widgets-clocks.adb
@@ -6,8 +6,7 @@
with
- FLTK.Widgets.Groups,
- Interfaces.C.Strings;
+ FLTK.Widgets.Groups;
package body FLTK.Widgets.Clocks is
diff --git a/body/fltk-widgets-groups-browsers-check.adb b/body/fltk-widgets-groups-browsers-check.adb
index 9890cdf..c519f31 100644
--- a/body/fltk-widgets-groups-browsers-check.adb
+++ b/body/fltk-widgets-groups-browsers-check.adb
@@ -321,7 +321,7 @@ package body FLTK.Widgets.Groups.Browsers.Check is
Text : in String;
Checked : in Boolean := False)
is
- Code : Interfaces.C.int := fl_check_browser_add
+ Ignore : Interfaces.C.int := fl_check_browser_add
(This.Void_Ptr,
Interfaces.C.To_C (Text),
Boolean'Pos (Checked));
@@ -334,7 +334,7 @@ package body FLTK.Widgets.Groups.Browsers.Check is
(This : in out Check_Browser;
Index : in Positive)
is
- Code : Interfaces.C.int := fl_check_browser_remove
+ Ignore : Interfaces.C.int := fl_check_browser_remove
(This.Void_Ptr,
Interfaces.C.int (Index));
begin
diff --git a/body/fltk-widgets-groups-browsers-textline-file.adb b/body/fltk-widgets-groups-browsers-textline-file.adb
index b437bae..d22cfc1 100644
--- a/body/fltk-widgets-groups-browsers-textline-file.adb
+++ b/body/fltk-widgets-groups-browsers-textline-file.adb
@@ -266,7 +266,7 @@ package body FLTK.Widgets.Groups.Browsers.Textline.File is
(DA, DB : in Storage.Integer_Address)
return Interfaces.C.int
is
- Result : FLTK.Filenames.Comparison := Current_Sort
+ Result : constant FLTK.Filenames.Comparison := Current_Sort
(Interfaces.C.Strings.Value (filename_dname (DA, 0)),
Interfaces.C.Strings.Value (filename_dname (DB, 0)));
begin
@@ -411,7 +411,7 @@ package body FLTK.Widgets.Groups.Browsers.Textline.File is
Sort : in not null FLTK.Filenames.Compare_Function :=
FLTK.Filenames.Numeric_Sort'Access)
is
- Result : Natural := This.Load (Dir, Sort);
+ Ignore : constant Natural := This.Load (Dir, Sort);
begin
null;
end Load;
@@ -425,7 +425,7 @@ package body FLTK.Widgets.Groups.Browsers.Textline.File is
(This : in File_Browser)
return File_Kind
is
- Code : Interfaces.C.int := fl_file_browser_get_filetype (This.Void_Ptr);
+ Code : constant Interfaces.C.int := fl_file_browser_get_filetype (This.Void_Ptr);
begin
pragma Assert (Code in File_Kind'Pos (File_Kind'First) .. File_Kind'Pos (File_Kind'Last));
return File_Kind'Val (Code);
@@ -448,7 +448,8 @@ package body FLTK.Widgets.Groups.Browsers.Textline.File is
(This : in File_Browser)
return String
is
- Result : Interfaces.C.Strings.chars_ptr := fl_file_browser_get_filter (This.Void_Ptr);
+ Result : constant Interfaces.C.Strings.chars_ptr :=
+ fl_file_browser_get_filter (This.Void_Ptr);
begin
if Result = Interfaces.C.Strings.Null_Ptr then
return "";
diff --git a/body/fltk-widgets-groups-browsers-textline.adb b/body/fltk-widgets-groups-browsers-textline.adb
index c772a10..e75ea6f 100644
--- a/body/fltk-widgets-groups-browsers-textline.adb
+++ b/body/fltk-widgets-groups-browsers-textline.adb
@@ -8,7 +8,6 @@ with
Ada.Assertions,
Ada.Unchecked_Deallocation,
- FLTK.Images,
Interfaces.C.Strings;
use type
@@ -644,7 +643,8 @@ package body FLTK.Widgets.Groups.Browsers.Textline is
File : in String)
is
Msg : Interfaces.C.Strings.chars_ptr;
- Code : Interfaces.C.int := fl_browser_load (This.Void_Ptr, Interfaces.C.To_C (File));
+ Code : constant Interfaces.C.int :=
+ fl_browser_load (This.Void_Ptr, Interfaces.C.To_C (File));
begin
if Code = 0 then
Msg := get_error_message;
@@ -667,7 +667,7 @@ package body FLTK.Widgets.Groups.Browsers.Textline is
Line : in Positive)
return String
is
- Ptr : Interfaces.C.Strings.chars_ptr := fl_browser_get_text
+ Ptr : constant Interfaces.C.Strings.chars_ptr := fl_browser_get_text
(This.Void_Ptr,
Interfaces.C.int (Line));
begin
@@ -828,7 +828,7 @@ package body FLTK.Widgets.Groups.Browsers.Textline is
State : in Boolean := True)
return Boolean
is
- Code : Interfaces.C.int := fl_browser_select
+ Code : constant Interfaces.C.int := fl_browser_select
(This.Void_Ptr,
Interfaces.C.int (Line),
Boolean'Pos (State));
@@ -846,7 +846,7 @@ package body FLTK.Widgets.Groups.Browsers.Textline is
Line : in Positive;
State : in Boolean := True)
is
- Code : Interfaces.C.int := fl_browser_select
+ Code : constant Interfaces.C.int := fl_browser_select
(This.Void_Ptr,
Interfaces.C.int (Line),
Boolean'Pos (State));
@@ -863,7 +863,7 @@ package body FLTK.Widgets.Groups.Browsers.Textline is
Line : in Positive)
return Boolean
is
- Code : Interfaces.C.int := fl_browser_selected
+ Code : constant Interfaces.C.int := fl_browser_selected
(This.Void_Ptr,
Interfaces.C.int (Line));
begin
@@ -909,7 +909,7 @@ package body FLTK.Widgets.Groups.Browsers.Textline is
Line : in Positive)
return Boolean
is
- Code : Interfaces.C.int := fl_browser_displayed
+ Code : constant Interfaces.C.int := fl_browser_displayed
(This.Void_Ptr,
Interfaces.C.int (Line));
begin
@@ -1174,7 +1174,8 @@ package body FLTK.Widgets.Groups.Browsers.Textline is
return Interfaces.C.int;
for my_item_selected'Address use This.Item_Override_Ptrs (Item_Selected_Ptr);
pragma Import (Ada, my_item_selected);
- Code : Interfaces.C.int := my_item_selected (This.Void_Ptr, Cursor_To_Address (Item));
+ Code : constant Interfaces.C.int :=
+ my_item_selected (This.Void_Ptr, Cursor_To_Address (Item));
begin
pragma Assert (Code in 0 .. 1);
return Boolean'Val (Code);
diff --git a/body/fltk-widgets-groups-browsers.adb b/body/fltk-widgets-groups-browsers.adb
index d60ecca..13cdba7 100644
--- a/body/fltk-widgets-groups-browsers.adb
+++ b/body/fltk-widgets-groups-browsers.adb
@@ -7,7 +7,7 @@
with
Ada.Assertions,
- Interfaces.C.Strings,
+ Interfaces.C,
System.Address_To_Access_Conversions;
@@ -366,7 +366,7 @@ package body FLTK.Widgets.Groups.Browsers is
(Ada_Addr : in Storage.Integer_Address)
return Interfaces.C.int
is
- Ada_Object : access Browser'Class :=
+ Ada_Object : constant access Browser'Class :=
Browser_Convert.To_Pointer (Storage.To_Address (Ada_Addr));
begin
return Interfaces.C.int (Ada_Object.Full_List_Width);
@@ -382,7 +382,7 @@ package body FLTK.Widgets.Groups.Browsers is
(Ada_Addr : in Storage.Integer_Address)
return Interfaces.C.int
is
- Ada_Object : access Browser'Class :=
+ Ada_Object : constant access Browser'Class :=
Browser_Convert.To_Pointer (Storage.To_Address (Ada_Addr));
begin
return Interfaces.C.int (Ada_Object.Full_List_Height);
@@ -398,7 +398,7 @@ package body FLTK.Widgets.Groups.Browsers is
(Ada_Addr : in Storage.Integer_Address)
return Interfaces.C.int
is
- Ada_Object : access Browser'Class :=
+ Ada_Object : constant access Browser'Class :=
Browser_Convert.To_Pointer (Storage.To_Address (Ada_Addr));
begin
return Interfaces.C.int (Ada_Object.Average_Item_Height);
@@ -414,7 +414,7 @@ package body FLTK.Widgets.Groups.Browsers is
(Ada_Addr, Item_Ptr : in Storage.Integer_Address)
return Interfaces.C.int
is
- Ada_Object : access Browser'Class :=
+ Ada_Object : constant access Browser'Class :=
Browser_Convert.To_Pointer (Storage.To_Address (Ada_Addr));
begin
return Interfaces.C.int (Ada_Object.Item_Quick_Height (Address_To_Cursor (Item_Ptr)));
@@ -430,7 +430,7 @@ package body FLTK.Widgets.Groups.Browsers is
(Ada_Addr, Item_Ptr : in Storage.Integer_Address)
return Interfaces.C.int
is
- Ada_Object : access Browser'Class :=
+ Ada_Object : constant access Browser'Class :=
Browser_Convert.To_Pointer (Storage.To_Address (Ada_Addr));
begin
return Interfaces.C.int (Ada_Object.Item_Width (Address_To_Cursor (Item_Ptr)));
@@ -446,7 +446,7 @@ package body FLTK.Widgets.Groups.Browsers is
(Ada_Addr, Item_Ptr : in Storage.Integer_Address)
return Interfaces.C.int
is
- Ada_Object : access Browser'Class :=
+ Ada_Object : constant access Browser'Class :=
Browser_Convert.To_Pointer (Storage.To_Address (Ada_Addr));
begin
return Interfaces.C.int (Ada_Object.Item_Height (Address_To_Cursor (Item_Ptr)));
@@ -462,7 +462,7 @@ package body FLTK.Widgets.Groups.Browsers is
(Ada_Addr : in Storage.Integer_Address)
return Storage.Integer_Address
is
- Ada_Object : access Browser'Class :=
+ Ada_Object : constant access Browser'Class :=
Browser_Convert.To_Pointer (Storage.To_Address (Ada_Addr));
begin
return Cursor_To_Address (Ada_Object.Item_First);
@@ -478,7 +478,7 @@ package body FLTK.Widgets.Groups.Browsers is
(Ada_Addr : in Storage.Integer_Address)
return Storage.Integer_Address
is
- Ada_Object : access Browser'Class :=
+ Ada_Object : constant access Browser'Class :=
Browser_Convert.To_Pointer (Storage.To_Address (Ada_Addr));
begin
return Cursor_To_Address (Ada_Object.Item_Last);
@@ -494,7 +494,7 @@ package body FLTK.Widgets.Groups.Browsers is
(Ada_Addr, Item_Ptr : in Storage.Integer_Address)
return Storage.Integer_Address
is
- Ada_Object : access Browser'Class :=
+ Ada_Object : constant access Browser'Class :=
Browser_Convert.To_Pointer (Storage.To_Address (Ada_Addr));
begin
return Cursor_To_Address (Ada_Object.Item_Next (Address_To_Cursor (Item_Ptr)));
@@ -510,7 +510,7 @@ package body FLTK.Widgets.Groups.Browsers is
(Ada_Addr, Item_Ptr : in Storage.Integer_Address)
return Storage.Integer_Address
is
- Ada_Object : access Browser'Class :=
+ Ada_Object : constant access Browser'Class :=
Browser_Convert.To_Pointer (Storage.To_Address (Ada_Addr));
begin
return Cursor_To_Address (Ada_Object.Item_Previous (Address_To_Cursor (Item_Ptr)));
@@ -528,7 +528,7 @@ package body FLTK.Widgets.Groups.Browsers is
Index : in Interfaces.C.int)
return Storage.Integer_Address
is
- Ada_Object : access Browser'Class :=
+ Ada_Object : constant access Browser'Class :=
Browser_Convert.To_Pointer (Storage.To_Address (Ada_Addr));
use type Interfaces.C.int;
begin
@@ -545,7 +545,7 @@ package body FLTK.Widgets.Groups.Browsers is
(Ada_Addr, Item_Ptr : in Storage.Integer_Address;
Int_State : in Interfaces.C.int)
is
- Ada_Object : access Browser'Class :=
+ Ada_Object : constant access Browser'Class :=
Browser_Convert.To_Pointer (Storage.To_Address (Ada_Addr));
use type Interfaces.C.int;
begin
@@ -564,7 +564,7 @@ package body FLTK.Widgets.Groups.Browsers is
(Ada_Addr, Item_Ptr : in Storage.Integer_Address)
return Interfaces.C.int
is
- Ada_Object : access Browser'Class :=
+ Ada_Object : constant access Browser'Class :=
Browser_Convert.To_Pointer (Storage.To_Address (Ada_Addr));
begin
return Boolean'Pos (Ada_Object.Item_Selected (Address_To_Cursor (Item_Ptr)));
@@ -578,7 +578,7 @@ package body FLTK.Widgets.Groups.Browsers is
procedure Item_Swap_Hook
(Ada_Addr, A_Ptr, B_Ptr : in Storage.Integer_Address)
is
- Ada_Object : access Browser'Class :=
+ Ada_Object : constant access Browser'Class :=
Browser_Convert.To_Pointer (Storage.To_Address (Ada_Addr));
begin
Ada_Object.Item_Swap (Address_To_Cursor (A_Ptr), Address_To_Cursor (B_Ptr));
@@ -606,13 +606,13 @@ package body FLTK.Widgets.Groups.Browsers is
(Ada_Addr, Item_Ptr : in Storage.Integer_Address)
return Interfaces.C.Strings.chars_ptr
is
- Ada_Object : access Browser'Class :=
+ Ada_Object : constant access Browser'Class :=
Browser_Convert.To_Pointer (Storage.To_Address (Ada_Addr));
begin
Interfaces.C.Strings.Free (Ada_Object.Text_Store (Ada_Object.Current));
Ada_Object.Text_Store (Ada_Object.Current) := Interfaces.C.Strings.New_String
(Ada_Object.Item_Text (Address_To_Cursor (Item_Ptr)));
- return C_Char_Is_Not_A_String : Interfaces.C.Strings.chars_ptr :=
+ return C_Char_Is_Not_A_String : constant Interfaces.C.Strings.chars_ptr :=
Ada_Object.Text_Store (Ada_Object.Current)
do
Ada_Object.Current := Ada_Object.Current + 1;
@@ -632,7 +632,7 @@ package body FLTK.Widgets.Groups.Browsers is
(Ada_Addr, Item_Ptr : in Storage.Integer_Address;
X, Y, W, H : in Interfaces.C.int)
is
- Ada_Object : access Browser'Class :=
+ Ada_Object : constant access Browser'Class :=
Browser_Convert.To_Pointer (Storage.To_Address (Ada_Addr));
begin
Ada_Object.Item_Draw
@@ -650,18 +650,9 @@ package body FLTK.Widgets.Groups.Browsers is
-- Destructors --
-------------------
- -- Preparing to use morse code
- procedure fl_scrollbar_extra_final
- (Ada_Obj : in Storage.Integer_Address);
- pragma Import (C, fl_scrollbar_extra_final, "fl_scrollbar_extra_final");
- pragma Inline (fl_scrollbar_extra_final);
-
-
procedure Extra_Final
(This : in out Browser) is
begin
- fl_scrollbar_extra_final (Storage.To_Integer (This.Horizon'Address));
- fl_scrollbar_extra_final (Storage.To_Integer (This.Vertigo'Address));
Extra_Final (Group (This));
for Index in This.Text_Store'Range loop
Interfaces.C.Strings.Free (This.Text_Store (Index));
@@ -803,7 +794,7 @@ package body FLTK.Widgets.Groups.Browsers is
Do_Callbacks : in Boolean := False)
return Boolean
is
- Code : Interfaces.C.int := fl_abstract_browser_select
+ Code : constant Interfaces.C.int := fl_abstract_browser_select
(This.Void_Ptr,
Cursor_To_Address (Item),
Boolean'Pos (State),
@@ -823,7 +814,7 @@ package body FLTK.Widgets.Groups.Browsers is
State : in Boolean := True;
Do_Callbacks : in Boolean := False)
is
- Code : Interfaces.C.int := fl_abstract_browser_select
+ Code : constant Interfaces.C.int := fl_abstract_browser_select
(This.Void_Ptr,
Cursor_To_Address (Item),
Boolean'Pos (State),
@@ -842,7 +833,7 @@ package body FLTK.Widgets.Groups.Browsers is
Do_Callbacks : in Boolean := False)
return Boolean
is
- Code : Interfaces.C.int := fl_abstract_browser_select_only
+ Code : constant Interfaces.C.int := fl_abstract_browser_select_only
(This.Void_Ptr,
Cursor_To_Address (Item),
Boolean'Pos (Do_Callbacks));
@@ -861,7 +852,7 @@ package body FLTK.Widgets.Groups.Browsers is
Item : in Item_Cursor;
Do_Callbacks : in Boolean := False)
is
- Code : Interfaces.C.int := fl_abstract_browser_select_only
+ Code : constant Interfaces.C.int := fl_abstract_browser_select_only
(This.Void_Ptr,
Cursor_To_Address (Item),
Boolean'Pos (Do_Callbacks));
@@ -887,7 +878,7 @@ package body FLTK.Widgets.Groups.Browsers is
Do_Callbacks : in Boolean := False)
return Boolean
is
- Code : Interfaces.C.int := fl_abstract_browser_deselect
+ Code : constant Interfaces.C.int := fl_abstract_browser_deselect
(This.Void_Ptr,
Boolean'Pos (Do_Callbacks));
begin
@@ -904,7 +895,7 @@ package body FLTK.Widgets.Groups.Browsers is
(This : in out Browser;
Do_Callbacks : in Boolean := False)
is
- Code : Interfaces.C.int := fl_abstract_browser_deselect
+ Code : constant Interfaces.C.int := fl_abstract_browser_deselect
(This.Void_Ptr,
Boolean'Pos (Do_Callbacks));
begin
@@ -929,7 +920,7 @@ package body FLTK.Widgets.Groups.Browsers is
Item : in Item_Cursor)
return Boolean
is
- Code : Interfaces.C.int := fl_abstract_browser_displayed
+ Code : constant Interfaces.C.int := fl_abstract_browser_displayed
(This.Void_Ptr, Cursor_To_Address (Item));
begin
pragma Assert (Code in 0 .. 1);
@@ -964,7 +955,7 @@ package body FLTK.Widgets.Groups.Browsers is
(This : in out Browser;
Order : in Sort_Order)
is
- Code : Interfaces.C.int :=
+ Code : constant Interfaces.C.int :=
(case Order is
when Ascending => fl_sort_ascending,
when Descending => fl_sort_descending);
diff --git a/body/fltk-widgets-groups-color_choosers.adb b/body/fltk-widgets-groups-color_choosers.adb
index 15c7000..cce0f08 100644
--- a/body/fltk-widgets-groups-color_choosers.adb
+++ b/body/fltk-widgets-groups-color_choosers.adb
@@ -268,7 +268,7 @@ package body FLTK.Widgets.Groups.Color_Choosers is
(This : in out Color_Chooser;
R, G, B : in Long_Float)
is
- Result : Interfaces.C.int := fl_color_chooser_rgb
+ Result : constant Interfaces.C.int := fl_color_chooser_rgb
(This.Void_Ptr,
Interfaces.C.double (R),
Interfaces.C.double (G),
@@ -287,7 +287,7 @@ package body FLTK.Widgets.Groups.Color_Choosers is
R, G, B : in Long_Float)
return Boolean
is
- Result : Interfaces.C.int := fl_color_chooser_rgb
+ Result : constant Interfaces.C.int := fl_color_chooser_rgb
(This.Void_Ptr,
Interfaces.C.double (R),
Interfaces.C.double (G),
@@ -333,7 +333,7 @@ package body FLTK.Widgets.Groups.Color_Choosers is
(This : in out Color_Chooser;
H, S, V : in Long_Float)
is
- Result : Interfaces.C.int := fl_color_chooser_hsv
+ Result : constant Interfaces.C.int := fl_color_chooser_hsv
(This.Void_Ptr,
Interfaces.C.double (H),
Interfaces.C.double (S),
@@ -352,7 +352,7 @@ package body FLTK.Widgets.Groups.Color_Choosers is
H, S, V : in Long_Float)
return Boolean
is
- Result : Interfaces.C.int := fl_color_chooser_hsv
+ Result : constant Interfaces.C.int := fl_color_chooser_hsv
(This.Void_Ptr,
Interfaces.C.double (H),
Interfaces.C.double (S),
diff --git a/body/fltk-widgets-groups-help_views.adb b/body/fltk-widgets-groups-help_views.adb
index cdc0046..d31e532 100644
--- a/body/fltk-widgets-groups-help_views.adb
+++ b/body/fltk-widgets-groups-help_views.adb
@@ -7,7 +7,7 @@
with
Ada.Assertions,
- Interfaces.C.Strings,
+ Interfaces.C,
System.Address_To_Access_Conversions;
use type
@@ -255,7 +255,7 @@ package body FLTK.Widgets.Groups.Help_Views is
S : in Interfaces.C.Strings.chars_ptr)
return Interfaces.C.Strings.chars_ptr
is
- User_Data : Storage.Integer_Address := fl_widget_get_user_data (V);
+ User_Data : constant Storage.Integer_Address := fl_widget_get_user_data (V);
Ada_Help_View : access Help_View'Class;
begin
pragma Assert (User_Data /= Null_Pointer);
@@ -463,7 +463,8 @@ package body FLTK.Widgets.Groups.Help_Views is
(This : in out Help_View;
Name : in String)
is
- Code : Interfaces.C.int := fl_help_view_load (This.Void_Ptr, Interfaces.C.To_C (Name));
+ Code : constant Interfaces.C.int :=
+ fl_help_view_load (This.Void_Ptr, Interfaces.C.To_C (Name));
begin
if Code = -1 then
raise Load_Help_Error;
@@ -481,7 +482,7 @@ package body FLTK.Widgets.Groups.Help_Views is
(This : in Help_View)
return String
is
- Raw_Chars : Interfaces.C.Strings.chars_ptr := fl_help_view_title (This.Void_Ptr);
+ Raw_Chars : constant Interfaces.C.Strings.chars_ptr := fl_help_view_title (This.Void_Ptr);
use type Interfaces.C.Strings.chars_ptr;
begin
if Raw_Chars = Interfaces.C.Strings.Null_Ptr then
@@ -496,7 +497,8 @@ package body FLTK.Widgets.Groups.Help_Views is
(This : in Help_View)
return String
is
- Raw_Chars : Interfaces.C.Strings.chars_ptr := fl_help_view_get_value (This.Void_Ptr);
+ Raw_Chars : constant Interfaces.C.Strings.chars_ptr :=
+ fl_help_view_get_value (This.Void_Ptr);
use type Interfaces.C.Strings.chars_ptr;
begin
if Raw_Chars = Interfaces.C.Strings.Null_Ptr then
diff --git a/body/fltk-widgets-groups-input_choices.adb b/body/fltk-widgets-groups-input_choices.adb
index 0479920..9119768 100644
--- a/body/fltk-widgets-groups-input_choices.adb
+++ b/body/fltk-widgets-groups-input_choices.adb
@@ -184,25 +184,9 @@ package body FLTK.Widgets.Groups.Input_Choices is
-- Destructors --
-------------------
- -- Resorting to smoke signals
- procedure fl_text_input_extra_final
- (Ada_Obj : in Storage.Integer_Address);
- pragma Import (C, fl_text_input_extra_final, "fl_text_input_extra_final");
- pragma Inline (fl_text_input_extra_final);
-
-
- -- Message in a bottle
- procedure fl_menu_button_extra_final
- (Ada_Obj : in Storage.Integer_Address);
- pragma Import (C, fl_menu_button_extra_final, "fl_menu_button_extra_final");
- pragma Inline (fl_menu_button_extra_final);
-
-
procedure Extra_Final
(This : in out Input_Choice) is
begin
- fl_text_input_extra_final (Storage.To_Integer (This.My_Input'Address));
- fl_menu_button_extra_final (Storage.To_Integer (This.My_Menu_Button'Address));
Extra_Final (Group (This));
end Extra_Final;
@@ -468,7 +452,7 @@ package body FLTK.Widgets.Groups.Input_Choices is
(This : in Input_Choice)
return String
is
- Ptr : Interfaces.C.Strings.chars_ptr := fl_input_choice_get_value (This.Void_Ptr);
+ Ptr : constant Interfaces.C.Strings.chars_ptr := fl_input_choice_get_value (This.Void_Ptr);
begin
if Ptr = Interfaces.C.Strings.Null_Ptr then
return "";
diff --git a/body/fltk-widgets-groups-packed.adb b/body/fltk-widgets-groups-packed.adb
index c5edda9..d832a35 100644
--- a/body/fltk-widgets-groups-packed.adb
+++ b/body/fltk-widgets-groups-packed.adb
@@ -173,7 +173,7 @@ package body FLTK.Widgets.Groups.Packed is
(This : in Packed_Group)
return Pack_Kind
is
- Result : Interfaces.C.unsigned_char := fl_widget_get_type (This.Void_Ptr);
+ Result : constant Interfaces.C.unsigned_char := fl_widget_get_type (This.Void_Ptr);
begin
return Pack_Kind'Val (Result);
exception
diff --git a/body/fltk-widgets-groups-scrolls.adb b/body/fltk-widgets-groups-scrolls.adb
index a75d677..65498a6 100644
--- a/body/fltk-widgets-groups-scrolls.adb
+++ b/body/fltk-widgets-groups-scrolls.adb
@@ -153,34 +153,9 @@ package body FLTK.Widgets.Groups.Scrolls is
-- Destructors --
-------------------
- -- I used the FFI to bypass namespace rules and all I got was this lousy tshirt
- procedure scroll_extra_final_hook
- (Ada_Obj : in Storage.Integer_Address);
- pragma Export (C, scroll_extra_final_hook, "scroll_extra_final_hook");
-
- procedure scroll_extra_final_hook
- (Ada_Obj : in Storage.Integer_Address)
- is
- My_Scroll : Scroll;
- for My_Scroll'Address use Storage.To_Address (Ada_Obj);
- pragma Import (Ada, My_Scroll);
- begin
- Extra_Final (My_Scroll);
- end scroll_extra_final_hook;
-
-
- -- It's the only way to be sure
- procedure fl_scrollbar_extra_final
- (Ada_Obj : in Storage.Integer_Address);
- pragma Import (C, fl_scrollbar_extra_final, "fl_scrollbar_extra_final");
- pragma Inline (fl_scrollbar_extra_final);
-
-
procedure Extra_Final
(This : in out Scroll) is
begin
- fl_scrollbar_extra_final (Storage.To_Integer (This.Horizon'Address));
- fl_scrollbar_extra_final (Storage.To_Integer (This.Vertigo'Address));
Extra_Final (Group (This));
end Extra_Final;
@@ -397,7 +372,7 @@ package body FLTK.Widgets.Groups.Scrolls is
(This : in Scroll)
return Scroll_Kind
is
- Result : Interfaces.C.unsigned_char := fl_widget_get_type (This.Void_Ptr);
+ Result : constant Interfaces.C.unsigned_char := fl_widget_get_type (This.Void_Ptr);
begin
return Scroll_Kind'Val (Result - 1);
exception
diff --git a/body/fltk-widgets-groups-spinners.adb b/body/fltk-widgets-groups-spinners.adb
index 255daec..d9501ee 100644
--- a/body/fltk-widgets-groups-spinners.adb
+++ b/body/fltk-widgets-groups-spinners.adb
@@ -481,7 +481,7 @@ package body FLTK.Widgets.Groups.Spinners is
(This : in Spinner)
return String
is
- Result : Interfaces.C.Strings.chars_ptr := fl_spinner_get_format (This.Void_Ptr);
+ Result : constant Interfaces.C.Strings.chars_ptr := fl_spinner_get_format (This.Void_Ptr);
begin
if Result = Interfaces.C.Strings.Null_Ptr then
return "";
@@ -505,7 +505,7 @@ package body FLTK.Widgets.Groups.Spinners is
(This : in Spinner)
return Spinner_Kind
is
- Result : Interfaces.C.unsigned_char := fl_spinner_get_type (This.Void_Ptr);
+ Result : constant Interfaces.C.unsigned_char := fl_spinner_get_type (This.Void_Ptr);
begin
return Spinner_Kind'Val (Result - 1);
exception
diff --git a/body/fltk-widgets-groups-tables-row.adb b/body/fltk-widgets-groups-tables-row.adb
index 5848cb9..0a7250a 100644
--- a/body/fltk-widgets-groups-tables-row.adb
+++ b/body/fltk-widgets-groups-tables-row.adb
@@ -232,7 +232,7 @@ package body FLTK.Widgets.Groups.Tables.Row is
(This : in Row_Table)
return Natural
is
- Result : Interfaces.C.int := fl_table_row_get_rows (This.Void_Ptr);
+ Result : constant Interfaces.C.int := fl_table_row_get_rows (This.Void_Ptr);
begin
return Natural (Result);
exception
@@ -259,7 +259,7 @@ package body FLTK.Widgets.Groups.Tables.Row is
Row : in Positive)
return Boolean
is
- Result : Interfaces.C.int := fl_table_row_row_selected
+ Result : constant Interfaces.C.int := fl_table_row_row_selected
(This.Void_Ptr, Interfaces.C.int (Row) - 1);
begin
return Boolean'Val (Result);
@@ -275,7 +275,7 @@ package body FLTK.Widgets.Groups.Tables.Row is
Row : in Positive;
Value : in Selection_State := Selected)
is
- Result : Interfaces.C.int := fl_table_row_select_row
+ Result : constant Interfaces.C.int := fl_table_row_select_row
(This.Void_Ptr,
Interfaces.C.int (Row) - 1,
Selection_State'Pos (Value));
@@ -298,7 +298,7 @@ package body FLTK.Widgets.Groups.Tables.Row is
Value : in Selection_State := Selected)
return Boolean
is
- Result : Interfaces.C.int := fl_table_row_select_row
+ Result : constant Interfaces.C.int := fl_table_row_select_row
(This.Void_Ptr,
Interfaces.C.int (Row) - 1,
Selection_State'Pos (Value));
@@ -327,7 +327,7 @@ package body FLTK.Widgets.Groups.Tables.Row is
(This : in Row_Table)
return Row_Select_Mode
is
- Result : Interfaces.C.int := fl_table_row_get_type (This.Void_Ptr);
+ Result : constant Interfaces.C.int := fl_table_row_get_type (This.Void_Ptr);
begin
return Row_Select_Mode'Val (Result);
exception
@@ -355,7 +355,7 @@ package body FLTK.Widgets.Groups.Tables.Row is
Row, Column : in Positive;
X, Y, W, H : out Integer)
is
- Result : Interfaces.C.int := fl_table_row_find_cell
+ Result : constant Interfaces.C.int := fl_table_row_find_cell
(This.Void_Ptr,
To_Cint (Context),
Interfaces.C.int (Row) - 1,
diff --git a/body/fltk-widgets-groups-tables.adb b/body/fltk-widgets-groups-tables.adb
index 74ed22d..8417cd6 100644
--- a/body/fltk-widgets-groups-tables.adb
+++ b/body/fltk-widgets-groups-tables.adb
@@ -743,26 +743,9 @@ package body FLTK.Widgets.Groups.Tables is
-- Destructors --
-------------------
- -- Attempting to divide by zero
- procedure fl_scrollbar_extra_final
- (Ada_Obj : in Storage.Integer_Address);
- pragma Import (C, fl_scrollbar_extra_final, "fl_scrollbar_extra_final");
- pragma Inline (fl_scrollbar_extra_final);
-
-
- -- Close the door; Open the nExt
- procedure fl_scroll_extra_final
- (Ada_Obj : in Storage.Integer_Address);
- pragma Import (C, fl_scroll_extra_final, "fl_scroll_extra_final");
- pragma Inline (fl_scroll_extra_final);
-
-
procedure Extra_Final
(This : in out Table) is
begin
- fl_scrollbar_extra_final (Storage.To_Integer (This.Horizon'Address));
- fl_scrollbar_extra_final (Storage.To_Integer (This.Vertigo'Address));
- fl_scroll_extra_final (Storage.To_Integer (This.Playing_Area'Address));
Extra_Final (Group (This));
end Extra_Final;
@@ -1024,7 +1007,7 @@ package body FLTK.Widgets.Groups.Tables is
Item : in Widget'Class)
return Extended_Index
is
- Result : Interfaces.C.int := fl_table_find (This.Void_Ptr, Item.Void_Ptr);
+ Result : constant Interfaces.C.int := fl_table_find (This.Void_Ptr, Item.Void_Ptr);
begin
if Result = fl_table_children (This.Void_Ptr) then
return No_Index;
@@ -1086,7 +1069,7 @@ package body FLTK.Widgets.Groups.Tables is
(This : in Table)
return Positive
is
- Result : Interfaces.C.int := fl_table_callback_col (This.Void_Ptr);
+ Result : constant Interfaces.C.int := fl_table_callback_col (This.Void_Ptr);
begin
return Positive (Result + 1);
exception
@@ -1100,7 +1083,7 @@ package body FLTK.Widgets.Groups.Tables is
(This : in Table)
return Positive
is
- Result : Interfaces.C.int := fl_table_callback_row (This.Void_Ptr);
+ Result : constant Interfaces.C.int := fl_table_callback_row (This.Void_Ptr);
begin
return Positive (Result + 1);
exception
@@ -1114,7 +1097,7 @@ package body FLTK.Widgets.Groups.Tables is
(This : in Table)
return Table_Context
is
- Result : Interfaces.C.int := fl_table_callback_context (This.Void_Ptr);
+ Result : constant Interfaces.C.int := fl_table_callback_context (This.Void_Ptr);
begin
return To_Context (Result);
exception
@@ -1192,7 +1175,7 @@ package body FLTK.Widgets.Groups.Tables is
(This : in Table)
return Positive
is
- Result : Interfaces.C.int := fl_table_get_col_header_height (This.Void_Ptr);
+ Result : constant Interfaces.C.int := fl_table_get_col_header_height (This.Void_Ptr);
begin
return Positive (Result);
exception
@@ -1215,7 +1198,7 @@ package body FLTK.Widgets.Groups.Tables is
Column : in Positive)
return Positive
is
- Result : Interfaces.C.int := fl_table_get_col_width
+ Result : constant Interfaces.C.int := fl_table_get_col_width
(This.Void_Ptr, Interfaces.C.int (Column) - 1);
begin
return Positive (Result);
@@ -1250,7 +1233,7 @@ package body FLTK.Widgets.Groups.Tables is
(This : in Table)
return Natural
is
- Result : Interfaces.C.int := fl_table_get_cols (This.Void_Ptr);
+ Result : constant Interfaces.C.int := fl_table_get_cols (This.Void_Ptr);
begin
return Natural (Result);
exception
@@ -1272,7 +1255,7 @@ package body FLTK.Widgets.Groups.Tables is
(This : in Table)
return Positive
is
- Result : Interfaces.C.int := fl_table_get_col_position (This.Void_Ptr);
+ Result : constant Interfaces.C.int := fl_table_get_col_position (This.Void_Ptr);
begin
return Positive (Result + 1);
exception
@@ -1321,7 +1304,7 @@ package body FLTK.Widgets.Groups.Tables is
(This : in Table)
return Positive
is
- Result : Interfaces.C.int := fl_table_get_col_resize_min (This.Void_Ptr);
+ Result : constant Interfaces.C.int := fl_table_get_col_resize_min (This.Void_Ptr);
begin
return Positive (Result);
exception
@@ -1379,7 +1362,7 @@ package body FLTK.Widgets.Groups.Tables is
(This : in Table)
return Positive
is
- Result : Interfaces.C.int := fl_table_get_row_header_width (This.Void_Ptr);
+ Result : constant Interfaces.C.int := fl_table_get_row_header_width (This.Void_Ptr);
begin
return Positive (Result);
exception
@@ -1402,7 +1385,7 @@ package body FLTK.Widgets.Groups.Tables is
Row : in Positive)
return Positive
is
- Result : Interfaces.C.int := fl_table_get_row_height
+ Result : constant Interfaces.C.int := fl_table_get_row_height
(This.Void_Ptr, Interfaces.C.int (Row) - 1);
begin
return Positive (Result);
@@ -1437,7 +1420,7 @@ package body FLTK.Widgets.Groups.Tables is
(This : in Table)
return Natural
is
- Result : Interfaces.C.int := fl_table_get_rows (This.Void_Ptr);
+ Result : constant Interfaces.C.int := fl_table_get_rows (This.Void_Ptr);
begin
return Natural (Result);
exception
@@ -1459,7 +1442,7 @@ package body FLTK.Widgets.Groups.Tables is
(This : in Table)
return Positive
is
- Result : Interfaces.C.int := fl_table_get_row_position (This.Void_Ptr);
+ Result : constant Interfaces.C.int := fl_table_get_row_position (This.Void_Ptr);
begin
return Positive (Result + 1);
exception
@@ -1508,7 +1491,7 @@ package body FLTK.Widgets.Groups.Tables is
(This : in Table)
return Positive
is
- Result : Interfaces.C.int := fl_table_get_row_resize_min (This.Void_Ptr);
+ Result : constant Interfaces.C.int := fl_table_get_row_resize_min (This.Void_Ptr);
begin
return Positive (Result);
exception
@@ -1530,7 +1513,7 @@ package body FLTK.Widgets.Groups.Tables is
(This : in Table)
return Positive
is
- Result : Interfaces.C.int := fl_table_get_top_row (This.Void_Ptr);
+ Result : constant Interfaces.C.int := fl_table_get_top_row (This.Void_Ptr);
begin
return Positive (Result + 1);
exception
@@ -1567,7 +1550,7 @@ package body FLTK.Widgets.Groups.Tables is
Resize : out Resize_Flag)
is
C_Row, C_Column, C_Flag : Interfaces.C.int;
- Result : Interfaces.C.int := fl_table_cursor2rowcol
+ Result : constant Interfaces.C.int := fl_table_cursor2rowcol
(This.Void_Ptr, C_Row, C_Column, C_Flag);
begin
Row := Positive (C_Row + 1);
@@ -1659,7 +1642,7 @@ package body FLTK.Widgets.Groups.Tables is
Row, Column : in Positive)
return Boolean
is
- Result : Interfaces.C.int := fl_table_is_selected
+ Result : constant Interfaces.C.int := fl_table_is_selected
(This.Void_Ptr,
Interfaces.C.int (Row) - 1,
Interfaces.C.int (Column) - 1);
@@ -1677,7 +1660,7 @@ package body FLTK.Widgets.Groups.Tables is
Row, Column : in Positive;
Shift_Select : in Boolean := True)
is
- Result : Interfaces.C.int := fl_table_move_cursor
+ Result : constant Interfaces.C.int := fl_table_move_cursor
(This.Void_Ptr,
Interfaces.C.int (Row) - 1,
Interfaces.C.int (Column) - 1,
@@ -1697,7 +1680,7 @@ package body FLTK.Widgets.Groups.Tables is
Shift_Select : in Boolean := True)
return Boolean
is
- Result : Interfaces.C.int := fl_table_move_cursor
+ Result : constant Interfaces.C.int := fl_table_move_cursor
(This.Void_Ptr,
Interfaces.C.int (Row) - 1,
Interfaces.C.int (Column) - 1,
@@ -1715,7 +1698,7 @@ package body FLTK.Widgets.Groups.Tables is
(This : in Table)
return Tab_Navigation
is
- Result : Interfaces.C.int := fl_table_get_tab_cell_nav (This.Void_Ptr);
+ Result : constant Interfaces.C.int := fl_table_get_tab_cell_nav (This.Void_Ptr);
begin
return Tab_Navigation'Val (Result);
exception
@@ -1737,7 +1720,7 @@ package body FLTK.Widgets.Groups.Tables is
(This : in Table)
return Box_Kind
is
- Result : Interfaces.C.int := fl_table_get_table_box (This.Void_Ptr);
+ Result : constant Interfaces.C.int := fl_table_get_table_box (This.Void_Ptr);
begin
return Box_Kind'Val (Result);
exception
@@ -1792,7 +1775,7 @@ package body FLTK.Widgets.Groups.Tables is
(This : in Table)
return Boolean
is
- Result : Interfaces.C.int := fl_table_is_interactive_resize (This.Void_Ptr);
+ Result : constant Interfaces.C.int := fl_table_is_interactive_resize (This.Void_Ptr);
begin
return Boolean'Val (Result);
exception
@@ -1922,7 +1905,7 @@ package body FLTK.Widgets.Groups.Tables is
Row, Column : in Positive;
X, Y, W, H : out Integer)
is
- Result : Interfaces.C.int := fl_table_find_cell
+ Result : constant Interfaces.C.int := fl_table_find_cell
(This.Void_Ptr,
To_Cint (Context),
Interfaces.C.int (Row) - 1,
@@ -1967,7 +1950,7 @@ package body FLTK.Widgets.Groups.Tables is
is
C_Row : Interfaces.C.int := Interfaces.C.int (Row) - 1;
C_Column : Interfaces.C.int := Interfaces.C.int (Column) - 1;
- Result : Interfaces.C.int := fl_table_row_col_clamp
+ Result : constant Interfaces.C.int := fl_table_row_col_clamp
(This.Void_Ptr,
To_Cint (Context),
C_Row, C_Column);
@@ -1990,7 +1973,7 @@ package body FLTK.Widgets.Groups.Tables is
is
C_Row : Interfaces.C.int := Interfaces.C.int (Row) - 1;
C_Column : Interfaces.C.int := Interfaces.C.int (Column) - 1;
- Result : Interfaces.C.int := fl_table_row_col_clamp
+ Result : constant Interfaces.C.int := fl_table_row_col_clamp
(This.Void_Ptr,
To_Cint (Context),
C_Row, C_Column);
diff --git a/body/fltk-widgets-groups-text_displays-text_editors.adb b/body/fltk-widgets-groups-text_displays-text_editors.adb
index 680d3be..c2722b6 100644
--- a/body/fltk-widgets-groups-text_displays-text_editors.adb
+++ b/body/fltk-widgets-groups-text_displays-text_editors.adb
@@ -8,8 +8,7 @@ with
Ada.Assertions,
Ada.Characters.Latin_1,
- FLTK.Events,
- Interfaces.C;
+ FLTK.Events;
package body FLTK.Widgets.Groups.Text_Displays.Text_Editors is
@@ -385,12 +384,12 @@ package body FLTK.Widgets.Groups.Text_Displays.Text_Editors is
-- Key Binding Modification --
- procedure fl_text_editor_add_key_binding
- (TE : in Storage.Integer_Address;
- K, S : in Interfaces.C.int;
- F : in Storage.Integer_Address);
- pragma Import (C, fl_text_editor_add_key_binding, "fl_text_editor_add_key_binding");
- pragma Inline (fl_text_editor_add_key_binding);
+ -- procedure fl_text_editor_add_key_binding
+ -- (TE : in Storage.Integer_Address;
+ -- K, S : in Interfaces.C.int;
+ -- F : in Storage.Integer_Address);
+ -- pragma Import (C, fl_text_editor_add_key_binding, "fl_text_editor_add_key_binding");
+ -- pragma Inline (fl_text_editor_add_key_binding);
procedure fl_text_editor_remove_all_key_bindings
(TE : in Storage.Integer_Address);
@@ -473,12 +472,13 @@ package body FLTK.Widgets.Groups.Text_Displays.Text_Editors is
E : in Storage.Integer_Address)
return Interfaces.C.int
is
- Editor_Ptr : Storage.Integer_Address := fl_widget_get_user_data (E);
+ Editor_Ptr : constant Storage.Integer_Address := fl_widget_get_user_data (E);
Ada_Editor : access Text_Editor'Class;
- Extra_Keys : Modifier := FLTK.Events.Last_Modifier;
- Actual_Key : Keypress := FLTK.Events.Last_Key; -- fuck you FLTK, give me the real code
- Ada_Key : Key_Combo := Extra_Keys + Actual_Key;
+ Extra_Keys : constant Modifier := FLTK.Events.Last_Modifier;
+ Actual_Key : constant Keypress := FLTK.Events.Last_Key;
+ -- fuck you FLTK, give me the real code
+ Ada_Key : constant Key_Combo := Extra_Keys + Actual_Key;
-- For whatever reason, if a regular key function is used then FLTK will
-- give you the key code, but if a default key function is used instead it
@@ -577,9 +577,7 @@ package body FLTK.Widgets.Groups.Text_Displays.Text_Editors is
function Create
(X, Y, W, H : in Integer;
Text : in String := "")
- return Text_Editor
- is
- use type Interfaces.C.int;
+ return Text_Editor is
begin
return This : Text_Editor do
This.Void_Ptr := new_fl_text_editor
@@ -1198,7 +1196,7 @@ package body FLTK.Widgets.Groups.Text_Displays.Text_Editors is
(This : in Text_Editor)
return Insert_Mode
is
- Result : Interfaces.C.int := fl_text_editor_get_insert_mode (This.Void_Ptr);
+ Result : constant Interfaces.C.int := fl_text_editor_get_insert_mode (This.Void_Ptr);
begin
return Insert_Mode'Val (Result);
exception
@@ -1220,7 +1218,7 @@ package body FLTK.Widgets.Groups.Text_Displays.Text_Editors is
(This : in Text_Editor)
return Tab_Navigation
is
- Result : Interfaces.C.int := fl_text_editor_get_tab_nav (This.Void_Ptr);
+ Result : constant Interfaces.C.int := fl_text_editor_get_tab_nav (This.Void_Ptr);
begin
return Tab_Navigation'Val (Result);
exception
@@ -1255,7 +1253,7 @@ package body FLTK.Widgets.Groups.Text_Displays.Text_Editors is
(This : in out Text_Editor)
return Event_Outcome
is
- Result : Interfaces.C.int := fl_text_editor_handle_key (This.Void_Ptr);
+ Result : constant Interfaces.C.int := fl_text_editor_handle_key (This.Void_Ptr);
begin
return Event_Outcome'Val (Result);
exception
diff --git a/body/fltk-widgets-groups-text_displays.adb b/body/fltk-widgets-groups-text_displays.adb
index 601bde9..ac1f6e9 100644
--- a/body/fltk-widgets-groups-text_displays.adb
+++ b/body/fltk-widgets-groups-text_displays.adb
@@ -9,8 +9,7 @@ with
Ada.Assertions,
Ada.Characters.Latin_1,
Ada.Unchecked_Conversion,
- Interfaces.C.Strings,
- FLTK.Text_Buffers;
+ Interfaces.C.Strings;
use type
@@ -50,11 +49,11 @@ package body FLTK.Widgets.Groups.Text_Displays is
-- Buffers --
- function fl_text_display_get_buffer
- (TD : in Storage.Integer_Address)
- return Storage.Integer_Address;
- pragma Import (C, fl_text_display_get_buffer, "fl_text_display_get_buffer");
- pragma Inline (fl_text_display_get_buffer);
+ -- function fl_text_display_get_buffer
+ -- (TD : in Storage.Integer_Address)
+ -- return Storage.Integer_Address;
+ -- pragma Import (C, fl_text_display_get_buffer, "fl_text_display_get_buffer");
+ -- pragma Inline (fl_text_display_get_buffer);
procedure fl_text_display_set_buffer
(TD, TB : in Storage.Integer_Address);
@@ -834,7 +833,7 @@ package body FLTK.Widgets.Groups.Text_Displays is
is
use Styles; -- for maximum stylin'
- Ada_Widget : access Text_Display'Class :=
+ Ada_Widget : constant access Text_Display'Class :=
Text_Display_Convert.To_Pointer (Storage.To_Address (D));
begin
if Ada_Widget.Style_Callback /= null then
@@ -1010,7 +1009,9 @@ package body FLTK.Widgets.Groups.Text_Displays is
fl_text_display_highlight_data
(This.Void_Ptr,
Wrapper (Buff).Void_Ptr,
- Storage.To_Integer (Table (Table'First)'Address),
+ (if Table'Length > 0
+ then Storage.To_Integer (Table (Table'First)'Address)
+ else Null_Pointer),
Table'Length);
end Highlight_Data;
@@ -1026,7 +1027,9 @@ package body FLTK.Widgets.Groups.Text_Displays is
fl_text_display_highlight_data2
(This.Void_Ptr,
Wrapper (Buff).Void_Ptr,
- Storage.To_Integer (Table (Table'First)'Address),
+ (if Table'Length > 0
+ then Storage.To_Integer (Table (Table'First)'Address)
+ else Null_Pointer),
Table'Length,
Interfaces.C.To_C (Unfinished),
Storage.To_Integer (Style_Hook'Address),
@@ -1041,7 +1044,7 @@ package body FLTK.Widgets.Groups.Text_Displays is
Line_Index : in Natural)
return Styles.Style_Info
is
- Result : Interfaces.C.int := fl_text_display_position_style
+ Result : constant Interfaces.C.int := fl_text_display_position_style
(This.Void_Ptr,
Interfaces.C.int (Line_Start),
Interfaces.C.int (Line_Length),
@@ -1134,7 +1137,7 @@ package body FLTK.Widgets.Groups.Text_Displays is
X : in Integer)
return Natural
is
- Result : Interfaces.C.int := fl_text_display_find_x
+ Result : constant Interfaces.C.int := fl_text_display_find_x
(This.Void_Ptr,
Interfaces.C.To_C (Text),
Text'Length,
@@ -1155,7 +1158,7 @@ package body FLTK.Widgets.Groups.Text_Displays is
return Natural
is
C_Line_Num : Interfaces.C.int;
- Result : Interfaces.C.int := fl_text_display_position_to_line
+ Result : constant Interfaces.C.int := fl_text_display_position_to_line
(This.Void_Ptr,
Interfaces.C.int (Position),
C_Line_Num);
@@ -1179,7 +1182,7 @@ package body FLTK.Widgets.Groups.Text_Displays is
return Natural
is
C_Line_Num : Interfaces.C.int;
- Result : Interfaces.C.int := fl_text_display_position_to_line
+ Result : constant Interfaces.C.int := fl_text_display_position_to_line
(This.Void_Ptr,
Interfaces.C.int (Position),
C_Line_Num);
@@ -1204,7 +1207,7 @@ package body FLTK.Widgets.Groups.Text_Displays is
Column : out Natural)
is
C_Line_Num, C_Column : Interfaces.C.int;
- Result : Interfaces.C.int := fl_text_display_position_to_linecol
+ Result : constant Interfaces.C.int := fl_text_display_position_to_linecol
(This.Void_Ptr,
Interfaces.C.int (Position),
C_Line_Num, C_Column);
@@ -1231,7 +1234,7 @@ package body FLTK.Widgets.Groups.Text_Displays is
Displayed : out Boolean)
is
C_Line_Num, C_Column : Interfaces.C.int;
- Result : Interfaces.C.int := fl_text_display_position_to_linecol
+ Result : constant Interfaces.C.int := fl_text_display_position_to_linecol
(This.Void_Ptr,
Interfaces.C.int (Position),
C_Line_Num, C_Column);
@@ -1257,7 +1260,7 @@ package body FLTK.Widgets.Groups.Text_Displays is
Kind : in Position_Kind := Character_Position)
return Natural
is
- Result : Interfaces.C.int := fl_text_display_xy_to_position
+ Result : constant Interfaces.C.int := fl_text_display_xy_to_position
(This.Void_Ptr,
Interfaces.C.int (X),
Interfaces.C.int (Y),
@@ -1493,7 +1496,7 @@ package body FLTK.Widgets.Groups.Text_Displays is
Row : in Natural)
return Natural
is
- Result : Interfaces.C.int := fl_text_display_wrapped_row
+ Result : constant Interfaces.C.int := fl_text_display_wrapped_row
(This.Void_Ptr,
Interfaces.C.int (Row));
begin
@@ -1510,7 +1513,7 @@ package body FLTK.Widgets.Groups.Text_Displays is
Row, Column : in Natural)
return Natural
is
- Result : Interfaces.C.int := fl_text_display_wrapped_column
+ Result : constant Interfaces.C.int := fl_text_display_wrapped_column
(This.Void_Ptr,
Interfaces.C.int (Row),
Interfaces.C.int (Column));
@@ -1528,7 +1531,7 @@ package body FLTK.Widgets.Groups.Text_Displays is
Line_End : in Natural)
return Boolean
is
- Result : Interfaces.C.int := fl_text_display_wrap_uses_character
+ Result : constant Interfaces.C.int := fl_text_display_wrap_uses_character
(This.Void_Ptr,
Interfaces.C.int (Line_End));
begin
@@ -1693,7 +1696,8 @@ package body FLTK.Widgets.Groups.Text_Displays is
(This : in Text_Display)
return Natural
is
- Result : Interfaces.C.int := fl_text_display_get_absolute_top_line_number (This.Void_Ptr);
+ Result : constant Interfaces.C.int :=
+ fl_text_display_get_absolute_top_line_number (This.Void_Ptr);
begin
return Natural (Result);
exception
@@ -1715,7 +1719,7 @@ package body FLTK.Widgets.Groups.Text_Displays is
(This : in Text_Display)
return Boolean
is
- Result : Interfaces.C.int := fl_text_display_maintaining_absolute_top_line_number
+ Result : constant Interfaces.C.int := fl_text_display_maintaining_absolute_top_line_number
(This.Void_Ptr);
begin
return Boolean'Val (Result);
@@ -1741,7 +1745,7 @@ package body FLTK.Widgets.Groups.Text_Displays is
(This : in Text_Display)
return Boolean
is
- Result : Interfaces.C.int := fl_text_display_empty_vlines (This.Void_Ptr);
+ Result : constant Interfaces.C.int := fl_text_display_empty_vlines (This.Void_Ptr);
begin
return Boolean'Val (Result);
exception
@@ -1755,7 +1759,7 @@ package body FLTK.Widgets.Groups.Text_Displays is
(This : in Text_Display)
return Natural
is
- Result : Interfaces.C.int := fl_text_display_longest_vline (This.Void_Ptr);
+ Result : constant Interfaces.C.int := fl_text_display_longest_vline (This.Void_Ptr);
begin
return Natural (Result);
exception
@@ -1770,7 +1774,7 @@ package body FLTK.Widgets.Groups.Text_Displays is
Line : in Natural)
return Natural
is
- Result : Interfaces.C.int := fl_text_display_vline_length
+ Result : constant Interfaces.C.int := fl_text_display_vline_length
(This.Void_Ptr,
Interfaces.C.int (Line));
begin
@@ -1898,7 +1902,7 @@ package body FLTK.Widgets.Groups.Text_Displays is
(This : in Text_Display)
return String
is
- Result : Interfaces.C.Strings.chars_ptr :=
+ Result : constant Interfaces.C.Strings.chars_ptr :=
fl_text_display_get_linenumber_format (This.Void_Ptr);
begin
if Result = Interfaces.C.Strings.Null_Ptr then
@@ -1941,7 +1945,7 @@ package body FLTK.Widgets.Groups.Text_Displays is
Line : in Natural)
return Natural
is
- Result : Interfaces.C.int := fl_text_display_measure_vline
+ Result : constant Interfaces.C.int := fl_text_display_measure_vline
(This.Void_Ptr,
Interfaces.C.int (Line));
begin
@@ -1974,7 +1978,7 @@ package body FLTK.Widgets.Groups.Text_Displays is
procedure Move_Down
(This : in out Text_Display)
is
- Result : Interfaces.C.int := fl_text_display_move_down (This.Void_Ptr);
+ Result : constant Interfaces.C.int := fl_text_display_move_down (This.Void_Ptr);
begin
pragma Assert (Result in 0 .. 1);
exception
@@ -1988,7 +1992,7 @@ package body FLTK.Widgets.Groups.Text_Displays is
(This : in out Text_Display)
return Boolean
is
- Result : Interfaces.C.int := fl_text_display_move_down (This.Void_Ptr);
+ Result : constant Interfaces.C.int := fl_text_display_move_down (This.Void_Ptr);
begin
return Boolean'Val (Result);
exception
@@ -2001,7 +2005,7 @@ package body FLTK.Widgets.Groups.Text_Displays is
procedure Move_Left
(This : in out Text_Display)
is
- Result : Interfaces.C.int := fl_text_display_move_left (This.Void_Ptr);
+ Result : constant Interfaces.C.int := fl_text_display_move_left (This.Void_Ptr);
begin
pragma Assert (Result in 0 .. 1);
exception
@@ -2015,7 +2019,7 @@ package body FLTK.Widgets.Groups.Text_Displays is
(This : in out Text_Display)
return Boolean
is
- Result : Interfaces.C.int := fl_text_display_move_left (This.Void_Ptr);
+ Result : constant Interfaces.C.int := fl_text_display_move_left (This.Void_Ptr);
begin
return Boolean'Val (Result);
exception
@@ -2028,7 +2032,7 @@ package body FLTK.Widgets.Groups.Text_Displays is
procedure Move_Right
(This : in out Text_Display)
is
- Result : Interfaces.C.int := fl_text_display_move_right (This.Void_Ptr);
+ Result : constant Interfaces.C.int := fl_text_display_move_right (This.Void_Ptr);
begin
pragma Assert (Result in 0 .. 1);
exception
@@ -2042,7 +2046,7 @@ package body FLTK.Widgets.Groups.Text_Displays is
(This : in out Text_Display)
return Boolean
is
- Result : Interfaces.C.int := fl_text_display_move_right (This.Void_Ptr);
+ Result : constant Interfaces.C.int := fl_text_display_move_right (This.Void_Ptr);
begin
return Boolean'Val (Result);
exception
@@ -2055,7 +2059,7 @@ package body FLTK.Widgets.Groups.Text_Displays is
procedure Move_Up
(This : in out Text_Display)
is
- Result : Interfaces.C.int := fl_text_display_move_up (This.Void_Ptr);
+ Result : constant Interfaces.C.int := fl_text_display_move_up (This.Void_Ptr);
begin
pragma Assert (Result in 0 .. 1);
exception
@@ -2069,7 +2073,7 @@ package body FLTK.Widgets.Groups.Text_Displays is
(This : in out Text_Display)
return Boolean
is
- Result : Interfaces.C.int := fl_text_display_move_up (This.Void_Ptr);
+ Result : constant Interfaces.C.int := fl_text_display_move_up (This.Void_Ptr);
begin
return Boolean'Val (Result);
exception
@@ -2101,7 +2105,7 @@ package body FLTK.Widgets.Groups.Text_Displays is
Pixel : in Natural := 0)
return Boolean
is
- Result : Interfaces.C.int := fl_text_display_scroll2
+ Result : constant Interfaces.C.int := fl_text_display_scroll2
(This.Void_Ptr,
Interfaces.C.int (Line),
Interfaces.C.int (Pixel));
diff --git a/body/fltk-widgets-groups-windows-double-cairo.adb b/body/fltk-widgets-groups-windows-double-cairo.adb
index 270a30e..1560c20 100644
--- a/body/fltk-widgets-groups-windows-double-cairo.adb
+++ b/body/fltk-widgets-groups-windows-double-cairo.adb
@@ -81,9 +81,9 @@ package body FLTK.Widgets.Groups.Windows.Double.Cairo is
procedure Cairo_Draw_Hook
(C_Addr, Cairo_Addr : in Storage.Integer_Address)
is
- Ada_Addr : System.Address :=
+ Ada_Addr : constant System.Address :=
Storage.To_Address (fl_widget_get_user_data (C_Addr));
- Ada_Object : access Cairo_Window'Class :=
+ Ada_Object : constant access Cairo_Window'Class :=
Cairo_Convert.To_Pointer (Ada_Addr);
begin
pragma Assert (Ada_Object /= null);
diff --git a/body/fltk-widgets-groups-windows-double-overlay.adb b/body/fltk-widgets-groups-windows-double-overlay.adb
index e6d00cf..94542af 100644
--- a/body/fltk-widgets-groups-windows-double-overlay.adb
+++ b/body/fltk-widgets-groups-windows-double-overlay.adb
@@ -6,7 +6,7 @@
with
- FLTK.Show_Argv,
+ FLTK.Args_Marshal,
Interfaces.C,
System.Address_To_Access_Conversions;
@@ -125,7 +125,7 @@ package body FLTK.Widgets.Groups.Windows.Double.Overlay is
procedure Overlay_Window_Draw_Overlay_Hook
(U : in Storage.Integer_Address)
is
- Overlay_Widget : access Overlay_Window'Class :=
+ Overlay_Widget : constant access Overlay_Window'Class :=
Over_Convert.To_Pointer (Storage.To_Address (U));
begin
Overlay_Widget.Draw_Overlay;
@@ -257,7 +257,7 @@ package body FLTK.Widgets.Groups.Windows.Double.Overlay is
procedure Show_With_Args
(This : in out Overlay_Window) is
begin
- FLTK.Show_Argv.Dispatch (fl_overlay_window_show2'Access, This.Void_Ptr);
+ FLTK.Args_Marshal.Dispatch (fl_overlay_window_show2'Access, This.Void_Ptr);
end Show_With_Args;
diff --git a/body/fltk-widgets-groups-windows-double.adb b/body/fltk-widgets-groups-windows-double.adb
index d4ec67c..9c388e0 100644
--- a/body/fltk-widgets-groups-windows-double.adb
+++ b/body/fltk-widgets-groups-windows-double.adb
@@ -6,7 +6,7 @@
with
- FLTK.Show_Argv,
+ FLTK.Args_Marshal,
Interfaces.C;
@@ -225,7 +225,7 @@ package body FLTK.Widgets.Groups.Windows.Double is
procedure Show_With_Args
(This : in out Double_Window) is
begin
- FLTK.Show_Argv.Dispatch (fl_double_window_show2'Access, This.Void_Ptr);
+ FLTK.Args_Marshal.Dispatch (fl_double_window_show2'Access, This.Void_Ptr);
end Show_With_Args;
diff --git a/body/fltk-widgets-groups-windows-opengl.adb b/body/fltk-widgets-groups-windows-opengl.adb
index 55e80b6..df61bd9 100644
--- a/body/fltk-widgets-groups-windows-opengl.adb
+++ b/body/fltk-widgets-groups-windows-opengl.adb
@@ -6,9 +6,8 @@
with
- FLTK.Show_Argv,
- Interfaces.C,
- System;
+ FLTK.Args_Marshal,
+ Interfaces.C;
use type
@@ -355,7 +354,7 @@ package body FLTK.Widgets.Groups.Windows.OpenGL is
procedure Show_With_Args
(This : in out GL_Window) is
begin
- FLTK.Show_Argv.Dispatch (fl_gl_window_show2'Access, This.Void_Ptr);
+ FLTK.Args_Marshal.Dispatch (fl_gl_window_show2'Access, This.Void_Ptr);
end Show_With_Args;
diff --git a/body/fltk-widgets-groups-windows-single.adb b/body/fltk-widgets-groups-windows-single.adb
index 7eed730..6788d1a 100644
--- a/body/fltk-widgets-groups-windows-single.adb
+++ b/body/fltk-widgets-groups-windows-single.adb
@@ -6,7 +6,7 @@
with
- FLTK.Show_Argv,
+ FLTK.Args_Marshal,
Interfaces.C;
@@ -213,7 +213,7 @@ package body FLTK.Widgets.Groups.Windows.Single is
procedure Show_With_Args
(This : in out Single_Window) is
begin
- FLTK.Show_Argv.Dispatch (fl_single_window_show2'Access, This.Void_Ptr);
+ FLTK.Args_Marshal.Dispatch (fl_single_window_show2'Access, This.Void_Ptr);
end Show_With_Args;
diff --git a/body/fltk-widgets-groups-windows.adb b/body/fltk-widgets-groups-windows.adb
index 3ff2f32..55f3506 100644
--- a/body/fltk-widgets-groups-windows.adb
+++ b/body/fltk-widgets-groups-windows.adb
@@ -6,10 +6,8 @@
with
- Ada.Command_Line,
Interfaces.C.Strings,
- FLTK.Images.RGB,
- FLTK.Show_Argv;
+ FLTK.Args_Marshal;
use type
@@ -513,7 +511,7 @@ package body FLTK.Widgets.Groups.Windows is
procedure Show_With_Args
(This : in out Window) is
begin
- FLTK.Show_Argv.Dispatch (fl_window_show2'Access, This.Void_Ptr);
+ FLTK.Args_Marshal.Dispatch (fl_window_show2'Access, This.Void_Ptr);
end Show_With_Args;
@@ -638,7 +636,9 @@ package body FLTK.Widgets.Groups.Windows is
end loop;
fl_window_icons
(This.Void_Ptr,
- Storage.To_Integer (Pointers (Pointers'First)'Address),
+ (if Pointers'Length > 0
+ then Storage.To_Integer (Pointers (Pointers'First)'Address)
+ else Null_Pointer),
Pointers'Length);
end Set_Icons;
@@ -666,7 +666,9 @@ package body FLTK.Widgets.Groups.Windows is
Pointers (Index) := Wrapper (Pics (Index)).Void_Ptr;
end loop;
fl_window_default_icons
- (Storage.To_Integer (Pointers (Pointers'First)'Address),
+ ((if Pointers'Length > 0
+ then Storage.To_Integer (Pointers (Pointers'First)'Address)
+ else Null_Pointer),
Pointers'Length);
end Set_Default_Icons;
@@ -681,7 +683,7 @@ package body FLTK.Widgets.Groups.Windows is
(This : in Window)
return String
is
- Ptr : Interfaces.C.Strings.chars_ptr := fl_window_get_iconlabel (This.Void_Ptr);
+ Ptr : constant Interfaces.C.Strings.chars_ptr := fl_window_get_iconlabel (This.Void_Ptr);
begin
if Ptr = Interfaces.C.Strings.Null_Ptr then
return "";
@@ -842,7 +844,7 @@ package body FLTK.Widgets.Groups.Windows is
(This : in Window)
return String
is
- Ptr : Interfaces.C.Strings.chars_ptr := fl_window_get_label (This.Void_Ptr);
+ Ptr : constant Interfaces.C.Strings.chars_ptr := fl_window_get_label (This.Void_Ptr);
begin
if Ptr = Interfaces.C.Strings.Null_Ptr then
return "";
@@ -942,7 +944,7 @@ package body FLTK.Widgets.Groups.Windows is
(This : in Window)
return Boolean
is
- Result : Interfaces.C.int := fl_window_get_force_position (This.Void_Ptr);
+ Result : constant Interfaces.C.int := fl_window_get_force_position (This.Void_Ptr);
begin
return Boolean'Val (Result);
exception
@@ -1000,7 +1002,7 @@ package body FLTK.Widgets.Groups.Windows is
(This : in Window)
return String
is
- Result : Interfaces.C.Strings.chars_ptr := fl_window_get_xclass (This.Void_Ptr);
+ Result : constant Interfaces.C.Strings.chars_ptr := fl_window_get_xclass (This.Void_Ptr);
begin
if Result = Interfaces.C.Strings.Null_Ptr then
return "";
@@ -1021,7 +1023,7 @@ package body FLTK.Widgets.Groups.Windows is
function Get_Default_X_Class
return String
is
- Result : Interfaces.C.Strings.chars_ptr := fl_window_get_default_xclass;
+ Result : constant Interfaces.C.Strings.chars_ptr := fl_window_get_default_xclass;
begin
if Result = Interfaces.C.Strings.Null_Ptr then
return "";
diff --git a/body/fltk-widgets-groups.adb b/body/fltk-widgets-groups.adb
index 6c94c4a..d6b51d4 100644
--- a/body/fltk-widgets-groups.adb
+++ b/body/fltk-widgets-groups.adb
@@ -217,7 +217,9 @@ package body FLTK.Widgets.Groups is
procedure Extra_Final
(This : in out Group) is
begin
- This.Clear;
+ if This.Needs_Dealloc then
+ This.Clear;
+ end if;
Extra_Final (Widget (This));
end Extra_Final;
@@ -411,7 +413,7 @@ package body FLTK.Widgets.Groups is
Item : in Widget'Class)
return Extended_Index
is
- Result : Interfaces.C.int := fl_group_find (This.Void_Ptr, Item.Void_Ptr);
+ Result : constant Interfaces.C.int := fl_group_find (This.Void_Ptr, Item.Void_Ptr);
begin
if Result = fl_group_children (This.Void_Ptr) then
return No_Index;
@@ -436,7 +438,7 @@ package body FLTK.Widgets.Groups is
(This : in Group)
return Group_Iterators.Reversible_Iterator'Class is
begin
- return It : Iterator := (My_Container => This'Unrestricted_Access);
+ return It : constant Iterator := (My_Container => This'Unrestricted_Access);
end Iterate;
@@ -444,7 +446,7 @@ package body FLTK.Widgets.Groups is
(Object : in Iterator)
return Cursor is
begin
- return Cu : Cursor :=
+ return Cu : constant Cursor :=
(My_Container => Object.My_Container,
My_Index => 1);
end First;
@@ -458,7 +460,7 @@ package body FLTK.Widgets.Groups is
if Object.My_Container /= Place.My_Container then
raise Program_Error;
end if;
- return Cu : Cursor :=
+ return Cu : constant Cursor :=
(My_Container => Place.My_Container,
My_Index => Place.My_Index + 1);
end Next;
@@ -468,7 +470,7 @@ package body FLTK.Widgets.Groups is
(Object : in Iterator)
return Cursor is
begin
- return Cu : Cursor :=
+ return Cu : constant Cursor :=
(My_Container => Object.My_Container,
My_Index => Object.My_Container.Number_Of_Children);
end Last;
@@ -482,7 +484,7 @@ package body FLTK.Widgets.Groups is
if Object.My_Container /= Place.My_Container then
raise Program_Error;
end if;
- return Cu : Cursor :=
+ return Cu : constant Cursor :=
(My_Container => Place.My_Container,
My_Index => Place.My_Index - 1);
end Previous;
@@ -496,7 +498,7 @@ package body FLTK.Widgets.Groups is
(This : in Group)
return Clip_Mode
is
- Result : Interfaces.C.unsigned := fl_group_get_clip_children (This.Void_Ptr);
+ Result : constant Interfaces.C.unsigned := fl_group_get_clip_children (This.Void_Ptr);
begin
return Clip_Mode'Val (Result);
exception
diff --git a/body/fltk-widgets-inputs-text-file.adb b/body/fltk-widgets-inputs-text-file.adb
index ac3cec7..42c4961 100644
--- a/body/fltk-widgets-inputs-text-file.adb
+++ b/body/fltk-widgets-inputs-text-file.adb
@@ -236,7 +236,7 @@ package body FLTK.Widgets.Inputs.Text.File is
(This : in File_Input)
return String
is
- Ptr : Interfaces.C.Strings.chars_ptr := fl_file_input_get_value (This.Void_Ptr);
+ Ptr : constant Interfaces.C.Strings.chars_ptr := fl_file_input_get_value (This.Void_Ptr);
begin
if Ptr = Interfaces.C.Strings.Null_Ptr then
return "";
@@ -251,7 +251,7 @@ package body FLTK.Widgets.Inputs.Text.File is
(This : in out File_Input;
To : in String)
is
- Result : Interfaces.C.int := fl_file_input_set_value
+ Result : constant Interfaces.C.int := fl_file_input_set_value
(This.Void_Ptr,
Interfaces.C.To_C (To), To'Length);
begin
diff --git a/body/fltk-widgets-inputs-text-floating_point.adb b/body/fltk-widgets-inputs-text-floating_point.adb
index 4bdcc0f..6a7925c 100644
--- a/body/fltk-widgets-inputs-text-floating_point.adb
+++ b/body/fltk-widgets-inputs-text-floating_point.adb
@@ -145,7 +145,7 @@ package body FLTK.Widgets.Inputs.Text.Floating_Point is
(This : in Float_Input)
return Long_Float
is
- Ptr : Interfaces.C.Strings.chars_ptr := fl_input_get_value (This.Void_Ptr);
+ Ptr : constant Interfaces.C.Strings.chars_ptr := fl_input_get_value (This.Void_Ptr);
begin
if Ptr = Interfaces.C.Strings.Null_Ptr or else
Interfaces.C.Strings.Value (Ptr) = ""
diff --git a/body/fltk-widgets-inputs-text-multiline.adb b/body/fltk-widgets-inputs-text-multiline.adb
index 4969082..b348ce5 100644
--- a/body/fltk-widgets-inputs-text-multiline.adb
+++ b/body/fltk-widgets-inputs-text-multiline.adb
@@ -6,8 +6,7 @@
with
- FLTK.Widgets.Groups,
- Interfaces.C.Strings;
+ FLTK.Widgets.Groups;
package body FLTK.Widgets.Inputs.Text.Multiline is
diff --git a/body/fltk-widgets-inputs-text-outputs-multiline.adb b/body/fltk-widgets-inputs-text-outputs-multiline.adb
index 3f01dc3..e18d9b3 100644
--- a/body/fltk-widgets-inputs-text-outputs-multiline.adb
+++ b/body/fltk-widgets-inputs-text-outputs-multiline.adb
@@ -6,8 +6,7 @@
with
- FLTK.Widgets.Groups,
- Interfaces.C.Strings;
+ FLTK.Widgets.Groups;
package body FLTK.Widgets.Inputs.Text.Outputs.Multiline is
diff --git a/body/fltk-widgets-inputs-text-outputs.adb b/body/fltk-widgets-inputs-text-outputs.adb
index eeb83fb..6be0738 100644
--- a/body/fltk-widgets-inputs-text-outputs.adb
+++ b/body/fltk-widgets-inputs-text-outputs.adb
@@ -6,8 +6,7 @@
with
- FLTK.Widgets.Groups,
- Interfaces.C.Strings;
+ FLTK.Widgets.Groups;
package body FLTK.Widgets.Inputs.Text.Outputs is
diff --git a/body/fltk-widgets-inputs-text-secret.adb b/body/fltk-widgets-inputs-text-secret.adb
index 72d9f77..146133f 100644
--- a/body/fltk-widgets-inputs-text-secret.adb
+++ b/body/fltk-widgets-inputs-text-secret.adb
@@ -6,8 +6,7 @@
with
- FLTK.Widgets.Groups,
- Interfaces.C.Strings;
+ FLTK.Widgets.Groups;
package body FLTK.Widgets.Inputs.Text.Secret is
diff --git a/body/fltk-widgets-inputs-text-whole_number.adb b/body/fltk-widgets-inputs-text-whole_number.adb
index b0a5aa5..070dc0f 100644
--- a/body/fltk-widgets-inputs-text-whole_number.adb
+++ b/body/fltk-widgets-inputs-text-whole_number.adb
@@ -145,7 +145,7 @@ package body FLTK.Widgets.Inputs.Text.Whole_Number is
(This : in Integer_Input)
return Long_Integer
is
- Ptr : Interfaces.C.Strings.chars_ptr := fl_input_get_value (This.Void_Ptr);
+ Ptr : constant Interfaces.C.Strings.chars_ptr := fl_input_get_value (This.Void_Ptr);
begin
if Ptr = Interfaces.C.Strings.Null_Ptr or else
Interfaces.C.Strings.Value (Ptr) = ""
diff --git a/body/fltk-widgets-inputs-text.adb b/body/fltk-widgets-inputs-text.adb
index 472f279..ddac5d9 100644
--- a/body/fltk-widgets-inputs-text.adb
+++ b/body/fltk-widgets-inputs-text.adb
@@ -55,22 +55,6 @@ package body FLTK.Widgets.Inputs.Text is
-- Destructors --
-------------------
- -- Message received, every zig will take off
- procedure text_input_extra_final_hook
- (Ada_Obj : in Storage.Integer_Address);
- pragma Export (C, text_input_extra_final_hook, "text_input_extra_final_hook");
-
- procedure text_input_extra_final_hook
- (Ada_Obj : in Storage.Integer_Address)
- is
- My_Text_Input : Text_Input;
- for My_Text_Input'Address use Storage.To_Address (Ada_Obj);
- pragma Import (Ada, My_Text_Input);
- begin
- Extra_Final (My_Text_Input);
- end text_input_extra_final_hook;
-
-
procedure Extra_Final
(This : in out Text_Input) is
begin
diff --git a/body/fltk-widgets-inputs.adb b/body/fltk-widgets-inputs.adb
index ef791be..2057f96 100644
--- a/body/fltk-widgets-inputs.adb
+++ b/body/fltk-widgets-inputs.adb
@@ -429,7 +429,7 @@ package body FLTK.Widgets.Inputs is
(This : in out Input;
Destination : in Clipboard_Kind := Cut_Paste_Board)
is
- Result : Interfaces.C.int := fl_input_copy
+ Result : constant Interfaces.C.int := fl_input_copy
(This.Void_Ptr, Clipboard_Kind'Pos (Destination));
begin
pragma Assert (Result in 0 .. 1);
@@ -445,7 +445,7 @@ package body FLTK.Widgets.Inputs is
Destination : in Clipboard_Kind := Cut_Paste_Board)
return Boolean
is
- Result : Interfaces.C.int := fl_input_copy
+ Result : constant Interfaces.C.int := fl_input_copy
(This.Void_Ptr, Clipboard_Kind'Pos (Destination));
begin
pragma Assert (Result in 0 .. 1);
@@ -460,7 +460,7 @@ package body FLTK.Widgets.Inputs is
procedure Cut
(This : in out Input)
is
- Result : Interfaces.C.int := fl_input_cut (This.Void_Ptr);
+ Ignore : constant Interfaces.C.int := fl_input_cut (This.Void_Ptr);
begin
null;
end Cut;
@@ -478,7 +478,7 @@ package body FLTK.Widgets.Inputs is
(This : in out Input;
Num_Bytes : in Integer)
is
- Result : Interfaces.C.int := fl_input_cut2
+ Ignore : constant Interfaces.C.int := fl_input_cut2
(This.Void_Ptr,
Interfaces.C.int (Num_Bytes));
begin
@@ -501,7 +501,7 @@ package body FLTK.Widgets.Inputs is
(This : in out Input;
Start, Finish : in Integer)
is
- Result : Interfaces.C.int := fl_input_cut3
+ Ignore : constant Interfaces.C.int := fl_input_cut3
(This.Void_Ptr,
Interfaces.C.int (Start),
Interfaces.C.int (Finish));
@@ -525,7 +525,7 @@ package body FLTK.Widgets.Inputs is
procedure Copy_Cuts
(This : in out Input)
is
- Result : Interfaces.C.int := fl_input_copy_cuts (This.Void_Ptr);
+ Ignore : constant Interfaces.C.int := fl_input_copy_cuts (This.Void_Ptr);
begin
null;
end Copy_Cuts;
@@ -535,7 +535,7 @@ package body FLTK.Widgets.Inputs is
(This : in out Input)
return Boolean
is
- Result : Interfaces.C.int := fl_input_copy_cuts (This.Void_Ptr);
+ Result : constant Interfaces.C.int := fl_input_copy_cuts (This.Void_Ptr);
begin
return Result /= 0;
end Copy_Cuts;
@@ -544,7 +544,7 @@ package body FLTK.Widgets.Inputs is
procedure Undo
(This : in out Input)
is
- Result : Interfaces.C.int := fl_input_undo (This.Void_Ptr);
+ Ignore : constant Interfaces.C.int := fl_input_undo (This.Void_Ptr);
begin
null;
end Undo;
@@ -618,7 +618,7 @@ package body FLTK.Widgets.Inputs is
(This : in Input)
return Input_Kind
is
- C_Val : Interfaces.C.int := fl_input_get_input_type (This.Void_Ptr);
+ C_Val : constant Interfaces.C.int := fl_input_get_input_type (This.Void_Ptr);
begin
for V in Input_Kind loop
if Input_Kind_Values (V) = C_Val then
@@ -657,7 +657,7 @@ package body FLTK.Widgets.Inputs is
(This : in out Input;
To : in Natural)
is
- Result : Interfaces.C.int := fl_input_set_mark
+ Ignore : constant Interfaces.C.int := fl_input_set_mark
(This.Void_Ptr,
Interfaces.C.int (To));
begin
@@ -688,7 +688,7 @@ package body FLTK.Widgets.Inputs is
(This : in out Input;
To : in Natural)
is
- Result : Interfaces.C.int := fl_input_set_position
+ Ignore : constant Interfaces.C.int := fl_input_set_position
(This.Void_Ptr,
Interfaces.C.int (To));
begin
@@ -712,7 +712,7 @@ package body FLTK.Widgets.Inputs is
Place : in Natural;
Mark : in Natural)
is
- Result : Interfaces.C.int := fl_input_set_position2
+ Ignore : constant Interfaces.C.int := fl_input_set_position2
(This.Void_Ptr,
Interfaces.C.int (Place),
Interfaces.C.int (Mark));
@@ -751,7 +751,7 @@ package body FLTK.Widgets.Inputs is
(This : in out Input;
Str : in String)
is
- Result : Interfaces.C.int := fl_input_insert
+ Ignore : constant Interfaces.C.int := fl_input_insert
(This.Void_Ptr,
Interfaces.C.To_C (Str, False),
Str'Length);
@@ -777,7 +777,7 @@ package body FLTK.Widgets.Inputs is
From, To : in Natural;
New_Text : in String)
is
- Result : Interfaces.C.int := fl_input_replace
+ Ignore : constant Interfaces.C.int := fl_input_replace
(This.Void_Ptr,
Interfaces.C.int (From),
Interfaces.C.int (To),
@@ -807,7 +807,7 @@ package body FLTK.Widgets.Inputs is
(This : in Input)
return String
is
- Ptr : Interfaces.C.Strings.chars_ptr := fl_input_get_value (This.Void_Ptr);
+ Ptr : constant Interfaces.C.Strings.chars_ptr := fl_input_get_value (This.Void_Ptr);
begin
if Ptr = Interfaces.C.Strings.Null_Ptr then
return "";
@@ -822,7 +822,7 @@ package body FLTK.Widgets.Inputs is
(This : in out Input;
To : in String)
is
- Result : Interfaces.C.int := fl_input_set_value
+ Ignore : constant Interfaces.C.int := fl_input_set_value
(This.Void_Ptr, Interfaces.C.To_C (To), To'Length);
begin
null;
diff --git a/body/fltk-widgets-menus-choices.adb b/body/fltk-widgets-menus-choices.adb
index 80168f9..ac4564c 100644
--- a/body/fltk-widgets-menus-choices.adb
+++ b/body/fltk-widgets-menus-choices.adb
@@ -7,8 +7,7 @@
with
FLTK.Widgets.Groups,
- Interfaces.C,
- System;
+ Interfaces.C;
use type
diff --git a/body/fltk-widgets-menus-menu_bars-systemwide.adb b/body/fltk-widgets-menus-menu_bars-systemwide.adb
index 47ef6d9..88792bb 100644
--- a/body/fltk-widgets-menus-menu_bars-systemwide.adb
+++ b/body/fltk-widgets-menus-menu_bars-systemwide.adb
@@ -308,7 +308,7 @@ package body FLTK.Widgets.Menus.Menu_Bars.Systemwide is
(This : in out System_Menu_Bar;
Text : in String)
is
- Added_Spot : Interfaces.C.int := fl_sys_menu_bar_add
+ Ignore : constant Interfaces.C.int := fl_sys_menu_bar_add
(This.Void_Ptr, Interfaces.C.To_C (Text));
begin
This.Adjust_Item_Store;
@@ -320,7 +320,7 @@ package body FLTK.Widgets.Menus.Menu_Bars.Systemwide is
Text : in String)
return Index
is
- Added_Spot : Interfaces.C.int := fl_sys_menu_bar_add
+ Added_Spot : constant Interfaces.C.int := fl_sys_menu_bar_add
(This.Void_Ptr, Interfaces.C.To_C (Text));
begin
This.Adjust_Item_Store;
@@ -335,7 +335,7 @@ package body FLTK.Widgets.Menus.Menu_Bars.Systemwide is
Shortcut : in Key_Combo := No_Key;
Flags : in Menu_Flag := Flag_Normal)
is
- Added_Spot : Interfaces.C.int := fl_sys_menu_bar_add2
+ Ignore : constant Interfaces.C.int := fl_sys_menu_bar_add2
(This.Void_Ptr,
Interfaces.C.To_C (Text),
Interfaces.C.int (To_C (Shortcut)),
@@ -354,7 +354,7 @@ package body FLTK.Widgets.Menus.Menu_Bars.Systemwide is
Flags : in Menu_Flag := Flag_Normal)
return Index
is
- Added_Spot : Interfaces.C.int := fl_sys_menu_bar_add2
+ Added_Spot : constant Interfaces.C.int := fl_sys_menu_bar_add2
(This.Void_Ptr,
Interfaces.C.To_C (Text),
Interfaces.C.int (To_C (Shortcut)),
@@ -373,7 +373,7 @@ package body FLTK.Widgets.Menus.Menu_Bars.Systemwide is
Shortcut : in String;
Flags : in Menu_Flag := Flag_Normal)
is
- Added_Spot : Interfaces.C.int := fl_sys_menu_bar_add3
+ Ignore : constant Interfaces.C.int := fl_sys_menu_bar_add3
(This.Void_Ptr,
Interfaces.C.To_C (Text),
Interfaces.C.To_C (Shortcut),
@@ -392,7 +392,7 @@ package body FLTK.Widgets.Menus.Menu_Bars.Systemwide is
Flags : in Menu_Flag := Flag_Normal)
return Index
is
- Added_Spot : Interfaces.C.int := fl_sys_menu_bar_add3
+ Added_Spot : constant Interfaces.C.int := fl_sys_menu_bar_add3
(This.Void_Ptr,
Interfaces.C.To_C (Text),
Interfaces.C.To_C (Shortcut),
@@ -412,7 +412,7 @@ package body FLTK.Widgets.Menus.Menu_Bars.Systemwide is
Shortcut : in Key_Combo := No_Key;
Flags : in Menu_Flag := Flag_Normal)
is
- Added_Spot : Interfaces.C.int := fl_sys_menu_bar_insert
+ Ignore : constant Interfaces.C.int := fl_sys_menu_bar_insert
(This.Void_Ptr,
Interfaces.C.int (Place) - 1,
Interfaces.C.To_C (Text),
@@ -433,7 +433,7 @@ package body FLTK.Widgets.Menus.Menu_Bars.Systemwide is
Flags : in Menu_Flag := Flag_Normal)
return Index
is
- Added_Spot : Interfaces.C.int := fl_sys_menu_bar_insert
+ Added_Spot : constant Interfaces.C.int := fl_sys_menu_bar_insert
(This.Void_Ptr,
Interfaces.C.int (Place) - 1,
Interfaces.C.To_C (Text),
@@ -454,7 +454,7 @@ package body FLTK.Widgets.Menus.Menu_Bars.Systemwide is
Shortcut : in String;
Flags : in Menu_Flag := Flag_Normal)
is
- Added_Spot : Interfaces.C.int := fl_sys_menu_bar_insert2
+ Ignore : constant Interfaces.C.int := fl_sys_menu_bar_insert2
(This.Void_Ptr,
Interfaces.C.int (Place) - 1,
Interfaces.C.To_C (Text),
@@ -475,7 +475,7 @@ package body FLTK.Widgets.Menus.Menu_Bars.Systemwide is
Flags : in Menu_Flag := Flag_Normal)
return Index
is
- Added_Spot : Interfaces.C.int := fl_sys_menu_bar_insert2
+ Added_Spot : constant Interfaces.C.int := fl_sys_menu_bar_insert2
(This.Void_Ptr,
Interfaces.C.int (Place) - 1,
Interfaces.C.To_C (Text),
@@ -522,7 +522,7 @@ package body FLTK.Widgets.Menus.Menu_Bars.Systemwide is
(This : in out System_Menu_Bar;
Place : in Index)
is
- Result : Interfaces.C.int := fl_sys_menu_bar_clear_submenu
+ Result : constant Interfaces.C.int := fl_sys_menu_bar_clear_submenu
(This.Void_Ptr,
Interfaces.C.int (Place) - 1);
begin
diff --git a/body/fltk-widgets-menus-menu_buttons.adb b/body/fltk-widgets-menus-menu_buttons.adb
index 3c4614c..c305320 100644
--- a/body/fltk-widgets-menus-menu_buttons.adb
+++ b/body/fltk-widgets-menus-menu_buttons.adb
@@ -90,22 +90,6 @@ package body FLTK.Widgets.Menus.Menu_Buttons is
-- Destructors --
-------------------
- -- More magic
- procedure menu_button_extra_final_hook
- (Ada_Obj : in Storage.Integer_Address);
- pragma Export (C, menu_button_extra_final_hook, "menu_button_extra_final_hook");
-
- procedure menu_button_extra_final_hook
- (Ada_Obj : in Storage.Integer_Address)
- is
- My_Menu_Button : Menu_Button;
- for My_Menu_Button'Address use Storage.To_Address (Ada_Obj);
- pragma Import (Ada, My_Menu_Button);
- begin
- Extra_Final (My_Menu_Button);
- end menu_button_extra_final_hook;
-
-
procedure Extra_Final
(This : in out Menu_Button) is
begin
@@ -218,7 +202,7 @@ package body FLTK.Widgets.Menus.Menu_Buttons is
(This : in Menu_Button)
return Popup_Buttons
is
- Result : Interfaces.C.unsigned_char := fl_widget_get_type (This.Void_Ptr);
+ Result : constant Interfaces.C.unsigned_char := fl_widget_get_type (This.Void_Ptr);
begin
return Popup_Buttons'Val (Result);
exception
@@ -241,7 +225,7 @@ package body FLTK.Widgets.Menus.Menu_Buttons is
return Extended_Index
is
use type Interfaces.C.int;
- Ptr : Storage.Integer_Address := fl_menu_button_popup (This.Void_Ptr);
+ Ptr : constant Storage.Integer_Address := fl_menu_button_popup (This.Void_Ptr);
begin
return Extended_Index (fl_menu_find_index2 (This.Void_Ptr, Ptr) + 1);
end Popup;
diff --git a/body/fltk-widgets-menus.adb b/body/fltk-widgets-menus.adb
index 1e690f3..1295d76 100644
--- a/body/fltk-widgets-menus.adb
+++ b/body/fltk-widgets-menus.adb
@@ -415,7 +415,7 @@ package body FLTK.Widgets.Menus is
procedure Adjust_Item_Store
(This : in out Menu)
is
- Target : Natural := This.Number_Of_Items;
+ Target : constant Natural := This.Number_Of_Items;
begin
while Natural (This.My_Items.Length) > Target loop
Free_Item (This.My_Items.Reference (This.My_Items.Last_Index));
@@ -446,9 +446,9 @@ package body FLTK.Widgets.Menus is
procedure Item_Hook
(C_Obj, User_Data : in Storage.Integer_Address)
is
- Ada_Ptr : Storage.Integer_Address := fl_widget_get_user_data (C_Obj);
+ Ada_Ptr : constant Storage.Integer_Address := fl_widget_get_user_data (C_Obj);
Ada_Widget : access Widget'Class;
- Action : Widget_Callback := Callback_Convert.To_Access (User_Data);
+ Action : constant Widget_Callback := Callback_Convert.To_Access (User_Data);
begin
pragma Assert (Ada_Ptr /= Null_Pointer);
Ada_Widget := Widget_Convert.To_Pointer (Storage.To_Address (Ada_Ptr));
@@ -568,7 +568,7 @@ package body FLTK.Widgets.Menus is
(This : in out Menu;
Text : in String)
is
- Added_Spot : Interfaces.C.int := fl_menu_add (This.Void_Ptr, Interfaces.C.To_C (Text));
+ Ignore : constant Interfaces.C.int := fl_menu_add (This.Void_Ptr, Interfaces.C.To_C (Text));
begin
This.Adjust_Item_Store;
end Add;
@@ -579,7 +579,8 @@ package body FLTK.Widgets.Menus is
Text : in String)
return Index
is
- Added_Spot : Interfaces.C.int := fl_menu_add (This.Void_Ptr, Interfaces.C.To_C (Text));
+ Added_Spot : constant Interfaces.C.int :=
+ fl_menu_add (This.Void_Ptr, Interfaces.C.To_C (Text));
begin
This.Adjust_Item_Store;
return Index (Added_Spot + 1);
@@ -593,7 +594,7 @@ package body FLTK.Widgets.Menus is
Shortcut : in Key_Combo := No_Key;
Flags : in Menu_Flag := Flag_Normal)
is
- Added_Spot : Interfaces.C.int := fl_menu_add2
+ Ignore : constant Interfaces.C.int := fl_menu_add2
(This.Void_Ptr,
Interfaces.C.To_C (Text),
Interfaces.C.int (To_C (Shortcut)),
@@ -612,7 +613,7 @@ package body FLTK.Widgets.Menus is
Flags : in Menu_Flag := Flag_Normal)
return Index
is
- Added_Spot : Interfaces.C.int := fl_menu_add2
+ Added_Spot : constant Interfaces.C.int := fl_menu_add2
(This.Void_Ptr,
Interfaces.C.To_C (Text),
Interfaces.C.int (To_C (Shortcut)),
@@ -631,7 +632,7 @@ package body FLTK.Widgets.Menus is
Shortcut : in String;
Flags : in Menu_Flag := Flag_Normal)
is
- Added_Spot : Interfaces.C.int := fl_menu_add3
+ Ignore : constant Interfaces.C.int := fl_menu_add3
(This.Void_Ptr,
Interfaces.C.To_C (Text),
Interfaces.C.To_C (Shortcut),
@@ -650,7 +651,7 @@ package body FLTK.Widgets.Menus is
Flags : in Menu_Flag := Flag_Normal)
return Index
is
- Added_Spot : Interfaces.C.int := fl_menu_add3
+ Added_Spot : constant Interfaces.C.int := fl_menu_add3
(This.Void_Ptr,
Interfaces.C.To_C (Text),
Interfaces.C.To_C (Shortcut),
@@ -670,7 +671,7 @@ package body FLTK.Widgets.Menus is
Shortcut : in Key_Combo := No_Key;
Flags : in Menu_Flag := Flag_Normal)
is
- Added_Spot : Interfaces.C.int := fl_menu_insert
+ Ignore : constant Interfaces.C.int := fl_menu_insert
(This.Void_Ptr,
Interfaces.C.int (Place) - 1,
Interfaces.C.To_C (Text),
@@ -691,7 +692,7 @@ package body FLTK.Widgets.Menus is
Flags : in Menu_Flag := Flag_Normal)
return Index
is
- Added_Spot : Interfaces.C.int := fl_menu_insert
+ Added_Spot : constant Interfaces.C.int := fl_menu_insert
(This.Void_Ptr,
Interfaces.C.int (Place) - 1,
Interfaces.C.To_C (Text),
@@ -712,7 +713,7 @@ package body FLTK.Widgets.Menus is
Shortcut : in String;
Flags : in Menu_Flag := Flag_Normal)
is
- Added_Spot : Interfaces.C.int := fl_menu_insert2
+ Ignore : constant Interfaces.C.int := fl_menu_insert2
(This.Void_Ptr,
Interfaces.C.int (Place) - 1,
Interfaces.C.To_C (Text),
@@ -733,7 +734,7 @@ package body FLTK.Widgets.Menus is
Flags : in Menu_Flag := Flag_Normal)
return Index
is
- Added_Spot : Interfaces.C.int := fl_menu_insert2
+ Added_Spot : constant Interfaces.C.int := fl_menu_insert2
(This.Void_Ptr,
Interfaces.C.int (Place) - 1,
Interfaces.C.To_C (Text),
@@ -750,7 +751,8 @@ package body FLTK.Widgets.Menus is
(This : in out Menu;
Items : in FLTK.Menu_Items.Menu_Item_Array)
is
- Pointers : aliased array (Items'First .. Items'Last + 1) of Storage.Integer_Address;
+ Pointers : aliased array
+ (Items'First .. Integer'Max (Items'First, Items'Last + 1)) of Storage.Integer_Address;
pragma Convention (C, Pointers);
begin
for Place in Pointers'First .. Pointers'Last - 1 loop
@@ -796,7 +798,7 @@ package body FLTK.Widgets.Menus is
(This : in out Menu;
Place : in Index)
is
- Result : Interfaces.C.int := fl_menu_clear_submenu
+ Result : constant Interfaces.C.int := fl_menu_clear_submenu
(This.Void_Ptr,
Interfaces.C.int (Place) - 1);
begin
@@ -866,7 +868,7 @@ package body FLTK.Widgets.Menus is
Name : in String)
return FLTK.Menu_Items.Menu_Item_Reference
is
- Place : Extended_Index := This.Find_Index (Name);
+ Place : constant Extended_Index := This.Find_Index (Name);
begin
if Place = No_Index then
raise No_Reference_Error;
@@ -880,7 +882,7 @@ package body FLTK.Widgets.Menus is
Action : in Widget_Callback)
return FLTK.Menu_Items.Menu_Item_Reference
is
- Place : Extended_Index := This.Find_Index (Action);
+ Place : constant Extended_Index := This.Find_Index (Action);
begin
if Place = No_Index then
raise No_Reference_Error;
@@ -894,7 +896,8 @@ package body FLTK.Widgets.Menus is
Name : in String)
return Extended_Index
is
- Result : Interfaces.C.int := fl_menu_find_index (This.Void_Ptr, Interfaces.C.To_C (Name));
+ Result : constant Interfaces.C.int :=
+ fl_menu_find_index (This.Void_Ptr, Interfaces.C.To_C (Name));
begin
return Extended_Index (Result + 1);
end Find_Index;
@@ -905,7 +908,8 @@ package body FLTK.Widgets.Menus is
Item : in FLTK.Menu_Items.Menu_Item)
return Extended_Index
is
- Result : Interfaces.C.int := fl_menu_find_index2 (This.Void_Ptr, Wrapper (Item).Void_Ptr);
+ Result : constant Interfaces.C.int :=
+ fl_menu_find_index2 (This.Void_Ptr, Wrapper (Item).Void_Ptr);
begin
return Extended_Index (Result + 1);
end Find_Index;
@@ -931,7 +935,7 @@ package body FLTK.Widgets.Menus is
is
Buffer : Interfaces.C.char_array :=
(0 .. Interfaces.C.size_t (Item_Path_Max) => Interfaces.C.nul);
- Result : Interfaces.C.int := fl_menu_item_pathname
+ Result : constant Interfaces.C.int := fl_menu_item_pathname
(This.Void_Ptr,
Buffer,
Interfaces.C.int (Item_Path_Max),
@@ -959,7 +963,7 @@ package body FLTK.Widgets.Menus is
is
Buffer : Interfaces.C.char_array :=
(0 .. Interfaces.C.size_t (Item_Path_Max) => Interfaces.C.nul);
- Result : Interfaces.C.int := fl_menu_item_pathname
+ Result : constant Interfaces.C.int := fl_menu_item_pathname
(This.Void_Ptr,
Buffer,
Interfaces.C.int (Item_Path_Max),
@@ -999,7 +1003,7 @@ package body FLTK.Widgets.Menus is
(This : in Menu)
return Menu_Iterators.Reversible_Iterator'Class is
begin
- return It : Iterator := (My_Container => This'Unrestricted_Access);
+ return It : constant Iterator := (My_Container => This'Unrestricted_Access);
end Iterate;
@@ -1007,7 +1011,7 @@ package body FLTK.Widgets.Menus is
(Object : in Iterator)
return Cursor is
begin
- return Cu : Cursor :=
+ return Cu : constant Cursor :=
(My_Container => Object.My_Container,
My_Index => 1);
end First;
@@ -1018,7 +1022,7 @@ package body FLTK.Widgets.Menus is
Place : in Cursor)
return Cursor is
begin
- return Cu : Cursor :=
+ return Cu : constant Cursor :=
(My_Container => Place.My_Container,
My_Index => Place.My_Index + 1);
end Next;
@@ -1028,7 +1032,7 @@ package body FLTK.Widgets.Menus is
(Object : in Iterator)
return Cursor is
begin
- return Cu : Cursor :=
+ return Cu : constant Cursor :=
(My_Container => Object.My_Container,
My_Index => Object.My_Container.Number_Of_Items);
end Last;
@@ -1039,7 +1043,7 @@ package body FLTK.Widgets.Menus is
Place : in Cursor)
return Cursor is
begin
- return Cu : Cursor :=
+ return Cu : constant Cursor :=
(My_Container => Place.My_Container,
My_Index => Place.My_Index - 1);
end Previous;
@@ -1053,7 +1057,7 @@ package body FLTK.Widgets.Menus is
(This : in Menu)
return FLTK.Menu_Items.Menu_Item_Reference
is
- Place : Extended_Index := This.Chosen_Index;
+ Place : constant Extended_Index := This.Chosen_Index;
begin
if Place = No_Index then
raise No_Reference_Error;
@@ -1066,7 +1070,7 @@ package body FLTK.Widgets.Menus is
(This : in Menu)
return String
is
- Ptr : Interfaces.C.Strings.chars_ptr := fl_menu_text (This.Void_Ptr);
+ Ptr : constant Interfaces.C.Strings.chars_ptr := fl_menu_text (This.Void_Ptr);
begin
if Ptr = Interfaces.C.Strings.Null_Ptr then
return "";
@@ -1145,7 +1149,7 @@ package body FLTK.Widgets.Menus is
Place : in Index)
return String
is
- Result : Interfaces.C.Strings.chars_ptr := fl_menu_text2
+ Result : constant Interfaces.C.Strings.chars_ptr := fl_menu_text2
(This.Void_Ptr,
Interfaces.C.int (Place) - 1);
begin
@@ -1226,7 +1230,7 @@ package body FLTK.Widgets.Menus is
(This : in Menu)
return Font_Kind
is
- Result : Interfaces.C.int := fl_menu_get_textfont (This.Void_Ptr);
+ Result : constant Interfaces.C.int := fl_menu_get_textfont (This.Void_Ptr);
begin
return Font_Kind'Val (Result);
exception
@@ -1248,7 +1252,7 @@ package body FLTK.Widgets.Menus is
(This : in Menu)
return Font_Size
is
- Result : Interfaces.C.int := fl_menu_get_textsize (This.Void_Ptr);
+ Result : constant Interfaces.C.int := fl_menu_get_textsize (This.Void_Ptr);
begin
return Font_Size (Result);
exception
@@ -1274,7 +1278,7 @@ package body FLTK.Widgets.Menus is
(This : in Menu)
return Box_Kind
is
- Result : Interfaces.C.int := fl_menu_get_down_box (This.Void_Ptr);
+ Result : constant Interfaces.C.int := fl_menu_get_down_box (This.Void_Ptr);
begin
return Box_Kind'Val (Result);
exception
@@ -1323,7 +1327,7 @@ package body FLTK.Widgets.Menus is
return Extended_Index
is
C_Title : aliased Interfaces.C.char_array := Interfaces.C.To_C (Title);
- Ptr : Storage.Integer_Address := fl_menu_popup
+ Ptr : constant Storage.Integer_Address := fl_menu_popup
(This.Void_Ptr,
Interfaces.C.int (X),
Interfaces.C.int (Y),
@@ -1342,7 +1346,7 @@ package body FLTK.Widgets.Menus is
Initial : in Extended_Index := No_Index)
return Extended_Index
is
- Ptr : Storage.Integer_Address := fl_menu_pulldown
+ Ptr : constant Storage.Integer_Address := fl_menu_pulldown
(This.Void_Ptr,
Interfaces.C.int (X),
Interfaces.C.int (Y),
@@ -1371,7 +1375,7 @@ package body FLTK.Widgets.Menus is
Require_Alt : in Boolean := False)
return access FLTK.Menu_Items.Menu_Item'Class
is
- Tentative_Result : Storage.Integer_Address := fl_menu_find_shortcut
+ Tentative_Result : constant Storage.Integer_Address := fl_menu_find_shortcut
(This.Void_Ptr,
Null_Pointer,
Boolean'Pos (Require_Alt));
@@ -1392,7 +1396,7 @@ package body FLTK.Widgets.Menus is
return access FLTK.Menu_Items.Menu_Item'Class
is
C_Place : Interfaces.C.int;
- Tentative_Result : Storage.Integer_Address := fl_menu_find_shortcut
+ Tentative_Result : constant Storage.Integer_Address := fl_menu_find_shortcut
(This.Void_Ptr,
Storage.To_Integer (C_Place'Address),
Boolean'Pos (Require_Alt));
@@ -1412,7 +1416,7 @@ package body FLTK.Widgets.Menus is
(This : in out Menu)
return access FLTK.Menu_Items.Menu_Item'Class
is
- Tentative_Pick : Storage.Integer_Address := fl_menu_test_shortcut (This.Void_Ptr);
+ Tentative_Pick : constant Storage.Integer_Address := fl_menu_test_shortcut (This.Void_Ptr);
begin
if Tentative_Pick = Null_Pointer then
return null;
diff --git a/body/fltk-widgets-positioners.adb b/body/fltk-widgets-positioners.adb
index 91e948e..29246cd 100644
--- a/body/fltk-widgets-positioners.adb
+++ b/body/fltk-widgets-positioners.adb
@@ -289,7 +289,7 @@ package body FLTK.Widgets.Positioners is
(This : in out Positioner;
X, Y : in Long_Float)
is
- Result : Interfaces.C.int := fl_positioner_set_value
+ Result : constant Interfaces.C.int := fl_positioner_set_value
(This.Void_Ptr,
Interfaces.C.double (X),
Interfaces.C.double (Y));
@@ -307,7 +307,7 @@ package body FLTK.Widgets.Positioners is
X, Y : in Long_Float)
return Boolean
is
- Result : Interfaces.C.int := fl_positioner_set_value
+ Result : constant Interfaces.C.int := fl_positioner_set_value
(This.Void_Ptr,
Interfaces.C.double (X),
Interfaces.C.double (Y));
@@ -387,7 +387,7 @@ package body FLTK.Widgets.Positioners is
(This : in out Positioner;
Value : in Long_Float)
is
- Result : Interfaces.C.int := fl_positioner_set_xvalue
+ Result : constant Interfaces.C.int := fl_positioner_set_xvalue
(This.Void_Ptr,
Interfaces.C.double (Value));
begin
@@ -404,7 +404,7 @@ package body FLTK.Widgets.Positioners is
Value : in Long_Float)
return Boolean
is
- Result : Interfaces.C.int := fl_positioner_set_xvalue
+ Result : constant Interfaces.C.int := fl_positioner_set_xvalue
(This.Void_Ptr,
Interfaces.C.double (Value));
begin
@@ -483,7 +483,7 @@ package body FLTK.Widgets.Positioners is
(This : in out Positioner;
Value : in Long_Float)
is
- Result : Interfaces.C.int := fl_positioner_set_yvalue
+ Result : constant Interfaces.C.int := fl_positioner_set_yvalue
(This.Void_Ptr,
Interfaces.C.double (Value));
begin
@@ -500,7 +500,7 @@ package body FLTK.Widgets.Positioners is
Value : in Long_Float)
return Boolean
is
- Result : Interfaces.C.int := fl_positioner_set_yvalue
+ Result : constant Interfaces.C.int := fl_positioner_set_yvalue
(This.Void_Ptr,
Interfaces.C.double (Value));
begin
@@ -551,7 +551,7 @@ package body FLTK.Widgets.Positioners is
X, Y, W, H : in Integer)
return Event_Outcome
is
- Result : Interfaces.C.int := fl_positioner_handle2
+ Result : constant Interfaces.C.int := fl_positioner_handle2
(This.Void_Ptr,
Event_Kind'Pos (Event),
Interfaces.C.int (X),
diff --git a/body/fltk-widgets-progress_bars.adb b/body/fltk-widgets-progress_bars.adb
index 8dc24ee..d04c275 100644
--- a/body/fltk-widgets-progress_bars.adb
+++ b/body/fltk-widgets-progress_bars.adb
@@ -7,7 +7,7 @@
with
FLTK.Widgets.Groups,
- Interfaces.C.Strings;
+ Interfaces.C;
package body FLTK.Widgets.Progress_Bars is
diff --git a/body/fltk-widgets-valuators-adjusters.adb b/body/fltk-widgets-valuators-adjusters.adb
index 2ffad15..d740da5 100644
--- a/body/fltk-widgets-valuators-adjusters.adb
+++ b/body/fltk-widgets-valuators-adjusters.adb
@@ -7,7 +7,7 @@
with
FLTK.Widgets.Groups,
- Interfaces.C.Strings;
+ Interfaces.C;
use type
diff --git a/body/fltk-widgets-valuators-counters-simple.adb b/body/fltk-widgets-valuators-counters-simple.adb
index 9f41321..cd9a8f4 100644
--- a/body/fltk-widgets-valuators-counters-simple.adb
+++ b/body/fltk-widgets-valuators-counters-simple.adb
@@ -7,7 +7,7 @@
with
FLTK.Widgets.Groups,
- Interfaces.C.Strings;
+ Interfaces.C;
package body FLTK.Widgets.Valuators.Counters.Simple is
diff --git a/body/fltk-widgets-valuators-counters.adb b/body/fltk-widgets-valuators-counters.adb
index 1c5426f..f05df69 100644
--- a/body/fltk-widgets-valuators-counters.adb
+++ b/body/fltk-widgets-valuators-counters.adb
@@ -6,8 +6,7 @@
with
- FLTK.Widgets.Groups,
- Interfaces.C.Strings;
+ FLTK.Widgets.Groups;
package body FLTK.Widgets.Valuators.Counters is
@@ -331,7 +330,7 @@ package body FLTK.Widgets.Valuators.Counters is
(This : in out Counter)
return Counter_Kind
is
- Result : Interfaces.C.unsigned_char := fl_widget_get_type (This.Void_Ptr);
+ Result : constant Interfaces.C.unsigned_char := fl_widget_get_type (This.Void_Ptr);
begin
return Counter_Kind'Val (Result);
exception
diff --git a/body/fltk-widgets-valuators-dials-fill.adb b/body/fltk-widgets-valuators-dials-fill.adb
index 44f87fe..a1d1066 100644
--- a/body/fltk-widgets-valuators-dials-fill.adb
+++ b/body/fltk-widgets-valuators-dials-fill.adb
@@ -7,7 +7,7 @@
with
FLTK.Widgets.Groups,
- Interfaces.C.Strings;
+ Interfaces.C;
package body FLTK.Widgets.Valuators.Dials.Fill is
diff --git a/body/fltk-widgets-valuators-dials-line.adb b/body/fltk-widgets-valuators-dials-line.adb
index 707b85d..8f6914c 100644
--- a/body/fltk-widgets-valuators-dials-line.adb
+++ b/body/fltk-widgets-valuators-dials-line.adb
@@ -7,7 +7,7 @@
with
FLTK.Widgets.Groups,
- Interfaces.C.Strings;
+ Interfaces.C;
package body FLTK.Widgets.Valuators.Dials.Line is
diff --git a/body/fltk-widgets-valuators-dials.adb b/body/fltk-widgets-valuators-dials.adb
index 9e2d885..43d943f 100644
--- a/body/fltk-widgets-valuators-dials.adb
+++ b/body/fltk-widgets-valuators-dials.adb
@@ -6,8 +6,7 @@
with
- FLTK.Widgets.Groups,
- Interfaces.C.Strings;
+ FLTK.Widgets.Groups;
package body FLTK.Widgets.Valuators.Dials is
@@ -284,7 +283,7 @@ package body FLTK.Widgets.Valuators.Dials is
X, Y, W, H : in Integer)
return Event_Outcome
is
- Result : Interfaces.C.int := fl_dial_handle2
+ Result : constant Interfaces.C.int := fl_dial_handle2
(This.Void_Ptr,
Event_Kind'Pos (Event),
Interfaces.C.int (X),
@@ -308,7 +307,7 @@ package body FLTK.Widgets.Valuators.Dials is
(This : in Dial)
return Dial_Kind
is
- Result : Interfaces.C.unsigned_char := fl_widget_get_type (This.Void_Ptr);
+ Result : constant Interfaces.C.unsigned_char := fl_widget_get_type (This.Void_Ptr);
begin
return Dial_Kind'Val (Result);
exception
diff --git a/body/fltk-widgets-valuators-rollers.adb b/body/fltk-widgets-valuators-rollers.adb
index c04e274..45939fb 100644
--- a/body/fltk-widgets-valuators-rollers.adb
+++ b/body/fltk-widgets-valuators-rollers.adb
@@ -6,8 +6,7 @@
with
- FLTK.Widgets.Groups,
- Interfaces.C.Strings;
+ FLTK.Widgets.Groups;
package body FLTK.Widgets.Valuators.Rollers is
diff --git a/body/fltk-widgets-valuators-sliders-fill.adb b/body/fltk-widgets-valuators-sliders-fill.adb
index 2cb4c18..c9b0d82 100644
--- a/body/fltk-widgets-valuators-sliders-fill.adb
+++ b/body/fltk-widgets-valuators-sliders-fill.adb
@@ -6,8 +6,7 @@
with
- FLTK.Widgets.Groups,
- Interfaces.C.Strings;
+ FLTK.Widgets.Groups;
package body FLTK.Widgets.Valuators.Sliders.Fill is
diff --git a/body/fltk-widgets-valuators-sliders-horizontal.adb b/body/fltk-widgets-valuators-sliders-horizontal.adb
index c774a3b..1fb5114 100644
--- a/body/fltk-widgets-valuators-sliders-horizontal.adb
+++ b/body/fltk-widgets-valuators-sliders-horizontal.adb
@@ -7,7 +7,7 @@
with
FLTK.Widgets.Groups,
- Interfaces.C.Strings;
+ Interfaces.C;
package body FLTK.Widgets.Valuators.Sliders.Horizontal is
diff --git a/body/fltk-widgets-valuators-sliders-horizontal_fill.adb b/body/fltk-widgets-valuators-sliders-horizontal_fill.adb
index 6a91d4b..2ecf088 100644
--- a/body/fltk-widgets-valuators-sliders-horizontal_fill.adb
+++ b/body/fltk-widgets-valuators-sliders-horizontal_fill.adb
@@ -7,7 +7,7 @@
with
FLTK.Widgets.Groups,
- Interfaces.C.Strings;
+ Interfaces.C;
package body FLTK.Widgets.Valuators.Sliders.Horizontal_Fill is
diff --git a/body/fltk-widgets-valuators-sliders-horizontal_nice.adb b/body/fltk-widgets-valuators-sliders-horizontal_nice.adb
index e12113a..5efb3ca 100644
--- a/body/fltk-widgets-valuators-sliders-horizontal_nice.adb
+++ b/body/fltk-widgets-valuators-sliders-horizontal_nice.adb
@@ -6,8 +6,7 @@
with
- FLTK.Widgets.Groups,
- Interfaces.C.Strings;
+ FLTK.Widgets.Groups;
package body FLTK.Widgets.Valuators.Sliders.Horizontal_Nice is
diff --git a/body/fltk-widgets-valuators-sliders-nice.adb b/body/fltk-widgets-valuators-sliders-nice.adb
index 995a585..4b24754 100644
--- a/body/fltk-widgets-valuators-sliders-nice.adb
+++ b/body/fltk-widgets-valuators-sliders-nice.adb
@@ -6,8 +6,7 @@
with
- FLTK.Widgets.Groups,
- Interfaces.C.Strings;
+ FLTK.Widgets.Groups;
package body FLTK.Widgets.Valuators.Sliders.Nice is
diff --git a/body/fltk-widgets-valuators-sliders-scrollbars.adb b/body/fltk-widgets-valuators-sliders-scrollbars.adb
index f08ccaf..660970a 100644
--- a/body/fltk-widgets-valuators-sliders-scrollbars.adb
+++ b/body/fltk-widgets-valuators-sliders-scrollbars.adb
@@ -90,22 +90,6 @@ package body FLTK.Widgets.Valuators.Sliders.Scrollbars is
-- Destructors --
-------------------
- -- End of the line
- procedure scrollbar_extra_final_hook
- (Ada_Obj : in Storage.Integer_Address);
- pragma Export (C, scrollbar_extra_final_hook, "scrollbar_extra_final_hook");
-
- procedure scrollbar_extra_final_hook
- (Ada_Obj : in Storage.Integer_Address)
- is
- My_Scrollbar : Scrollbar;
- for My_Scrollbar'Address use Storage.To_Address (Ada_Obj);
- pragma Import (Ada, My_Scrollbar);
- begin
- Extra_Final (My_Scrollbar);
- end scrollbar_extra_final_hook;
-
-
procedure Extra_Final
(This : in out Scrollbar) is
begin
diff --git a/body/fltk-widgets-valuators-sliders-value-horizontal.adb b/body/fltk-widgets-valuators-sliders-value-horizontal.adb
index a126b4c..9e3d946 100644
--- a/body/fltk-widgets-valuators-sliders-value-horizontal.adb
+++ b/body/fltk-widgets-valuators-sliders-value-horizontal.adb
@@ -7,7 +7,7 @@
with
FLTK.Widgets.Groups,
- Interfaces.C.Strings;
+ Interfaces.C;
package body FLTK.Widgets.Valuators.Sliders.Value.Horizontal is
diff --git a/body/fltk-widgets-valuators-sliders-value.adb b/body/fltk-widgets-valuators-sliders-value.adb
index 17e9591..28a932e 100644
--- a/body/fltk-widgets-valuators-sliders-value.adb
+++ b/body/fltk-widgets-valuators-sliders-value.adb
@@ -7,7 +7,7 @@
with
FLTK.Widgets.Groups,
- Interfaces.C.Strings;
+ Interfaces.C;
package body FLTK.Widgets.Valuators.Sliders.Value is
diff --git a/body/fltk-widgets-valuators-sliders.adb b/body/fltk-widgets-valuators-sliders.adb
index 00153dc..b670ba2 100644
--- a/body/fltk-widgets-valuators-sliders.adb
+++ b/body/fltk-widgets-valuators-sliders.adb
@@ -7,7 +7,7 @@
with
FLTK.Widgets.Groups,
- Interfaces.C.Strings;
+ Interfaces.C;
package body FLTK.Widgets.Valuators.Sliders is
@@ -367,7 +367,7 @@ package body FLTK.Widgets.Valuators.Sliders is
(This : in Slider)
return Slider_Kind
is
- Result : Interfaces.C.unsigned_char := fl_widget_get_type (This.Void_Ptr);
+ Result : constant Interfaces.C.unsigned_char := fl_widget_get_type (This.Void_Ptr);
begin
return Slider_Kind'Val (Result);
exception
diff --git a/body/fltk-widgets-valuators-value_inputs.adb b/body/fltk-widgets-valuators-value_inputs.adb
index b107e3a..1909c1c 100644
--- a/body/fltk-widgets-valuators-value_inputs.adb
+++ b/body/fltk-widgets-valuators-value_inputs.adb
@@ -7,7 +7,7 @@
with
FLTK.Widgets.Groups,
- Interfaces.C.Strings;
+ Interfaces.C;
use type
@@ -173,17 +173,9 @@ package body FLTK.Widgets.Valuators.Value_Inputs is
-- Destructors --
-------------------
- -- Making a long distance telephone call
- procedure fl_text_input_extra_final
- (Ada_Obj : in Storage.Integer_Address);
- pragma Import (C, fl_text_input_extra_final, "fl_text_input_extra_final");
- pragma Inline (fl_text_input_extra_final);
-
-
procedure Extra_Final
(This : in out Value_Input) is
begin
- fl_text_input_extra_final (Storage.To_Integer (This.My_Input'Address));
Extra_Final (Valuator (This));
end Extra_Final;
diff --git a/body/fltk-widgets-valuators-value_outputs.adb b/body/fltk-widgets-valuators-value_outputs.adb
index 471e58d..82259a6 100644
--- a/body/fltk-widgets-valuators-value_outputs.adb
+++ b/body/fltk-widgets-valuators-value_outputs.adb
@@ -7,7 +7,7 @@
with
FLTK.Widgets.Groups,
- Interfaces.C.Strings;
+ Interfaces.C;
use type
diff --git a/body/fltk-widgets-valuators.adb b/body/fltk-widgets-valuators.adb
index 69aa150..c762fe4 100644
--- a/body/fltk-widgets-valuators.adb
+++ b/body/fltk-widgets-valuators.adb
@@ -210,7 +210,7 @@ package body FLTK.Widgets.Valuators is
declare
-- God this whole Format method is sketchy as hell.
-- ...what? This is the area to declare things and that needed declaring.
- String_Result : String := Ada_Obj.Format;
+ String_Result : constant String := Ada_Obj.Format;
begin
if String_Result'Length <= FLTK.Buffer_Size then
Interfaces.C.Strings.Update (Buffer, 0, Interfaces.C.To_C (String_Result), False);
@@ -321,7 +321,7 @@ package body FLTK.Widgets.Valuators is
is
Buffer : Interfaces.C.char_array :=
(1 .. Interfaces.C.size_t (FLTK.Buffer_Size) => Interfaces.C.To_C (Character'Val (0)));
- Result : Interfaces.C.int := fl_valuator_format (This.Void_Ptr, Buffer);
+ Result : constant Interfaces.C.int := fl_valuator_format (This.Void_Ptr, Buffer);
begin
return Interfaces.C.To_Ada (Buffer (1 .. Interfaces.C.size_t (Result)), False);
end Format;
diff --git a/body/fltk-widgets.adb b/body/fltk-widgets.adb
index f5ae433..f4409e4 100644
--- a/body/fltk-widgets.adb
+++ b/body/fltk-widgets.adb
@@ -8,9 +8,7 @@ with
Ada.Assertions,
Interfaces.C.Strings,
- System.Address_To_Access_Conversions,
- FLTK.Widgets.Groups.Windows,
- FLTK.Images;
+ FLTK.Widgets.Groups.Windows;
use type
@@ -601,7 +599,7 @@ package body FLTK.Widgets is
procedure Callback_Hook
(W, U : in Storage.Integer_Address)
is
- Ada_Widget : access Widget'Class :=
+ Ada_Widget : constant access Widget'Class :=
Widget_Convert.To_Pointer (Storage.To_Address (U));
begin
Ada_Widget.Callback.all (Ada_Widget.all);
@@ -611,7 +609,7 @@ package body FLTK.Widgets is
procedure Draw_Hook
(U : in Storage.Integer_Address)
is
- Ada_Widget : access Widget'Class :=
+ Ada_Widget : constant access Widget'Class :=
Widget_Convert.To_Pointer (Storage.To_Address (U));
begin
Ada_Widget.Draw;
@@ -623,7 +621,7 @@ package body FLTK.Widgets is
E : in Interfaces.C.int)
return Interfaces.C.int
is
- Ada_Widget : access Widget'Class :=
+ Ada_Widget : constant access Widget'Class :=
Widget_Convert.To_Pointer (Storage.To_Address (U));
begin
return Event_Outcome'Pos (Ada_Widget.Handle (Event_Kind'Val (E)));
@@ -639,10 +637,13 @@ package body FLTK.Widgets is
procedure Extra_Final
(This : in out Widget)
is
- Maybe_Parent : access FLTK.Widgets.Groups.Group'Class := This.Parent;
+ Maybe_Parent : access FLTK.Widgets.Groups.Group'Class;
begin
- if Maybe_Parent /= null then
- Maybe_Parent.Remove (This);
+ if This.Needs_Dealloc then
+ Maybe_Parent := This.Parent;
+ if Maybe_Parent /= null then
+ Maybe_Parent.Remove (This);
+ end if;
end if;
end Extra_Final;
@@ -1023,13 +1024,13 @@ package body FLTK.Widgets is
begin
if Parent_Ptr /= Null_Pointer then
Parent_Ptr := fl_widget_get_user_data (Parent_Ptr);
- pragma Assert (Parent_Ptr /= Null_Pointer);
+ -- Can't assert user data being not null here because fl_ask is a bitch,
+ -- so have to fall back on saying that if it's null then you get nothing.
+ -- Any widget created by users of this binding will have appropriate back
+ -- reference to the corresponding Ada object in the user data anyway.
Actual_Parent := Group_Convert.To_Pointer (Storage.To_Address (Parent_Ptr));
end if;
return Actual_Parent;
- exception
- when Chk.Assertion_Error => raise Internal_FLTK_Error with
- "Widget returned by Fl_Widget::parent has no user_data reference back to Ada";
end Parent;
@@ -1136,7 +1137,7 @@ package body FLTK.Widgets is
(This : in Widget)
return Box_Kind
is
- Result : Interfaces.C.int := fl_widget_get_box (This.Void_Ptr);
+ Result : constant Interfaces.C.int := fl_widget_get_box (This.Void_Ptr);
begin
return Box_Kind'Val (Result);
exception
@@ -1158,7 +1159,7 @@ package body FLTK.Widgets is
(This : in Widget)
return String
is
- Ptr : Interfaces.C.Strings.chars_ptr := fl_widget_tooltip (This.Void_Ptr);
+ Ptr : constant Interfaces.C.Strings.chars_ptr := fl_widget_tooltip (This.Void_Ptr);
begin
if Ptr = Interfaces.C.Strings.Null_Ptr then
return "";
@@ -1185,7 +1186,7 @@ package body FLTK.Widgets is
(This : in Widget)
return String
is
- Ptr : Interfaces.C.Strings.chars_ptr := fl_widget_get_label (This.Void_Ptr);
+ Ptr : constant Interfaces.C.Strings.chars_ptr := fl_widget_get_label (This.Void_Ptr);
begin
if Ptr = Interfaces.C.Strings.Null_Ptr then
return "";
@@ -1265,7 +1266,7 @@ package body FLTK.Widgets is
(This : in Widget)
return Label_Kind
is
- Result : Interfaces.C.int := fl_widget_get_labeltype (This.Void_Ptr);
+ Result : constant Interfaces.C.int := fl_widget_get_labeltype (This.Void_Ptr);
begin
return Label_Kind'Val (Result);
exception
@@ -1663,7 +1664,7 @@ package body FLTK.Widgets is
for my_handle'Address use This.Handle_Ptr;
pragma Import (Ada, my_handle);
- Result : Interfaces.C.int := my_handle (This.Void_Ptr, Event_Kind'Pos (Event));
+ Result : constant Interfaces.C.int := my_handle (This.Void_Ptr, Event_Kind'Pos (Event));
begin
return Event_Outcome'Val (Result);
exception
diff --git a/body/fltk.adb b/body/fltk.adb
index c7a8fe4..49d9048 100644
--- a/body/fltk.adb
+++ b/body/fltk.adb
@@ -12,8 +12,7 @@ use type
Interfaces.C.int,
Interfaces.C.unsigned,
- Interfaces.C.unsigned_char,
- Interfaces.C.unsigned_long;
+ Interfaces.C.unsigned_char;
package body FLTK is
@@ -566,7 +565,7 @@ package body FLTK is
(Box : in Box_Kind)
return Box_Kind
is
- Result : Interfaces.C.int := fl_enum_box (Box_Kind'Pos (Box));
+ Result : constant Interfaces.C.int := fl_enum_box (Box_Kind'Pos (Box));
begin
return Box_Kind'Val (Result);
exception
@@ -580,7 +579,7 @@ package body FLTK is
(Box : in Box_Kind)
return Box_Kind
is
- Result : Interfaces.C.int := fl_enum_frame (Box_Kind'Pos (Box));
+ Result : constant Interfaces.C.int := fl_enum_frame (Box_Kind'Pos (Box));
begin
return Box_Kind'Val (Result);
exception
@@ -594,7 +593,7 @@ package body FLTK is
(Box : in Box_Kind)
return Box_Kind
is
- Result : Interfaces.C.int := fl_enum_down (Box_Kind'Pos (Box));
+ Result : constant Interfaces.C.int := fl_enum_down (Box_Kind'Pos (Box));
begin
return Box_Kind'Val (Result);
exception
diff --git a/doc/fl.html b/doc/fl.html
index 9cefff7..96bb11d 100644
--- a/doc/fl.html
+++ b/doc/fl.html
@@ -51,6 +51,16 @@
<td>Menu_Flag</td>
</tr>
+ <tr>
+ <td>size_t</td>
+ <td>Size_Type</td>
+ </tr>
+
+ <tr>
+ <td>size_t</td>
+ <td>Positive_Size</td>
+ </tr>
+
</table>
diff --git a/doc/fl_(fltk-events).html b/doc/fl_(fltk-events).html
index c9846fd..6d17e85 100644
--- a/doc/fl_(fltk-events).html
+++ b/doc/fl_(fltk-events).html
@@ -41,6 +41,16 @@
<td>Event_Dispatch</td>
</tr>
+ <tr>
+ <td>void *</td>
+ <td>System_Event</td>
+ </tr>
+
+ <tr>
+ <td>Fl_System_Handler</td>
+ <td>System_Handler</td>
+ </tr>
+
</table>
@@ -54,7 +64,18 @@ static void add_handler(Fl_Event_Handler h);
</pre></td>
<td><pre>
procedure Add_Handler
- (Func : in Event_Handler);
+ (Func : in not null Event_Handler);
+</pre></td>
+ </tr>
+
+ <tr>
+<td><pre>
+static void add_system_handler(Fl_System_Handler h,
+ void *data);
+</pre></td>
+<td><pre>
+procedure Add_System_Handler
+ (Func : in not null System_Handler);
</pre></td>
</tr>
@@ -576,7 +597,17 @@ static void remove_handler(Fl_Event_Handler h);
</pre></td>
<td><pre>
procedure Remove_Handler
- (Func : in Event_Handler);
+ (Func : in not null Event_Handler);
+</pre></td>
+ </tr>
+
+ <tr>
+<td><pre>
+static void remove_system_handler(Fl_System_Handler h);
+</pre></td>
+<td><pre>
+procedure Remove_System_Handler
+ (Func : in not null System_Handler);
</pre></td>
</tr>
diff --git a/doc/fl_(fltk-static).html b/doc/fl_(fltk-static).html
index ac47474..90e74cd 100644
--- a/doc/fl_(fltk-static).html
+++ b/doc/fl_(fltk-static).html
@@ -38,7 +38,7 @@
<tr>
<td>Fl_Args_Handler</td>
- <td>&nbsp;</td>
+ <td>Args_Handler</td>
</tr>
<tr>
@@ -62,11 +62,6 @@
</tr>
<tr>
- <td>Fl_System_Handler</td>
- <td>&nbsp;</td>
- </tr>
-
- <tr>
<td>Fl_Timeout_Handler</td>
<td>Timeout_Handler</td>
</tr>
@@ -97,18 +92,23 @@
</tr>
<tr>
+ <td>uchar</td>
+ <td>Byte_Integer</td>
+ </tr>
+
+ <tr>
<td>Fl_Box_Draw_F</td>
<td>Box_Draw_Function</td>
</tr>
<tr>
<td>Fl_Label_Draw_F</td>
- <td>&nbsp;</td>
+ <td>Label_Draw_Function</td>
</tr>
<tr>
<td>Fl_Label_Measure_F</td>
- <td>&nbsp;</td>
+ <td>Label_Measure_Function</td>
</tr>
<tr>
@@ -120,6 +120,18 @@
+<table class="type">
+ <tr><th colspan="2">Errors</th></tr>
+
+ <tr>
+ <td>int</td>
+ <td>Argument_Error</td>
+ </tr>
+
+</table>
+
+
+
<table class="function">
<tr><th colspan="2">Static Attributes</th></tr>
@@ -134,7 +146,9 @@ static void (*atclose)(Fl_Window *, void *);
<td><pre>
static const char * const help = helpmsg + 13;
</pre></td>
-<td>&nbsp;</td>
+<td><pre>
+Help_Message : constant String;
+</pre></td>
</tr>
<tr>
@@ -167,7 +181,7 @@ static void add_check(Fl_Timeout_Handler, void *=0);
</pre></td>
<td><pre>
procedure Add_Check
- (Func : in Timeout_Handler);
+ (Func : in not null Timeout_Handler);
</pre></td>
</tr>
@@ -178,7 +192,7 @@ static void add_clipboard_notify(Fl_Clipboard_Notify_Handler h,
</pre></td>
<td><pre>
procedure Add_Clipboard_Notify
- (Func : in Clipboard_Notify_Handler);
+ (Func : in not null Clipboard_Notify_Handler);
</pre></td>
</tr>
@@ -188,8 +202,8 @@ static void add_fd(int fd, Fl_FD_Handler cb, void *=0);
</pre></td>
<td><pre>
procedure Add_File_Descriptor
- (FD : in File_Descriptor;
- Func : in File_Handler);
+ (FD : in File_Descriptor;
+ Func : in not null File_Handler);
</pre></td>
</tr>
@@ -200,9 +214,9 @@ static void add_fd(int fd, int when, Fl_FD_Handler cb,
</pre></td>
<td><pre>
procedure Add_File_Descriptor
- (FD : in File_Descriptor;
- Mode : in File_Mode;
- Func : in File_Handler);
+ (FD : in File_Descriptor;
+ Mode : in File_Mode;
+ Func : in not null File_Handler);
</pre></td>
</tr>
@@ -212,27 +226,19 @@ static void add_idle(Fl_Idle_Handler cb, void *data=0);
</pre></td>
<td><pre>
procedure Add_Idle
- (Func : in Idle_Handler);
+ (Func : in not null Idle_Handler);
</pre></td>
</tr>
<tr>
<td><pre>
-static void add_system_handler(Fl_System_Handler h,
- void *data);
-</pre></td>
-<td>&nbsp;</td>
- </tr>
-
- <tr>
-<td><pre>
static void add_timeout(double t, Fl_Timeout_Handler,
void *=0);
</pre></td>
<td><pre>
procedure Add_Timeout
- (Seconds : in Long_Float;
- Func : in Timeout_Handler);
+ (Seconds : in Long_Float;
+ Func : in not null Timeout_Handler);
</pre></td>
</tr>
@@ -240,7 +246,11 @@ procedure Add_Timeout
<td><pre>
static int arg(int argc, char **argv, int &i);
</pre></td>
-<td>&nbsp;</td>
+<td><pre>
+function Parse_Arg
+ (Index : in Positive)
+ return Natural;
+</pre></td>
</tr>
<tr>
@@ -248,21 +258,30 @@ static int arg(int argc, char **argv, int &i);
static int args(int argc, char **argv, int &i,
Fl_Args_Handler cb=0);
</pre></td>
-<td>&nbsp;</td>
+<td><pre>
+procedure Parse_Args
+ (Count : out Natural;
+ Func : in Args_Handler := null);
+</pre></td>
</tr>
<tr>
<td><pre>
static void args(int argc, char **argv);
</pre></td>
-<td>&nbsp;</td>
+<td><pre>
+procedure Parse_Args;
+</pre></td>
</tr>
<tr>
<td><pre>
static int awake(Fl_Awake_Handler cb, void *message=0);
</pre></td>
-<td>&nbsp;</td>
+<td><pre>
+procedure Awake
+ (Func : in Awake_Handler);
+</pre></td>
</tr>
<tr>
@@ -298,7 +317,11 @@ procedure Set_Alt_Background
<td><pre>
static Fl_Color box_color(Fl_Color);
</pre></td>
-<td>&nbsp;</td>
+<td><pre>
+function Get_Box_Color
+ (Tone : in Color)
+ return Color;
+</pre></td>
</tr>
<tr>
@@ -349,7 +372,11 @@ function Get_Box_Y_Offset
<td><pre>
static int clipboard_contains(const char *type);
</pre></td>
-<td>&nbsp;</td>
+<td><pre>
+function Clipboard_Contains
+ (Kind : in String)
+ return Boolean;
+</pre></td>
</tr>
<tr>
@@ -487,14 +514,22 @@ function Get_Awake_Handler
<td><pre>
static Fl_Box_Draw_F * get_boxtype(Fl_Boxtype);
</pre></td>
-<td>&nbsp;</td>
+<td><pre>
+function Get_Box_Draw_Function
+ (Kind : in Box_Kind)
+ return Box_Draw_Function;
+</pre></td>
</tr>
<tr>
<td><pre>
static unsigned get_color(Fl_Color i);
</pre></td>
-<td>&nbsp;</td>
+<td><pre>
+function Get_Color
+ (From : in Color)
+ return Color;
+</pre></td>
</tr>
<tr>
@@ -558,7 +593,7 @@ static int has_check(Fl_Timeout_Handler, void *=0);
</pre></td>
<td><pre>
function Has_Check
- (Func : in Timeout_Handler)
+ (Func : in not null Timeout_Handler)
return Boolean;
</pre></td>
</tr>
@@ -569,7 +604,7 @@ static int has_idle(Fl_Idle_Handler cb, void *data=0);
</pre></td>
<td><pre>
function Has_Idle
- (Func : in Idle_Handler)
+ (Func : in not null Idle_Handler)
return Boolean;
</pre></td>
</tr>
@@ -580,7 +615,7 @@ static int has_timeout(Fl_Timeout_Handler, void *=0);
</pre></td>
<td><pre>
function Has_Timeout
- (Func : in Timeout_Handler)
+ (Func : in not null Timeout_Handler)
return Boolean;
</pre></td>
</tr>
@@ -702,7 +737,7 @@ static void remove_check(Fl_Timeout_Handler, void *=0);
</pre></td>
<td><pre>
procedure Remove_Check
- (Func : in Timeout_Handler);
+ (Func : in not null Timeout_Handler);
</pre></td>
</tr>
@@ -713,7 +748,7 @@ static void remove_clipboard_notify
</pre></td>
<td><pre>
procedure Remove_Clipboard_Notify
- (Func : in Clipboard_Notify_Handler);
+ (Func : in not null Clipboard_Notify_Handler);
</pre></td>
</tr>
@@ -745,15 +780,8 @@ static void remove_idle(Fl_Idle_Handler cb,
</pre></td>
<td><pre>
procedure Remove_Idle
- (Func : in Idle_Handler);
-</pre></td>
- </tr>
-
- <tr>
-<td><pre>
-static void remove_system_handler(Fl_System_Handler h);
+ (Func : in not null Idle_Handler);
</pre></td>
-<td>&nbsp;</td>
</tr>
<tr>
@@ -763,7 +791,7 @@ static void remove_timeout(Fl_Timeout_Handler,
</pre></td>
<td><pre>
procedure Remove_Timeout
- (Func : in Timeout_Handler);
+ (Func : in not null Timeout_Handler);
</pre></td>
</tr>
@@ -774,8 +802,8 @@ static repeat_timeout(double t, Fl_Timeout_Handler,
</pre></td>
<td><pre>
procedure Repeat_Timeout
- (Seconds : in Long_Float;
- Func : in Timeout_Handler);
+ (Seconds : in Long_Float;
+ Func : in not null Timeout_Handler);
</pre></td>
</tr>
@@ -863,7 +891,10 @@ static void set_atclose(Fl_Atclose_Handler f);
<td><pre>
static void set_box_color(Fl_Color);
</pre></td>
-<td>&nbsp;</td>
+<td><pre>
+procedure Set_Box_Color
+ (Tone : in Color);
+</pre></td>
</tr>
<tr>
@@ -871,7 +902,13 @@ static void set_box_color(Fl_Color);
static void set_boxtype(Fl_Boxtype, Fl_Box_Draw_F *,
uchar, uchar, uchar, uchar);
</pre></td>
-<td>&nbsp;</td>
+<td><pre>
+procedure Set_Box_Draw_Function
+ (Kind : in Box_Kind;
+ Func : in Box_Draw_Function;
+ Offset_X, Offset_Y : in Byte_Integer := 0;
+ Offset_W, Offset_H : in Byte_Integer := 0);
+</pre></td>
</tr>
<tr>
@@ -888,7 +925,10 @@ procedure Set_Box_Kind
<td><pre>
static void set_color(Fl_Color i, unsigned c);
</pre></td>
-<td>&nbsp;</td>
+<td><pre>
+procedure Set_Color
+ (Target, Source : in Color);
+</pre></td>
</tr>
<tr>
@@ -898,7 +938,7 @@ static void set_color(Fl_Color,
</pre></td>
<td><pre>
procedure Set_Color
- (To : in Color;
+ (Target : in Color;
R, G, B : in Color_Component);
</pre></td>
</tr>
@@ -907,7 +947,11 @@ procedure Set_Color
<td><pre>
static void set_font(Fl_Font, const char *);
</pre></td>
-<td>&nbsp;</td>
+<td><pre>
+procedure Set_Font_Kind
+ (Target : in Font_Kind;
+ Source : in String);
+</pre></td>
</tr>
<tr>
@@ -916,7 +960,7 @@ static void set_font(Fl_Font, Fl_Font);
</pre></td>
<td><pre>
procedure Set_Font_Kind
- (To, From : in Font_Kind);
+ (Target, Source : in Font_Kind);
</pre></td>
</tr>
@@ -942,21 +986,29 @@ static void set_idle(Fl_Old_Idle_Handler cb);
static void set_labeltype(Fl_Labeltype, Fl_Label_Draw_F *,
FL_Label_Measure_F *);
</pre></td>
-<td>&nbsp;</td>
+<td><pre>
+procedure Set_Label_Draw_Function
+ (Kind : in Label_Kind;
+ Draw_Func : in Label_Draw_Function;
+ Measure_Func : in Label_Measure_Function);
+</pre></td>
</tr>
<tr>
<td><pre>
static void set_labeltype(Fl_Labeltype, Fl_Labeltype from);
</pre></td>
-<td>&nbsp;</td>
+<td><pre>
+procedure Set_Label_Kind
+ (Target, Source : in Label_Kind);
+</pre></td>
</tr>
<tr>
<td><pre>
static void * thread_message();
</pre></td>
-<td>&nbsp;</td>
+<td>Intentionally left unbound.</td>
</tr>
<tr>
diff --git a/doc/fl_bitmap.html b/doc/fl_bitmap.html
index 922b1b5..edaf6a4 100644
--- a/doc/fl_bitmap.html
+++ b/doc/fl_bitmap.html
@@ -62,31 +62,31 @@ const uchar * array;
<td><pre>
function Data_Size
(This : in Bitmap)
- return Natural;
+ return Size_Type;
function Get_Datum
(This : in Bitmap;
- Place : in Positive)
+ Place : in Positive_Size)
return Color_Component
with Pre => Place <= This.Data_Size;
procedure Set_Datum
(This : in out Bitmap;
- Place : in Positive;
+ Place : in Positive_Size;
Value : in Color_Component)
with Pre => Place <= This.Data_Size;
function Slice
(This : in Bitmap;
- Low : in Positive;
- High : in Natural)
+ Low : in Positive_Size;
+ High : in Size_Type)
return Color_Component_Array
with Pre => High <= This.Data_Size,
- Post => Slice'Result'Length = Integer'Max (0, High - Low + 1);
+ Post => Slice'Result'Length = Size_Type'Max (0, High - Low + 1);
procedure Overwrite
(This : in out Bitmap;
- Place : in Positive;
+ Place : in Positive_Size;
Values : in Color_Component_Array)
with Pre => Place + Values'Length - 1 <= This.Data_Size;
@@ -115,7 +115,24 @@ function Create
(Data : in Color_Component_Array;
Width, Height : in Natural)
return Bitmap
-with Pre => Data'Length = To_Next_Byte (Width) * Height;
+with Pre =>
+ Data'Length >= Size_Type (Bytes_Needed (Width)) * Size_Type (Height);
+</pre></td>
+ </tr>
+
+</table>
+
+
+
+<table class="function">
+ <tr><th colspan="2">Static Functions and Procedures</th></tr>
+
+ <tr>
+<td>&nbsp;</td>
+<td><pre>
+function Bytes_Needed
+ (Bits : in Natural)
+ return Natural;
</pre></td>
</tr>
diff --git a/doc/fl_draw.html b/doc/fl_draw.html
index d987920..aca154a 100644
--- a/doc/fl_draw.html
+++ b/doc/fl_draw.html
@@ -415,9 +415,12 @@ procedure Draw_Image
(X, Y, W, H : in Integer;
Data : in Color_Component_Array;
Depth : in Positive := 3;
- Line_Data : in Natural := 0;
+ Line_Size : in Natural := 0;
Flip_Horizontal : in Boolean := False;
- Flip_Vertical : in Boolean := False);
+ Flip_Vertical : in Boolean := False)
+with Pre => (if Line_Size = 0
+ then Data'Length >= Size_Type (W) * Size_Type (H) * Size_Type (Depth)
+ else Data'Length >= Size_Type (Line_Size) * Size_Type (H));
</pre></td>
</tr>
@@ -444,9 +447,12 @@ procedure Draw_Image_Mono
(X, Y, W, H : in Integer;
Data : in Color_Component_Array;
Depth : in Positive := 1;
- Line_Data : in Natural := 0;
+ Line_Size : in Natural := 0;
Flip_Horizontal : Boolean := False;
- Flip_Vertical : Boolean := False);
+ Flip_Vertical : Boolean := False)
+with Pre => (if Line_Size = 0
+ then Data'Length >= Size_Type (W) * Size_Type (H) * Size_Type (Depth)
+ else Data'Length >= Size_Type (Line_Size) * Size_Type (H));
</pre></td>
</tr>
@@ -477,7 +483,7 @@ procedure Draw_Pixmap
Colors : in FLTK.Images.Pixmaps.Color_Definition_Array;
Pixels : in FLTK.Images.Pixmaps.Pixmap_Data;
X, Y : in Integer;
- Hue : in Color := Grey0_Color)
+ Tone : in Color := Grey0_Color)
with Pre =>
Colors'Length = Values.Colors and
Pixels'Length (1) = Values.Height and
@@ -909,9 +915,9 @@ function Read_Image
Alpha : in Integer := 0)
return Color_Component_Array
with Post =>
- (if Alpha = 0
- then Read_Image'Result'Length = W * H * 3
- else Read_Image'Result'Length = W * H * 4);
+ (if Alpha = 0
+ then Read_Image'Result'Length = Size_Type (W) * Size_Type (H) * 3
+ else Read_Image'Result'Length = Size_Type (W) * Size_Type (H) * 4);
</pre></td>
</tr>
diff --git a/doc/fl_rgb_image.html b/doc/fl_rgb_image.html
index 061b07a..6d5427d 100644
--- a/doc/fl_rgb_image.html
+++ b/doc/fl_rgb_image.html
@@ -62,31 +62,31 @@ const uchar * array;
<td><pre>
function Data_Size
(This : in RGB_Image)
- return Natural;
+ return Size_Type;
function Get_Datum
(This : in RGB_Image;
- Place : in Positive)
+ Place : in Positive_Size)
return Color_Component
with Pre => Place <= This.Data_Size;
procedure Set_Datum
(This : in out RGB_Image;
- Place : in Positive;
+ Place : in Positive_Size;
Value : in Color_Component)
with Pre => Place <= This.Data_Size;
function Slice
(This : in RGB_Image;
- Low : in Positive;
- High : in Natural)
+ Low : in Positive_Size;
+ High : in Size_Type)
return Color_Component_Array
with Pre => High <= This.Data_Size,
- Post => Slice'Result'Length = Integer'Max (0, High - Low + 1);
+ Post => Slice'Result'Length = Size_Type'Max (0, High - Low + 1);
procedure Overwrite
(This : in out RGB_Image;
- Place : in Positive;
+ Place : in Positive_Size;
Values : in Color_Component_Array)
with Pre => Place + Values'Length - 1 <= This.Data_Size;
@@ -106,7 +106,8 @@ with Post => All_Data'Result'Length = This.Data_Size;
<tr>
<td><pre>
-Fl_RGB_Image(const uchar *bits, int W, int H, int D=3, int LD=0);
+Fl_RGB_Image(const uchar *bits, int W, int H,
+ int D=3, int LD=0);
</pre></td>
<td><pre>
function Create
@@ -116,8 +117,8 @@ function Create
Line_Size : in Natural := 0)
return RGB_Image
with Pre => (if Line_Size = 0
- then Data'Length = Width * Height * Depth
- else Data'Length = Line_Size * Height)
+ then Data'Length >= Size_Type (Width) * Size_Type (Height) * Size_Type (Depth)
+ else Data'Length >= Size_Type (Line_Size) * Size_Type (Height))
and Data'Length <= Get_Max_Size;
</pre></td>
</tr>
@@ -147,7 +148,7 @@ static void max_size(size_t size);
</pre></td>
<td><pre>
procedure Set_Max_Size
- (Value : in Natural);
+ (Value : in Size_Type);
</pre></td>
</tr>
@@ -157,7 +158,7 @@ static size_t max_size();
</pre></td>
<td><pre>
function Get_Max_Size
- return Natural;
+ return Size_Type;
</pre></td>
</tr>
diff --git a/fltkada.gpr b/fltkada.gpr
index d09f775..3c493bb 100644
--- a/fltkada.gpr
+++ b/fltkada.gpr
@@ -10,13 +10,15 @@ library project FLTKAda is
for Languages use ("Ada", "C++");
- for Source_Dirs use ("body", "spec");
- for Object_Dir use "obj";
- for Library_Dir use "lib";
+ for Source_Dirs use ("body", "spec");
+ for Object_Dir use "obj";
+ for Library_Dir use "lib";
for Library_Name use "fltkada";
for Library_Kind use "dynamic";
+ package Builder renames Common.Builder;
package Compiler renames Common.Compiler;
+ package Binder renames Common.Binder;
end FLTKAda;
diff --git a/progress.txt b/progress.txt
index 9130e3c..ec58583 100644
--- a/progress.txt
+++ b/progress.txt
@@ -1,15 +1,12 @@
-
Approximate Progress List
-
Overall estimate: 85+%
-
Done:
FLTK
@@ -130,14 +127,12 @@ FLTK.Widgets.Valuators.Value_Outputs
-
Partially Done:
Fl_Graphics_Driver / FLTK.Devices.Graphics
-
To-Do:
Fl_GDI_Graphics_Driver
@@ -168,7 +163,6 @@ Fl_PostScript_File_Device (internal Fl_PostScript_Graphics_Driver)
-
Never:
(C++ binary plugins) (I have no idea how to bind these)
@@ -189,7 +183,6 @@ Fl_System_Printer
-
Bugs to fix:
Fl_Wizard draw() method private/protected
@@ -209,7 +202,6 @@ possibly this hasn't been noticed because it's only visible to doxygen
-
Incomplete APIs:
FLTK
diff --git a/proj/common.gpr b/proj/common.gpr
index 64c4dc1..0da596c 100644
--- a/proj/common.gpr
+++ b/proj/common.gpr
@@ -3,12 +3,101 @@
abstract project Common is
+ type Build_Kind is ("release", "debug");
+
+ Ver : Build_Kind := external ("build", "release");
+
+
+ package Builder is
+ for Default_Switches ("Ada") use ("-j4", "-m");
+ for Global_Compilation_Switches ("Ada") use ("-shared");
+
+ case Ver is
+
+ when "release" =>
+ null;
+
+ when "debug" =>
+ for Default_Switches ("Ada") use Builder'Default_Switches ("Ada") & "-g";
+
+ end case;
+ end Builder;
+
+
+ Ada_Common :=
+ ("-gnaty"
+ & "4" -- indentation
+ & "a" -- attribute casing
+ & "A" -- array attribute indices
+ & "b" -- blanks at end of lines
+ & "c" -- two space comments
+ & "e" -- end/exit labels
+ & "f" -- no form feeds or vertical tabs
+ & "h" -- no horizontal tabs
+ & "i" -- if/then layout
+ & "k" -- keyword casing
+ & "l" -- reference manual layout
+ & "M100" -- max line length
+ & "n" -- package Standard casing
+ & "p" -- pragma casing
+ & "r" -- identifier casing
+ & "t", -- token separation
+ "-gnatw"
+ & "a" -- various warning modes
+ & "F" -- don't check for unreferenced formal parameters
+ & "J" -- don't check for obsolescent feature use
+ & "U"); -- don't check for unused entities
+
+ CPP_Common :=
+ ("-Wall",
+ "-Werror",
+ "-Wextra",
+ "-Wpedantic",
+ "-std=c++11");
+
package Compiler is
- for Default_Switches ("Ada") use ("-gnaty4aAbcefhiklM100nprt");
- for Default_Switches("C++") use ("-Wall","-Wextra","-std=c++11");
+ case Ver is
+
+ when "release" =>
+ for Default_Switches ("Ada") use Ada_Common & "-O3" & "-gnatn";
+ for Default_Switches ("C++") use CPP_Common & "-O3";
+
+ when "debug" =>
+ for Default_Switches ("Ada") use Ada_Common & "-O0" & "-gnata" & "-gnato" & "-g";
+ for Default_Switches ("C++") use CPP_Common & "-O0";
+
+ end case;
end Compiler;
+ package Binder is
+ for Default_Switches ("Ada") use ("-shared");
+
+ case Ver is
+
+ when "release" =>
+ null;
+
+ when "debug" =>
+ for Default_Switches ("Ada") use Binder'Default_Switches ("Ada") & "-Es";
+
+ end case;
+ end Binder;
+
+
+ package Linker is
+ case Ver is
+
+ when "release" =>
+ null;
+
+ when "debug" =>
+ for Default_Switches ("Ada") use ("-g");
+
+ end case;
+ end Linker;
+
+
end Common;
diff --git a/readme.md b/readme.md
new file mode 100644
index 0000000..ce1da36
--- /dev/null
+++ b/readme.md
@@ -0,0 +1,87 @@
+
+## FLTKAda
+
+This is a thick, high level binding for the [FLTK](https://www.fltk.org/)
+graphical widget library to the Ada programming language using only the
+standard C FFI.
+
+Types have been marshalled. Class hierarchies have been mapped to equivalent
+packages and tagged records. Controlled types have been used to make allocation
+and deallocation automatic for objects. Overrideable methods called from the
+FLTK event loop have been thunked. Iterators have been implemented. And a few
+convenience subprograms have been provided.
+
+Some of the FLTK test and example programs have also been ported.
+
+For documentation on what C++ function, method, or class corresponds to what
+Ada function, procedure, or package, see `index.html` in the `doc`
+subdirectory.
+
+
+
+#### Dependencies
+
+Build time:
+<ul>
+ <li>FLTK</li>
+ <li>g++</li>
+ <li>GNAT</li>
+ <li>GPRbuild</li>
+</ul>
+
+Run time:
+<ul>
+ <li>FLTK</li>
+</ul>
+
+It may be possible to use alternate compilation tooling but this has not been
+tested. If attempted, some manual modification of project files may be
+necessary.
+
+Note that at this time only FLTK 1.3 is supported.
+
+
+
+#### Building and Installation
+
+This repository is written to use the GNAT Project Manager build tools. To
+build, use the following command
+
+`gprbuild fltkada.gpr`
+
+There is a single build switch of `-Xbuild` which can have a value of `release`
+(the default) or `debug`. The other project files in the main directory can be
+used with similar build commands to build tests, examples, and tools.
+
+To install the binding, use
+
+`gprinstall -p -m fltkada.gpr`
+
+For further information on the build tools, consult the
+[GPRbuild docs](https://docs.adacore.com/gprbuild-docs/html/gprbuild_ug.html).
+
+
+
+#### Technical Notes
+
+As part of its normal operation, FLTK calls a Widget's Draw and Handle methods
+from its main loop to deal with draw and input events. Since it's another part
+of the program that is invoking them, even if it's a part the programmer has no
+direct control over, this binding is set up so that if you override Draw or
+Handle the behaviour will change.
+
+On the other hand, something like the Push method in tabbed groups is usually
+invoked from within that same tabbed group widget's Handle method. Therefore,
+keeping consistency with Ada semantics, overriding the Push method will NOT
+change the behaviour of the corresponding Handle method. You must also override
+Handle.
+
+
+
+#### Credits and Licensing
+
+Written by Jedidiah Barber.
+
+Released into the public domain. For details see `unlicense.txt`.
+
+
diff --git a/readme.txt b/readme.txt
deleted file mode 100644
index 67d4b40..0000000
--- a/readme.txt
+++ /dev/null
@@ -1,61 +0,0 @@
-
-
-FLTK Binding for the Ada Programming Language
-=============================================
-
-
-
-
-This is a thick binding. In particular, dynamic allocation of FLTK objects is
-not necessary as in Ada they can be placed on the stack and automatically cleaned
-up. Ada 2012 iterators have also been made available for the Fl_Group and Fl_Menu
-bindings.
-
-For documentation on what C++ method or class corresponds to what Ada function,
-procedure, or package, see the /doc/index.html file.
-
-
-
-
-Dependencies:
-
- GNAT
- FLTK
-
-
-
-
-How to build/install:
-
-This repository is written to use the GNAT Project Manager build tools. To build
-this FLTK-Ada binding for testing purposes, use the following command
-
- gprbuild fltkada.gpr
-
-And to install the binding, use
-
- gprinstall -p -m fltkada.gpr
-
-
-
-
-For further information on the build tools, consult
-
- https://docs.adacore.com/gprbuild-docs/html/gprbuild_ug.html
-
-
-
-
-A technical note on callbacks and overriding:
-
-As part of its normal operation, FLTK calls a Widget's Draw and Handle methods from its
-main loop to deal with draw and input events. Since it's another part of the program
-that is invoking them, even if it's a part the programmer has no direct control over,
-this binding is set up so that if you override Draw or Handle, the behaviour will change.
-
-On the other hand, something like the Push method in tabbed groups is usually invoked
-from within that same tabbed group widget's Handle method. Therefore, keeping consistency
-with Ada semantics, overriding the Push method will NOT change the behaviour of the
-corresponding Handle method. You must also override Handle.
-
-
diff --git a/spec/fltk-asks.ads b/spec/fltk-asks.ads
index 75296d3..23e2076 100644
--- a/spec/fltk-asks.ads
+++ b/spec/fltk-asks.ads
@@ -172,6 +172,10 @@ package FLTK.Asks is
(Font : in Font_Kind;
Size : in Font_Size);
+ -- Technically the returned Box should have a parent, but you can't access
+ -- it for annoying technical reasons relating to how the Choice functions
+ -- work in C++. You shouldn't be trying to poke at those internals anyway.
+ -- Just stick to calling subprograms to change stuff about this Box.
function Get_Message_Icon
return FLTK.Widgets.Boxes.Box_Reference;
diff --git a/spec/fltk-draw.ads b/spec/fltk-draw.ads
index 950a247..a2c66f3 100644
--- a/spec/fltk-draw.ads
+++ b/spec/fltk-draw.ads
@@ -252,9 +252,12 @@ package FLTK.Draw is
(X, Y, W, H : in Integer;
Data : in Color_Component_Array;
Depth : in Positive := 3;
- Line_Data : in Natural := 0;
+ Line_Size : in Natural := 0;
Flip_Horizontal : in Boolean := False;
- Flip_Vertical : in Boolean := False);
+ Flip_Vertical : in Boolean := False)
+ with Pre => (if Line_Size = 0
+ then Data'Length >= Size_Type (W) * Size_Type (H) * Size_Type (Depth)
+ else Data'Length >= Size_Type (Line_Size) * Size_Type (H));
procedure Draw_Image
(X, Y, W, H : in Integer;
@@ -265,9 +268,12 @@ package FLTK.Draw is
(X, Y, W, H : in Integer;
Data : in Color_Component_Array;
Depth : in Positive := 1;
- Line_Data : in Natural := 0;
+ Line_Size : in Natural := 0;
Flip_Horizontal : Boolean := False;
- Flip_Vertical : Boolean := False);
+ Flip_Vertical : Boolean := False)
+ with Pre => (if Line_Size = 0
+ then Data'Length >= Size_Type (W) * Size_Type (H) * Size_Type (Depth)
+ else Data'Length >= Size_Type (Line_Size) * Size_Type (H));
procedure Draw_Image_Mono
(X, Y, W, H : in Integer;
@@ -279,7 +285,7 @@ package FLTK.Draw is
Colors : in FLTK.Images.Pixmaps.Color_Definition_Array;
Pixels : in FLTK.Images.Pixmaps.Pixmap_Data;
X, Y : in Integer;
- Hue : in Color := Grey0_Color)
+ Tone : in Color := Grey0_Color)
with Pre =>
Colors'Length = Values.Colors and
Pixels'Length (1) = Values.Height and
@@ -292,9 +298,9 @@ package FLTK.Draw is
Alpha : in Integer := 0)
return Color_Component_Array
with Post =>
- (if Alpha = 0
- then Read_Image'Result'Length = W * H * 3
- else Read_Image'Result'Length = W * H * 4);
+ (if Alpha = 0
+ then Read_Image'Result'Length = Size_Type (W) * Size_Type (H) * 3
+ else Read_Image'Result'Length = Size_Type (W) * Size_Type (H) * 4);
diff --git a/spec/fltk-environment.ads b/spec/fltk-environment.ads
index d4a1322..9ab7f7c 100644
--- a/spec/fltk-environment.ads
+++ b/spec/fltk-environment.ads
@@ -317,7 +317,6 @@ private
pragma Convention (C, Binary_Data);
- pragma Pack (Binary_Data);
for Binary_Data'Component_Size use Interfaces.C.CHAR_BIT;
diff --git a/spec/fltk-events.ads b/spec/fltk-events.ads
index 6a556ff..5dbc573 100644
--- a/spec/fltk-events.ads
+++ b/spec/fltk-events.ads
@@ -6,11 +6,12 @@
with
- FLTK.Widgets.Groups.Windows;
+ FLTK.Widgets.Groups.Windows,
+ System;
private with
- Ada.Containers.Vectors,
+ Ada.Finalization,
System.Address_To_Access_Conversions;
@@ -27,15 +28,33 @@ package FLTK.Events is
return Event_Outcome;
+ type System_Event is new System.Address;
+
+ type System_Handler is access function
+ (Event : in System_Event)
+ return Event_Outcome;
+
+
-- Handlers --
procedure Add_Handler
- (Func : in Event_Handler);
+ (Func : in not null Event_Handler);
procedure Remove_Handler
- (Func : in Event_Handler);
+ (Func : in not null Event_Handler);
+
+ procedure Add_System_Handler
+ (Func : in not null System_Handler);
+
+ procedure Remove_System_Handler
+ (Func : in not null System_Handler);
+
+
+
+
+ -- Dispatch --
function Get_Dispatch
return Event_Dispatch;
@@ -255,11 +274,6 @@ private
(FLTK.Widgets.Groups.Windows.Window'Class);
- package Handler_Vectors is new Ada.Containers.Vectors
- (Index_Type => Positive, Element_Type => Event_Handler);
-
-
- Handlers : Handler_Vectors.Vector := Handler_Vectors.Empty_Vector;
Current_Dispatch : Event_Dispatch := null;
@@ -275,6 +289,9 @@ private
pragma Inline (Add_Handler);
pragma Inline (Remove_Handler);
+ pragma Inline (Add_System_Handler);
+ pragma Inline (Remove_System_Handler);
+
pragma Inline (Get_Dispatch);
pragma Inline (Set_Dispatch);
pragma Inline (Handle_Dispatch);
@@ -333,6 +350,15 @@ private
pragma Inline (Key_Shift);
+ -- Needed to deregister the handlers
+ type FLTK_Events_Final_Controller is new Ada.Finalization.Limited_Controlled with null record;
+
+ overriding procedure Finalize
+ (This : in out FLTK_Events_Final_Controller);
+
+ Cleanup : FLTK_Events_Final_Controller;
+
+
end FLTK.Events;
diff --git a/spec/fltk-images-bitmaps.ads b/spec/fltk-images-bitmaps.ads
index b31885c..9577273 100644
--- a/spec/fltk-images-bitmaps.ads
+++ b/spec/fltk-images-bitmaps.ads
@@ -15,9 +15,9 @@ package FLTK.Images.Bitmaps is
- -- Rounds a number of bits up to the next byte boundary.
+ -- Calculates the bytes needed to hold a given number of bits.
- function To_Next_Byte
+ function Bytes_Needed
(Bits : in Natural)
return Natural;
@@ -33,7 +33,8 @@ package FLTK.Images.Bitmaps is
(Data : in Color_Component_Array;
Width, Height : in Natural)
return Bitmap
- with Pre => Data'Length = To_Next_Byte (Width) * Height;
+ with Pre =>
+ Data'Length >= Size_Type (Bytes_Needed (Width)) * Size_Type (Height);
end Forge;
@@ -66,31 +67,31 @@ package FLTK.Images.Bitmaps is
function Data_Size
(This : in Bitmap)
- return Natural;
+ return Size_Type;
function Get_Datum
(This : in Bitmap;
- Place : in Positive)
+ Place : in Positive_Size)
return Color_Component
with Pre => Place <= This.Data_Size;
procedure Set_Datum
(This : in out Bitmap;
- Place : in Positive;
+ Place : in Positive_Size;
Value : in Color_Component)
with Pre => Place <= This.Data_Size;
function Slice
(This : in Bitmap;
- Low : in Positive;
- High : in Natural)
+ Low : in Positive_Size;
+ High : in Size_Type)
return Color_Component_Array
with Pre => High <= This.Data_Size,
- Post => Slice'Result'Length = Integer'Max (0, High - Low + 1);
+ Post => Slice'Result'Length = Size_Type'Max (0, High - Low + 1);
procedure Overwrite
(This : in out Bitmap;
- Place : in Positive;
+ Place : in Positive_Size;
Values : in Color_Component_Array)
with Pre => Place + Values'Length - 1 <= This.Data_Size;
@@ -123,7 +124,7 @@ private
(This : in out Bitmap);
- pragma Inline (To_Next_Byte);
+ pragma Inline (Bytes_Needed);
pragma Inline (Copy);
diff --git a/spec/fltk-images-rgb.ads b/spec/fltk-images-rgb.ads
index daa31c6..d893cec 100644
--- a/spec/fltk-images-rgb.ads
+++ b/spec/fltk-images-rgb.ads
@@ -25,10 +25,10 @@ package FLTK.Images.RGB is
-- Static Settings --
function Get_Max_Size
- return Natural;
+ return Size_Type;
procedure Set_Max_Size
- (Value : in Natural);
+ (Value : in Size_Type);
@@ -45,8 +45,8 @@ package FLTK.Images.RGB is
Line_Size : in Natural := 0)
return RGB_Image
with Pre => (if Line_Size = 0
- then Data'Length = Width * Height * Depth
- else Data'Length = Line_Size * Height)
+ then Data'Length >= Size_Type (Width) * Size_Type (Height) * Size_Type (Depth)
+ else Data'Length >= Size_Type (Line_Size) * Size_Type (Height))
and Data'Length <= Get_Max_Size;
function Create
@@ -98,31 +98,31 @@ package FLTK.Images.RGB is
function Data_Size
(This : in RGB_Image)
- return Natural;
+ return Size_Type;
function Get_Datum
(This : in RGB_Image;
- Place : in Positive)
+ Place : in Positive_Size)
return Color_Component
with Pre => Place <= This.Data_Size;
procedure Set_Datum
(This : in out RGB_Image;
- Place : in Positive;
+ Place : in Positive_Size;
Value : in Color_Component)
with Pre => Place <= This.Data_Size;
function Slice
(This : in RGB_Image;
- Low : in Positive;
- High : in Natural)
+ Low : in Positive_Size;
+ High : in Size_Type)
return Color_Component_Array
with Pre => High <= This.Data_Size,
- Post => Slice'Result'Length = Integer'Max (0, High - Low + 1);
+ Post => Slice'Result'Length = Size_Type'Max (0, High - Low + 1);
procedure Overwrite
(This : in out RGB_Image;
- Place : in Positive;
+ Place : in Positive_Size;
Values : in Color_Component_Array)
with Pre => Place + Values'Length - 1 <= This.Data_Size;
diff --git a/spec/fltk-static.ads b/spec/fltk-static.ads
index 6b54878..4f71244 100644
--- a/spec/fltk-static.ads
+++ b/spec/fltk-static.ads
@@ -6,16 +6,26 @@
with
+ FLTK.Labels,
FLTK.Widgets.Groups.Windows;
private with
- Interfaces.C;
+ Ada.Finalization,
+ Ada.Unchecked_Conversion,
+ FLTK.Args_Marshal,
+ Interfaces.C.Strings;
package FLTK.Static is
+ -- Input is the argument index usable with Ada.Command_Line.
+ -- Output is how many arguments parsed starting from that index.
+ type Args_Handler is access function
+ (Index : in Positive)
+ return Natural;
+
type Awake_Handler is access procedure;
type Idle_Handler is access procedure;
@@ -31,15 +41,38 @@ package FLTK.Static is
type File_Descriptor is new Integer;
- type File_Mode is (Read, Write, Except);
+ type File_Mode is record
+ Read : Boolean := False;
+ Write : Boolean := False;
+ Except : Boolean := False;
+ end record;
+
+ function "+" (Left, Right : in File_Mode) return File_Mode;
+ function "-" (Left, Right : in File_Mode) return File_Mode;
+
+ Read_Mode : constant File_Mode;
+ Write_Mode : constant File_Mode;
+ Except_Mode : constant File_Mode;
type File_Handler is access procedure
(FD : in File_Descriptor);
+ subtype Byte_Integer is Integer range 0 .. 255;
+
type Box_Draw_Function is access procedure
(X, Y, W, H : in Integer;
- My_Color : in Color);
+ Tone : in Color);
+
+
+ type Label_Draw_Function is access procedure
+ (Item : in FLTK.Labels.Label'Class;
+ X, Y, W, H : in Integer;
+ Position : in Alignment);
+
+ type Label_Measure_Function is access procedure
+ (Item : in FLTK.Labels.Label'Class;
+ W, H : out Integer);
type Option is
@@ -47,20 +80,51 @@ package FLTK.Static is
Visible_Focus,
DND_Text,
Show_Tooltips,
- FNFC_Uses_GTK,
- Last);
+ FNFC_Uses_GTK);
+
+
+ -- According to docs this should be customisable,
+ -- but in C++ it is a constant pointer to constant.
+ Help_Message : constant String;
+
+
+ Argument_Error : exception;
+
+
+
+
+ -- Command Line Arguments --
+
+ function Parse_Arg
+ (Index : in Positive)
+ return Natural;
+
+ procedure Parse_Args;
+
+ -- Not task safe, but you won't need to call this more than once anyway.
+ procedure Parse_Args
+ (Count : out Natural;
+ Func : in Args_Handler := null);
-- Thread Notify --
+ -- Unsure if it is worth actually using this or if mixing tasks, pthreads,
+ -- and whatever other platforms use causes errors in some unexpected way.
+ -- Might be better to rely on FLTK.Check, Ada tasking, and Ada protected types.
+ -- You'll need appropriately declared protected objects to pass messages anyway.
+
procedure Add_Awake_Handler
(Func : in Awake_Handler);
function Get_Awake_Handler
return Awake_Handler;
+ procedure Awake
+ (Func : in Awake_Handler);
+
procedure Awake;
procedure Lock;
@@ -73,14 +137,14 @@ package FLTK.Static is
-- Pre-Eventloop Callbacks --
procedure Add_Check
- (Func : in Timeout_Handler);
+ (Func : in not null Timeout_Handler);
function Has_Check
- (Func : in Timeout_Handler)
+ (Func : in not null Timeout_Handler)
return Boolean;
procedure Remove_Check
- (Func : in Timeout_Handler);
+ (Func : in not null Timeout_Handler);
@@ -88,19 +152,19 @@ package FLTK.Static is
-- Timer Callbacks --
procedure Add_Timeout
- (Seconds : in Long_Float;
- Func : in Timeout_Handler);
+ (Seconds : in Long_Float;
+ Func : in not null Timeout_Handler);
function Has_Timeout
- (Func : in Timeout_Handler)
+ (Func : in not null Timeout_Handler)
return Boolean;
procedure Remove_Timeout
- (Func : in Timeout_Handler);
+ (Func : in not null Timeout_Handler);
procedure Repeat_Timeout
- (Seconds : in Long_Float;
- Func : in Timeout_Handler);
+ (Seconds : in Long_Float;
+ Func : in not null Timeout_Handler);
@@ -108,10 +172,10 @@ package FLTK.Static is
-- Clipboard Callbacks --
procedure Add_Clipboard_Notify
- (Func : in Clipboard_Notify_Handler);
+ (Func : in not null Clipboard_Notify_Handler);
procedure Remove_Clipboard_Notify
- (Func : in Clipboard_Notify_Handler);
+ (Func : in not null Clipboard_Notify_Handler);
@@ -119,13 +183,13 @@ package FLTK.Static is
-- File Descriptor Waiting Callbacks --
procedure Add_File_Descriptor
- (FD : in File_Descriptor;
- Func : in File_Handler);
+ (FD : in File_Descriptor;
+ Func : in not null File_Handler);
procedure Add_File_Descriptor
- (FD : in File_Descriptor;
- Mode : in File_Mode;
- Func : in File_Handler);
+ (FD : in File_Descriptor;
+ Mode : in File_Mode;
+ Func : in not null File_Handler);
procedure Remove_File_Descriptor
(FD : in File_Descriptor);
@@ -140,32 +204,46 @@ package FLTK.Static is
-- Idle Callbacks --
procedure Add_Idle
- (Func : in Idle_Handler);
+ (Func : in not null Idle_Handler);
function Has_Idle
- (Func : in Idle_Handler)
+ (Func : in not null Idle_Handler)
return Boolean;
procedure Remove_Idle
- (Func : in Idle_Handler);
+ (Func : in not null Idle_Handler);
-- Custom Colors --
+ function Get_Color
+ (From : in Color)
+ return Color;
+
procedure Get_Color
(From : in Color;
R, G, B : out Color_Component);
procedure Set_Color
- (To : in Color;
+ (Target, Source : in Color);
+
+ procedure Set_Color
+ (Target : in Color;
R, G, B : in Color_Component);
procedure Free_Color
(Value : in Color;
Overlay : in Boolean := False);
+ function Get_Box_Color
+ (Tone : in Color)
+ return Color;
+
+ procedure Set_Box_Color
+ (Tone : in Color);
+
procedure Own_Colormap;
procedure Set_Foreground
@@ -193,7 +271,11 @@ package FLTK.Static is
return String;
procedure Set_Font_Kind
- (To, From : in Font_Kind);
+ (Target, Source : in Font_Kind);
+
+ procedure Set_Font_Kind
+ (Target : in Font_Kind;
+ Source : in String);
function Font_Sizes
(Kind : in Font_Kind)
@@ -229,15 +311,28 @@ package FLTK.Static is
function Draw_Box_Active
return Boolean;
- -- function Get_Box_Draw_Function
- -- (Kind : in Box_Kind)
- -- return Box_Draw_Function;
+ function Get_Box_Draw_Function
+ (Kind : in Box_Kind)
+ return Box_Draw_Function;
+
+ procedure Set_Box_Draw_Function
+ (Kind : in Box_Kind;
+ Func : in Box_Draw_Function;
+ Offset_X, Offset_Y : in Byte_Integer := 0;
+ Offset_W, Offset_H : in Byte_Integer := 0);
+
+
+
- -- procedure Set_Box_Draw_Function
- -- (Kind : in Box_Kind;
- -- Func : in Box_Draw_Function;
- -- Offset_X, Offset_Y : in Integer := 0;
- -- Offset_W, Offset_H : in Integer := 0);
+ -- Label_Kind Attributes --
+
+ procedure Set_Label_Kind
+ (Target, Source : in Label_Kind);
+
+ procedure Set_Label_Draw_Function
+ (Kind : in Label_Kind;
+ Draw_Func : in Label_Draw_Function;
+ Measure_Func : in Label_Measure_Function);
@@ -256,6 +351,10 @@ package FLTK.Static is
(Owner : in FLTK.Widgets.Widget'Class;
Text : in String);
+ function Clipboard_Contains
+ (Kind : in String)
+ return Boolean;
+
@@ -352,25 +451,49 @@ package FLTK.Static is
private
- File_Mode_Codes : array (File_Mode) of Interfaces.C.int :=
- (Read => 1, Write => 4, Except => 8);
+ The_Argv : Interfaces.C.Strings.chars_ptr_array := FLTK.Args_Marshal.Create_Argv;
+
+
+ for File_Mode use record
+ Read at 0 range 0 .. 0;
+ -- bit position 1 is unused
+ Write at 0 range 2 .. 2;
+ Except at 0 range 3 .. 3;
+ end record;
+
+ for File_Mode'Size use Interfaces.C.int'Size;
+
+ Read_Mode : constant File_Mode := (Read => True, others => False);
+ Write_Mode : constant File_Mode := (Write => True, others => False);
+ Except_Mode : constant File_Mode := (Except => True, others => False);
+
+ function FMode_To_Cint is new
+ Ada.Unchecked_Conversion (File_Mode, Interfaces.C.int);
+
+
+ help_usage_string_ptr : Interfaces.C.Strings.chars_ptr;
+ pragma Import (C, help_usage_string_ptr, "fl_help_usage_string_ptr");
+
+ Help_Message : constant String := Interfaces.C.Strings.Value (help_usage_string_ptr);
+
+
+ Font_Overrides : array (Font_Kind) of Interfaces.C.Strings.chars_ptr;
- pragma Import (C, Awake, "fl_static_awake");
pragma Import (C, Lock, "fl_static_lock");
pragma Import (C, Unlock, "fl_static_unlock");
pragma Import (C, Own_Colormap, "fl_static_own_colormap");
pragma Import (C, System_Colors, "fl_static_get_system_colors");
- pragma Import (C, Drag_Drop_Start, "fl_static_dnd");
-
pragma Import (C, Enable_System_Input, "fl_static_enable_im");
pragma Import (C, Disable_System_Input, "fl_static_disable_im");
pragma Import (C, Reload_Scheme, "fl_static_reload_scheme");
+ pragma Inline (Parse_Arg);
+
pragma Inline (Add_Awake_Handler);
pragma Inline (Get_Awake_Handler);
pragma Inline (Awake);
@@ -399,6 +522,8 @@ private
pragma Inline (Get_Color);
pragma Inline (Set_Color);
pragma Inline (Free_Color);
+ pragma Inline (Get_Box_Color);
+ pragma Inline (Set_Box_Color);
pragma Inline (Own_Colormap);
pragma Inline (Set_Foreground);
pragma Inline (Set_Background);
@@ -417,12 +542,16 @@ private
pragma Inline (Get_Box_Y_Offset);
pragma Inline (Set_Box_Kind);
pragma Inline (Draw_Box_Active);
- -- pragma Inline (Get_Box_Draw_Function);
- -- pragma Inline (Set_Box_Draw_Function);
+ pragma Inline (Get_Box_Draw_Function);
+ pragma Inline (Set_Box_Draw_Function);
+
+ pragma Inline (Set_Label_Kind);
+ pragma Inline (Set_Label_Draw_Function);
pragma Inline (Copy);
pragma Inline (Paste);
pragma Inline (Selection);
+ pragma Inline (Clipboard_Contains);
pragma Inline (Drag_Drop_Start);
pragma Inline (Get_Drag_Drop_Text_Support);
@@ -451,6 +580,15 @@ private
pragma Inline (Set_Default_Scrollbar_Size);
+ -- Needed to dealloc the argv array and deregister the clipboard notify handler
+ type FLTK_Static_Final_Controller is new Ada.Finalization.Limited_Controlled with null record;
+
+ overriding procedure Finalize
+ (This : in out FLTK_Static_Final_Controller);
+
+ Cleanup : FLTK_Static_Final_Controller;
+
+
end FLTK.Static;
diff --git a/spec/fltk-widgets-groups-windows.ads b/spec/fltk-widgets-groups-windows.ads
index dfa51d6..e2f9b3e 100644
--- a/spec/fltk-widgets-groups-windows.ads
+++ b/spec/fltk-widgets-groups-windows.ads
@@ -8,10 +8,6 @@ with
FLTK.Images.RGB;
-private with
-
- Interfaces.C.Strings;
-
package FLTK.Widgets.Groups.Windows is
diff --git a/spec/fltk-widgets-inputs.ads b/spec/fltk-widgets-inputs.ads
index 12fcb77..6de80da 100644
--- a/spec/fltk-widgets-inputs.ads
+++ b/spec/fltk-widgets-inputs.ads
@@ -10,8 +10,7 @@ limited with
private with
- Interfaces.C.Strings,
- System;
+ Interfaces.C.Strings;
package FLTK.Widgets.Inputs is
diff --git a/spec/fltk-widgets-menus-menu_buttons.ads b/spec/fltk-widgets-menus-menu_buttons.ads
index 033e3e5..7a93a6d 100644
--- a/spec/fltk-widgets-menus-menu_buttons.ads
+++ b/spec/fltk-widgets-menus-menu_buttons.ads
@@ -4,10 +4,6 @@
-- Released into the public domain
-with
-
- FLTK.Menu_Items;
-
limited with
FLTK.Widgets.Groups;
diff --git a/spec/fltk.ads b/spec/fltk.ads
index 2a38434..964af79 100644
--- a/spec/fltk.ads
+++ b/spec/fltk.ads
@@ -6,7 +6,8 @@
with
- Ada.Finalization;
+ Ada.Finalization,
+ System;
private with
@@ -34,18 +35,22 @@ package FLTK is
-- Text buffers for marshalling purposes will be this size.
Buffer_Size : constant Natural := 1024;
+ -- For image data arrays.
+ type Size_Type is mod 2 ** System.Word_Size;
+ subtype Positive_Size is Size_Type range 1 .. Size_Type'Last;
+
-- Color --
- -- Values scale from A/Black to X/White
+ -- Values scale from A/Black to X/White.
type Greyscale is new Character range 'A' .. 'X';
type Color is mod 2**32;
type Color_Component is mod 256;
- type Color_Component_Array is array (Positive range <>) of aliased Color_Component;
+ type Color_Component_Array is array (Positive_Size range <>) of aliased Color_Component;
subtype Blend is Float range 0.0 .. 1.0;
@@ -593,7 +598,6 @@ private
for Color_Component_Array'Component_Size use Interfaces.C.CHAR_BIT;
pragma Convention (C, Color_Component_Array);
- pragma Pack (Color_Component_Array);
diff --git a/test/animated.adb b/test/animated.adb
index 42d2a49..4f6f590 100644
--- a/test/animated.adb
+++ b/test/animated.adb
@@ -34,7 +34,8 @@ is
Dimension : constant Integer := 256;
- subtype Image_Data is FLTK.Color_Component_Array (1 .. Dimension ** 2 * Channels);
+ subtype Image_Data is FLTK.Color_Component_Array
+ (1 .. FLTK.Size_Type (Dimension ** 2 * Channels));
type Image_Data_Array is array (Positive range <>) of Image_Data;
@@ -43,7 +44,7 @@ is
begin
for X in Integer range 0 .. 9 loop
for Y in Integer range 0 .. 9 loop
- Store (Y * Dimension * Channels + X * Channels + 4) := 255;
+ Store (FLTK.Size_Type (Channels * (Y * Dimension + X) + 4)) := 255;
end loop;
end loop;
end Black_Box_Corner;
@@ -82,10 +83,10 @@ is
My_Alpha := FLTK.Color_Component (Float (My_Alpha) * (1.0 - Fill) * 10.0);
end if;
- Store (Y * Dimension * Channels + X * Channels + 1) := Grey;
- Store (Y * Dimension * Channels + X * Channels + 2) := Grey;
- Store (Y * Dimension * Channels + X * Channels + 3) := Grey;
- Store (Y * Dimension * Channels + X * Channels + 4) := My_Alpha;
+ Store (FLTK.Size_Type (Channels * (Y * Dimension + X) + 1)) := Grey;
+ Store (FLTK.Size_Type (Channels * (Y * Dimension + X) + 2)) := Grey;
+ Store (FLTK.Size_Type (Channels * (Y * Dimension + X) + 3)) := Grey;
+ Store (FLTK.Size_Type (Channels * (Y * Dimension + X) + 4)) := My_Alpha;
end if;
end loop;
end loop;
@@ -106,8 +107,10 @@ is
if (X + X_Offset >= 0) and (X + X_Offset < Dimension) then
for Y in Integer range Y_Offset - W .. Y_Offset + W - 1 loop
Grey := FLTK.Color_Component (abs (Y - Y_Offset));
- Store (Y * Dimension * Channels + (X + X_Offset) * Channels + 3) := Grey;
- Store (Y * Dimension * Channels + (X + X_Offset) * Channels + 4) := 127;
+ Store (FLTK.Size_Type
+ (Channels * (Y * Dimension + (X + X_Offset)) + 3)) := Grey;
+ Store (FLTK.Size_Type
+ (Channels * (Y * Dimension + (X + X_Offset)) + 4)) := 127;
end loop;
end if;
end loop;
@@ -130,7 +133,7 @@ is
Frame_Image_Data : constant Image_Data_Array := Make_Image_Data;
-- This syntax requires Ada 2022, but it allows all overt heap usage to be avoided
- Frame_Images : array (Positive range <>) of RGB.RGB_Image :=
+ Frame_Images : constant array (Positive range <>) of RGB.RGB_Image :=
(for Index in Frame_Image_Data'Range =>
RGB.Forge.Create (Frame_Image_Data (Index), Dimension, Dimension, Channels));
diff --git a/test/ask.adb b/test/ask.adb
index cb12fff..81ab104 100644
--- a/test/ask.adb
+++ b/test/ask.adb
@@ -16,7 +16,6 @@ with
FLTK.Widgets.Boxes,
FLTK.Widgets.Buttons,
FLTK.Widgets.Buttons.Enter,
- FLTK.Widgets.Inputs.Text,
FLTK.Widgets.Groups.Windows.Double;
use type
@@ -38,7 +37,6 @@ is
package BX renames FLTK.Widgets.Boxes;
package BTN renames FLTK.Widgets.Buttons;
package ENT renames FLTK.Widgets.Buttons.Enter;
- package INP renames FLTK.Widgets.Inputs.Text;
package WD renames FLTK.Widgets.Groups.Windows.Double;
@@ -54,7 +52,7 @@ is
procedure Rename_Me
(Item : in out FLTK.Widgets.Widget'Class)
is
- Input : String := AK.Text_Input ("Input:", Item.Get_Label);
+ Input : constant String := AK.Text_Input ("Input:", Item.Get_Label);
begin
Update_Input_Text (Item, Input);
end Rename_Me;
@@ -63,7 +61,7 @@ is
procedure Rename_Me_Pwd
(Item : in out FLTK.Widgets.Widget'Class)
is
- Input : String := AK.Password ("Input PWD:", Item.Get_Label);
+ Input : constant String := AK.Password ("Input PWD:", Item.Get_Label);
begin
Update_Input_Text (Item, Input);
end Rename_Me_Pwd;
@@ -72,7 +70,7 @@ is
procedure Window_Callback
(Item : in out FLTK.Widgets.Widget'Class)
is
- Hotspot : Boolean := AK.Get_Message_Hotspot;
+ Hotspot : constant Boolean := AK.Get_Message_Hotspot;
Reply : AK.Choice_Result;
begin
AK.Set_Message_Hotspot (False);
@@ -91,7 +89,7 @@ is
Stop : Boolean := False;
procedure Timer_Callback is
- Message_Icon : BX.Box_Reference := AK.Get_Message_Icon;
+ Message_Icon : constant BX.Box_Reference := AK.Get_Message_Icon;
My_Color : FLTK.Color;
begin
if Stop then
diff --git a/test/bitmap.adb b/test/bitmap.adb
index 86c1406..04f4793 100644
--- a/test/bitmap.adb
+++ b/test/bitmap.adb
@@ -117,7 +117,7 @@ is
procedure Button_Callback
- (Item : in out FLTK.Widgets.Widget'Class)
+ (Ignore : in out FLTK.Widgets.Widget'Class)
is
New_Align : FLTK.Alignment;
begin
diff --git a/test/button.adb b/test/button.adb
index 9ca6102..1cd6557 100644
--- a/test/button.adb
+++ b/test/button.adb
@@ -29,7 +29,7 @@ is
procedure Beep_Callback
- (This : in out Wdg.Widget'Class) is
+ (Ignore : in out Wdg.Widget'Class) is
begin
Ask.Beep;
end Beep_Callback;
@@ -39,7 +39,7 @@ is
procedure Exit_Callback
- (This : in out Wdg.Widget'Class) is
+ (Ignore : in out Wdg.Widget'Class) is
begin
ACom.Set_Exit_Status (ACom.Success);
The_Window.Hide;
diff --git a/test/buttons.adb b/test/buttons.adb
index e93da8e..a502f44 100644
--- a/test/buttons.adb
+++ b/test/buttons.adb
@@ -9,7 +9,6 @@
with
- FLTK.Tooltips,
FLTK.Widgets.Buttons.Enter,
FLTK.Widgets.Buttons.Light.Check,
FLTK.Widgets.Buttons.Light.Round,
diff --git a/test/clock.adb b/test/clock.adb
index b4d8f40..e550941 100644
--- a/test/clock.adb
+++ b/test/clock.adb
@@ -23,11 +23,11 @@ is
package WD renames FLTK.Widgets.Groups.Windows.Double;
- Window_One : WD.Double_Window := WD.Forge.Create (220, 220, "Fl_Clock");
- Clock_One : CL.Updated_Clock := CL.Forge.Create (Window_One, 0, 0, 220, 220);
+ Window_One : WD.Double_Window := WD.Forge.Create (220, 220, "Fl_Clock");
+ Clock_One : constant CL.Updated_Clock := CL.Forge.Create (Window_One, 0, 0, 220, 220);
- Window_Two : WD.Double_Window := WD.Forge.Create (220, 220, "Fl_Round_Clock");
- Clock_Two : CR.Round_Clock := CR.Forge.Create (Window_Two, 0, 0, 220, 220);
+ Window_Two : WD.Double_Window := WD.Forge.Create (220, 220, "Fl_Round_Clock");
+ Clock_Two : constant CR.Round_Clock := CR.Forge.Create (Window_Two, 0, 0, 220, 220);
begin
diff --git a/test/color_chooser.adb b/test/color_chooser.adb
index 09003b9..1c7537c 100644
--- a/test/color_chooser.adb
+++ b/test/color_chooser.adb
@@ -21,6 +21,7 @@ with
use type
FLTK.Color,
+ FLTK.Size_Type,
FLTK.Asks.Confirm_Result;
@@ -44,14 +45,14 @@ is
return FLTK.Color_Component_Array
is
X_Frac, Y_Frac : Long_Float;
- Offset : Integer;
+ Offset : FLTK.Size_Type;
begin
- return Data : FLTK.Color_Component_Array (1 .. W * H * 3) do
+ return Data : FLTK.Color_Component_Array (1 .. FLTK.Size_Type (W * H * 3)) do
for Y in 0 .. H - 1 loop
Y_Frac := Long_Float (Y) / Long_Float (H - 1);
for X in 0 .. W - 1 loop
X_Frac := Long_Float (X) / Long_Float (W - 1);
- Offset := 3 * (Y * W + X);
+ Offset := 3 * FLTK.Size_Type (Y * W + X);
Data (Offset + 1) :=
FLTK.Color_Component (255.0 * (1.0 - X_Frac) * (1.0 - Y_Frac));
Data (Offset + 2) :=
@@ -66,7 +67,8 @@ is
Image_Width, Image_Height : constant Natural := 100;
- The_Image_Data : FLTK.Color_Component_Array := Make_Image_Data (Image_Width, Image_Height);
+ The_Image_Data : constant FLTK.Color_Component_Array :=
+ Make_Image_Data (Image_Width, Image_Height);
type Pens is new Bx.Box with null record;
@@ -108,7 +110,7 @@ is
procedure Callback_One
- (This : in out FLTK.Widgets.Widget'Class) is
+ (Ignore : in out FLTK.Widgets.Widget'Class) is
begin
My_Color := Ask.Show_Colormap (My_Color);
The_Box.Set_Background_Color (My_Color);
@@ -118,7 +120,7 @@ is
procedure Callback_Two
- (This : in out FLTK.Widgets.Widget'Class)
+ (Ignore : in out FLTK.Widgets.Widget'Class)
is
R, G, B : FLTK.Color_Component;
begin
diff --git a/test/compare.adb b/test/compare.adb
index 2273414..a631416 100644
--- a/test/compare.adb
+++ b/test/compare.adb
@@ -15,11 +15,11 @@ procedure Compare is
package TIO renames Ada.Text_IO;
package FFN renames FLTK.Filenames;
- Aardvark : String := "aardvark";
- Zebra : String := "Zebra";
- Two : String := "item_2";
- Ten : String := "item_10";
- Cap_Ten : String := "Item_10";
+ Aardvark : constant String := "aardvark";
+ Zebra : constant String := "Zebra";
+ Two : constant String := "item_2";
+ Ten : constant String := "item_10";
+ Cap_Ten : constant String := "Item_10";
begin
diff --git a/test/dirlist.adb b/test/dirlist.adb
index 1a07515..a7c159a 100644
--- a/test/dirlist.adb
+++ b/test/dirlist.adb
@@ -39,7 +39,7 @@ begin
end if;
declare
- Name : Fil.Path_String := Fil.Expand (ACom.Argument (1));
+ Name : constant Fil.Path_String := Fil.Expand (ACom.Argument (1));
begin
if not Fil.Is_Directory (Name) then
TIO.Put_Line ("Error: " & Name & " is not a valid directory.");
@@ -48,7 +48,7 @@ begin
end if;
declare
- The_List : Fil.File_List := Fil.Get_Listing (Name, Fil.Alpha_Sort'Access);
+ The_List : constant Fil.File_List := Fil.Get_Listing (Name, Fil.Alpha_Sort'Access);
begin
TIO.Put_Line ("Alphabetical Sort:");
for Index in 1 .. The_List.Length loop
@@ -58,7 +58,7 @@ begin
end;
declare
- The_List : Fil.File_List := Fil.Get_Listing (Name, Fil.Case_Alpha_Sort'Access);
+ The_List : constant Fil.File_List := Fil.Get_Listing (Name, Fil.Case_Alpha_Sort'Access);
begin
TIO.Put_Line ("Case Insensitive Alphabetical Sort:");
for Index in 1 .. The_List.Length loop
@@ -68,7 +68,7 @@ begin
end;
declare
- The_List : Fil.File_List := Fil.Get_Listing (Name, Fil.Numeric_Sort'Access);
+ The_List : constant Fil.File_List := Fil.Get_Listing (Name, Fil.Numeric_Sort'Access);
begin
TIO.Put_Line ("Numeric Sort:");
for Index in 1 .. The_List.Length loop
@@ -78,7 +78,8 @@ begin
end;
declare
- The_List : Fil.File_List := Fil.Get_Listing (Name, Fil.Case_Numeric_Sort'Access);
+ The_List : constant Fil.File_List :=
+ Fil.Get_Listing (Name, Fil.Case_Numeric_Sort'Access);
begin
TIO.Put_Line ("Case Insensitive Numeric Sort:");
for Index in 1 .. The_List.Length loop
diff --git a/test/filename.adb b/test/filename.adb
new file mode 100644
index 0000000..937fba4
--- /dev/null
+++ b/test/filename.adb
@@ -0,0 +1,40 @@
+
+
+-- Programmed by Jedidiah Barber
+-- Released into the public domain
+
+
+with
+
+ Ada.Command_Line,
+ Ada.Text_IO,
+ FLTK.Filenames;
+
+
+procedure Filename is
+
+ package ACom renames Ada.Command_Line;
+ package TIO renames Ada.Text_IO;
+ package Fil renames FLTK.Filenames;
+
+begin
+
+ TIO.Put_Line ("Test program for FLTK filename absolute and expand functions.");
+ TIO.New_Line;
+ TIO.Put ("Input: ");
+
+ if ACom.Argument_Count /= 1 then
+ TIO.Put_Line ("Error: Need exactly one filename argument.");
+ ACom.Set_Exit_Status (ACom.Failure);
+ return;
+ end if;
+
+ TIO.Put_Line (ACom.Argument (1));
+ TIO.New_Line;
+
+ TIO.Put_Line ("Absolute: " & Fil.Absolute (ACom.Argument (1)));
+ TIO.Put_Line ("Expanded: " & Fil.Expand (ACom.Argument (1)));
+
+end Filename;
+
+
diff --git a/test/pixmap.adb b/test/pixmap.adb
index 0ca3982..a9cf6b7 100644
--- a/test/pixmap.adb
+++ b/test/pixmap.adb
@@ -34,15 +34,15 @@ is
package WD renames FLTK.Widgets.Groups.Windows.Double;
- Porsche_Header : Pix.Header := (64, 64, 4, 1);
+ Porsche_Header : constant Pix.Header := (64, 64, 4, 1);
- Porsche_Colors : Pix.Color_Definition_Array :=
+ Porsche_Colors : constant Pix.Color_Definition_Array :=
((Name => +" ", Kind => Pix.Colorful, Value => +"#background"),
(Name => +".", Kind => Pix.Colorful, Value => +"#000000000000"),
(Name => +"X", Kind => Pix.Colorful, Value => +"#ffd100"),
(Name => +"o", Kind => Pix.Colorful, Value => +"#FFFF00000000"));
- Porsche_Data : Pix.Pixmap_Data :=
+ Porsche_Data : constant Pix.Pixmap_Data :=
(" ",
" .......................... ",
" ..................................... ",
@@ -126,7 +126,7 @@ is
procedure Button_Callback
- (Item : in out FLTK.Widgets.Widget'Class)
+ (Ignore : in out FLTK.Widgets.Widget'Class)
is
New_Align : FLTK.Alignment;
begin
diff --git a/tests.gpr b/tests.gpr
index 54165fb..b99863f 100644
--- a/tests.gpr
+++ b/tests.gpr
@@ -12,8 +12,8 @@ project Tests is
for Languages use ("Ada");
for Source_Dirs use ("test");
- for Object_Dir use "obj";
- for Exec_Dir use "bin";
+ for Object_Dir use "obj";
+ for Exec_Dir use "bin";
for Main use
("adjuster.adb",
@@ -26,6 +26,7 @@ project Tests is
"color_chooser.adb",
"cursor.adb",
"dirlist.adb",
+ "filename.adb",
"hello.adb",
"page_formats.adb",
"pixmap.adb");
@@ -41,12 +42,20 @@ project Tests is
for Executable ("color_chooser.adb") use "color_chooser";
for Executable ("cursor.adb") use "cursor";
for Executable ("dirlist.adb") use "dirlist";
+ for Executable ("filename.adb") use "filename";
for Executable ("hello.adb") use "hello";
for Executable ("page_formats.adb") use "page_formats";
for Executable ("pixmap.adb") use "pixmap";
+
+ for Default_Switches ("Ada") use
+ Common.Builder'Default_Switches ("Ada");
+ for Global_Compilation_Switches ("Ada") use
+ Common.Builder'Global_Compilation_Switches ("Ada");
end Builder;
package Compiler renames Common.Compiler;
+ package Binder renames Common.Binder;
+ package Linker renames Common.Linker;
end Tests;
diff --git a/tests_2022.gpr b/tests_2022.gpr
index 84ed425..3c3fd92 100644
--- a/tests_2022.gpr
+++ b/tests_2022.gpr
@@ -12,8 +12,8 @@ project Tests_2022 is
for Languages use ("Ada");
for Source_Dirs use ("test");
- for Object_Dir use "obj";
- for Exec_Dir use "bin";
+ for Object_Dir use "obj";
+ for Exec_Dir use "bin";
for Main use
("animated.adb",
@@ -24,9 +24,16 @@ project Tests_2022 is
for Executable ("animated.adb") use "animated";
for Executable ("arc.adb") use "arc";
for Executable ("curve.adb") use "curve";
+
+ for Default_Switches ("Ada") use
+ Common.Builder'Default_Switches ("Ada");
+ for Global_Compilation_Switches ("Ada") use
+ Common.Builder'Global_Compilation_Switches ("Ada");
end Builder;
package Compiler renames Common.Compiler;
+ package Binder renames Common.Binder;
+ package Linker renames Common.Linker;
end Tests_2022;
diff --git a/tool/template.adb b/tool/template.adb
index a28fff8..4da7da6 100644
--- a/tool/template.adb
+++ b/tool/template.adb
@@ -19,7 +19,6 @@
with
- Ada.Characters.Latin_1,
Ada.Command_Line,
Ada.Containers.Indefinite_Ordered_Maps,
Ada.Direct_IO,
@@ -32,7 +31,6 @@ with
procedure Template is
- package Latin renames Ada.Characters.Latin_1;
package ACom renames Ada.Command_Line;
package ADir renames Ada.Directories;
package SMap renames Ada.Strings.Maps;
diff --git a/tools.gpr b/tools.gpr
index 6374b2a..a362316 100644
--- a/tools.gpr
+++ b/tools.gpr
@@ -11,16 +11,23 @@ project Tools is
for Languages use ("Ada");
for Source_Dirs use ("tool");
- for Object_Dir use "obj";
- for Exec_Dir use "bin";
+ for Object_Dir use "obj";
+ for Exec_Dir use "bin";
for Main use ("template.adb");
package Builder is
for Executable ("template.adb") use "template";
+
+ for Default_Switches ("Ada") use
+ Common.Builder'Default_Switches ("Ada");
+ for Global_Compilation_Switches ("Ada") use
+ Common.Builder'Global_Compilation_Switches ("Ada");
end Builder;
package Compiler renames Common.Compiler;
+ package Binder renames Common.Binder;
+ package Linker renames Common.Linker;
end Tools;