1
1
Fork 0
mirror of https://github.com/QB64-Phoenix-Edition/QB64pe.git synced 2024-08-04 16:30:25 +00:00

Merge pull request #216 from a740g/tfd-support

This implements cross-platform common dialogs for QB64-PE (issue #189)
This commit is contained in:
Samuel Gomes 2022-10-25 10:05:15 +05:30 committed by GitHub
commit bfec18cd92
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
35 changed files with 9596 additions and 186 deletions

View file

@ -126,7 +126,7 @@ endif
GENERATE_LICENSE ?= n
LICENSE ?= $(EXE).license.txt
LICENSE_IN_USE := qb64
LICENSE_IN_USE := qb64 tinyfiledialogs
all: $(EXE)
@ -141,7 +141,7 @@ ifeq ($(OS),lnx)
endif
ifeq ($(OS),win)
CXXLIBS += -static-libgcc -static-libstdc++
CXXLIBS += -static-libgcc -static-libstdc++ -lcomdlg32 -lole32
CXXFLAGS += -DGLEW_STATIC -DFREEGLUT_STATIC
endif
@ -192,6 +192,7 @@ include $(PATH_INTERNAL_C)/parts/core/build.mk
include $(PATH_INTERNAL_C)/parts/input/game_controller/build.mk
include $(PATH_INTERNAL_C)/parts/video/font/ttf/build.mk
include $(PATH_INTERNAL_C)/parts/video/image/build.mk
include $(PATH_INTERNAL_C)/parts/gui/build.mk
.PHONY: all clean

View file

@ -25,6 +25,7 @@
#include "mutex.h"
#include "audio.h"
#include "image.h"
#include "gui.h"
int32 disableEvents = 0;
@ -217,9 +218,6 @@ void log_event(int32 x) {
// forward references
void sub__printimage(int32 i);
void alert(int32 x);
void alert(char *x);
// GUI notification variables
int32 force_display_update = 0;
@ -601,8 +599,7 @@ ptrszint list_add(list *L) {
// note: L->structure is only modified by list_add
L->structure = (uint8 *)calloc(1, L->internal_structure_size * (new_structures_last + 1));
if (L->structure == NULL) {
alert("list_add: failed to allocate new buffer, structure size:");
alert(L->internal_structure_size);
gui_alert("list_add: failed to allocate new buffer, structure size: %lld", (int64_t)L->internal_structure_size);
}
L->structures_last = new_structures_last;
L->structures = 0;
@ -1062,8 +1059,7 @@ int32 new_hardware_img(int32 x, int32 y, uint32 *pixels, int32 flags) {
gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGBA, x, y, GL_BGRA, GL_UNSIGNED_BYTE, pixels);
glerrorcode = glGetError();
if (glerrorcode) {
alert("gluBuild2DMipmaps failed");
alert(glerrorcode);
gui_alert("gluBuild2DMipmaps failed: %i", glerrorcode);
}
hardware_img->source_state.PO2_fix = PO2_FIX__MIPMAPPED;
hardware_img->PO2_w = x;
@ -1100,8 +1096,7 @@ void hardware_img_buffer_to_texture(int32 handle) {
gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGBA, hardware_img->w, hardware_img->h, GL_BGRA, GL_UNSIGNED_BYTE, hardware_img->software_pixel_buffer);
glerrorcode = glGetError();
if (glerrorcode) {
alert("gluBuild2DMipmaps failed");
alert(glerrorcode);
gui_alert("gluBuild2DMipmaps failed: %i", glerrorcode);
}
hardware_img->source_state.PO2_fix = PO2_FIX__MIPMAPPED;
hardware_img->PO2_w = hardware_img->w;
@ -2560,129 +2555,10 @@ int32 exit_ok = 0;
// substitute Windows functionality
#ifndef QB64_WINDOWS
// MessageBox defines
# define IDOK 1
# define IDCANCEL 2
# define IDABORT 3
# define IDRETRY 4
# define IDIGNORE 5
# define IDYES 6
# define IDNO 7
# define MB_OK 0x00000000L
# define MB_OKCANCEL 0x00000001L
# define MB_ABORTRETRYIGNORE 0x00000002L
# define MB_YESNOCANCEL 0x00000003L
# define MB_YESNO 0x00000004L
# define MB_RETRYCANCEL 0x00000005L
# define MB_SYSTEMMODAL 0x00001000L
// alternate implementations of MessageBox
# ifdef QB64_MACOSX
int MessageBox(int ignore, char *message, char *header, int type) {
CFStringRef header_ref = CFStringCreateWithCString(NULL, header, kCFStringEncodingASCII);
CFStringRef message_ref = CFStringCreateWithCString(NULL, message, kCFStringEncodingASCII);
CFOptionFlags result;
if (type & MB_SYSTEMMODAL)
type -= MB_SYSTEMMODAL;
if (type == MB_YESNO) {
CFUserNotificationDisplayAlert(0, // no timeout
kCFUserNotificationNoteAlertLevel, NULL, NULL, NULL, header_ref, message_ref, CFSTR("No"), CFSTR("Yes"), NULL, &result);
CFRelease(header_ref);
CFRelease(message_ref);
if (result == kCFUserNotificationDefaultResponse)
return IDNO;
else
return IDYES;
}
if (type == MB_OK) {
CFUserNotificationDisplayAlert(0, // no timeout
kCFUserNotificationNoteAlertLevel, NULL, NULL, NULL, header_ref, message_ref, CFSTR("OK"), NULL, NULL, &result);
CFRelease(header_ref);
CFRelease(message_ref);
return IDOK;
}
return IDCANCEL;
}
# else
int MessageBox(int ignore, char *message, char *title, int type) {
static qbs *s = NULL;
if (!s)
s = qbs_new(0, 0);
if (type & MB_SYSTEMMODAL)
type -= MB_SYSTEMMODAL;
if (type == MB_YESNO) {
qbs_set(s, qbs_new_txt("xmessage -center -title "));
qbs_set(s, qbs_add(s, qbs_new_txt("?")));
s->chr[s->len - 1] = 34;
qbs_set(s, qbs_add(s, qbs_new_txt(title)));
qbs_set(s, qbs_add(s, qbs_new_txt("?")));
s->chr[s->len - 1] = 34;
qbs_set(s, qbs_add(s, qbs_new_txt(" -buttons Yes:2,No:1 ")));
qbs_set(s, qbs_add(s, qbs_new_txt("?")));
s->chr[s->len - 1] = 34;
qbs_set(s, qbs_add(s, qbs_new_txt(message)));
qbs_set(s, qbs_add(s, qbs_new_txt(" ")));
qbs_set(s, qbs_add(s, qbs_new_txt("?")));
s->chr[s->len - 1] = 34;
qbs_set(s, qbs_add(s, qbs_new_txt("?")));
s->chr[s->len - 1] = 0;
static int status;
status = system((char *)s->chr);
if (-1 != status) {
static int32 r;
r = WEXITSTATUS(status);
if (r == 2)
return IDYES;
if (r == 1)
return IDNO;
}
return IDNO;
} // MB_YESNO
if (type == MB_OK) {
qbs_set(s, qbs_new_txt("xmessage -center -title "));
qbs_set(s, qbs_add(s, qbs_new_txt("?")));
s->chr[s->len - 1] = 34;
qbs_set(s, qbs_add(s, qbs_new_txt(title)));
qbs_set(s, qbs_add(s, qbs_new_txt("?")));
s->chr[s->len - 1] = 34;
qbs_set(s, qbs_add(s, qbs_new_txt(" -buttons OK:1 ")));
qbs_set(s, qbs_add(s, qbs_new_txt("?")));
s->chr[s->len - 1] = 34;
qbs_set(s, qbs_add(s, qbs_new_txt(message)));
qbs_set(s, qbs_add(s, qbs_new_txt(" ")));
qbs_set(s, qbs_add(s, qbs_new_txt("?")));
s->chr[s->len - 1] = 34;
qbs_set(s, qbs_add(s, qbs_new_txt("?")));
s->chr[s->len - 1] = 0;
system((char *)s->chr);
return IDOK;
} // MB_OK
return IDCANCEL;
}
# endif
void AllocConsole() { return; }
void FreeConsole() { return; }
#endif
int MessageBox2(int ignore, char *message, char *title, int type) {
#ifdef QB64_WINDOWS
return MessageBox(window_handle, message, title, type);
#else
return MessageBox(NULL, message, title, type);
#endif
}
void alert(int32 x) {
static char str[100];
memset(&str[0], 0, 100);
sprintf(str, "%d", x);
MessageBox(0, &str[0], "Alert", MB_OK);
}
void alert(char *x) { MessageBox(0, x, "Alert", MB_OK); }
// vc->project->properties->configuration properties->general->configuration type->application(.exe)
// vc->project->properties->configuration properties->general->configuration type->static library(.lib)
@ -7749,7 +7625,7 @@ skip_0F_opcodes:
else
i2 = i2 - 10 + 65;
unknown_opcode_mess->chr[17] = i2;
MessageBox2(NULL, (char *)unknown_opcode_mess->chr, "X86 Error", MB_OK | MB_SYSTEMMODAL);
gui_alert((const char *)unknown_opcode_mess->chr, "X86 Error", "ok");
exit(86);
done:
if (*ip)
@ -8040,13 +7916,13 @@ void fix_error() {
snprintf(errtitle, len + 1, FIXERRMSG_TITLE, (!prevent_handling ? FIXERRMSG_UNHAND : FIXERRMSG_CRIT), new_error, binary_name->chr);
if (prevent_handling) {
v = MessageBox2(NULL, errmess, errtitle, MB_OK);
v = gui_alert(errmess, errtitle, "ok");
exit(0);
} else {
v = MessageBox2(NULL, errmess, errtitle, MB_YESNO | MB_SYSTEMMODAL);
v = gui_alert(errmess, errtitle, "yesno");
}
if ((v == IDNO) || (v == IDOK)) {
if ((v == 2) || (v == 0)) {
close_program = 1;
end();
}
@ -8067,107 +7943,107 @@ void error(int32 error_number) {
// out of memory errors
if (error_number == 257) {
MessageBox2(NULL, "Out of memory", "Critical Error #1", MB_OK | MB_SYSTEMMODAL);
gui_alert("Out of memory", "Critical Error #1", "ok");
exit(0);
} // generic "Out of memory" error
// tracable "Out of memory" errors
if (error_number == 502) {
MessageBox2(NULL, "Out of memory", "Critical Error #2", MB_OK | MB_SYSTEMMODAL);
gui_alert("Out of memory", "Critical Error #2", "ok");
exit(0);
}
if (error_number == 503) {
MessageBox2(NULL, "Out of memory", "Critical Error #3", MB_OK | MB_SYSTEMMODAL);
gui_alert("Out of memory", "Critical Error #3", "ok");
exit(0);
}
if (error_number == 504) {
MessageBox2(NULL, "Out of memory", "Critical Error #4", MB_OK | MB_SYSTEMMODAL);
gui_alert("Out of memory", "Critical Error #4", "ok");
exit(0);
}
if (error_number == 505) {
MessageBox2(NULL, "Out of memory", "Critical Error #5", MB_OK | MB_SYSTEMMODAL);
gui_alert("Out of memory", "Critical Error #5", "ok");
exit(0);
}
if (error_number == 506) {
MessageBox2(NULL, "Out of memory", "Critical Error #6", MB_OK | MB_SYSTEMMODAL);
gui_alert("Out of memory", "Critical Error #6", "ok");
exit(0);
}
if (error_number == 507) {
MessageBox2(NULL, "Out of memory", "Critical Error #7", MB_OK | MB_SYSTEMMODAL);
gui_alert("Out of memory", "Critical Error #7", "ok");
exit(0);
}
if (error_number == 508) {
MessageBox2(NULL, "Out of memory", "Critical Error #8", MB_OK | MB_SYSTEMMODAL);
gui_alert("Out of memory", "Critical Error #8", "ok");
exit(0);
}
if (error_number == 509) {
MessageBox2(NULL, "Out of memory", "Critical Error #9", MB_OK | MB_SYSTEMMODAL);
gui_alert("Out of memory", "Critical Error #9", "ok");
exit(0);
}
if (error_number == 510) {
MessageBox2(NULL, "Out of memory", "Critical Error #10", MB_OK | MB_SYSTEMMODAL);
gui_alert("Out of memory", "Critical Error #10", "ok");
exit(0);
}
if (error_number == 511) {
MessageBox2(NULL, "Out of memory", "Critical Error #11", MB_OK | MB_SYSTEMMODAL);
gui_alert("Out of memory", "Critical Error #11", "ok");
exit(0);
}
if (error_number == 512) {
MessageBox2(NULL, "Out of memory", "Critical Error #12", MB_OK | MB_SYSTEMMODAL);
gui_alert("Out of memory", "Critical Error #12", "ok");
exit(0);
}
if (error_number == 513) {
MessageBox2(NULL, "Out of memory", "Critical Error #13", MB_OK | MB_SYSTEMMODAL);
gui_alert("Out of memory", "Critical Error #13", "ok");
exit(0);
}
if (error_number == 514) {
MessageBox2(NULL, "Out of memory", "Critical Error #14", MB_OK | MB_SYSTEMMODAL);
gui_alert("Out of memory", "Critical Error #14", "ok");
exit(0);
}
if (error_number == 515) {
MessageBox2(NULL, "Out of memory", "Critical Error #15", MB_OK | MB_SYSTEMMODAL);
gui_alert("Out of memory", "Critical Error #15", "ok");
exit(0);
}
if (error_number == 516) {
MessageBox2(NULL, "Out of memory", "Critical Error #16", MB_OK | MB_SYSTEMMODAL);
gui_alert("Out of memory", "Critical Error #16", "ok");
exit(0);
}
if (error_number == 517) {
MessageBox2(NULL, "Out of memory", "Critical Error #17", MB_OK | MB_SYSTEMMODAL);
gui_alert("Out of memory", "Critical Error #17", "ok");
exit(0);
}
if (error_number == 518) {
MessageBox2(NULL, "Out of memory", "Critical Error #18", MB_OK | MB_SYSTEMMODAL);
gui_alert("Out of memory", "Critical Error #18", "ok");
exit(0);
}
// other critical errors
if (error_number == 11) {
MessageBox2(NULL, "Division by zero", "Critical Error", MB_OK | MB_SYSTEMMODAL);
gui_alert("Division by zero", "Critical Error", "ok");
exit(0);
}
if (error_number == 256) {
MessageBox2(NULL, "Out of stack space", "Critical Error", MB_OK | MB_SYSTEMMODAL);
gui_alert("Out of stack space", "Critical Error", "ok");
exit(0);
}
if (error_number == 259) {
MessageBox2(NULL, "Cannot find dynamic library file", "Critical Error", MB_OK | MB_SYSTEMMODAL);
gui_alert("Cannot find dynamic library file", "Critical Error", "ok");
exit(0);
}
if (error_number == 260) {
MessageBox2(NULL, "Sub/Function does not exist in dynamic library", "Critical Error", MB_OK | MB_SYSTEMMODAL);
gui_alert("Sub/Function does not exist in dynamic library", "Critical Error", "ok");
exit(0);
}
if (error_number == 261) {
MessageBox2(NULL, "Sub/Function does not exist in dynamic library", "Critical Error", MB_OK | MB_SYSTEMMODAL);
gui_alert("Sub/Function does not exist in dynamic library", "Critical Error", "ok");
exit(0);
}
if (error_number == 270) {
MessageBox2(NULL, "_GL command called outside of SUB _GL's scope", "Critical Error", MB_OK | MB_SYSTEMMODAL);
gui_alert("_GL command called outside of SUB _GL's scope", "Critical Error", "ok");
exit(0);
}
if (error_number == 271) {
MessageBox2(NULL, "END/SYSTEM called within SUB _GL's scope", "Critical Error", MB_OK | MB_SYSTEMMODAL);
gui_alert("END/SYSTEM called within SUB _GL's scope", "Critical Error", "ok");
exit(0);
}
@ -28447,7 +28323,7 @@ void showvalue(__int64 v) {
if (s == NULL)
s = qbs_new(0, 0);
qbs_set(s, qbs_str(v));
MessageBox2(NULL, (char *)s->chr, "showvalue", MB_OK | MB_SYSTEMMODAL);
gui_alert((char *)s->chr, "showvalue", "ok");
}
#endif
@ -35110,7 +34986,7 @@ void free_hardware_img(int32 handle, int32 caller_id) {
hardware_img = (hardware_img_struct *)list_get(hardware_img_handles, handle);
if (hardware_img == NULL) {
alert("free_hardware_img: image does not exist");
gui_alert("free_hardware_img: image does not exist");
}
if (hardware_img->dest_context_handle) {
@ -36499,10 +36375,10 @@ void GLUT_DISPLAY_REQUEST() {
static hardware_img_struct *f1;
f1 = (hardware_img_struct *)list_get(hardware_img_handles, software_screen_hardware_frame);
if (software_screen_hardware_frame == 0) {
alert("Invalid software_screen_hardware_frame!!");
gui_alert("Invalid software_screen_hardware_frame!!");
}
if (f1 == NULL)
alert("Invalid software_screen_hardware_frame!");
gui_alert("Invalid software_screen_hardware_frame!");
static int32 use_alpha;
use_alpha = 0;
@ -36542,7 +36418,7 @@ void GLUT_DISPLAY_REQUEST() {
hardware_graphics_command_struct *last_hgc =
(hardware_graphics_command_struct *)list_get(hardware_graphics_command_handles, last_hardware_command_rendered);
if (last_hgc == NULL)
alert("Rendering: Last HGC is NULL!");
gui_alert("Rendering: Last HGC is NULL!");
command = last_hgc->next_command;
caller_flag = 200;
}
@ -36630,10 +36506,8 @@ void GLUT_DISPLAY_REQUEST() {
hardware_graphics_command_struct *hgcx =
(hardware_graphics_command_struct *)list_get(hardware_graphics_command_handles, next_hardware_command_to_remove);
alert(order);
alert(hgcx->order);
alert(command);
alert("Renderer: Command does not exist.");
gui_alert("Renderer: Command does not exist: command = %i, hgcx->order = %lld, order = %lld", command, hgcx->order, order);
}
if (hgc->order == order) {
if (first_command_prev_order == 0)
@ -38062,7 +37936,7 @@ int main(int argc, char *argv[]) {
GLenum err = glewInit();
if (GLEW_OK != err) {
alert((char *)glewGetErrorString(err));
gui_alert((char *)glewGetErrorString(err));
}
if (glewIsSupported("GL_EXT_framebuffer_object"))
framebufferobjects_supported = 1;
@ -38358,7 +38232,7 @@ void display() {
}
}
if (frame_i == -1) {
alert("Software frame buffer: Failed to find available frame");
gui_alert("Software frame buffer: Failed to find available frame");
return;
}
display_frame[frame_i].state = DISPLAY_FRAME_STATE__BUILDING;
@ -38535,7 +38409,7 @@ void display() {
if (i2 != -1) {
memcpy(display_frame[frame_i].bgra, display_frame[i2].bgra, display_frame[frame_i].w * display_frame[frame_i].h * 4);
} else {
alert("Text Screen Update: Failed to locate previous frame's data for comparison");
gui_alert("Text Screen Update: Failed to locate previous frame's data for comparison");
check_last = 0; // never occurs, safe-guard only
}
}

View file

@ -30,6 +30,7 @@ int32 func__display();
void qbg_sub_view_print(int32, int32, int32);
qbs *qbs_new(int32, uint8);
qbs *qbs_new_txt(const char *);
qbs *qbs_new_txt_len(const char *, int32_t); // a740g: Added this here so that we don't have to declare it ourselves everywhere
qbs *qbs_add(qbs *, qbs *);
qbs *qbs_set(qbs *, qbs *);
void qbg_sub_window(float, float, float, float, int32);

View file

@ -0,0 +1,46 @@
//-----------------------------------------------------------------------------------------------------
// ___ ____ __ _ _ ____ _____ ____ _ _ ___ _ _ _
// / _ \| __ ) / /_ | || | | _ \| ____| / ___| | | |_ _| | | (_) |__ _ __ __ _ _ __ _ _
// | | | | _ \| '_ \| || |_| |_) | _| | | _| | | || | | | | | '_ \| '__/ _` | '__| | | |
// | |_| | |_) | (_) |__ _| __/| |___ | |_| | |_| || | | |___| | |_) | | | (_| | | | |_| |
// \__\_\____/ \___/ |_| |_| |_____| \____|\___/|___| |_____|_|_.__/|_| \__,_|_| \__, |
// |___/
// QB64-PE GUI Library
// Powered by tinyfiledialogs (http://tinyfiledialogs.sourceforge.net)
//
// Copyright (c) 2022 Samuel Gomes
// https://github.com/a740g
//
//-----------------------------------------------------------------------------------------------------
#pragma once
//-----------------------------------------------------------------------------------------------------
// HEADER FILES
//-----------------------------------------------------------------------------------------------------
#include <stdarg.h>
#include <stdint.h>
//-----------------------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------------------
// FORWARD DECLARATIONS
//-----------------------------------------------------------------------------------------------------
struct qbs;
//-----------------------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------------------
// FUNCTIONS
//-----------------------------------------------------------------------------------------------------
void sub__guiNotifyPopup(qbs *qbsTitle, qbs *qbsMessage, qbs *qbsIconType, int32_t passed);
int32_t func__guiMessageBox(qbs *qbsTitle, qbs *qbsMessage, qbs *qbsDialogType, qbs *qbsIconType, int32_t nDefaultButton, int32_t passed);
void sub__guiMessageBox(qbs *qbsTitle, qbs *qbsMessage, qbs *qbsIconType, int32_t passed);
qbs *func__guiInputBox(qbs *qbsTitle, qbs *qbsMessage, qbs *qbsDefaultInput, int32_t passed);
qbs *func__guiSelectFolderDialog(qbs *qbsTitle, qbs *qbsDefaultPath, int32_t passed);
uint32_t func__guiColorChooserDialog(qbs *qbsTitle, uint32_t nDefaultRGB, int32_t passed);
qbs *func__guiOpenFileDialog(qbs *qbsTitle, qbs *qbsDefaultPathAndFile, qbs *qbsFilterPatterns, qbs *qbsSingleFilterDescription, int32_t nAllowMultipleSelects,
int32_t passed);
qbs *func__guiSaveFileDialog(qbs *qbsTitle, qbs *qbsDefaultPathAndFile, qbs *qbsFilterPatterns, qbs *qbsSingleFilterDescription);
int gui_alert(const char *message, const char *title, const char *type);
bool gui_alert(const char *fmt, ...);
//-----------------------------------------------------------------------------------------------------

View file

@ -42,6 +42,14 @@
# endif
# define IMAGE_DEBUG_CHECK(_exp_) // Don't do anything in release builds
#endif
// The byte ordering here are straight from libqb.cpp. So, if libqb.cpp is wrong, then we are wrong! ;)
#define IMAGE_GET_BGRA_RED(c) ((uint8_t)((uint32_t)(c) >> 16 & 0xFF))
#define IMAGE_GET_BGRA_GREEN(c) ((uint8_t)((uint32_t)(c) >> 8 & 0xFF))
#define IMAGE_GET_BGRA_BLUE(c) ((uint8_t)((uint32_t)(c) & 0xFF))
#define IMAGE_GET_BGRA_ALPHA(c) ((uint8_t)(uint32_t(c) >> 24))
#define IMAGE_MAKE_BGRA(r, g, b, a) \
((uint32_t)(((uint8_t)(b) | ((uint16_t)((uint8_t)(g)) << 8)) | ((uint32_t)((uint8_t)(r)) << 16) | ((uint32_t)((uint8_t)(a)) << 24)))
//-----------------------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------------------

View file

@ -82,7 +82,6 @@ void AudioEngineAttachCustomBackendVTables(ma_resource_manager_config *maResourc
// These are stuff that was not declared anywhere else
// We will wait for Matt to cleanup the C/C++ source file and include header files that declare this stuff
qbs *qbs_new_txt_len(const char *txt, int32 len); // Not declared in libqb.h
int32 func_instr(int32 start, qbs *str, qbs *substr, int32 passed); // Did not find this declared anywhere
void new_mem_lock(); // This is required for MemSound()
void free_mem_lock(mem_lock *lock); // Same as above

View file

@ -0,0 +1,20 @@
TFD_SRCS := \
tinyfiledialogs.c
GUI_SRCS := \
gui.cpp
TFD_OBJS := $(patsubst %.c,$(PATH_INTERNAL_C)/parts/gui/%.o,$(TFD_SRCS))
GUI_OBJS := $(patsubst %.cpp,$(PATH_INTERNAL_C)/parts/gui/%.o,$(GUI_SRCS))
$(PATH_INTERNAL_C)/parts/gui/%.o: $(PATH_INTERNAL_C)/parts/gui/%.c
$(CC) -O2 $(CFLAGS) -DDEPENDENCY_CONSOLE_ONLY -Wall $< -c -o $@
$(PATH_INTERNAL_C)/parts/gui/%.o: $(PATH_INTERNAL_C)/parts/gui/%.cpp
$(CXX) -O2 $(CXXFLAGS) -DDEPENDENCY_CONSOLE_ONLY -Wall $< -c -o $@
EXE_LIBS += $(TFD_OBJS) $(GUI_OBJS)
CLEAN_LIST += $(TFD_OBJS) $(GUI_OBJS)

View file

@ -0,0 +1,433 @@
//-----------------------------------------------------------------------------------------------------
// ___ ____ __ _ _ ____ _____ ____ _ _ ___ _ _ _
// / _ \| __ ) / /_ | || | | _ \| ____| / ___| | | |_ _| | | (_) |__ _ __ __ _ _ __ _ _
// | | | | _ \| '_ \| || |_| |_) | _| | | _| | | || | | | | | '_ \| '__/ _` | '__| | | |
// | |_| | |_) | (_) |__ _| __/| |___ | |_| | |_| || | | |___| | |_) | | | (_| | | | |_| |
// \__\_\____/ \___/ |_| |_| |_____| \____|\___/|___| |_____|_|_.__/|_| \__,_|_| \__, |
// |___/
// QB64-PE GUI Library
// Powered by tinyfiledialogs (http://tinyfiledialogs.sourceforge.net)
//
// Copyright (c) 2022 Samuel Gomes
// https://github.com/a740g
//
//-----------------------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------------------
// HEADER FILES
//-----------------------------------------------------------------------------------------------------
#include "gui.h"
// We need the IMAGE_... macros from here
#include "image.h"
#include "tinyfiledialogs.h"
// The below include is a bad idea because of reasons mentioned in https://github.com/QB64-Phoenix-Edition/QB64pe/issues/172
// However, we need a bunch of things like the 'qbs' structs and some more
// We'll likely keep the 'include' this way because I do not want to duplicate stuff and cause issues
// Matt is already doing work to separate and modularize libqb
// So, this will be replaced with relevant stuff once that work is done
#include "../../libqb.h"
//-----------------------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------------------
// FUNCTIONS
//-----------------------------------------------------------------------------------------------------
/// @brief Splits a string delimted by '|' into an array of strings
/// @param input The string to be parsed
/// @param count Point to an integer that will hold the count of tokens. This cannot be NULL
/// @return Array of string tokens. This must be freed using gui_free_tokens()
static char **gui_tokenize(const char *input, int32_t *count) {
auto str = strdup(input);
auto capacity = 2;
char **result = (char **)malloc(capacity * sizeof(*result));
char *saveptr;
*count = 0;
auto tok = strtok_r(str, "|", &saveptr);
for (;;) {
if (*count >= capacity)
result = (char **)realloc(result, (capacity *= 2) * sizeof(*result));
result[*count] = tok ? strdup(tok) : tok;
if (!tok)
break;
++(*count);
tok = strtok_r(nullptr, "|", &saveptr);
}
free(str);
return result;
}
/// @brief Frees all string and the array itself created by gui_tokenize()
/// @param tokens Array of string pointers
static void gui_free_tokens(char **tokens) {
for (auto it = tokens; it && *it; ++it)
free(*it);
free(tokens);
}
/// @brief Shows a system notification (on Windows this will be an action center notification)
/// @param qbsTitle [OPTIONAL] Title of the notification
/// @param qbsMessage [OPTIONAL] The message that will be displayed
/// @param qbsIconType [OPTIONAL] Icon type ("info" "warning" "error")
/// @param passed How many parameters were passed?
void sub__guiNotifyPopup(qbs *qbsTitle, qbs *qbsMessage, qbs *qbsIconType, int32_t passed) {
static qbs *aTitle = nullptr;
static qbs *aMessage = nullptr;
static qbs *aIconType = nullptr;
if (!aTitle)
aTitle = qbs_new(0, 0);
if (!aMessage)
aMessage = qbs_new(0, 0);
if (!aIconType)
aIconType = qbs_new(0, 0);
if (passed & 1)
qbs_set(aTitle, qbs_add(qbsTitle, qbs_new_txt_len("\0", 1)));
else
qbs_set(aTitle, qbs_new_txt_len("\0", 1));
if (passed & 2)
qbs_set(aMessage, qbs_add(qbsMessage, qbs_new_txt_len("\0", 1)));
else
qbs_set(aMessage, qbs_new_txt_len("\0", 1));
if (passed & 4)
qbs_set(aIconType, qbs_add(qbsIconType, qbs_new_txt_len("\0", 1)));
else
qbs_set(aIconType, qbs_new_txt("info")); // info if not passed
tinyfd_notifyPopup((const char *)aTitle->chr, (const char *)aMessage->chr, (const char *)aIconType->chr);
}
/// @brief Shows a standard system message dialog box
/// @param qbsTitle Title of the dialog box
/// @param qbsMessage The message that will be displayed
/// @param qbsDialogType The dialog type ("ok" "okcancel" "yesno" "yesnocancel")
/// @param qbsIconType The dialog icon type ("info" "warning" "error" "question")
/// @param nDefaultButon [OPTIONAL] The default button that will be selected
/// @param passed How many parameters were passed?
/// @return 0 for cancel/no, 1 for ok/yes, 2 for no in yesnocancel
int32_t func__guiMessageBox(qbs *qbsTitle, qbs *qbsMessage, qbs *qbsDialogType, qbs *qbsIconType, int32_t nDefaultButton, int32_t passed) {
static qbs *aTitle = nullptr;
static qbs *aMessage = nullptr;
static qbs *aDialogType = nullptr;
static qbs *aIconType = nullptr;
if (!aTitle)
aTitle = qbs_new(0, 0);
if (!aMessage)
aMessage = qbs_new(0, 0);
if (!aDialogType)
aDialogType = qbs_new(0, 0);
if (!aIconType)
aIconType = qbs_new(0, 0);
qbs_set(aTitle, qbs_add(qbsTitle, qbs_new_txt_len("\0", 1)));
qbs_set(aMessage, qbs_add(qbsMessage, qbs_new_txt_len("\0", 1)));
qbs_set(aDialogType, qbs_add(qbsDialogType, qbs_new_txt_len("\0", 1)));
qbs_set(aIconType, qbs_add(qbsIconType, qbs_new_txt_len("\0", 1)));
if (!passed)
nDefaultButton = 1; // 1 for ok/yes
return tinyfd_messageBox((const char *)aTitle->chr, (const char *)aMessage->chr, (const char *)aDialogType->chr, (const char *)aIconType->chr,
nDefaultButton);
}
/// @brief Shows a standard system message dialog box
/// @param qbsTitle [OPTIONAL] Title of the dialog box
/// @param qbsMessage [OPTIONAL] The message that will be displayed
/// @param qbsIconType [OPTIONAL] The dialog icon type ("info" "warning" "error")
/// @param passed How many parameters were passed?
void sub__guiMessageBox(qbs *qbsTitle, qbs *qbsMessage, qbs *qbsIconType, int32_t passed) {
static qbs *aTitle = nullptr;
static qbs *aMessage = nullptr;
static qbs *aIconType = nullptr;
if (!aTitle)
aTitle = qbs_new(0, 0);
if (!aMessage)
aMessage = qbs_new(0, 0);
if (!aIconType)
aIconType = qbs_new(0, 0);
if (passed & 1)
qbs_set(aTitle, qbs_add(qbsTitle, qbs_new_txt_len("\0", 1)));
else
qbs_set(aTitle, qbs_new_txt_len("\0", 1));
if (passed & 2)
qbs_set(aMessage, qbs_add(qbsMessage, qbs_new_txt_len("\0", 1)));
else
qbs_set(aMessage, qbs_new_txt_len("\0", 1));
if (passed & 4)
qbs_set(aIconType, qbs_add(qbsIconType, qbs_new_txt_len("\0", 1)));
else
qbs_set(aIconType, qbs_new_txt("info")); // info if not passed
tinyfd_messageBox((const char *)aTitle->chr, (const char *)aMessage->chr, "ok", (const char *)aIconType->chr, 1);
}
/// @brief Shows an input box for getting a string from the user
/// @param qbsTitle Title of the dialog box
/// @param qbsMessage The message or prompt that will be displayed
/// @param qbsDefaultInput [OPTIONAL] The default response that can be changed by the user
/// @param passed How many parameters were passed?
/// @return The user response or an empty string if the user cancelled
qbs *func__guiInputBox(qbs *qbsTitle, qbs *qbsMessage, qbs *qbsDefaultInput, int32_t passed) {
static qbs *aTitle = nullptr;
static qbs *aMessage = nullptr;
static qbs *aDefaultInput = nullptr;
static qbs *qbsInput;
if (!aTitle)
aTitle = qbs_new(0, 0);
if (!aMessage)
aMessage = qbs_new(0, 0);
if (!aDefaultInput)
aDefaultInput = qbs_new(0, 0);
qbs_set(aTitle, qbs_add(qbsTitle, qbs_new_txt_len("\0", 1)));
qbs_set(aMessage, qbs_add(qbsMessage, qbs_new_txt_len("\0", 1)));
char *sDefaultInput;
if (passed) {
qbs_set(aDefaultInput, qbs_add(qbsDefaultInput, qbs_new_txt_len("\0", 1)));
sDefaultInput =
aDefaultInput->len == 1 ? nullptr : (char *)aDefaultInput->chr; // if string is "" then password box, else we pass the default input as is
} else {
qbs_set(aDefaultInput, qbs_new_txt_len("\0", 1)); // input box by default
sDefaultInput = (char *)aDefaultInput->chr;
}
auto sInput = tinyfd_inputBox((const char *)aTitle->chr, (const char *)aMessage->chr, (const char *)sDefaultInput);
// Create a new qbs and then copy the string to it
qbsInput = qbs_new(sInput ? strlen(sInput) : 0, 1);
if (qbsInput->len)
memcpy(qbsInput->chr, sInput, qbsInput->len);
return qbsInput;
}
/// @brief Shows the browse for folder dialog box
/// @param qbsTitle Title of the dialog box
/// @param qbsDefaultPath [OPTIONAL] The default path from where to start browsing
/// @param passed How many parameters were passed?
/// @return The path selected by the user or an empty string if the user cancelled
qbs *func__guiSelectFolderDialog(qbs *qbsTitle, qbs *qbsDefaultPath, int32_t passed) {
static qbs *aTitle = nullptr;
static qbs *aDefaultPath = nullptr;
static qbs *qbsFolder;
if (!aTitle)
aTitle = qbs_new(0, 0);
if (!aDefaultPath)
aDefaultPath = qbs_new(0, 0);
qbs_set(aTitle, qbs_add(qbsTitle, qbs_new_txt_len("\0", 1)));
if (passed)
qbs_set(aDefaultPath, qbs_add(qbsDefaultPath, qbs_new_txt_len("\0", 1)));
else
qbs_set(aDefaultPath, qbs_new_txt_len("\0", 1));
auto sFolder = tinyfd_selectFolderDialog((const char *)aTitle->chr, (const char *)aDefaultPath->chr);
// Create a new qbs and then copy the string to it
qbsFolder = qbs_new(sFolder ? strlen(sFolder) : 0, 1);
if (qbsFolder->chr)
memcpy(qbsFolder->chr, sFolder, qbsFolder->len);
return qbsFolder;
}
/// @brief Shows the color picker dialog box
/// @param qbsTitle Title of the dialog box
/// @param nDefaultRGB [OPTIONAL] Default selected color
/// @param passed How many parameters were passed?
/// @return 0 on cancel (i.e. no color, no alpha, nothing). Else, returns color with alpha set to 255
uint32_t func__guiColorChooserDialog(qbs *qbsTitle, uint32_t nDefaultRGB, int32_t passed) {
static qbs *aTitle = nullptr;
if (!aTitle)
aTitle = qbs_new(0, 0);
qbs_set(aTitle, qbs_add(qbsTitle, qbs_new_txt_len("\0", 1)));
if (!passed)
nDefaultRGB = 0;
// Break the color into RGB components
uint8_t lRGB[3];
lRGB[0] = IMAGE_GET_BGRA_RED(nDefaultRGB);
lRGB[1] = IMAGE_GET_BGRA_GREEN(nDefaultRGB);
lRGB[2] = IMAGE_GET_BGRA_BLUE(nDefaultRGB);
// On cancel, return 0 (i.e. no color, no alpha, nothing). Else, return color with alpha set to 255
return !tinyfd_colorChooser((const char *)aTitle->chr, nullptr, lRGB, lRGB) ? 0 : IMAGE_MAKE_BGRA(lRGB[0], lRGB[1], lRGB[2], 0xFF);
}
/// @brief Shows the system file open dialog box
/// @param qbsTitle Title of the dialog box
/// @param qbsDefaultPathAndFile The default path (and filename) that will be pre-populated
/// @param qbsFilterPatterns File filters separated using '|' (e.g. "*.png|*.jpg")
/// @param qbsSingleFilterDescription Single filter description (e.g. "Image files")
/// @param nAllowMultipleSelects [OPTIONAL] Should multiple file selection be allowed?
/// @param passed How many parameters were passed?
/// @return The file name (or names separated by '|' if multiselect was on) selected by the user or an empty string if the user cancelled
qbs *func__guiOpenFileDialog(qbs *qbsTitle, qbs *qbsDefaultPathAndFile, qbs *qbsFilterPatterns, qbs *qbsSingleFilterDescription, int32_t nAllowMultipleSelects,
int32_t passed) {
static qbs *aTitle = nullptr;
static qbs *aDefaultPathAndFile = nullptr;
static qbs *aFilterPatterns = nullptr;
static qbs *aSingleFilterDescription = nullptr;
static qbs *qbsFileName;
if (!aTitle)
aTitle = qbs_new(0, 0);
if (!aDefaultPathAndFile)
aDefaultPathAndFile = qbs_new(0, 0);
if (!aFilterPatterns)
aFilterPatterns = qbs_new(0, 0);
if (!aSingleFilterDescription)
aSingleFilterDescription = qbs_new(0, 0);
qbs_set(aTitle, qbs_add(qbsTitle, qbs_new_txt_len("\0", 1)));
qbs_set(aDefaultPathAndFile, qbs_add(qbsDefaultPathAndFile, qbs_new_txt_len("\0", 1)));
qbs_set(aFilterPatterns, qbs_add(qbsFilterPatterns, qbs_new_txt_len("\0", 1)));
qbs_set(aSingleFilterDescription, qbs_add(qbsSingleFilterDescription, qbs_new_txt_len("\0", 1)));
if (!passed)
nAllowMultipleSelects = false;
char *sSingleFilterDescription = aSingleFilterDescription->len == 1 ? nullptr : (char *)aSingleFilterDescription->chr;
int32_t aNumOfFilterPatterns;
auto psaFilterPatterns = gui_tokenize((const char *)aFilterPatterns->chr, &aNumOfFilterPatterns); // get the number of file filters & count
auto sFileName = tinyfd_openFileDialog((const char *)aTitle->chr, (const char *)aDefaultPathAndFile->chr, aNumOfFilterPatterns, psaFilterPatterns,
(const char *)sSingleFilterDescription, nAllowMultipleSelects);
gui_free_tokens(psaFilterPatterns); // free memory used by tokenizer
// Create a new qbs and then copy the string to it
qbsFileName = qbs_new(sFileName ? strlen(sFileName) : 0, 1);
if (qbsFileName->len)
memcpy(qbsFileName->chr, sFileName, qbsFileName->len);
return qbsFileName;
}
/// @brief Shows the system file save dialog box
/// @param qbsTitle Title of the dialog box
/// @param qbsDefaultPathAndFile The default path (and filename) that will be pre-populated
/// @param qbsFilterPatterns File filters separated using '|' (e.g. "*.png|*.jpg")
/// @param qbsSingleFilterDescription Single filter description (e.g. "Image files")
/// @return The file name selected by the user or an empty string if the user cancelled
qbs *func__guiSaveFileDialog(qbs *qbsTitle, qbs *qbsDefaultPathAndFile, qbs *qbsFilterPatterns, qbs *qbsSingleFilterDescription) {
static qbs *aTitle = nullptr;
static qbs *aDefaultPathAndFile = nullptr;
static qbs *aFilterPatterns = nullptr;
static qbs *aSingleFilterDescription = nullptr;
static qbs *qbsFileName;
if (!aTitle)
aTitle = qbs_new(0, 0);
if (!aDefaultPathAndFile)
aDefaultPathAndFile = qbs_new(0, 0);
if (!aFilterPatterns)
aFilterPatterns = qbs_new(0, 0);
if (!aSingleFilterDescription)
aSingleFilterDescription = qbs_new(0, 0);
qbs_set(aTitle, qbs_add(qbsTitle, qbs_new_txt_len("\0", 1)));
qbs_set(aDefaultPathAndFile, qbs_add(qbsDefaultPathAndFile, qbs_new_txt_len("\0", 1)));
qbs_set(aFilterPatterns, qbs_add(qbsFilterPatterns, qbs_new_txt_len("\0", 1)));
qbs_set(aSingleFilterDescription, qbs_add(qbsSingleFilterDescription, qbs_new_txt_len("\0", 1)));
char *sSingleFilterDescription = aSingleFilterDescription->len == 1 ? nullptr : (char *)aSingleFilterDescription->chr;
int32_t aNumOfFilterPatterns;
auto psaFilterPatterns = gui_tokenize((const char *)aFilterPatterns->chr, &aNumOfFilterPatterns); // get the number of file filters & count
auto sFileName = tinyfd_saveFileDialog((const char *)aTitle->chr, (const char *)aDefaultPathAndFile->chr, aNumOfFilterPatterns, psaFilterPatterns,
(const char *)sSingleFilterDescription);
gui_free_tokens(psaFilterPatterns); // free memory used by tokenizer
// Create a new qbs and then copy the string to it
qbsFileName = qbs_new(sFileName ? strlen(sFileName) : 0, 1);
if (qbsFileName->len)
memcpy(qbsFileName->chr, sFileName, qbsFileName->len);
return qbsFileName;
}
/// @brief This is used internally by libqb to show warning and failure messages
/// @param message The message the will show inside the dialog box
/// @param title The dialog box title
/// @param type The type of dialog box (see tinyfd_messageBox)
/// @return returns the value retured by tinyfd_messageBox
int gui_alert(const char *message, const char *title, const char *type) { return tinyfd_messageBox(title, message, type, "error", 1); }
/// @brief This is used internally by libqb to show warning and failure messages
/// @param fmt A string that contains a printf style format
/// @param ... Additional arguments
/// @return true if successful, false otherwise
bool gui_alert(const char *fmt, ...) {
if (!fmt)
return false;
size_t l = strlen(fmt) * 2 + UCHAR_MAX;
char *buf = (char *)malloc(l);
if (!buf)
return false;
va_list args;
va_start(args, fmt);
if (vsnprintf(buf, l, fmt, args) < 0) {
va_end(args);
free(buf);
return false;
}
va_end(args);
gui_alert(buf, "Alert", "ok");
free(buf);
return true;
}
//-----------------------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------------------

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,303 @@
/* If you are using a C++ compiler to compile tinyfiledialogs.c (maybe renamed with an extension ".cpp")
then comment out << extern "C" >> bellow in this header file) */
/*_________
/ \ tinyfiledialogs.h v3.8.8 [Apr 22, 2021] zlib licence
|tiny file| Unique header file created [November 9, 2014]
| dialogs | Copyright (c) 2014 - 2021 Guillaume Vareille http://ysengrin.com
\____ ___/ http://tinyfiledialogs.sourceforge.net
\| git clone http://git.code.sf.net/p/tinyfiledialogs/code tinyfd
____________________________________________
| |
| email: tinyfiledialogs at ysengrin.com |
|____________________________________________|
________________________________________________________________________________
| ____________________________________________________________________________ |
| | | |
| | on windows: | |
| | - for UTF-16, use the wchar_t functions at the bottom of the header file | |
| | - _wfopen() requires wchar_t | |
| | | |
| | - in tinyfiledialogs, char is UTF-8 by default (since v3.6) | |
| | - but fopen() expects MBCS (not UTF-8) | |
| | - if you want char to be MBCS: set tinyfd_winUtf8 to 0 | |
| | | |
| | - alternatively, tinyfiledialogs provides | |
| | functions to convert between UTF-8, UTF-16 and MBCS | |
| |____________________________________________________________________________| |
|________________________________________________________________________________|
If you like tinyfiledialogs, please upvote my stackoverflow answer
https://stackoverflow.com/a/47651444
- License -
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
*/
#ifndef TINYFILEDIALOGS_H
#define TINYFILEDIALOGS_H
#ifdef __cplusplus
/* if tinydialogs.c is compiled as C++ code rather than C code, you may need to comment this out
and the corresponding closing bracket near the end of this file. */
extern "C" {
#endif
/******************************************************************************************************/
/**************************************** UTF-8 on Windows ********************************************/
/******************************************************************************************************/
#ifdef _WIN32
/* On windows, if you want to use UTF-8 ( instead of the UTF-16/wchar_t functions at the end of this file )
Make sure your code is really prepared for UTF-8 (on windows, functions like fopen() expect MBCS and not UTF-8) */
extern int tinyfd_winUtf8; /* on windows char strings can be 1:UTF-8(default) or 0:MBCS */
/* for MBCS change this to 0, in tinyfiledialogs.c or in your code */
/* Here are some functions to help you convert between UTF-16 UTF-8 MBSC */
char * tinyfd_utf8toMbcs(char const * aUtf8string);
char * tinyfd_utf16toMbcs(wchar_t const * aUtf16string);
wchar_t * tinyfd_mbcsTo16(char const * aMbcsString);
char * tinyfd_mbcsTo8(char const * aMbcsString);
wchar_t * tinyfd_utf8to16(char const * aUtf8string);
char * tinyfd_utf16to8(wchar_t const * aUtf16string);
#endif
/******************************************************************************************************/
/******************************************************************************************************/
/******************************************************************************************************/
/************* 3 funtions for C# (you don't need this in C or C++) : */
char const * tinyfd_getGlobalChar(char const * aCharVariableName); /* returns NULL on error */
int tinyfd_getGlobalInt(char const * aIntVariableName); /* returns -1 on error */
int tinyfd_setGlobalInt(char const * aIntVariableName, int aValue); /* returns -1 on error */
/* aCharVariableName: "tinyfd_version" "tinyfd_needs" "tinyfd_response"
aIntVariableName : "tinyfd_verbose" "tinyfd_silent" "tinyfd_allowCursesDialogs"
"tinyfd_forceConsole" "tinyfd_assumeGraphicDisplay" "tinyfd_winUtf8"
**************/
extern char tinyfd_version[8]; /* contains tinyfd current version number */
extern char tinyfd_needs[]; /* info about requirements */
extern int tinyfd_verbose; /* 0 (default) or 1 : on unix, prints the command line calls */
extern int tinyfd_silent; /* 1 (default) or 0 : on unix, hide errors and warnings from called dialogs */
/* Curses dialogs are difficult to use, on windows they are only ascii and uses the unix backslah */
extern int tinyfd_allowCursesDialogs; /* 0 (default) or 1 */
extern int tinyfd_forceConsole; /* 0 (default) or 1 */
/* for unix & windows: 0 (graphic mode) or 1 (console mode).
0: try to use a graphic solution, if it fails then it uses console mode.
1: forces all dialogs into console mode even when an X server is present,
it can use the package dialog or dialog.exe.
on windows it only make sense for console applications */
extern int tinyfd_assumeGraphicDisplay; /* 0 (default) or 1 */
/* some systems don't set the environment variable DISPLAY even when a graphic display is present.
set this to 1 to tell tinyfiledialogs to assume the existence of a graphic display */
extern char tinyfd_response[1024];
/* if you pass "tinyfd_query" as aTitle,
the functions will not display the dialogs
but will return 0 for console mode, 1 for graphic mode.
tinyfd_response is then filled with the retain solution.
possible values for tinyfd_response are (all lowercase)
for graphic mode:
windows_wchar windows applescript kdialog zenity zenity3 matedialog
shellementary qarma yad python2-tkinter python3-tkinter python-dbus
perl-dbus gxmessage gmessage xmessage xdialog gdialog
for console mode:
dialog whiptail basicinput no_solution */
void tinyfd_beep(void);
int tinyfd_notifyPopup(
char const * aTitle, /* NULL or "" */
char const * aMessage, /* NULL or "" may contain \n \t */
char const * aIconType); /* "info" "warning" "error" */
/* return has only meaning for tinyfd_query */
int tinyfd_messageBox(
char const * aTitle , /* NULL or "" */
char const * aMessage , /* NULL or "" may contain \n \t */
char const * aDialogType , /* "ok" "okcancel" "yesno" "yesnocancel" */
char const * aIconType , /* "info" "warning" "error" "question" */
int aDefaultButton ) ;
/* 0 for cancel/no , 1 for ok/yes , 2 for no in yesnocancel */
char * tinyfd_inputBox(
char const * aTitle , /* NULL or "" */
char const * aMessage , /* NULL or "" (\n and \t have no effect) */
char const * aDefaultInput ) ; /* NULL passwordBox, "" inputbox */
/* returns NULL on cancel */
char * tinyfd_saveFileDialog(
char const * aTitle , /* NULL or "" */
char const * aDefaultPathAndFile , /* NULL or "" */
int aNumOfFilterPatterns , /* 0 (1 in the following example) */
char const * const * aFilterPatterns , /* NULL or char const * lFilterPatterns[1]={"*.txt"} */
char const * aSingleFilterDescription ) ; /* NULL or "text files" */
/* returns NULL on cancel */
char * tinyfd_openFileDialog(
char const * aTitle, /* NULL or "" */
char const * aDefaultPathAndFile, /* NULL or "" */
int aNumOfFilterPatterns , /* 0 (2 in the following example) */
char const * const * aFilterPatterns, /* NULL or char const * lFilterPatterns[2]={"*.png","*.jpg"}; */
char const * aSingleFilterDescription, /* NULL or "image files" */
int aAllowMultipleSelects ) ; /* 0 or 1 */
/* in case of multiple files, the separator is | */
/* returns NULL on cancel */
char * tinyfd_selectFolderDialog(
char const * aTitle, /* NULL or "" */
char const * aDefaultPath); /* NULL or "" */
/* returns NULL on cancel */
char * tinyfd_colorChooser(
char const * aTitle, /* NULL or "" */
char const * aDefaultHexRGB, /* NULL or "#FF0000" */
unsigned char const aDefaultRGB[3] , /* unsigned char lDefaultRGB[3] = { 0 , 128 , 255 }; */
unsigned char aoResultRGB[3] ) ; /* unsigned char lResultRGB[3]; */
/* returns the hexcolor as a string "#FF0000" */
/* aoResultRGB also contains the result */
/* aDefaultRGB is used only if aDefaultHexRGB is NULL */
/* aDefaultRGB and aoResultRGB can be the same array */
/* returns NULL on cancel */
/************ WINDOWS ONLY SECTION ************************/
#ifdef _WIN32
/* windows only - utf-16 version */
int tinyfd_notifyPopupW(
wchar_t const * aTitle, /* NULL or L"" */
wchar_t const * aMessage, /* NULL or L"" may contain \n \t */
wchar_t const * aIconType); /* L"info" L"warning" L"error" */
/* windows only - utf-16 version */
int tinyfd_messageBoxW(
wchar_t const * aTitle, /* NULL or L"" */
wchar_t const * aMessage, /* NULL or L"" may contain \n \t */
wchar_t const * aDialogType, /* L"ok" L"okcancel" L"yesno" */
wchar_t const * aIconType, /* L"info" L"warning" L"error" L"question" */
int aDefaultButton ); /* 0 for cancel/no , 1 for ok/yes */
/* returns 0 for cancel/no , 1 for ok/yes */
/* windows only - utf-16 version */
wchar_t * tinyfd_inputBoxW(
wchar_t const * aTitle, /* NULL or L"" */
wchar_t const * aMessage, /* NULL or L"" (\n nor \t not respected) */
wchar_t const * aDefaultInput); /* NULL passwordBox, L"" inputbox */
/* windows only - utf-16 version */
wchar_t * tinyfd_saveFileDialogW(
wchar_t const * aTitle, /* NULL or L"" */
wchar_t const * aDefaultPathAndFile, /* NULL or L"" */
int aNumOfFilterPatterns, /* 0 (1 in the following example) */
wchar_t const * const * aFilterPatterns, /* NULL or wchar_t const * lFilterPatterns[1]={L"*.txt"} */
wchar_t const * aSingleFilterDescription); /* NULL or L"text files" */
/* returns NULL on cancel */
/* windows only - utf-16 version */
wchar_t * tinyfd_openFileDialogW(
wchar_t const * aTitle, /* NULL or L"" */
wchar_t const * aDefaultPathAndFile, /* NULL or L"" */
int aNumOfFilterPatterns , /* 0 (2 in the following example) */
wchar_t const * const * aFilterPatterns, /* NULL or wchar_t const * lFilterPatterns[2]={L"*.png","*.jpg"} */
wchar_t const * aSingleFilterDescription, /* NULL or L"image files" */
int aAllowMultipleSelects ) ; /* 0 or 1 */
/* in case of multiple files, the separator is | */
/* returns NULL on cancel */
/* windows only - utf-16 version */
wchar_t * tinyfd_selectFolderDialogW(
wchar_t const * aTitle, /* NULL or L"" */
wchar_t const * aDefaultPath); /* NULL or L"" */
/* returns NULL on cancel */
/* windows only - utf-16 version */
wchar_t * tinyfd_colorChooserW(
wchar_t const * aTitle, /* NULL or L"" */
wchar_t const * aDefaultHexRGB, /* NULL or L"#FF0000" */
unsigned char const aDefaultRGB[3], /* unsigned char lDefaultRGB[3] = { 0 , 128 , 255 }; */
unsigned char aoResultRGB[3]); /* unsigned char lResultRGB[3]; */
/* returns the hexcolor as a string L"#FF0000" */
/* aoResultRGB also contains the result */
/* aDefaultRGB is used only if aDefaultHexRGB is NULL */
/* aDefaultRGB and aoResultRGB can be the same array */
/* returns NULL on cancel */
#endif /*_WIN32 */
#ifdef __cplusplus
} /*extern "C"*/
#endif
#endif /* TINYFILEDIALOGS_H */
/*
________________________________________________________________________________
| ____________________________________________________________________________ |
| | | |
| | on windows: | |
| | - for UTF-16, use the wchar_t functions at the bottom of the header file | |
| | - _wfopen() requires wchar_t | |
| | | |
| | - in tinyfiledialogs, char is UTF-8 by default (since v3.6) | |
| | - but fopen() expects MBCS (not UTF-8) | |
| | - if you want char to be MBCS: set tinyfd_winUtf8 to 0 | |
| | | |
| | - alternatively, tinyfiledialogs provides | |
| | functions to convert between UTF-8, UTF-16 and MBCS | |
| |____________________________________________________________________________| |
|________________________________________________________________________________|
- This is not for ios nor android (it works in termux though).
- The files can be renamed with extension ".cpp" as the code is 100% compatible C C++
(just comment out << extern "C" >> in the header file)
- Windows is fully supported from XP to 10 (maybe even older versions)
- C# & LUA via dll, see files in the folder EXTRAS
- OSX supported from 10.4 to latest (maybe even older versions)
- Do not use " and ' as the dialogs will be displayed with a warning
instead of the title, message, etc...
- There's one file filter only, it may contain several patterns.
- If no filter description is provided,
the list of patterns will become the description.
- On windows link against Comdlg32.lib and Ole32.lib
(on windows the no linking claim is a lie)
- On unix: it tries command line calls, so no such need (NO LINKING).
- On unix you need one of the following:
applescript, kdialog, zenity, matedialog, shellementary, qarma, yad,
python (2 or 3)/tkinter/python-dbus (optional), Xdialog
or curses dialogs (opens terminal if running without console).
- One of those is already included on most (if not all) desktops.
- In the absence of those it will use gdialog, gxmessage or whiptail
with a textinputbox. If nothing is found, it switches to basic console input,
it opens a console if needed (requires xterm + bash).
- for curses dialogs you must set tinyfd_allowCursesDialogs=1
- You can query the type of dialog that will be used (pass "tinyfd_query" as aTitle)
- String memory is preallocated statically for all the returned values.
- File and path names are tested before return, they should be valid.
- tinyfd_forceConsole=1; at run time, forces dialogs into console mode.
- On windows, console mode only make sense for console applications.
- On windows, console mode is not implemented for wchar_T UTF-16.
- Mutiple selects are not possible in console mode.
- The package dialog must be installed to run in curses dialogs in console mode.
It is already installed on most unix systems.
- On osx, the package dialog can be installed via
http://macappstore.org/dialog or http://macports.org
- On windows, for curses dialogs console mode,
dialog.exe should be copied somewhere on your executable path.
It can be found at the bottom of the following page:
http://andrear.altervista.org/home/cdialog.php
*/

View file

@ -29,7 +29,7 @@
// We'll likely keep the 'include' this way because I do not want to duplicate stuff and cause issues
// Matt is already doing work to separate and modularize libqb
// So, this will be replaced with relevant stuff once that work is done
#include "../../libqb.h"
#include "../../../libqb.h"
//-----------------------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------------------
@ -42,12 +42,6 @@
//-----------------------------------------------------------------------------------------------------
// MACROS
//-----------------------------------------------------------------------------------------------------
// The byte ordering here are straight from libqb.cpp. So, if libqb.cpp is wrong, then we are wrong! ;)
#define IMAGE_GET_BGRA_RED(c) (uint32_t(c) >> 16 & 0xFF)
#define IMAGE_GET_BGRA_GREEN(c) (uint32_t(c) >> 8 & 0xFF)
#define IMAGE_GET_BGRA_BLUE(c) (uint32_t(c) & 0xFF)
#define IMAGE_GET_BGRA_ALPHA(c) (uint32_t(c) >> 24)
#define IMAGE_MAKE_BGRA(r, g, b, a) (uint32_t((uint8_t(b) | (uint16_t(uint8_t(g)) << 8)) | (uint32_t(uint8_t(r)) << 16) | (uint32_t(uint8_t(a)) << 24)))
// Calculates the RGB distance in the RGB color cube
#define IMAGE_CALCULATE_RGB_DISTANCE(r1, g1, b1, r2, g2, b2) \
sqrt(((float(r2) - float(r1)) * (float(r2) - float(r1))) + ((float(g2) - float(g1)) * (float(g2) - float(g1))) + \
@ -64,7 +58,6 @@
// FORWARD DECLARATIONS
//-----------------------------------------------------------------------------------------------------
// These should be replaced with appropriate header files when Matt finishes cleaning up libqb
qbs *qbs_new_txt_len(const char *, int32); // Not declared in libqb.h
void sub__freeimage(int32, int32); // Not declared in libqb.h
extern img_struct *img; // Required by func__loadimage

View file

@ -1,5 +1,6 @@
#include "common.h"
#include "audio.h"
#include "gui.h"
extern int32 func__cinp(int32 toggle,
int32 passed); // Console INP scan code reader

View file

@ -91,6 +91,14 @@ These are used if you make use of MIDI support.
| TinySoundFont | MIT | license_tinysoundfont.txt | internal/c/parts/audio/extras/tinysoundfont/tsf.h
| TinyMidiLoader | ZLIB | license_tinymidiloader.txt | internal/c/parts/audio/extras/tinysoundfont.tml.h |
## Common Dialogs Support
This is used by libqb to show alerts and also by the common dialog functions and subroutines.
| Library | License | License file | Location |
| :------ | :-----: | :----------- | :------- |
| tiny file dialogs | ZLIB | license_tinyfiledialogs.txt | internal/c/parts/gui
## Legacy OpenAL audio backend
The below licenses apply when making use of the legacy OpenAL audio backend (can be enabled in `Compiler Settings`). These replace all other sound related libraries:

View file

@ -0,0 +1,47 @@
--------------------------------------------------------------------------------
License of tiny file dialogs
/*_________
/ \ tinyfiledialogs.c v3.8.8 [Apr 22, 2021] zlib licence
|tiny file| Unique code file created [November 9, 2014]
| dialogs | Copyright (c) 2014 - 2021 Guillaume Vareille http://ysengrin.com
\____ ___/ http://tinyfiledialogs.sourceforge.net
\| git clone http://git.code.sf.net/p/tinyfiledialogs/code tinyfd
____________________________________________
| |
| email: tinyfiledialogs at ysengrin.com |
|____________________________________________|
_________________________________________________________________________________
| |
| the windows only wchar_t UTF-16 prototypes are at the bottom of the header file |
|_________________________________________________________________________________|
_________________________________________________________
| |
| on windows: - since v3.6 char is UTF-8 by default |
| - if you want MBCS set tinyfd_winUtf8 to 0 |
| - functions like fopen expect MBCS |
|_________________________________________________________|
If you like tinyfiledialogs, please upvote my stackoverflow answer
https://stackoverflow.com/a/47651444
- License -
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
-----------
Thanks for contributions, bug corrections & thorough testing to:
- Don Heyse http://ldglite.sf.net for bug corrections & thorough testing!
- Paul Rouget
*/

View file

@ -13293,11 +13293,11 @@ FUNCTION ParseCMDLineArgs$ ()
END IF
END FUNCTION
FUNCTION InvalidSettingError$(token$)
FUNCTION InvalidSettingError$ (token$)
InvalidSettingError$ = "Invalid temporary setting switch: " + AddQuotes$(token$)
END FUNCTION
SUB PrintTemporarySettingsHelpAndExit(errstr$)
SUB PrintTemporarySettingsHelpAndExit (errstr$)
_DEST _CONSOLE
PRINT "QB64-PE Compiler V" + Version$
@ -13321,7 +13321,7 @@ SUB PrintTemporarySettingsHelpAndExit(errstr$)
SYSTEM
END SUB
FUNCTION ParseBooleanSetting&(token$, setting AS _UNSIGNED LONG)
FUNCTION ParseBooleanSetting& (token$, setting AS _UNSIGNED LONG)
DIM equals AS LONG
DIM value AS STRING
@ -13344,7 +13344,7 @@ FUNCTION ParseBooleanSetting&(token$, setting AS _UNSIGNED LONG)
END SELECT
END FUNCTION
FUNCTION ParseLongSetting&(token$, setting AS _UNSIGNED LONG)
FUNCTION ParseLongSetting& (token$, setting AS _UNSIGNED LONG)
DIM equals AS LONG
equals = INSTR(token$, "=")
@ -13355,7 +13355,7 @@ FUNCTION ParseLongSetting&(token$, setting AS _UNSIGNED LONG)
ParseLongSetting& = -1
END FUNCTION
FUNCTION ParseStringSetting&(token$, setting AS STRING)
FUNCTION ParseStringSetting& (token$, setting AS STRING)
DIM equals AS LONG
equals = INSTR(token$, "=")

View file

@ -1970,7 +1970,7 @@ id.args = 2
id.arg = MKL$(STRINGTYPE - ISPOINTER) + MKL$(STRINGTYPE - ISPOINTER)
id.specialformat = "?[,?]"
id.ret = ULONGTYPE - ISPOINTER
id.hr_syntax = "_SNDOPEN(fileName$)"
id.hr_syntax = "_SNDOPEN(fileName$[, capabilities$])"
regid
clearid
@ -3866,3 +3866,95 @@ id.arg = MKL$(UINTEGER64TYPE - ISPOINTER) + MKL$(LONGTYPE - ISPOINTER)
id.ret = UINTEGER64TYPE - ISPOINTER
id.hr_syntax = "_TOGGLEBIT(numericalVariable, numericalValue)"
regid
' a740g: Common dialog support using tiny file dialogs
clearid
id.n = qb64prefix$ + "NotifyPopup" ' Name in CaMeL case
id.subfunc = 2 ' 1 = function, 2 = sub
id.callname = "sub__guiNotifyPopup" ' C/C++ function name
id.args = 3 ' number of arguments - "passed"
id.arg = MKL$(STRINGTYPE - ISPOINTER) + MKL$(STRINGTYPE - ISPOINTER) + MKL$(STRINGTYPE - ISPOINTER) ' arguments & types
id.specialformat = "[?][,[?][,?]]" ' special format (optional in [])
id.hr_syntax = "_NOTIFYPOPUP [title$][, message$][, iconType$]" ' syntax help
regid
clearid
id.n = qb64prefix$ + "MessageBox" ' Name in CaMeL case
id.subfunc = 2 ' 1 = function, 2 = sub
id.callname = "sub__guiMessageBox" ' C/C++ function name
id.args = 3 ' number of arguments - "passed"
id.arg = MKL$(STRINGTYPE - ISPOINTER) + MKL$(STRINGTYPE - ISPOINTER) + MKL$(STRINGTYPE - ISPOINTER) ' arguments & types
id.specialformat = "[?][,[?][,?]]" ' special format (optional in [])
id.hr_syntax = "_MESSAGEBOX [title$][, message$][, iconType$]" ' syntax help
regid
clearid
id.n = qb64prefix$ + "SelectFolderDialog" ' Name in CaMeL case
id.musthave = "$"
id.subfunc = 1 ' 1 = function, 2 = sub
id.callname = "func__guiSelectFolderDialog" ' C/C++ function name
id.args = 2 ' number of arguments - "passed"
id.arg = MKL$(STRINGTYPE - ISPOINTER) + MKL$(STRINGTYPE - ISPOINTER) ' arguments & types
id.specialformat = "?[,?]" ' special format (optional in [])
id.ret = STRINGTYPE - ISPOINTER ' return type for functions
id.hr_syntax = "_SELECTFOLDERDIALOG$(title$[, defaultPath$])" ' syntax help
regid
clearid
id.n = qb64prefix$ + "ColorChooserDialog" ' Name in CaMeL case
id.subfunc = 1 ' 1 = function, 2 = sub
id.callname = "func__guiColorChooserDialog" ' C/C++ function name
id.args = 2 ' number of arguments - "passed"
id.arg = MKL$(STRINGTYPE - ISPOINTER) + MKL$(LONGTYPE - ISPOINTER) ' arguments & types
id.specialformat = "?[,?]" ' special format (optional in [])
id.ret = LONGTYPE - ISPOINTER ' return type for functions
id.hr_syntax = "_COLORCHOOSERDIALOG&(title$[, defaultRGB&])" ' syntax help
regid
clearid
id.n = qb64prefix$ + "MessageBox" ' Name in CaMeL case
id.subfunc = 1 ' 1 = function, 2 = sub
id.callname = "func__guiMessageBox" ' C/C++ function name
id.args = 5 ' number of arguments - "passed"
id.arg = MKL$(STRINGTYPE - ISPOINTER) + MKL$(STRINGTYPE - ISPOINTER) + MKL$(STRINGTYPE - ISPOINTER) + MKL$(STRINGTYPE - ISPOINTER) + MKL$(LONGTYPE - ISPOINTER) ' arguments & types
id.specialformat = "?,?,?,?[,?]" ' special format (optional in [])
id.ret = LONGTYPE - ISPOINTER ' return type for functions
id.hr_syntax = "_MESSAGEBOX&(title$, message$, dialogType$, iconType$[, defaultButton&])" ' syntax help
regid
clearid
id.n = qb64prefix$ + "InputBox" ' Name in CaMeL case
id.musthave = "$"
id.subfunc = 1 ' 1 = function, 2 = sub
id.callname = "func__guiInputBox" ' C/C++ function name
id.args = 3 ' number of arguments - "passed"
id.arg = MKL$(STRINGTYPE - ISPOINTER) + MKL$(STRINGTYPE - ISPOINTER) + MKL$(STRINGTYPE - ISPOINTER) ' arguments & types
id.specialformat = "?,?[,?]" ' special format (optional in [])
id.ret = STRINGTYPE - ISPOINTER ' return type for functions
id.hr_syntax = "_INPUTBOX$(title$, message$[, defaultInput$])" ' syntax help
regid
clearid
id.n = qb64prefix$ + "OpenFileDialog" ' Name in CaMeL case
id.musthave = "$"
id.subfunc = 1 ' 1 = function, 2 = sub
id.callname = "func__guiOpenFileDialog" ' C/C++ function name
id.args = 5 ' number of arguments - "passed"
id.arg = MKL$(STRINGTYPE - ISPOINTER) + MKL$(STRINGTYPE - ISPOINTER) + MKL$(STRINGTYPE - ISPOINTER) + MKL$(STRINGTYPE - ISPOINTER) + MKL$(LONGTYPE - ISPOINTER) ' arguments & types
id.specialformat = "?,?,?,?[,?]" ' special format (optional in [])
id.ret = STRINGTYPE - ISPOINTER ' return type for functions
id.hr_syntax = "_OPENFILEDIALOG$(title$, defaultPathAndFile$, filterPatterns$, singleFilterDescription$[, allowMultipleSelects&])" ' syntax help
regid
clearid
id.n = qb64prefix$ + "SaveFileDialog" ' Name in CaMeL case
id.musthave = "$"
id.subfunc = 1 ' 1 = function, 2 = sub
id.callname = "func__guiSaveFileDialog" ' C/C++ function name
id.args = 4 ' number of arguments - "passed"
id.arg = MKL$(STRINGTYPE - ISPOINTER) + MKL$(STRINGTYPE - ISPOINTER) + MKL$(STRINGTYPE - ISPOINTER) + MKL$(STRINGTYPE - ISPOINTER) ' arguments & types
id.ret = STRINGTYPE - ISPOINTER ' return type for functions
id.hr_syntax = "_SAVEFILEDIALOG$(title$, defaultPathAndFile$, filterPatterns$, singleFilterDescription$)" ' syntax help
regid
' a740g: Common dialog support using tiny file dialogs

View file

@ -5,4 +5,5 @@ listOfKeywords$ = listOfKeywords$ + "_GLCOPYTEXSUBIMAGE2D@_GLCULLFACE@_GLDELETEL
listOfKeywords$ = listOfKeywords$ + "_GLPOPATTRIB@_GLPOPCLIENTATTRIB@_GLPOPMATRIX@_GLPOPNAME@_GLPRIORITIZETEXTURES@_GLPUSHATTRIB@_GLPUSHCLIENTATTRIB@_GLPUSHMATRIX@_GLPUSHNAME@_GLRASTERPOS2D@_GLRASTERPOS2DV@_GLRASTERPOS2F@_GLRASTERPOS2FV@_GLRASTERPOS2I@_GLRASTERPOS2IV@_GLRASTERPOS2S@_GLRASTERPOS2SV@_GLRASTERPOS3D@_GLRASTERPOS3DV@_GLRASTERPOS3F@_GLRASTERPOS3FV@_GLRASTERPOS3I@_GLRASTERPOS3IV@_GLRASTERPOS3S@_GLRASTERPOS3SV@_GLRASTERPOS4D@_GLRASTERPOS4DV@_GLRASTERPOS4F@_GLRASTERPOS4FV@_GLRASTERPOS4I@_GLRASTERPOS4IV@_GLRASTERPOS4S@_GLRASTERPOS4SV@_GLREADBUFFER@_GLREADPIXELS@_GLRECTD@_GLRECTDV@_GLRECTF@_GLRECTFV@_GLRECTI@_GLRECTIV@_GLRECTS@_GLRECTSV@_GLRENDERMODE@_GLROTATED@_GLROTATEF@_GLSCALED@_GLSCALEF@_GLSCISSOR@_GLSELECTBUFFER@_GLSHADEMODEL@_GLSTENCILFUNC@_GLSTENCILMASK@_GLSTENCILOP@_GLTEXCOORD1D@_GLTEXCOORD1DV@_GLTEXCOORD1F@_GLTEXCOORD1FV@_GLTEXCOORD1I@_GLTEXCOORD1IV@_GLTEXCOORD1S@_GLTEXCOORD1SV@_GLTEXCOORD2D@_GLTEXCOORD2DV@_GLTEXCOORD2F@_GLTEXCOORD2FV@_GLTEXCOORD2I@_GLTEXCOORD2IV@_GLTEXCOORD2S@_GLTEXCOORD2SV@_GLTEXCOORD3D@_GLTEXCOORD3DV@_GLTEXCOORD3F@_GLTEXCOORD3FV@_GLTEXCOORD3I@_GLTEXCOORD3IV@_GLTEXCOORD3S@_GLTEXCOORD3SV@_GLTEXCOORD4D@_GLTEXCOORD4DV@_GLTEXCOORD4F@_GLTEXCOORD4FV@_GLTEXCOORD4I@_GLTEXCOORD4IV@_GLTEXCOORD4S@_GLTEXCOORD4SV@_GLTEXCOORDPOINTER@_GLTEXENVF@_GLTEXENVFV@_GLTEXENVI@_GLTEXENVIV@_GLTEXGEND@_GLTEXGENDV@_GLTEXGENF@_GLTEXGENFV@_GLTEXGENI@_GLTEXGENIV@_GLTEXIMAGE1D@_GLTEXIMAGE2D@_GLTEXPARAMETERF@_GLTEXPARAMETERFV@_GLTEXPARAMETERI@_GLTEXPARAMETERIV@_GLTEXSUBIMAGE1D@_GLTEXSUBIMAGE2D@_GLTRANSLATED@_GLTRANSLATEF@_GLVERTEX2D@_GLVERTEX2DV@_GLVERTEX2F@_GLVERTEX2FV@_GLVERTEX2I@_GLVERTEX2IV@_GLVERTEX2S@_GLVERTEX2SV@_GLVERTEX3D@_GLVERTEX3DV@_GLVERTEX3F@_GLVERTEX3FV@_GLVERTEX3I@_GLVERTEX3IV@_GLVERTEX3S@_GLVERTEX3SV@_GLVERTEX4D@_GLVERTEX4DV@_GLVERTEX4F@_GLVERTEX4FV@_GLVERTEX4I@_GLVERTEX4IV@_GLVERTEX4S@_GLVERTEX4SV@_GLVERTEXPOINTER@_GLVIEWPORT@SMOOTH@STRETCH@_ANTICLOCKWISE@_BEHIND@_CLEAR@_FILLBACKGROUND@_GLUPERSPECTIVE@_HARDWARE@_HARDWARE1@_KEEPBACKGROUND@_NONE@_OFF@_ONLY@_ONLYBACKGROUND@_ONTOP@_SEAMLESS@_SMOOTH@_SMOOTHSHRUNK@_SMOOTHSTRETCHED@"
listOfKeywords$ = listOfKeywords$ + "_SOFTWARE@_SQUAREPIXELS@_STRETCH@_ALLOWFULLSCREEN@_ALL@_ECHO@_INSTRREV@_TRIM$@_ACCEPTFILEDROP@_FINISHDROP@_TOTALDROPPEDFILES@_DROPPEDFILE@_DROPPEDFILE$@_SHR@_SHL@_ROR@_ROL@" ' a740g: added ROR & ROL
listOfKeywords$ = listOfKeywords$ + "_DEFLATE$@_INFLATE$@_READBIT@_RESETBIT@_SETBIT@_TOGGLEBIT@$ASSERTS@_ASSERT@_CAPSLOCK@_NUMLOCK@_SCROLLLOCK@_TOGGLE@_CONSOLEFONT@_CONSOLECURSOR@_CONSOLEINPUT@_CINP@$NOPREFIX@$COLOR@$DEBUG@_ENVIRONCOUNT@$UNSTABLE@$MIDISOUNDFONT@"
listOfKeywords$ = listOfKeywords$ + "_NOTIFYPOPUP@_MESSAGEBOX@_INPUTBOX$@_SELECTFOLDERDIALOG$@_COLORCHOOSERDIALOG@_OPENFILEDIALOG$@_SAVEFILEDIALOG$@" ' a740g: added common dialog keywords

View file

@ -10,6 +10,53 @@ The above copyright notice and this permission notice shall be included in all c
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
--------------------------------------------------------------------------------
License of tiny file dialogs
/*_________
/ \ tinyfiledialogs.c v3.8.8 [Apr 22, 2021] zlib licence
|tiny file| Unique code file created [November 9, 2014]
| dialogs | Copyright (c) 2014 - 2021 Guillaume Vareille http://ysengrin.com
\____ ___/ http://tinyfiledialogs.sourceforge.net
\| git clone http://git.code.sf.net/p/tinyfiledialogs/code tinyfd
____________________________________________
| |
| email: tinyfiledialogs at ysengrin.com |
|____________________________________________|
_________________________________________________________________________________
| |
| the windows only wchar_t UTF-16 prototypes are at the bottom of the header file |
|_________________________________________________________________________________|
_________________________________________________________
| |
| on windows: - since v3.6 char is UTF-8 by default |
| - if you want MBCS set tinyfd_winUtf8 to 0 |
| - functions like fopen expect MBCS |
|_________________________________________________________|
If you like tinyfiledialogs, please upvote my stackoverflow answer
https://stackoverflow.com/a/47651444
- License -
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
-----------
Thanks for contributions, bug corrections & thorough testing to:
- Don Heyse http://ldglite.sf.net for bug corrections & thorough testing!
- Paul Rouget
*/
--------------------------------------------------------------------------------
License of Miniaudio:
This software is available as a choice of the following licenses. Choose

View file

@ -10,6 +10,53 @@ The above copyright notice and this permission notice shall be included in all c
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
--------------------------------------------------------------------------------
License of tiny file dialogs
/*_________
/ \ tinyfiledialogs.c v3.8.8 [Apr 22, 2021] zlib licence
|tiny file| Unique code file created [November 9, 2014]
| dialogs | Copyright (c) 2014 - 2021 Guillaume Vareille http://ysengrin.com
\____ ___/ http://tinyfiledialogs.sourceforge.net
\| git clone http://git.code.sf.net/p/tinyfiledialogs/code tinyfd
____________________________________________
| |
| email: tinyfiledialogs at ysengrin.com |
|____________________________________________|
_________________________________________________________________________________
| |
| the windows only wchar_t UTF-16 prototypes are at the bottom of the header file |
|_________________________________________________________________________________|
_________________________________________________________
| |
| on windows: - since v3.6 char is UTF-8 by default |
| - if you want MBCS set tinyfd_winUtf8 to 0 |
| - functions like fopen expect MBCS |
|_________________________________________________________|
If you like tinyfiledialogs, please upvote my stackoverflow answer
https://stackoverflow.com/a/47651444
- License -
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
-----------
Thanks for contributions, bug corrections & thorough testing to:
- Don Heyse http://ldglite.sf.net for bug corrections & thorough testing!
- Paul Rouget
*/
--------------------------------------------------------------------------------
License of Miniaudio:
This software is available as a choice of the following licenses. Choose

View file

@ -10,6 +10,53 @@ The above copyright notice and this permission notice shall be included in all c
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
--------------------------------------------------------------------------------
License of tiny file dialogs
/*_________
/ \ tinyfiledialogs.c v3.8.8 [Apr 22, 2021] zlib licence
|tiny file| Unique code file created [November 9, 2014]
| dialogs | Copyright (c) 2014 - 2021 Guillaume Vareille http://ysengrin.com
\____ ___/ http://tinyfiledialogs.sourceforge.net
\| git clone http://git.code.sf.net/p/tinyfiledialogs/code tinyfd
____________________________________________
| |
| email: tinyfiledialogs at ysengrin.com |
|____________________________________________|
_________________________________________________________________________________
| |
| the windows only wchar_t UTF-16 prototypes are at the bottom of the header file |
|_________________________________________________________________________________|
_________________________________________________________
| |
| on windows: - since v3.6 char is UTF-8 by default |
| - if you want MBCS set tinyfd_winUtf8 to 0 |
| - functions like fopen expect MBCS |
|_________________________________________________________|
If you like tinyfiledialogs, please upvote my stackoverflow answer
https://stackoverflow.com/a/47651444
- License -
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
-----------
Thanks for contributions, bug corrections & thorough testing to:
- Don Heyse http://ldglite.sf.net for bug corrections & thorough testing!
- Paul Rouget
*/
--------------------------------------------------------------------------------
License of Miniaudio:
This software is available as a choice of the following licenses. Choose

View file

@ -10,6 +10,53 @@ The above copyright notice and this permission notice shall be included in all c
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
--------------------------------------------------------------------------------
License of tiny file dialogs
/*_________
/ \ tinyfiledialogs.c v3.8.8 [Apr 22, 2021] zlib licence
|tiny file| Unique code file created [November 9, 2014]
| dialogs | Copyright (c) 2014 - 2021 Guillaume Vareille http://ysengrin.com
\____ ___/ http://tinyfiledialogs.sourceforge.net
\| git clone http://git.code.sf.net/p/tinyfiledialogs/code tinyfd
____________________________________________
| |
| email: tinyfiledialogs at ysengrin.com |
|____________________________________________|
_________________________________________________________________________________
| |
| the windows only wchar_t UTF-16 prototypes are at the bottom of the header file |
|_________________________________________________________________________________|
_________________________________________________________
| |
| on windows: - since v3.6 char is UTF-8 by default |
| - if you want MBCS set tinyfd_winUtf8 to 0 |
| - functions like fopen expect MBCS |
|_________________________________________________________|
If you like tinyfiledialogs, please upvote my stackoverflow answer
https://stackoverflow.com/a/47651444
- License -
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
-----------
Thanks for contributions, bug corrections & thorough testing to:
- Don Heyse http://ldglite.sf.net for bug corrections & thorough testing!
- Paul Rouget
*/
--------------------------------------------------------------------------------
License of FreeGLUT:
Freeglut Copyright

View file

@ -9,3 +9,50 @@ Permission is hereby granted, free of charge, to any person obtaining a copy of
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
--------------------------------------------------------------------------------
License of tiny file dialogs
/*_________
/ \ tinyfiledialogs.c v3.8.8 [Apr 22, 2021] zlib licence
|tiny file| Unique code file created [November 9, 2014]
| dialogs | Copyright (c) 2014 - 2021 Guillaume Vareille http://ysengrin.com
\____ ___/ http://tinyfiledialogs.sourceforge.net
\| git clone http://git.code.sf.net/p/tinyfiledialogs/code tinyfd
____________________________________________
| |
| email: tinyfiledialogs at ysengrin.com |
|____________________________________________|
_________________________________________________________________________________
| |
| the windows only wchar_t UTF-16 prototypes are at the bottom of the header file |
|_________________________________________________________________________________|
_________________________________________________________
| |
| on windows: - since v3.6 char is UTF-8 by default |
| - if you want MBCS set tinyfd_winUtf8 to 0 |
| - functions like fopen expect MBCS |
|_________________________________________________________|
If you like tinyfiledialogs, please upvote my stackoverflow answer
https://stackoverflow.com/a/47651444
- License -
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
-----------
Thanks for contributions, bug corrections & thorough testing to:
- Don Heyse http://ldglite.sf.net for bug corrections & thorough testing!
- Paul Rouget
*/

View file

@ -10,6 +10,53 @@ The above copyright notice and this permission notice shall be included in all c
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
--------------------------------------------------------------------------------
License of tiny file dialogs
/*_________
/ \ tinyfiledialogs.c v3.8.8 [Apr 22, 2021] zlib licence
|tiny file| Unique code file created [November 9, 2014]
| dialogs | Copyright (c) 2014 - 2021 Guillaume Vareille http://ysengrin.com
\____ ___/ http://tinyfiledialogs.sourceforge.net
\| git clone http://git.code.sf.net/p/tinyfiledialogs/code tinyfd
____________________________________________
| |
| email: tinyfiledialogs at ysengrin.com |
|____________________________________________|
_________________________________________________________________________________
| |
| the windows only wchar_t UTF-16 prototypes are at the bottom of the header file |
|_________________________________________________________________________________|
_________________________________________________________
| |
| on windows: - since v3.6 char is UTF-8 by default |
| - if you want MBCS set tinyfd_winUtf8 to 0 |
| - functions like fopen expect MBCS |
|_________________________________________________________|
If you like tinyfiledialogs, please upvote my stackoverflow answer
https://stackoverflow.com/a/47651444
- License -
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
-----------
Thanks for contributions, bug corrections & thorough testing to:
- Don Heyse http://ldglite.sf.net for bug corrections & thorough testing!
- Paul Rouget
*/
--------------------------------------------------------------------------------
License of FreeGLUT:
Freeglut Copyright

View file

@ -10,6 +10,53 @@ The above copyright notice and this permission notice shall be included in all c
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
--------------------------------------------------------------------------------
License of tiny file dialogs
/*_________
/ \ tinyfiledialogs.c v3.8.8 [Apr 22, 2021] zlib licence
|tiny file| Unique code file created [November 9, 2014]
| dialogs | Copyright (c) 2014 - 2021 Guillaume Vareille http://ysengrin.com
\____ ___/ http://tinyfiledialogs.sourceforge.net
\| git clone http://git.code.sf.net/p/tinyfiledialogs/code tinyfd
____________________________________________
| |
| email: tinyfiledialogs at ysengrin.com |
|____________________________________________|
_________________________________________________________________________________
| |
| the windows only wchar_t UTF-16 prototypes are at the bottom of the header file |
|_________________________________________________________________________________|
_________________________________________________________
| |
| on windows: - since v3.6 char is UTF-8 by default |
| - if you want MBCS set tinyfd_winUtf8 to 0 |
| - functions like fopen expect MBCS |
|_________________________________________________________|
If you like tinyfiledialogs, please upvote my stackoverflow answer
https://stackoverflow.com/a/47651444
- License -
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
-----------
Thanks for contributions, bug corrections & thorough testing to:
- Don Heyse http://ldglite.sf.net for bug corrections & thorough testing!
- Paul Rouget
*/
--------------------------------------------------------------------------------
License of FreeType:
The FreeType Project LICENSE

View file

@ -10,6 +10,53 @@ The above copyright notice and this permission notice shall be included in all c
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
--------------------------------------------------------------------------------
License of tiny file dialogs
/*_________
/ \ tinyfiledialogs.c v3.8.8 [Apr 22, 2021] zlib licence
|tiny file| Unique code file created [November 9, 2014]
| dialogs | Copyright (c) 2014 - 2021 Guillaume Vareille http://ysengrin.com
\____ ___/ http://tinyfiledialogs.sourceforge.net
\| git clone http://git.code.sf.net/p/tinyfiledialogs/code tinyfd
____________________________________________
| |
| email: tinyfiledialogs at ysengrin.com |
|____________________________________________|
_________________________________________________________________________________
| |
| the windows only wchar_t UTF-16 prototypes are at the bottom of the header file |
|_________________________________________________________________________________|
_________________________________________________________
| |
| on windows: - since v3.6 char is UTF-8 by default |
| - if you want MBCS set tinyfd_winUtf8 to 0 |
| - functions like fopen expect MBCS |
|_________________________________________________________|
If you like tinyfiledialogs, please upvote my stackoverflow answer
https://stackoverflow.com/a/47651444
- License -
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
-----------
Thanks for contributions, bug corrections & thorough testing to:
- Don Heyse http://ldglite.sf.net for bug corrections & thorough testing!
- Paul Rouget
*/
--------------------------------------------------------------------------------
License of FreeType:
The FreeType Project LICENSE

View file

@ -10,6 +10,53 @@ The above copyright notice and this permission notice shall be included in all c
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
--------------------------------------------------------------------------------
License of tiny file dialogs
/*_________
/ \ tinyfiledialogs.c v3.8.8 [Apr 22, 2021] zlib licence
|tiny file| Unique code file created [November 9, 2014]
| dialogs | Copyright (c) 2014 - 2021 Guillaume Vareille http://ysengrin.com
\____ ___/ http://tinyfiledialogs.sourceforge.net
\| git clone http://git.code.sf.net/p/tinyfiledialogs/code tinyfd
____________________________________________
| |
| email: tinyfiledialogs at ysengrin.com |
|____________________________________________|
_________________________________________________________________________________
| |
| the windows only wchar_t UTF-16 prototypes are at the bottom of the header file |
|_________________________________________________________________________________|
_________________________________________________________
| |
| on windows: - since v3.6 char is UTF-8 by default |
| - if you want MBCS set tinyfd_winUtf8 to 0 |
| - functions like fopen expect MBCS |
|_________________________________________________________|
If you like tinyfiledialogs, please upvote my stackoverflow answer
https://stackoverflow.com/a/47651444
- License -
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
-----------
Thanks for contributions, bug corrections & thorough testing to:
- Don Heyse http://ldglite.sf.net for bug corrections & thorough testing!
- Paul Rouget
*/
--------------------------------------------------------------------------------
License of FreeType:
The FreeType Project LICENSE

View file

@ -10,6 +10,53 @@ The above copyright notice and this permission notice shall be included in all c
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
--------------------------------------------------------------------------------
License of tiny file dialogs
/*_________
/ \ tinyfiledialogs.c v3.8.8 [Apr 22, 2021] zlib licence
|tiny file| Unique code file created [November 9, 2014]
| dialogs | Copyright (c) 2014 - 2021 Guillaume Vareille http://ysengrin.com
\____ ___/ http://tinyfiledialogs.sourceforge.net
\| git clone http://git.code.sf.net/p/tinyfiledialogs/code tinyfd
____________________________________________
| |
| email: tinyfiledialogs at ysengrin.com |
|____________________________________________|
_________________________________________________________________________________
| |
| the windows only wchar_t UTF-16 prototypes are at the bottom of the header file |
|_________________________________________________________________________________|
_________________________________________________________
| |
| on windows: - since v3.6 char is UTF-8 by default |
| - if you want MBCS set tinyfd_winUtf8 to 0 |
| - functions like fopen expect MBCS |
|_________________________________________________________|
If you like tinyfiledialogs, please upvote my stackoverflow answer
https://stackoverflow.com/a/47651444
- License -
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
-----------
Thanks for contributions, bug corrections & thorough testing to:
- Don Heyse http://ldglite.sf.net for bug corrections & thorough testing!
- Paul Rouget
*/
--------------------------------------------------------------------------------
License of PCX Image Loader:
This is free and unencumbered software released into the public domain.

View file

@ -10,6 +10,53 @@ The above copyright notice and this permission notice shall be included in all c
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
--------------------------------------------------------------------------------
License of tiny file dialogs
/*_________
/ \ tinyfiledialogs.c v3.8.8 [Apr 22, 2021] zlib licence
|tiny file| Unique code file created [November 9, 2014]
| dialogs | Copyright (c) 2014 - 2021 Guillaume Vareille http://ysengrin.com
\____ ___/ http://tinyfiledialogs.sourceforge.net
\| git clone http://git.code.sf.net/p/tinyfiledialogs/code tinyfd
____________________________________________
| |
| email: tinyfiledialogs at ysengrin.com |
|____________________________________________|
_________________________________________________________________________________
| |
| the windows only wchar_t UTF-16 prototypes are at the bottom of the header file |
|_________________________________________________________________________________|
_________________________________________________________
| |
| on windows: - since v3.6 char is UTF-8 by default |
| - if you want MBCS set tinyfd_winUtf8 to 0 |
| - functions like fopen expect MBCS |
|_________________________________________________________|
If you like tinyfiledialogs, please upvote my stackoverflow answer
https://stackoverflow.com/a/47651444
- License -
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
-----------
Thanks for contributions, bug corrections & thorough testing to:
- Don Heyse http://ldglite.sf.net for bug corrections & thorough testing!
- Paul Rouget
*/
--------------------------------------------------------------------------------
License of PCX Image Loader:
This is free and unencumbered software released into the public domain.

View file

@ -10,6 +10,53 @@ The above copyright notice and this permission notice shall be included in all c
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
--------------------------------------------------------------------------------
License of tiny file dialogs
/*_________
/ \ tinyfiledialogs.c v3.8.8 [Apr 22, 2021] zlib licence
|tiny file| Unique code file created [November 9, 2014]
| dialogs | Copyright (c) 2014 - 2021 Guillaume Vareille http://ysengrin.com
\____ ___/ http://tinyfiledialogs.sourceforge.net
\| git clone http://git.code.sf.net/p/tinyfiledialogs/code tinyfd
____________________________________________
| |
| email: tinyfiledialogs at ysengrin.com |
|____________________________________________|
_________________________________________________________________________________
| |
| the windows only wchar_t UTF-16 prototypes are at the bottom of the header file |
|_________________________________________________________________________________|
_________________________________________________________
| |
| on windows: - since v3.6 char is UTF-8 by default |
| - if you want MBCS set tinyfd_winUtf8 to 0 |
| - functions like fopen expect MBCS |
|_________________________________________________________|
If you like tinyfiledialogs, please upvote my stackoverflow answer
https://stackoverflow.com/a/47651444
- License -
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
-----------
Thanks for contributions, bug corrections & thorough testing to:
- Don Heyse http://ldglite.sf.net for bug corrections & thorough testing!
- Paul Rouget
*/
--------------------------------------------------------------------------------
License of PCX Image Loader:
This is free and unencumbered software released into the public domain.

View file

@ -10,6 +10,53 @@ The above copyright notice and this permission notice shall be included in all c
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
--------------------------------------------------------------------------------
License of tiny file dialogs
/*_________
/ \ tinyfiledialogs.c v3.8.8 [Apr 22, 2021] zlib licence
|tiny file| Unique code file created [November 9, 2014]
| dialogs | Copyright (c) 2014 - 2021 Guillaume Vareille http://ysengrin.com
\____ ___/ http://tinyfiledialogs.sourceforge.net
\| git clone http://git.code.sf.net/p/tinyfiledialogs/code tinyfd
____________________________________________
| |
| email: tinyfiledialogs at ysengrin.com |
|____________________________________________|
_________________________________________________________________________________
| |
| the windows only wchar_t UTF-16 prototypes are at the bottom of the header file |
|_________________________________________________________________________________|
_________________________________________________________
| |
| on windows: - since v3.6 char is UTF-8 by default |
| - if you want MBCS set tinyfd_winUtf8 to 0 |
| - functions like fopen expect MBCS |
|_________________________________________________________|
If you like tinyfiledialogs, please upvote my stackoverflow answer
https://stackoverflow.com/a/47651444
- License -
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
-----------
Thanks for contributions, bug corrections & thorough testing to:
- Don Heyse http://ldglite.sf.net for bug corrections & thorough testing!
- Paul Rouget
*/
--------------------------------------------------------------------------------
License of zlib:
* zlib.h -- interface of the 'zlib' general purpose compression library

View file

@ -10,6 +10,53 @@ The above copyright notice and this permission notice shall be included in all c
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
--------------------------------------------------------------------------------
License of tiny file dialogs
/*_________
/ \ tinyfiledialogs.c v3.8.8 [Apr 22, 2021] zlib licence
|tiny file| Unique code file created [November 9, 2014]
| dialogs | Copyright (c) 2014 - 2021 Guillaume Vareille http://ysengrin.com
\____ ___/ http://tinyfiledialogs.sourceforge.net
\| git clone http://git.code.sf.net/p/tinyfiledialogs/code tinyfd
____________________________________________
| |
| email: tinyfiledialogs at ysengrin.com |
|____________________________________________|
_________________________________________________________________________________
| |
| the windows only wchar_t UTF-16 prototypes are at the bottom of the header file |
|_________________________________________________________________________________|
_________________________________________________________
| |
| on windows: - since v3.6 char is UTF-8 by default |
| - if you want MBCS set tinyfd_winUtf8 to 0 |
| - functions like fopen expect MBCS |
|_________________________________________________________|
If you like tinyfiledialogs, please upvote my stackoverflow answer
https://stackoverflow.com/a/47651444
- License -
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
-----------
Thanks for contributions, bug corrections & thorough testing to:
- Don Heyse http://ldglite.sf.net for bug corrections & thorough testing!
- Paul Rouget
*/
--------------------------------------------------------------------------------
License of zlib:
* zlib.h -- interface of the 'zlib' general purpose compression library

View file

@ -10,6 +10,53 @@ The above copyright notice and this permission notice shall be included in all c
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
--------------------------------------------------------------------------------
License of tiny file dialogs
/*_________
/ \ tinyfiledialogs.c v3.8.8 [Apr 22, 2021] zlib licence
|tiny file| Unique code file created [November 9, 2014]
| dialogs | Copyright (c) 2014 - 2021 Guillaume Vareille http://ysengrin.com
\____ ___/ http://tinyfiledialogs.sourceforge.net
\| git clone http://git.code.sf.net/p/tinyfiledialogs/code tinyfd
____________________________________________
| |
| email: tinyfiledialogs at ysengrin.com |
|____________________________________________|
_________________________________________________________________________________
| |
| the windows only wchar_t UTF-16 prototypes are at the bottom of the header file |
|_________________________________________________________________________________|
_________________________________________________________
| |
| on windows: - since v3.6 char is UTF-8 by default |
| - if you want MBCS set tinyfd_winUtf8 to 0 |
| - functions like fopen expect MBCS |
|_________________________________________________________|
If you like tinyfiledialogs, please upvote my stackoverflow answer
https://stackoverflow.com/a/47651444
- License -
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
-----------
Thanks for contributions, bug corrections & thorough testing to:
- Don Heyse http://ldglite.sf.net for bug corrections & thorough testing!
- Paul Rouget
*/
--------------------------------------------------------------------------------
License of zlib:
* zlib.h -- interface of the 'zlib' general purpose compression library

View file

@ -10,6 +10,53 @@ The above copyright notice and this permission notice shall be included in all c
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
--------------------------------------------------------------------------------
License of tiny file dialogs
/*_________
/ \ tinyfiledialogs.c v3.8.8 [Apr 22, 2021] zlib licence
|tiny file| Unique code file created [November 9, 2014]
| dialogs | Copyright (c) 2014 - 2021 Guillaume Vareille http://ysengrin.com
\____ ___/ http://tinyfiledialogs.sourceforge.net
\| git clone http://git.code.sf.net/p/tinyfiledialogs/code tinyfd
____________________________________________
| |
| email: tinyfiledialogs at ysengrin.com |
|____________________________________________|
_________________________________________________________________________________
| |
| the windows only wchar_t UTF-16 prototypes are at the bottom of the header file |
|_________________________________________________________________________________|
_________________________________________________________
| |
| on windows: - since v3.6 char is UTF-8 by default |
| - if you want MBCS set tinyfd_winUtf8 to 0 |
| - functions like fopen expect MBCS |
|_________________________________________________________|
If you like tinyfiledialogs, please upvote my stackoverflow answer
https://stackoverflow.com/a/47651444
- License -
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
-----------
Thanks for contributions, bug corrections & thorough testing to:
- Don Heyse http://ldglite.sf.net for bug corrections & thorough testing!
- Paul Rouget
*/
--------------------------------------------------------------------------------
License of Miniaudio:
This software is available as a choice of the following licenses. Choose

View file

@ -10,6 +10,53 @@ The above copyright notice and this permission notice shall be included in all c
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
--------------------------------------------------------------------------------
License of tiny file dialogs
/*_________
/ \ tinyfiledialogs.c v3.8.8 [Apr 22, 2021] zlib licence
|tiny file| Unique code file created [November 9, 2014]
| dialogs | Copyright (c) 2014 - 2021 Guillaume Vareille http://ysengrin.com
\____ ___/ http://tinyfiledialogs.sourceforge.net
\| git clone http://git.code.sf.net/p/tinyfiledialogs/code tinyfd
____________________________________________
| |
| email: tinyfiledialogs at ysengrin.com |
|____________________________________________|
_________________________________________________________________________________
| |
| the windows only wchar_t UTF-16 prototypes are at the bottom of the header file |
|_________________________________________________________________________________|
_________________________________________________________
| |
| on windows: - since v3.6 char is UTF-8 by default |
| - if you want MBCS set tinyfd_winUtf8 to 0 |
| - functions like fopen expect MBCS |
|_________________________________________________________|
If you like tinyfiledialogs, please upvote my stackoverflow answer
https://stackoverflow.com/a/47651444
- License -
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
-----------
Thanks for contributions, bug corrections & thorough testing to:
- Don Heyse http://ldglite.sf.net for bug corrections & thorough testing!
- Paul Rouget
*/
--------------------------------------------------------------------------------
License of Miniaudio:
This software is available as a choice of the following licenses. Choose

View file

@ -10,6 +10,53 @@ The above copyright notice and this permission notice shall be included in all c
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
--------------------------------------------------------------------------------
License of tiny file dialogs
/*_________
/ \ tinyfiledialogs.c v3.8.8 [Apr 22, 2021] zlib licence
|tiny file| Unique code file created [November 9, 2014]
| dialogs | Copyright (c) 2014 - 2021 Guillaume Vareille http://ysengrin.com
\____ ___/ http://tinyfiledialogs.sourceforge.net
\| git clone http://git.code.sf.net/p/tinyfiledialogs/code tinyfd
____________________________________________
| |
| email: tinyfiledialogs at ysengrin.com |
|____________________________________________|
_________________________________________________________________________________
| |
| the windows only wchar_t UTF-16 prototypes are at the bottom of the header file |
|_________________________________________________________________________________|
_________________________________________________________
| |
| on windows: - since v3.6 char is UTF-8 by default |
| - if you want MBCS set tinyfd_winUtf8 to 0 |
| - functions like fopen expect MBCS |
|_________________________________________________________|
If you like tinyfiledialogs, please upvote my stackoverflow answer
https://stackoverflow.com/a/47651444
- License -
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
-----------
Thanks for contributions, bug corrections & thorough testing to:
- Don Heyse http://ldglite.sf.net for bug corrections & thorough testing!
- Paul Rouget
*/
--------------------------------------------------------------------------------
License of Miniaudio:
This software is available as a choice of the following licenses. Choose