diff --git a/libc3/array.c b/libc3/array.c
index de87424..2d0f41f 100644
--- a/libc3/array.c
+++ b/libc3/array.c
@@ -71,8 +71,9 @@ void array_clean (s_array *a)
i++;
}
}
- free(a->data);
}
+ if (a->data_free)
+ free(a->data_free);
if (a->tags) {
i = 0;
while (i < a->count) {
@@ -224,6 +225,7 @@ s_array * array_init (s_array *a, const s_sym *type, uw dimension,
}
tmp.size = tmp.dimensions[0].count * tmp.dimensions[0].item_size;
tmp.count = count;
+ tmp.data_free = NULL;
tmp.data = NULL;
tmp.tags = NULL;
*a = tmp;
@@ -311,7 +313,7 @@ s_array * array_init_copy (s_array *a, const s_array *src)
tmp.size = src->size;
tmp.type = src->type;
if (src->data) {
- tmp.data = calloc(1, src->size);
+ tmp.data = tmp.data_free = calloc(1, src->size);
if (! tmp.data) {
warnx("array_init_copy: failed to allocate memory");
assert(! "array_init_copy: failed to allocate memory");
diff --git a/libc3/env.c b/libc3/env.c
index 48fed79..ef43a3f 100644
--- a/libc3/env.c
+++ b/libc3/env.c
@@ -116,33 +116,30 @@ bool env_eval_array (s_env *env, const s_array *array, s_array *dest)
assert(dest);
array_init_copy(&tmp, array);
item_size = tmp.dimensions[tmp.dimension - 1].item_size;
- if (tmp.data) {
- *dest = tmp;
- return true;
- }
- assert(array->tags);
- tmp.data = calloc(tmp.dimensions[0].count,
- tmp.dimensions[0].item_size);
- if (! tmp.data) {
- warn("env_eval_array: failed to allocate memory");
- assert(! "env_eval_array: failed to allocate memory");
- return false;
- }
- if (! sym_to_init_cast(tmp.type, &init_cast))
- goto ko;
- data = tmp.data;
- tag = tmp.tags;
- i = 0;
- while (i < tmp.count) {
- s_tag tag_eval;
- if (! env_eval_tag(env, tag, &tag_eval))
- goto ko;
- if (! init_cast(data, &tag_eval))
+ if (! tmp.data && array->tags) {
+ tmp.data = tmp.data_free = calloc(tmp.dimensions[0].count,
+ tmp.dimensions[0].item_size);
+ if (! tmp.data) {
+ warn("env_eval_array: failed to allocate memory");
+ assert(! "env_eval_array: failed to allocate memory");
+ return false;
+ }
+ if (! sym_to_init_cast(tmp.type, &init_cast))
goto ko;
- tag_clean(&tag_eval);
- data += item_size;
- tag++;
- i++;
+ data = tmp.data;
+ tag = tmp.tags;
+ i = 0;
+ while (i < tmp.count) {
+ s_tag tag_eval;
+ if (! env_eval_tag(env, tag, &tag_eval))
+ goto ko;
+ if (! init_cast(data, &tag_eval))
+ goto ko;
+ tag_clean(&tag_eval);
+ data += item_size;
+ tag++;
+ i++;
+ }
}
*dest = tmp;
return true;
diff --git a/libc3/point.h.in b/libc3/point.h.in
new file mode 100644
index 0000000..94a7879
--- /dev/null
+++ b/libc3/point.h.in
@@ -0,0 +1,590 @@
+/* c3
+ * Copyright 2022,2023 kmx.io <contact@kmx.io>
+ *
+ * Permission is hereby granted to use this software granted the above
+ * copyright notice and this permission paragraph are included in all
+ * copies and substantial portions of this software.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS-IS" WITHOUT ANY GUARANTEE OF
+ * PURPOSE AND PERFORMANCE. IN NO EVENT WHATSOEVER SHALL THE
+ * AUTHOR BE CONSIDERED LIABLE FOR THE USE AND PERFORMANCE OF
+ * THIS SOFTWARE.
+ */
+#ifndef LIBC3_TYPES_H
+#define LIBC3_TYPES_H
+
+#include <ffi.h>
+#include <limits.h>
+#include <setjmp.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <time.h>
+#include <pthread.h>
+#include "config.h"
+#include "sha1.h"
+#include "../libtommath/tommath.h"
+
+#ifdef bool
+# undef bool
+#endif
+#ifdef false
+# undef false
+#endif
+#ifdef true
+# undef true
+#endif
+
+#ifdef __APPLE__
+# define st_mtim st_mtimespec
+#endif
+
+/* Basic integer types. */
+typedef char s8;
+typedef int16_t s16;
+typedef int32_t s32;
+typedef long sw;
+typedef int64_t s64;
+typedef uint8_t u8;
+typedef uint16_t u16;
+typedef uint32_t u32;
+typedef unsigned long uw;
+typedef uint64_t u64;
+
+#ifdef SW_MAX
+#undef SW_MAX
+#endif
+
+#define S8_MAX ((s8) (((u8) 1 << (8 * sizeof(s8) - 1)) - 1))
+#define S16_MAX ((s16) (((u16) 1 << (8 * sizeof(s16) - 1)) - 1))
+#define S32_MAX ((s32) (((u32) 1 << (8 * sizeof(s32) - 1)) - 1))
+#define S64_MAX ((s64) (((u64) 1 << (8 * sizeof(s64) - 1)) - 1))
+#define SW_MAX ((sw) (((uw) 1 << (8 * sizeof(sw) - 1)) - 1))
+
+#define S8_MIN ((s8) 1 << (8 * sizeof(s8) - 1))
+#define S16_MIN ((s16) 1 << (8 * sizeof(s16) - 1))
+#define S32_MIN ((s32) 1 << (8 * sizeof(s32) - 1))
+#define S64_MIN ((s64) 1 << (8 * sizeof(s64) - 1))
+#define SW_MIN ((sw) 1 << (8 * sizeof(sw) - 1))
+
+#define U8_MAX ((u8) ~ 0)
+#define U16_MAX ((u16) ~ 0)
+#define U32_MAX ((u32) ~ 0)
+#define U64_MAX ((u64) ~ 0)
+#define UW_MAX ((uw) ~ 0)
+
+/* IEEE 754 floating point numbers. */
+typedef float f32;
+typedef double f64;
+
+/* Boolean : true or false. */
+typedef u8 bool;
+
+/* enums */
+typedef enum {
+ false = 0,
+ true = 1
+} e_bool;
+
+typedef enum {
+ TAG_VOID = 0,
+ TAG_ARRAY,
+ TAG_BOOL,
+ TAG_CALL,
+ TAG_CFN,
+ TAG_CHARACTER,
+ TAG_F32,
+ TAG_F64,
+ TAG_FACT,
+ TAG_FN,
+ TAG_INTEGER,
+ TAG_SW,
+ TAG_S64,
+ TAG_S32,
+ TAG_S16,
+ TAG_S8,
+ TAG_U8,
+ TAG_U16,
+ TAG_U32,
+ TAG_U64,
+ TAG_UW,
+ TAG_LIST,
+ TAG_MAP,
+ TAG_PTAG,
+ TAG_PTR,
+ TAG_PTR_FREE,
+ TAG_QUOTE,
+ TAG_STR,
+ TAG_STRUCT,
+ TAG_SYM,
+ TAG_TUPLE,
+ TAG_VAR,
+ TAG_IDENT
+} e_tag_type;
+
+/* structs */
+typedef struct arg s_arg;
+typedef struct array s_array;
+typedef struct array_dimension s_array_dimension;
+typedef struct binding s_binding;
+typedef struct buf s_buf;
+typedef struct buf_save s_buf_save;
+typedef struct call s_call;
+typedef struct cfn s_cfn;
+typedef struct env s_env;
+typedef struct error_handler s_error_handler;
+typedef struct fact s_fact;
+typedef struct fact_w s_fact_w;
+typedef struct facts s_facts;
+typedef struct facts_cursor s_facts_cursor;
+typedef struct facts_spec_cursor s_facts_spec_cursor;
+typedef struct facts_with_cursor s_facts_with_cursor;
+typedef struct facts_with_cursor_level s_facts_with_cursor_level;
+typedef struct float_s s_float;
+typedef struct fn s_fn;
+typedef struct fn_clause s_fn_clause;
+typedef struct frame s_frame;
+typedef struct ident s_ident;
+typedef struct integer s_integer;
+typedef struct integer_fraction s_integer_fraction;
+typedef struct list s_list;
+typedef struct list s_list_map;
+typedef struct log s_log;
+typedef struct map s_map;
+typedef struct quote s_quote;
+typedef struct sequence s_sequence;
+typedef struct str s_str;
+typedef struct struct_ s_struct;
+typedef struct struct_type s_struct_type;
+typedef struct sym s_sym;
+typedef struct sym_list s_sym_list;
+typedef struct tag s_tag;
+typedef struct tag_type_list s_tag_type_list;
+typedef struct timespec s_time;
+typedef struct tuple s_tuple;
+typedef struct type s_type;
+typedef struct unwind_protect s_unwind_protect;
+
+/* unions */
+typedef union ptr_ u_ptr;
+typedef union ptr_w u_ptr_w;
+typedef union tag_data u_tag_data;
+typedef union tag_type u_tag_type;
+
+/* typedefs */
+typedef s32 character;
+typedef s_tag **p_facts_spec;
+typedef s_tag *t_facts_spec[];
+typedef SHA1_CTX t_hash;
+typedef const s_tag *p_tag;
+typedef u64 t_skiplist_height;
+
+/* function typedefs */
+typedef sw (* f_buf_inspect) (s_buf *buf, const void *x);
+typedef sw (* f_buf_inspect_size) (const void *x);
+typedef sw (* f_buf_parse) (s_buf *buf, void *dest);
+typedef void (* f_clean) (void *x);
+typedef bool (* f_env_eval) (s_env *env, const void *x, s_tag *dest);
+typedef void (* f_hash_update) (t_hash *hash, const void *x);
+typedef void * (* f_init_cast) (void *x, const s_tag *tag);
+typedef void * (* f_init_copy) (void *x, const void *src);
+typedef bool (* f_sequence_load) (s_sequence *seq, void *window);
+typedef bool (* f_sequence_render) (s_sequence *seq, void *window,
+ void *context);
+
+#define CHARACTER_MAX S32_MAX
+#define SKIPLIST_HEIGHT_MAX U64_MAX
+
+/* 1 */
+struct array_dimension {
+ uw count;
+ uw item_size;
+};
+
+struct buf_save {
+ s_buf_save *next;
+ uw rpos;
+ uw wpos;
+};
+
+struct fact {
+ const s_tag *subject;
+ const s_tag *predicate;
+ const s_tag *object;
+ uw id; /* serial id */
+};
+
+struct fact_w {
+ s_tag *subject;
+ s_tag *predicate;
+ s_tag *object;
+ uw id; /* serial id */
+};
+
+struct fn_clause {
+ uw arity;
+ s_list *pattern;
+ s_list *algo;
+ s_fn_clause *next_clause;
+};
+
+struct frame {
+ s_binding *bindings;
+ s_frame *next;
+};
+
+struct map {
+ uw count;
+ s_tag *key; /* sorted (see tag_compare) */
+ s_tag *value;
+};
+
+union ptr_ {
+ const void *p;
+ const s8 *ps8;
+ const u8 *pu8;
+};
+
+union ptr_w {
+ void *p;
+ s8 *ps8;
+ u8 *pu8;
+};
+
+struct quote {
+ s_tag *tag;
+};
+
+struct struct_type {
+ const s_sym *module;
+ s_map map;
+ uw *offset;
+ uw size;
+};
+
+struct sym_list {
+ s_sym *sym;
+ s_sym_list *next;
+};
+
+struct tag_type_list {
+ e_tag_type type;
+ s_tag_type_list *next;
+};
+
+struct tuple {
+ uw count;
+ s_tag *tag;
+};
+
+struct unwind_protect {
+ jmp_buf buf;
+ jmp_buf *jmp;
+ s_unwind_protect *next;
+};
+
+/* 2 */
+struct buf {
+ sw column;
+ sw (*flush) (s_buf *buf);
+ bool free;
+ sw line;
+ u_ptr_w ptr;
+ sw (*refill) (s_buf *buf);
+ uw rpos;
+ s_buf_save *save;
+ sw (*seek) (s_buf *buf, sw offset, u8 whence);
+ uw size;
+ void *user_ptr;
+ uw wpos;
+};
+
+struct facts_spec_cursor {
+ p_facts_spec spec;
+ const s_tag *subject;
+ uw pos;
+};
+
+struct fn {
+ s_fn_clause *clauses;
+ bool macro;
+ bool special_operator;
+};
+
+struct ident {
+ const s_sym *module;
+ const s_sym *sym;
+};
+
+struct integer {
+ mp_int mp_int;
+};
+
+struct str {
+ u_ptr_w free; /**< Pointer to free or NULL. */
+ uw size; /**< Size in bytes. */
+ u_ptr ptr; /**< Pointer to memory. */
+};
+
+struct struct_ {
+ void *data;
+ s_tag *tag;
+ bool free_data;
+ s_struct_type type;
+};
+
+/* 3 */
+struct call {
+ /* key */
+ s_ident ident;
+ s_list *arguments;
+ s_list_map *keyword;
+ /* value */
+ s_cfn *cfn;
+ s_fn *fn;
+};
+
+struct cfn {
+ const s_sym *name;
+ union {
+ void (*f) (void);
+ void *p;
+ } ptr;
+ u8 arity;
+ const s_sym *result_type;
+ bool arg_result;
+ s_list *arg_types;
+ ffi_cif cif;
+ bool macro;
+ bool special_operator;
+};
+
+struct integer_fraction {
+ s_integer num;
+ s_integer div;
+};
+
+struct log {
+ s_buf buf;
+ u64 count;
+ t_hash hash;
+};
+
+struct sym {
+ s_str str;
+};
+
+struct type {
+ s_ident ident;
+};
+
+/* 4 */
+struct array {
+ uw count;
+ uw dimension;
+ s_array_dimension *dimensions;
+ void *data;
+ void *data_free;
+ uw size;
+ s_tag *tags;
+ const s_sym *type;
+};
+
+struct float_s {
+ s_integer_fraction f; /* divisor is always 10^n */
+};
+
+
+/* 5 */
+union tag_data {
+ s_array array;
+ bool bool;
+ s_call call;
+ s_cfn cfn;
+ character character;
+ f32 f32;
+ f64 f64;
+ s_fact fact;
+ s_fn fn;
+ s_ident ident;
+ s_integer integer;
+ s_list *list;
+ s_map map;
+ p_tag ptag;
+ u_ptr_w ptr;
+ u_ptr_w ptr_free;
+ s_quote quote;
+ s_str str;
+ s_struct struct_;
+ const s_sym *sym;
+ s8 s8;
+ s16 s16;
+ s32 s32;
+ s64 s64;
+ sw sw;
+ s_tuple tuple;
+ u8 u8;
+ u16 u16;
+ u32 u32;
+ u64 u64;
+ uw uw;
+};
+
+/* 6 */
+struct tag {
+ e_tag_type type;
+ u_tag_data data;
+};
+
+/* 7 */
+struct arg {
+ const s_sym *name;
+ s_type type;
+ s_arg *next;
+};
+
+struct binding {
+ const s_sym *name;
+ s_tag value;
+ s_binding *next;
+};
+
+struct error_handler
+{
+ s_list *backtrace;
+ jmp_buf jmp_buf;
+ s_error_handler *next;
+ s_tag tag;
+};
+
+struct list {
+ s_tag tag;
+ s_tag next;
+};
+
+struct sequence {
+ s_tag tag;
+ f64 dt;
+ f64 duration;
+ u64 frame;
+ f_sequence_load load;
+ f_sequence_render render;
+ f64 t;
+ s_time t0;
+ const s8 *title;
+};
+
+#define TYPEDEF_SET_ITEM(name, type) \
+ typedef struct set_item__##name s_set_item__##name; \
+ \
+ struct set_item__##name { \
+ type data; \
+ uw hash; \
+ s_set_item__##name *next; \
+ uw usage; \
+ }
+
+TYPEDEF_SET_ITEM(tag, s_tag);
+TYPEDEF_SET_ITEM(fact, s_fact);
+
+#define TYPEDEF_SET(name, type) \
+ typedef struct set__##name { \
+ uw collisions; \
+ uw count; \
+ s_set_item__##name **items; \
+ uw max; \
+ } s_set__##name
+
+TYPEDEF_SET(tag, s_tag);
+TYPEDEF_SET(fact, s_fact);
+
+#define TYPEDEF_SET_CURSOR(name) \
+ typedef struct set_cursor__##name { \
+ s_set__##name *set; \
+ uw i; \
+ s_set_item__##name *item; \
+ uw count; \
+ } s_set_cursor__##name
+
+TYPEDEF_SET_CURSOR(tag);
+TYPEDEF_SET_CURSOR(fact);
+
+#define TYPEDEF_SKIPLIST_NODE(name, type) \
+ typedef struct skiplist_node__##name { \
+ type name; \
+ u8 height; \
+ } s_skiplist_node__##name
+
+TYPEDEF_SKIPLIST_NODE(fact, s_fact *);
+
+#define TYPEDEF_SKIPLIST(name, type) \
+ typedef struct skiplist__##name { \
+ s_skiplist_node__##name *head; \
+ s8 (*compare) (const type a, const type b); \
+ uw length; \
+ u8 max_height; \
+ } s_skiplist__##name
+
+TYPEDEF_SKIPLIST(fact, s_fact *);
+
+/* 8 */
+struct facts {
+ s_set__tag tags;
+ s_set__fact facts;
+ s_skiplist__fact *index_spo;
+ s_skiplist__fact *index_pos;
+ s_skiplist__fact *index_osp;
+ s_log *log;
+ pthread_rwlock_t rwlock;
+ sw rwlock_count;
+ pthread_t rwlock_thread;
+ u64 next_id;
+};
+
+struct facts_cursor {
+ s_facts *facts;
+ s_skiplist__fact *index;
+ s_skiplist_node__fact *node;
+ s_fact start;
+ s_fact end;
+ s_tag *var_subject;
+ s_tag *var_predicate;
+ s_tag *var_object;
+ pthread_mutex_t mutex;
+};
+
+/* 9 */
+struct env {
+ sw argc;
+ s8 **argv;
+ s_str argv0_dir;
+ s_list *backtrace;
+ const s_sym *current_module;
+ s_buf err;
+ s_error_handler *error_handler;
+ s_facts facts;
+ s_frame *frame;
+ s_buf in;
+ s_str module_path;
+ s_buf out;
+ s_list *path;
+ s_unwind_protect *unwind_protect;
+};
+
+struct facts_with_cursor_level {
+ s_facts_cursor cursor;
+ s_fact *fact;
+ p_facts_spec spec;
+};
+
+/* 10 */
+struct facts_with_cursor {
+ s_facts *facts;
+ s_binding *bindings;
+ uw facts_count;
+ s_facts_with_cursor_level *levels;
+ uw level;
+ p_facts_spec spec;
+ pthread_mutex_t mutex;
+};
+
+#endif /* LIBC3_TYPES_H */
diff --git a/libc3/types.h b/libc3/types.h
index 3b94aec..94a7879 100644
--- a/libc3/types.h
+++ b/libc3/types.h
@@ -383,6 +383,7 @@ struct array {
uw dimension;
s_array_dimension *dimensions;
void *data;
+ void *data_free;
uw size;
s_tag *tags;
const s_sym *type;
diff --git a/libc3/window/sdl2/configure b/libc3/window/sdl2/configure
index 011aaa3..6c9b166 100755
--- a/libc3/window/sdl2/configure
+++ b/libc3/window/sdl2/configure
@@ -37,7 +37,7 @@ OBJECTS_DEBUG="$(c2ext .debug.lo "$SOURCES")"
# Common config for all targets
CPPFLAGS="-I../../../libffi/include -I../../.. $CPPFLAGS"
-CPPFLAGS="$CPPFLAGS -DGL_SILENCE_DEPRECATION=1"
+#CPPFLAGS="$CPPFLAGS -DGL_SILENCE_DEPRECATION=1"
CFLAGS="$CFLAGS -W -Wall -Werror -std=c99 -pedantic"
LDFLAGS="--shared ${LDFLAGS}"
LIBS="$LIBS -rpath ${PREFIX}/lib"
@@ -45,6 +45,7 @@ config_asan
config_gnu
pkg_config ftgl
pkg_config gl
+pkg_config glew
pkg_config glu
pkg_config glut
pkg_config libbsd-overlay
diff --git a/libc3/window/sdl2/demo/configure b/libc3/window/sdl2/demo/configure
index 132de97..1c0d618 100755
--- a/libc3/window/sdl2/demo/configure
+++ b/libc3/window/sdl2/demo/configure
@@ -45,7 +45,7 @@ echo "OBJECTS_DEBUG = $OBJECTS_DEBUG" >> ${CONFIG_MK}
# Common config for all targets
CPPFLAGS="-I../../../../libffi/include -I../../../.. $CPPFLAGS"
-CPPFLAGS="$CPPFLAGS -DGL_SILENCE_DEPRECATION=1"
+#CPPFLAGS="$CPPFLAGS -DGL_SILENCE_DEPRECATION=1"
CFLAGS="$CFLAGS -W -Wall -Werror -std=c99 -pedantic"
LIBS="$LIBS -lm"
config_asan
diff --git a/libc3/window/sdl2/disabled/mandelbrot.c b/libc3/window/sdl2/disabled/mandelbrot.c
new file mode 100644
index 0000000..745be08
--- /dev/null
+++ b/libc3/window/sdl2/disabled/mandelbrot.c
@@ -0,0 +1,151 @@
+/* c3
+ * Copyright 2022,2023 kmx.io <contact@kmx.io>
+ *
+ * Permission is hereby granted to use this software granted the above
+ * copyright notice and this permission paragraph are included in all
+ * copies and substantial portions of this software.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS-IS" WITHOUT ANY GUARANTEE OF
+ * PURPOSE AND PERFORMANCE. IN NO EVENT WHATSOEVER SHALL THE
+ * AUTHOR BE CONSIDERED LIABLE FOR THE USE AND PERFORMANCE OF
+ * THIS SOFTWARE.
+ */
+#include <libc3/c3.h>
+#include "mandelbrot.h"
+
+GLuint g_mandelbrotComputeProgram = 0;
+GLuint g_mandelbrotComputeShader = 0;
+
+bool mandelbrot_load (s_sequence *seq, s_window_sdl2 *window)
+{
+ uw i;
+ uw star_count;
+ s_map *map;
+ (void) window;
+ if (! tag_map(&seq->tag, 5))
+ return false;
+ map = &seq->tag.data.map;
+ tag_init_sym_1(map->key + 0, "h");
+ tag_init_uw( map->value + 0, 0);
+ tag_init_sym_1(map->key + 1, "w");
+ tag_init_uw( map->value + 1, 0);
+ tag_init_sym_1(map->key + 2, "x");
+ tag_init_f64(map->value + 2, 0.0);
+ tag_init_sym_1(map->key + 3, "y");
+ tag_init_f64(map->value + 3, 0.0);
+ tag_init_sym_1(map->key + 4, "zoom");
+ tag_init_f64(map->value + 4, 1.0);
+ return true;
+}
+
+bool mandelbrot_render (s_sequence *seq, s_window_sdl2 *window,
+ void *context)
+{
+ uw *h;
+ s_map *map;
+ uw *w;
+ f64 *x;
+ f64 *y;
+ f64 *zoom;
+ assert(seq);
+ assert(window);
+ (void) context;
+ if (seq->tag.type != TAG_MAP) {
+ err_puts("mandelbrot_render: sequence tag is not a map");
+ assert(! "mandelbrot_render: sequence tag is not a map");
+ return false;
+ }
+ map = &seq->tag.data.map;
+ if (map->count != 5 ||
+ map->value[0].type != TAG_UW ||
+ map->value[1].type != TAG_UW ||
+ map->value[2].type != TAG_F64 ||
+ map->value[3].type != TAG_F64 ||
+ map->value[4].type != TAG_F64) {
+ err_puts("mandelbrot_render: invalid map");
+ assert(! "mandelbrot_render: invalid map");
+ return false;
+ }
+ h = &map->value[0].data.uw;
+ w = &map->value[1].data.uw;
+ x = &map->value[2].data.f64;
+ y = &map->value[3].data.f64;
+ zoom = &map->value[4].data.f64;
+ if (*w != window->w || *h != window->h) {
+ *w = window->w;
+ *h = window->h;
+ mandelbrot_texture_update(*w, *h);
+ }
+ // fullscreen texture
+ glMatrixMode(GL_PROJECTION);
+ glLoadIdentity();
+ glMatrixMode(GL_MODELVIEW);
+ glLoadIdentity();
+ glColor4f(1, 1, 1, 1);
+ glDisable(GL_BLEND);
+ glDisable(GL_DEPTH_TEST);
+ glDisable(GL_CULL_FACE);
+ glEnable(GL_TEXTURE_2D);
+ glBegin(GL_QUADS); {
+ glTexCoord2f(0, 1);
+ glVertex2f(-1, 1);
+ glTexCoord2f(0, 0);
+ glVertex2f(-1, -1);
+ glTexCoord2f(1, 0);
+ glVertex2f(1, -1);
+ glTexCoord2f(1, 1);
+ glVertex2f(1, 1);
+ } glEnd();
+ return true;
+}
+
+void mandelbrot_shader_init (void)
+{
+ const char* src =
+ "#version 430 core\n"
+ "layout (local_size_x = 16, local_size_y = 16) in;\n"
+ "layout (rgba32f, binding = 0) uniform image2D mandelbrotImage;\n"
+ "uniform int maxIterations;\n"
+ "uniform double zoom;\n"
+ "uniform dvec2 offset;\n"
+ "void main() {\n"
+ " ivec2 texelCoord = ivec2(gl_GlobalInvocationID.xy);\n"
+ " dvec2 c = (dvec2(texelCoord) /\n"
+ " double(imageSize(mandelbrotImage).y) - 0.5) *\n"
+ " zoom + offset;\n"
+ " dvec2 z = c;\n"
+ " int iterations = 0;\n"
+ " for (int i = 0; i < maxIterations; ++i) {\n"
+ " if (dot(z, z) > 4.0) {\n"
+ " break;\n"
+ " }\n"
+ " z = dvec2(z.x * z.x - z.y * z.y, 2.0 * z.x * z.y) + c;\n"
+ " iterations++;\n"
+ " }\n"
+ " vec4 color = vec4(float(iterations) / float(maxIterations));\n"
+ " imageStore(mandelbrotImage, texelCoord, color);\n"
+ "}\n";
+ g_mandelbrot_shader = glCreateShader(GL_COMPUTE_SHADER);
+ glShaderSource(g_mandelbrot_shader, 1, src, NULL);
+ glCompileShader(g_mandelbrot_shader);
+ g_mandelbrotShaderProgram = glCreateProgram();
+ glAttachShader(mandelbrotShaderProgram, g_mandelbrot_shader);
+ glLinkProgram(mandelbrotShaderProgram);
+ glUseProgram(mandelbrotShaderProgram);
+}
+
+void mandelbrot_texture_delete (void)
+{
+ glDeleteTextures(1, &g_mandelbrot_texture);
+}
+
+void mandelbrot_texture_init (void)
+{
+ glGenTextures(1, &g_mandelbrot_texture);
+}
+
+void mandelbrot_update_texture () {
+ glBindTexture(GL_TEXTURE_2D, mandelbrotImage);
+ glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA32F, WIDTH, HEIGHT);
+ glBindImageTexture(0, mandelbrotImage, 0, GL_FALSE, 0, GL_WRITE_ONLY, GL_RGBA32F);
+}
diff --git a/libc3/window/sdl2/disabled/mandelbrot.h b/libc3/window/sdl2/disabled/mandelbrot.h
new file mode 100644
index 0000000..3f453c4
--- /dev/null
+++ b/libc3/window/sdl2/disabled/mandelbrot.h
@@ -0,0 +1,22 @@
+/* c3
+ * Copyright 2022,2023 kmx.io <contact@kmx.io>
+ *
+ * Permission is hereby granted to use this software granted the above
+ * copyright notice and this permission paragraph are included in all
+ * copies and substantial portions of this software.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS-IS" WITHOUT ANY GUARANTEE OF
+ * PURPOSE AND PERFORMANCE. IN NO EVENT WHATSOEVER SHALL THE
+ * AUTHOR BE CONSIDERED LIABLE FOR THE USE AND PERFORMANCE OF
+ * THIS SOFTWARE.
+ */
+#ifndef MANDELBROT_H
+#define MANDELBROT_H
+
+#include "../types.h"
+
+bool mandelbrot_load (s_sequence *seq, s_window_sdl2 *window);
+bool mandelbrot_render (s_sequence *seq, s_window_sdl2 *window,
+ void *context);
+
+#endif /* MANDELBROT_H */
diff --git a/libc3/window/sdl2/gl.c b/libc3/window/sdl2/gl.c
deleted file mode 100644
index a2b53e5..0000000
--- a/libc3/window/sdl2/gl.c
+++ /dev/null
@@ -1,28 +0,0 @@
-/* c3
- * Copyright 2022,2023 kmx.io <contact@kmx.io>
- *
- * Permission is hereby granted to use this software granted the above
- * copyright notice and this permission paragraph are included in all
- * copies and substantial portions of this software.
- *
- * THIS SOFTWARE IS PROVIDED "AS-IS" WITHOUT ANY GUARANTEE OF
- * PURPOSE AND PERFORMANCE. IN NO EVENT WHATSOEVER SHALL THE
- * AUTHOR BE CONSIDERED LIABLE FOR THE USE AND PERFORMANCE OF
- * THIS SOFTWARE.
- */
-#include "gl.h"
-
-void gl_normal_3d (const s_gl_3d *normal)
-{
- glNormal3dv(&normal->x);
-}
-
-void gl_tex_coord_2d (const s_gl_2d *tex_coord)
-{
- glTexCoord2dv(&tex_coord->x);
-}
-
-void gl_vertex_3d (const s_gl_3d *vertex)
-{
- glVertex3dv(&vertex->x);
-}
diff --git a/libc3/window/sdl2/gl.h b/libc3/window/sdl2/gl.h
deleted file mode 100644
index fe84eb3..0000000
--- a/libc3/window/sdl2/gl.h
+++ /dev/null
@@ -1,22 +0,0 @@
-/* c3
- * Copyright 2022,2023 kmx.io <contact@kmx.io>
- *
- * Permission is hereby granted to use this software granted the above
- * copyright notice and this permission paragraph are included in all
- * copies and substantial portions of this software.
- *
- * THIS SOFTWARE IS PROVIDED "AS-IS" WITHOUT ANY GUARANTEE OF
- * PURPOSE AND PERFORMANCE. IN NO EVENT WHATSOEVER SHALL THE
- * AUTHOR BE CONSIDERED LIABLE FOR THE USE AND PERFORMANCE OF
- * THIS SOFTWARE.
- */
-#ifndef LIBC3_WINDOW_SDL2_GL_H
-#define LIBC3_WINDOW_SDL2_GL_H
-
-#include "types.h"
-
-void gl_normal_3d (const s_gl_3d *normal);
-void gl_tex_coord_2d (const s_gl_2d *tex_coord);
-void gl_vertex_3d (const s_gl_3d *vertex);
-
-#endif /* LIBC3_WINDOW_SDL2_GL_H */
diff --git a/libc3/window/sdl2/gl_camera.c b/libc3/window/sdl2/gl_camera.c
index 3f4c946..d886e28 100644
--- a/libc3/window/sdl2/gl_camera.c
+++ b/libc3/window/sdl2/gl_camera.c
@@ -13,9 +13,31 @@
#include <math.h>
#include <libc3/c3.h>
#include "gl_camera.h"
+#include "gl_matrix_4d.h"
+
+static const s8 * g_gl_camera_vertex_shader_src = "#version 460 core\n"
+"layout (location = 0) in dvec3 aPos;\n"
+"uniform dmat4 matrix;\n"
+"\n"
+"void main() {\n"
+" gl_Position = matrix * dvec4(aPos, 1.0);\n"
+"}\n";
+
+void gl_camera_clean (s_gl_camera *camera)
+{
+ assert(camera);
+ glDeleteProgram(camera->gl_shader_program);
+}
+
+void gl_camera_delete (s_gl_camera *camera)
+{
+ gl_camera_clean(camera);
+ free(camera);
+}
s_gl_camera * gl_camera_init (s_gl_camera *camera, uw w, uw h)
{
+ u32 vertex_shader;
assert(camera);
gl_camera_set_aspect_ratio(camera, w, h);
camera->clip_z_far = 1000;
@@ -27,14 +49,19 @@ s_gl_camera * gl_camera_init (s_gl_camera *camera, uw w, uw h)
camera->rotation.x = 90.0;
camera->rotation.y = 0.0;
camera->rotation.z = 0.0;
+ vertex_shader = glCreateShader(GL_VERTEX_SHADER);
+ glShaderSource(vertex_shader, 1, &g_gl_camera_vertex_shader_src,
+ NULL);
+ glCompileShader(vertex_shader);
+ camera->gl_shader_program = glCreateProgram();
+ glAttachShader(camera->gl_shader_program, vertex_shader);
+ glLinkProgram(camera->gl_shader_program);
+ glDeleteShader(vertex_shader);
+ camera->gl_matrix_loc =
+ glGetUniformLocation(camera->gl_shader_program, "matrix");
return camera;
}
-void gl_camera_delete (s_gl_camera *camera)
-{
- free(camera);
-}
-
s_gl_camera * gl_camera_new (uw w, uw h)
{
s_gl_camera *camera;
@@ -50,20 +77,24 @@ s_gl_camera * gl_camera_new (uw w, uw h)
return camera;
}
-void gl_camera_render (const s_gl_camera *camera)
+void gl_camera_render (s_gl_camera *camera)
{
assert(camera);
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- gluPerspective(camera->fov_y, camera->aspect_ratio,
- camera->clip_z_near, camera->clip_z_far);
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
- glTranslated(camera->position.x, camera->position.y,
- camera->position.z);
- glRotated(camera->rotation.x, 1.0, 0.0, 0.0);
- glRotated(camera->rotation.y, 0.0, 1.0, 0.0);
- glRotated(camera->rotation.z, 0.0, 0.0, 1.0);
+ gl_matrix_4d_init_identity(&camera->matrix);
+ gl_matrix_4d_perspective(&camera->matrix, camera->fov_y,
+ camera->aspect_ratio, camera->clip_z_near,
+ camera->clip_z_far);
+ gl_matrix_4d_translate(&camera->matrix, camera->position.x,
+ camera->position.y, camera->position.z);
+ gl_matrix_4d_rotate_axis(&camera->matrix, camera->rotation.x,
+ &(s_gl_point_3d) { 1.0, 0.0, 0.0 });
+ gl_matrix_4d_rotate_axis(&camera->matrix, camera->rotation.y,
+ &(s_gl_point_3d) { 0.0, 1.0, 0.0 });
+ gl_matrix_4d_rotate_axis(&camera->matrix, camera->rotation.z,
+ &(s_gl_point_3d) { 0.0, 0.0, 1.0 });
+ glUseProgram(camera->gl_shader_program);
+ glUniformMatrix4dv(camera->gl_matrix_loc, 1, GL_FALSE,
+ &camera->matrix.xx);
}
s_gl_camera * gl_camera_set_aspect_ratio (s_gl_camera *camera, uw w,
diff --git a/libc3/window/sdl2/gl_camera.h b/libc3/window/sdl2/gl_camera.h
index 70a4a2c..e4e9307 100644
--- a/libc3/window/sdl2/gl_camera.h
+++ b/libc3/window/sdl2/gl_camera.h
@@ -15,9 +15,9 @@
#include "types.h"
-/* Stack-allocation compatible functions, call gl_camera_clean after
- use. */
-//void gl_camera_clean (s_gl_camera *camera);
+/* Stack-allocation compatible functions, call gl_camera_clean
+ after use. */
+void gl_camera_clean (s_gl_camera *camera);
s_gl_camera * gl_camera_init (s_gl_camera *camera, uw w, uw h);
/* Heap-allocation functions, call gl_camera_delete after use. */
@@ -25,10 +25,8 @@ void gl_camera_delete (s_gl_camera *camera);
s_gl_camera * gl_camera_new (uw w, uw h);
/* Operators. */
+void gl_camera_render (s_gl_camera *camera);
s_gl_camera * gl_camera_set_aspect_ratio (s_gl_camera *camera, uw w,
uw h);
-/* Observers. */
-void gl_camera_render (const s_gl_camera *camera);
-
#endif /* GL_CAMERA_H */
diff --git a/libc3/window/sdl2/gl_cylinder.c b/libc3/window/sdl2/gl_cylinder.c
index cc65fd0..152d59c 100644
--- a/libc3/window/sdl2/gl_cylinder.c
+++ b/libc3/window/sdl2/gl_cylinder.c
@@ -12,7 +12,7 @@
*/
#include <math.h>
#include <libc3/c3.h>
-#include "gl.h"
+#include "gl_object.h"
#include "gl_cylinder.h"
s_gl_cylinder * gl_cylinder_init (s_gl_cylinder *cylinder,
@@ -21,31 +21,28 @@ s_gl_cylinder * gl_cylinder_init (s_gl_cylinder *cylinder,
f64 angle;
uw i;
uw j;
- s_gl_3d *p;
+ s_gl_point_3d *p;
+ f64 z;
assert(cylinder);
assert(segments_u);
assert(segments_v);
cylinder->segments_u = segments_u;
cylinder->segments_v = segments_v;
- p = calloc(segments_u * segments_v + 2,
- sizeof(s_gl_3d));
- if (! p) {
- err_write_1("gl_cylinder_init(");
- err_inspect_uw(&segments_u);
- err_write_1(", ");
- err_inspect_uw(&segments_v);
- err_puts("): failed to allocate memory");
+ if (! gl_object_init(&cylinder->object) ||
+ ! gl_object_allocate(&cylinder->object,
+ segments_u * segments_v + 2,
+ 6 * (segments_u + 1) * (segments_v + 2)))
return NULL;
- }
- cylinder->vertex = p;
+ p = cylinder->object.vertex.data;
i = 0;
while (i < segments_v) {
+ z = (f64) i / segments_v;
j = 0;
while (j < segments_u) {
angle = (f64) j / segments_u * M_PI * 2.0;
p->x = cos(angle);
p->y = sin(angle);
- p->z = i / segments_v;
+ p->z = z;
p++;
j++;
}
@@ -56,24 +53,8 @@ s_gl_cylinder * gl_cylinder_init (s_gl_cylinder *cylinder,
void gl_cylinder_render (const s_gl_cylinder *cylinder)
{
- uw i;
- uw j;
- s_gl_3d *p;
assert(cylinder);
+ (void) cylinder;
glBegin(GL_POINTS);
- p = cylinder->vertex;
- i = 0;
- while (i < cylinder->segments_v) {
- j = 0;
- while (j < cylinder->segments_u) {
- gl_vertex_3d(p);
- p++;
- j++;
- }
- i++;
- }
- gl_vertex_3d(p);
- p++;
- gl_vertex_3d(p);
glEnd();
}
diff --git a/libc3/window/sdl2/gl_matrix_3d.h b/libc3/window/sdl2/gl_matrix_3d.h
new file mode 100644
index 0000000..2940fef
--- /dev/null
+++ b/libc3/window/sdl2/gl_matrix_3d.h
@@ -0,0 +1,39 @@
+/* c3
+ * Copyright 2022,2023 kmx.io <contact@kmx.io>
+ *
+ * Permission is hereby granted to use this software granted the above
+ * copyright notice and this permission paragraph are included in all
+ * copies and substantial portions of this software.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS-IS" WITHOUT ANY GUARANTEE OF
+ * PURPOSE AND PERFORMANCE. IN NO EVENT WHATSOEVER SHALL THE
+ * AUTHOR BE CONSIDERED LIABLE FOR THE USE AND PERFORMANCE OF
+ * THIS SOFTWARE.
+ */
+#ifndef GL_MATRIX_3D_H
+#define GL_MATRIX_3D_H
+
+#include "types.h"
+
+/* Stack-allocation compatible functions. */
+s_gl_matrix_3d * gl_matrix_3d_init_copy (s_gl_matrix_3d *m,
+ const s_gl_matrix_3d *src);
+s_gl_matrix_3d * gl_matrix_3d_init_identity (s_gl_matrix_3d *m);
+s_gl_matrix_3d * gl_matrix_3d_init_matrix_mult
+ (s_gl_matrix_3d *m, const s_gl_matrix_3d *a,
+ const s_gl_matrix_3d *b);
+
+/* Heap-allocation functions, call gl_matrix_3d_delete after use. */
+void gl_matrix_3d_delete (s_gl_matrix_3d *m);
+s_gl_matrix_3d * gl_matrix_3d_new_copy (const s_gl_matrix_3d *src);
+s_gl_matrix_3d * gl_matrix_3d_new_identity (void);
+s_gl_matrix_3d * gl_matrix_3d_new_matrix_mult (const s_gl_matrix_3d *a,
+ const s_gl_matrix_3d *b);
+
+/* Operators. */
+s_gl_matrix_3d * gl_matrix_3d_rotate (s_gl_matrix_3d *m, f64 rad);
+s_gl_matrix_3d * gl_matrix_3d_scale (s_gl_matrix_3d *m, f64 x, f64 y);
+s_gl_matrix_3d * gl_matrix_3d_translate (s_gl_matrix_3d *m, f64 x,
+ f64 y);
+
+#endif /* GL_MATRIX_3D_H */
diff --git a/libc3/window/sdl2/gl_matrix_4d.c b/libc3/window/sdl2/gl_matrix_4d.c
new file mode 100644
index 0000000..af89ad6
--- /dev/null
+++ b/libc3/window/sdl2/gl_matrix_4d.c
@@ -0,0 +1,184 @@
+/* c3
+ * Copyright 2022,2023 kmx.io <contact@kmx.io>
+ *
+ * Permission is hereby granted to use this software granted the above
+ * copyright notice and this permission paragraph are included in all
+ * copies and substantial portions of this software.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS-IS" WITHOUT ANY GUARANTEE OF
+ * PURPOSE AND PERFORMANCE. IN NO EVENT WHATSOEVER SHALL THE
+ * AUTHOR BE CONSIDERED LIABLE FOR THE USE AND PERFORMANCE OF
+ * THIS SOFTWARE.
+ */
+#include <math.h>
+#include <libc3/c3.h>
+#include "gl_matrix_4d.h"
+#include "gl_point_3d.h"
+
+s_gl_matrix_4d * gl_matrix_4d_init_copy (s_gl_matrix_4d *m,
+ const s_gl_matrix_4d *src)
+{
+ assert(m);
+ assert(src);
+ *m = *src;
+ return m;
+}
+
+s_gl_matrix_4d * gl_matrix_4d_init_product (s_gl_matrix_4d *m,
+ const s_gl_matrix_4d *a,
+ const s_gl_matrix_4d *b)
+{
+ assert(m);
+ assert(a);
+ assert(b);
+ m->xx = a->xx * b->xx + a->xy * b->yx + a->xz * b->zx + a->xt * b->tx;
+ m->xy = a->xx * b->xy + a->xy * b->yy + a->xz * b->zy + a->xt * b->ty;
+ m->xz = a->xx * b->xz + a->xy * b->yz + a->xz * b->zz + a->xt * b->tz;
+ m->xt = a->xx * b->xt + a->xy * b->yt + a->xz * b->zt + a->xt * b->tt;
+ m->yx = a->yx * b->xx + a->yy * b->yx + a->yz * b->zx + a->yt * b->tx;
+ m->yy = a->yx * b->xy + a->yy * b->yy + a->yz * b->zy + a->yt * b->ty;
+ m->yz = a->yx * b->xz + a->yy * b->yz + a->yz * b->zz + a->yt * b->tz;
+ m->yt = a->yx * b->xt + a->yy * b->yt + a->yz * b->zt + a->yt * b->tt;
+ m->zx = a->zx * b->xx + a->zy * b->yx + a->zz * b->zx + a->zt * b->tx;
+ m->zy = a->zx * b->xy + a->zy * b->yy + a->zz * b->zy + a->zt * b->ty;
+ m->zz = a->zx * b->xz + a->zy * b->yz + a->zz * b->zz + a->zt * b->tz;
+ m->zt = a->zx * b->xt + a->zy * b->yt + a->zz * b->zt + a->zt * b->tt;
+ m->tx = a->tx * b->xx + a->ty * b->yx + a->tz * b->zx + a->tt * b->tx;
+ m->ty = a->tx * b->xy + a->ty * b->yy + a->tz * b->zy + a->tt * b->ty;
+ m->tz = a->tx * b->xz + a->ty * b->yz + a->tz * b->zz + a->tt * b->tz;
+ m->tt = a->tx * b->xt + a->ty * b->yt + a->tz * b->zt + a->tt * b->tt;
+ return m;
+}
+
+s_gl_matrix_4d * gl_matrix_4d_init_identity (s_gl_matrix_4d *m)
+{
+ assert(m);
+ m->xx = 1.0; m->xy = 0.0; m->xz = 0.0; m->xt = 0.0;
+ m->yx = 0.0; m->yy = 1.0; m->yz = 0.0; m->yt = 0.0;
+ m->zx = 0.0; m->zy = 0.0; m->zz = 1.0; m->zt = 0.0;
+ m->tx = 0.0; m->ty = 0.0; m->tz = 0.0; m->tt = 1.0;
+ return m;
+}
+
+s_gl_matrix_4d * gl_matrix_4d_init_zero (s_gl_matrix_4d *m)
+{
+ assert(m);
+ m->xx = 0.0; m->xy = 0.0; m->xz = 0.0; m->xt = 0.0;
+ m->yx = 0.0; m->yy = 0.0; m->yz = 0.0; m->yt = 0.0;
+ m->zx = 0.0; m->zy = 0.0; m->zz = 0.0; m->zt = 0.0;
+ m->tx = 0.0; m->ty = 0.0; m->tz = 0.0; m->tt = 0.0;
+ return m;
+}
+
+void gl_matrix_4d_delete (s_gl_matrix_4d *m)
+{
+ free(m);
+}
+
+s_gl_matrix_4d * gl_matrix_4d_new_copy (const s_gl_matrix_4d *src)
+{
+ s_gl_matrix_4d *m;
+ m = calloc(1, sizeof(s_gl_matrix_4d));
+ if (! m) {
+ err_puts("gl_matrix_4d_new: failed to allocate memory");
+ return NULL;
+ }
+ *m = *src;
+ return m;
+}
+
+s_gl_matrix_4d * gl_matrix_4d_new_product (const s_gl_matrix_4d *a,
+ const s_gl_matrix_4d *b)
+{
+ s_gl_matrix_4d *m;
+ assert(a);
+ assert(b);
+ m = calloc(1, sizeof(s_gl_matrix_4d));
+ if (! m) {
+ err_puts("gl_matrix_4d_new: failed to allocate memory");
+ return NULL;
+ }
+ gl_matrix_4d_init_product(m, a, b);
+ return m;
+}
+
+s_gl_matrix_4d * gl_matrix_4d_new_zero (void)
+{
+ s_gl_matrix_4d *m;
+ m = calloc(1, sizeof(s_gl_matrix_4d));
+ if (! m) {
+ err_puts("gl_matrix_4d_new: failed to allocate memory");
+ return NULL;
+ }
+ gl_matrix_4d_init_zero(m);
+ return m;
+}
+
+s_gl_matrix_4d * gl_matrix_4d_perspective (s_gl_matrix_4d *m, f64 fov_y,
+ f64 aspect_ratio,
+ f64 z_near,
+ f64 z_far)
+{
+ f64 dz;
+ s_gl_matrix_4d perspective = {0};
+ f64 f;
+ f64 fov_y_2;
+ fov_y_2 = fov_y / 2.0;
+ f = cos(fov_y_2) / sin(fov_y_2);
+ dz = z_near - z_far;
+ perspective.xx = f / aspect_ratio;
+ perspective.yy = f;
+ perspective.zz = (z_near + z_far) / dz;
+ perspective.zt = -1.0;
+ perspective.tz = 2.0 * z_near * z_far / dz;
+ gl_matrix_4d_product(m, &perspective);
+ return m;
+}
+
+s_gl_matrix_4d * gl_matrix_4d_product (s_gl_matrix_4d *m,
+ const s_gl_matrix_4d *a)
+{
+ s_gl_matrix_4d tmp;
+ gl_matrix_4d_init_product(&tmp, m, a);
+ *m = tmp;
+ return m;
+}
+
+s_gl_matrix_4d * gl_matrix_4d_translate (s_gl_matrix_4d *m, f64 x,
+ f64 y, f64 z)
+{
+ m->xt += x;
+ m->yt += y;
+ m->zt += z;
+ return m;
+}
+
+s_gl_matrix_4d * gl_matrix_4d_rotate_axis (s_gl_matrix_4d *m, f64 rad,
+ const s_gl_point_3d *axis)
+{
+ s_gl_point_3d a;
+ f64 angle;
+ f64 one_minus_x;
+ f64 x;
+ f64 y;
+ gl_point_3d_init_normalize(&a, axis);
+ angle = -rad;
+ x = cos(angle);
+ one_minus_x = 1.0 - x;
+ y = sin(angle);
+ s_gl_matrix_4d r = { x + a.x * a.x * one_minus_x,
+ a.x * a.y * one_minus_x - a.z * y,
+ a.x * a.z * one_minus_x + a.y * y,
+ 0.0,
+ a.x * a.y * one_minus_x + a.z * y,
+ x + a.y * a.y * one_minus_x,
+ a.y * a.z * one_minus_x - a.x * y,
+ 0.0,
+ a.x * a.z * one_minus_x - a.y * y,
+ a.y * a.z * one_minus_x + a.x * y,
+ x + a.z * a.z * one_minus_x,
+ 0.0,
+ 0.0, 0.0, 0.0, 1.0 };
+ gl_matrix_4d_product(m, &r);
+ return m;
+}
diff --git a/libc3/window/sdl2/gl_matrix_4d.h b/libc3/window/sdl2/gl_matrix_4d.h
new file mode 100644
index 0000000..ef26286
--- /dev/null
+++ b/libc3/window/sdl2/gl_matrix_4d.h
@@ -0,0 +1,49 @@
+/* c3
+ * Copyright 2022,2023 kmx.io <contact@kmx.io>
+ *
+ * Permission is hereby granted to use this software granted the above
+ * copyright notice and this permission paragraph are included in all
+ * copies and substantial portions of this software.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS-IS" WITHOUT ANY GUARANTEE OF
+ * PURPOSE AND PERFORMANCE. IN NO EVENT WHATSOEVER SHALL THE
+ * AUTHOR BE CONSIDERED LIABLE FOR THE USE AND PERFORMANCE OF
+ * THIS SOFTWARE.
+ */
+#ifndef GL_MATRIX_4D_H
+#define GL_MATRIX_4D_H
+
+#include "types.h"
+
+/* Stack-allocation compatible functions. */
+s_gl_matrix_4d * gl_matrix_4d_init_copy (s_gl_matrix_4d *m,
+ const s_gl_matrix_4d *src);
+s_gl_matrix_4d * gl_matrix_4d_init_identity (s_gl_matrix_4d *m);
+s_gl_matrix_4d * gl_matrix_4d_init_product (s_gl_matrix_4d *m,
+ const s_gl_matrix_4d *a,
+ const s_gl_matrix_4d *b);
+s_gl_matrix_4d * gl_matrix_4d_init_zero (s_gl_matrix_4d *m);
+
+/* Heap-allocation functions, call gl_matrix_4d_delete after use. */
+void gl_matrix_4d_delete (s_gl_matrix_4d *m);
+s_gl_matrix_4d * gl_matrix_4d_new_copy (const s_gl_matrix_4d *src);
+s_gl_matrix_4d * gl_matrix_4d_new_identity (void);
+s_gl_matrix_4d * gl_matrix_4d_new_matrix_mult (const s_gl_matrix_4d *a,
+ const s_gl_matrix_4d *b);
+s_gl_matrix_4d * gl_matrix_4d_new_zero (void);
+
+/* Operators. */
+s_gl_matrix_4d * gl_matrix_4d_perspective (s_gl_matrix_4d *m, f64 fov_y,
+ f64 aspect_ratio,
+ f64 clip_z_near,
+ f64 clip_z_far);
+s_gl_matrix_4d * gl_matrix_4d_product (s_gl_matrix_4d *m,
+ const s_gl_matrix_4d *a);
+s_gl_matrix_4d * gl_matrix_4d_rotate_axis (s_gl_matrix_4d *m, f64 rad,
+ const s_gl_point_3d *axis);
+s_gl_matrix_4d * gl_matrix_4d_scale (s_gl_matrix_4d *m, f64 x, f64 y,
+ f64 z);
+s_gl_matrix_4d * gl_matrix_4d_translate (s_gl_matrix_4d *m, f64 x,
+ f64 y, f64 z);
+
+#endif /* GL_MATRIX_4D_H */
diff --git a/libc3/window/sdl2/gl_object.c b/libc3/window/sdl2/gl_object.c
new file mode 100644
index 0000000..c798428
--- /dev/null
+++ b/libc3/window/sdl2/gl_object.c
@@ -0,0 +1,80 @@
+/* c3
+ * Copyright 2022,2023 kmx.io <contact@kmx.io>
+ *
+ * Permission is hereby granted to use this software granted the above
+ * copyright notice and this permission paragraph are included in all
+ * copies and substantial portions of this software.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS-IS" WITHOUT ANY GUARANTEE OF
+ * PURPOSE AND PERFORMANCE. IN NO EVENT WHATSOEVER SHALL THE
+ * AUTHOR BE CONSIDERED LIABLE FOR THE USE AND PERFORMANCE OF
+ * THIS SOFTWARE.
+ */
+#include <libc3/c3.h>
+#include "gl_object.h"
+
+void gl_object_clean (s_gl_object *object)
+{
+ assert(object);
+ array_clean(&object->vertex);
+ array_clean(&object->index);
+ glDeleteVertexArrays(1, &object->gl_vao);
+ glDeleteBuffers(1, &object->gl_vbo);
+ glDeleteBuffers(1, &object->gl_ebo);
+}
+
+s_gl_object * gl_object_init (s_gl_object *object)
+{
+ s_gl_object tmp = {0};
+ glGenVertexArrays(1, &tmp.gl_vao);
+ glGenBuffers(1, &tmp.gl_vbo);
+ glGenBuffers(1, &tmp.gl_ebo);
+ *object = tmp;
+ return object;
+}
+
+s_gl_object * gl_object_allocate (s_gl_object *object, uw vertex_count,
+ uw index_count)
+{
+ assert(object);
+ assert(vertex_count);
+ assert(index_count);
+ assert(index_count % 3 == 0);
+ array_init(&object->vertex, sym_1("GL.Vertex"), 1, &vertex_count);
+ array_init(&object->index, sym_1("U32"), 1, &index_count);
+ return object;
+}
+
+void gl_object_render (const s_gl_object *object)
+{
+ assert(object);
+ glBindVertexArray(object->gl_vao);
+ glBindBuffer(GL_ARRAY_BUFFER, object->gl_vbo);
+ glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, object->gl_ebo);
+ glEnableClientState(GL_VERTEX_ARRAY);
+ glEnableClientState(GL_NORMAL_ARRAY);
+ glEnableClientState(GL_TEXTURE_COORD_ARRAY);
+ glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
+}
+
+bool gl_object_update (s_gl_object *object)
+{
+ assert(object);
+ glBindVertexArray(object->gl_vao);
+ glBindBuffer(GL_ARRAY_BUFFER, object->gl_vbo);
+ glBufferData(GL_ARRAY_BUFFER, object->vertex.size,
+ object->vertex.data, GL_STATIC_DRAW);
+ glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, object->gl_ebo);
+ glBufferData(GL_ELEMENT_ARRAY_BUFFER, object->index.size,
+ object->index.data, GL_STATIC_DRAW);
+ glEnableClientState(GL_VERTEX_ARRAY);
+ glEnableClientState(GL_NORMAL_ARRAY);
+ glEnableClientState(GL_TEXTURE_COORD_ARRAY);
+ glVertexPointer(3, GL_DOUBLE, 8 * sizeof(f64),
+ (void *) 0);
+ glNormalPointer(GL_DOUBLE, 8 * sizeof(f64),
+ (void *) (3 * sizeof(f64)));
+ glTexCoordPointer(2, GL_DOUBLE, 8 * sizeof(f64),
+ (void *) (6 * sizeof(f64)));
+ return true;
+}
diff --git a/libc3/window/sdl2/gl_object.h b/libc3/window/sdl2/gl_object.h
new file mode 100644
index 0000000..8c6126b
--- /dev/null
+++ b/libc3/window/sdl2/gl_object.h
@@ -0,0 +1,35 @@
+/* c3
+ * Copyright 2022,2023 kmx.io <contact@kmx.io>
+ *
+ * Permission is hereby granted to use this software granted the above
+ * copyright notice and this permission paragraph are included in all
+ * copies and substantial portions of this software.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS-IS" WITHOUT ANY GUARANTEE OF
+ * PURPOSE AND PERFORMANCE. IN NO EVENT WHATSOEVER SHALL THE
+ * AUTHOR BE CONSIDERED LIABLE FOR THE USE AND PERFORMANCE OF
+ * THIS SOFTWARE.
+ */
+#ifndef GL_OBJECT_H
+#define GL_OBJECT_H
+
+#include "types.h"
+
+/* Stack-allocation compatible functions, call gl_object_clean
+ after use. */
+void gl_object_clean (s_gl_object *object);
+s_gl_object * gl_object_init (s_gl_object *object);
+
+/* Heap-allocation functions, call gl_object_delete after use. */
+void gl_object_delete (s_gl_object *object);
+s_gl_object * gl_object_new ();
+
+/* Operators. */
+s_gl_object * gl_object_allocate (s_gl_object *object, uw vertex_count,
+ uw index_count);
+bool gl_object_update (s_gl_object *object);
+
+/* Observers. */
+void gl_object_render (const s_gl_object *object);
+
+#endif /* GL_OBJECT_H */
diff --git a/libc3/window/sdl2/gl_point_2d.c b/libc3/window/sdl2/gl_point_2d.c
new file mode 100644
index 0000000..3c7691f
--- /dev/null
+++ b/libc3/window/sdl2/gl_point_2d.c
@@ -0,0 +1,95 @@
+/* c3
+ * Copyright 2022,2023 kmx.io <contact@kmx.io>
+ *
+ * Permission is hereby granted to use this software granted the above
+ * copyright notice and this permission paragraph are included in all
+ * copies and substantial portions of this software.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS-IS" WITHOUT ANY GUARANTEE OF
+ * PURPOSE AND PERFORMANCE. IN NO EVENT WHATSOEVER SHALL THE
+ * AUTHOR BE CONSIDERED LIABLE FOR THE USE AND PERFORMANCE OF
+ * THIS SOFTWARE.
+ */
+#include <math.h>
+#include <libc3/c3.h>
+#include "gl_point_2d.h"
+
+s_gl_point_2d * gl_point_2d_init (s_gl_point_2d *p, f64 x, f64 y)
+{
+ assert(p);
+ p->x = x;
+ p->y = y;
+ return p;
+}
+
+s_gl_point_2d * gl_point_2d_init_copy (s_gl_point_2d *p,
+ const s_gl_point_2d *src)
+{
+ assert(p);
+ assert(src);
+ p->x = src->x;
+ p->y = src->y;
+ return p;
+}
+
+s_gl_point_2d *
+gl_point_2d_init_product (s_gl_point_2d *p,
+ const s_gl_matrix_3d *m,
+ const s_gl_point_2d *s)
+{
+ assert(p);
+ assert(m);
+ assert(s);
+ p->x = s->x * m->xx + s->y * m->xy + m->xz;
+ p->y = s->x * m->yx + s->y * m->yy + m->yz;
+ return p;
+}
+
+s_gl_point_2d * gl_point_2d_init_zero (s_gl_point_2d *p)
+{
+ assert(p);
+ p->x = 0.0;
+ p->y = 0.0;
+ return p;
+}
+
+void gl_point_2d_delete (s_gl_point_2d *p)
+{
+ free(p);
+}
+
+s_gl_point_2d * gl_point_2d_new (f64 x, f64 y)
+{
+ s_gl_point_2d *p;
+ p = calloc(1, sizeof(s_gl_point_2d));
+ if (! p) {
+ err_puts("gl_point_2d_new: failed to allocate memory");
+ return NULL;
+ }
+ gl_point_2d_init(p, x, y);
+ return p;
+}
+
+s_gl_point_2d * gl_point_2d_new_copy (const s_gl_point_2d *src)
+{
+ s_gl_point_2d *p;
+ p = calloc(1, sizeof(s_gl_point_2d));
+ if (! p) {
+ err_puts("gl_point_2d_new: failed to allocate memory");
+ return NULL;
+ }
+ gl_point_2d_init_copy(p, src);
+ return p;
+}
+
+s_gl_point_2d * gl_point_2d_new_zero (void)
+{
+ s_gl_point_2d *p;
+ p = calloc(1, sizeof(s_gl_point_2d));
+ if (! p) {
+ err_puts("gl_point_2d_new: failed to allocate memory");
+ return NULL;
+ }
+ gl_point_2d_init_zero(p);
+ return p;
+}
diff --git a/libc3/window/sdl2/gl_point_2d.h b/libc3/window/sdl2/gl_point_2d.h
new file mode 100644
index 0000000..af8d38d
--- /dev/null
+++ b/libc3/window/sdl2/gl_point_2d.h
@@ -0,0 +1,36 @@
+/* c3
+ * Copyright 2022,2023 kmx.io <contact@kmx.io>
+ *
+ * Permission is hereby granted to use this software granted the above
+ * copyright notice and this permission paragraph are included in all
+ * copies and substantial portions of this software.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS-IS" WITHOUT ANY GUARANTEE OF
+ * PURPOSE AND PERFORMANCE. IN NO EVENT WHATSOEVER SHALL THE
+ * AUTHOR BE CONSIDERED LIABLE FOR THE USE AND PERFORMANCE OF
+ * THIS SOFTWARE.
+ */
+#ifndef GL_POINT_2D_H
+#define GL_POINT_2D_H
+
+#include "types.h"
+
+/* Stack-allocation compatible functions. */
+s_gl_point_2d * gl_point_2d_init (s_gl_point_2d *p, f64 x, f64 y);
+s_gl_point_2d * gl_point_2d_init_copy (s_gl_point_2d *p,
+ const s_gl_point_2d *src);
+s_gl_point_2d * gl_point_2d_init_product (s_gl_point_2d *p,
+ const s_gl_matrix_3d *m,
+ const s_gl_point_2d *s);
+s_gl_point_2d * gl_point_2d_init_zero (s_gl_point_2d *p);
+
+
+/* Heap-allocation functions, call gl_point_2d_delete after use. */
+void gl_point_2d_delete (s_gl_point_2d *p);
+s_gl_point_2d * gl_point_2d_new (f64 x, f64 y);
+s_gl_point_2d * gl_point_2d_new_copy (const s_gl_point_2d *src);
+s_gl_point_2d * gl_point_2d_new_product (const s_gl_matrix_3d *m,
+ const s_gl_point_2d *s);
+s_gl_point_2d * gl_point_2d_new_zero (void);
+
+#endif /* GL_POINT_2D_H */
diff --git a/libc3/window/sdl2/gl_point_3d.c b/libc3/window/sdl2/gl_point_3d.c
new file mode 100644
index 0000000..7821b22
--- /dev/null
+++ b/libc3/window/sdl2/gl_point_3d.c
@@ -0,0 +1,132 @@
+/* c3
+ * Copyright 2022,2023 kmx.io <contact@kmx.io>
+ *
+ * Permission is hereby granted to use this software granted the above
+ * copyright notice and this permission paragraph are included in all
+ * copies and substantial portions of this software.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS-IS" WITHOUT ANY GUARANTEE OF
+ * PURPOSE AND PERFORMANCE. IN NO EVENT WHATSOEVER SHALL THE
+ * AUTHOR BE CONSIDERED LIABLE FOR THE USE AND PERFORMANCE OF
+ * THIS SOFTWARE.
+ */
+#include <math.h>
+#include <libc3/c3.h>
+#include "gl_point_3d.h"
+
+s_gl_point_3d * gl_point_3d_init (s_gl_point_3d *p, f64 x, f64 y, f64 z)
+{
+ assert(p);
+ p->x = x;
+ p->y = y;
+ p->z = z;
+ return p;
+}
+
+s_gl_point_3d * gl_point_3d_init_copy (s_gl_point_3d *p,
+ const s_gl_point_3d *src)
+{
+ assert(p);
+ assert(src);
+ p->x = src->x;
+ p->y = src->y;
+ p->z = src->z;
+ return p;
+}
+
+s_gl_point_3d * gl_point_3d_init_normalize (s_gl_point_3d *p,
+ const s_gl_point_3d *src)
+{
+ f64 r;
+ assert(p);
+ assert(src);
+ r = 1.0 / gl_point_3d_norm(src);
+ p->x = src->x * r;
+ p->y = src->y * r;
+ p->z = src->z * r;
+ return p;
+}
+
+s_gl_point_3d * gl_point_3d_init_product (s_gl_point_3d *p,
+ const s_gl_matrix_4d *m,
+ const s_gl_point_3d *s)
+{
+ assert(p);
+ assert(m);
+ assert(s);
+ p->x = s->x * m->xx + s->y * m->xy + s->z * m->xz + m->xt;
+ p->y = s->x * m->yx + s->y * m->yy + s->z * m->yz + m->yt;
+ p->z = s->x * m->zx + s->y * m->zy + s->z * m->zz + m->zt;
+ return p;
+}
+
+s_gl_point_3d * gl_point_3d_init_zero (s_gl_point_3d *p)
+{
+ assert(p);
+ p->x = 0.0;
+ p->y = 0.0;
+ p->z = 0.0;
+ return p;
+}
+
+void gl_point_3d_delete (s_gl_point_3d *p)
+{
+ free(p);
+}
+
+s_gl_point_3d * gl_point_3d_new (f64 x, f64 y, f64 z)
+{
+ s_gl_point_3d *p;
+ p = calloc(1, sizeof(s_gl_point_3d));
+ if (! p) {
+ err_puts("gl_point_3d_new: failed to allocate memory");
+ return NULL;
+ }
+ gl_point_3d_init(p, x, y, z);
+ return p;
+}
+
+s_gl_point_3d * gl_point_3d_new_copy (const s_gl_point_3d *src)
+{
+ s_gl_point_3d *p;
+ p = calloc(1, sizeof(s_gl_point_3d));
+ if (! p) {
+ err_puts("gl_point_3d_new: failed to allocate memory");
+ return NULL;
+ }
+ gl_point_3d_init_copy(p, src);
+ return p;
+}
+
+s_gl_point_3d * gl_point_3d_new_product (const s_gl_matrix_4d *m,
+ const s_gl_point_3d *s)
+{
+ s_gl_point_3d *p;
+ assert(m);
+ assert(s);
+ p = calloc(1, sizeof(s_gl_point_3d));
+ if (! p) {
+ err_puts("gl_point_3d_new: failed to allocate memory");
+ return NULL;
+ }
+ gl_point_3d_init_product(p, m, s);
+ return p;
+}
+
+s_gl_point_3d * gl_point_3d_new_zero (void)
+{
+ s_gl_point_3d *p;
+ p = calloc(1, sizeof(s_gl_point_3d));
+ if (! p) {
+ err_puts("gl_point_3d_new: failed to allocate memory");
+ return NULL;
+ }
+ gl_point_3d_init_zero(p);
+ return p;
+}
+
+f64 gl_point_3d_norm (const s_gl_point_3d *p)
+{
+ assert(p);
+ return sqrt(p->x * p->x + p->y * p->y + p->z * p->z);
+}
diff --git a/libc3/window/sdl2/gl_point_3d.h b/libc3/window/sdl2/gl_point_3d.h
new file mode 100644
index 0000000..63e0c5f
--- /dev/null
+++ b/libc3/window/sdl2/gl_point_3d.h
@@ -0,0 +1,46 @@
+/* c3
+ * Copyright 2022,2023 kmx.io <contact@kmx.io>
+ *
+ * Permission is hereby granted to use this software granted the above
+ * copyright notice and this permission paragraph are included in all
+ * copies and substantial portions of this software.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS-IS" WITHOUT ANY GUARANTEE OF
+ * PURPOSE AND PERFORMANCE. IN NO EVENT WHATSOEVER SHALL THE
+ * AUTHOR BE CONSIDERED LIABLE FOR THE USE AND PERFORMANCE OF
+ * THIS SOFTWARE.
+ */
+#ifndef GL_POINT_3D_H
+#define GL_POINT_3D_H
+
+#include "types.h"
+
+/* Stack-allocation compatible functions. */
+s_gl_point_3d * gl_point_3d_init (s_gl_point_3d *p, f64 x, f64 y,
+ f64 z);
+s_gl_point_3d * gl_point_3d_init_copy (s_gl_point_3d *p,
+ const s_gl_point_3d *src);
+s_gl_point_3d * gl_point_3d_init_normalize (s_gl_point_3d *p,
+ const s_gl_point_3d *src);
+s_gl_point_3d * gl_point_3d_init_product (s_gl_point_3d *p,
+ const s_gl_matrix_4d *m,
+ const s_gl_point_3d *s);
+s_gl_point_3d * gl_point_3d_init_zero (s_gl_point_3d *p);
+
+
+/* Heap-allocation functions, call gl_point_3d_delete after use. */
+void gl_point_3d_delete (s_gl_point_3d *p);
+s_gl_point_3d * gl_point_3d_new (f64 x, f64 y, f64 z);
+s_gl_point_3d * gl_point_3d_new_copy (const s_gl_point_3d *src);
+s_gl_point_3d * gl_point_3d_new_product (const s_gl_matrix_4d *m,
+ const s_gl_point_3d *s);
+s_gl_point_3d * gl_point_3d_new_zero (void);
+
+/* Operators. */
+s_gl_point_3d * gl_point_3d_product (s_gl_point_3d *p,
+ const s_gl_matrix_4d *m);
+
+/* Observers. */
+f64 gl_point_3d_norm (const s_gl_point_3d *p);
+
+#endif /* GL_POINT_3D_H */
diff --git a/libc3/window/sdl2/gl_sphere.c b/libc3/window/sdl2/gl_sphere.c
index 24b625b..20c1086 100644
--- a/libc3/window/sdl2/gl_sphere.c
+++ b/libc3/window/sdl2/gl_sphere.c
@@ -12,13 +12,13 @@
*/
#include <math.h>
#include <libc3/c3.h>
-#include "gl.h"
+#include "gl_object.h"
#include "gl_sphere.h"
void gl_sphere_clean (s_gl_sphere *sphere)
{
assert(sphere);
- free(sphere->vertex);
+ gl_object_clean(&sphere->object);
}
void gl_sphere_delete (s_gl_sphere *sphere)
@@ -28,62 +28,51 @@ void gl_sphere_delete (s_gl_sphere *sphere)
free(sphere);
}
-s_gl_sphere * gl_sphere_init (s_gl_sphere *sphere, uw segments_u,
- uw segments_v)
+s_gl_sphere * gl_sphere_init (s_gl_sphere *sphere, uw seg_u, uw seg_v)
{
f64 angle_i;
f64 angle_j;
uw i;
uw j;
- s_gl_3d *p;
+ s_gl_vertex *vertex;
f64 r;
s_gl_sphere tmp = {0};
f64 z;
assert(sphere);
- if (segments_u < 3)
- segments_u = 3;
- if (segments_v < 2)
- segments_v = 2;
- tmp.segments_u = segments_u;
- tmp.segments_v = segments_v;
- p = calloc(segments_u * segments_v + 2, sizeof(s_gl_3d));
- if (! p) {
- err_write_1("gl_sphere_init(");
- err_inspect_uw(&segments_u);
- err_write_1(", ");
- err_inspect_uw(&segments_v);
- err_write_1("): failed to allocate memory");
+ if (seg_u < 3)
+ seg_u = 3;
+ if (seg_v < 2)
+ seg_v = 2;
+ tmp.segments_u = seg_u;
+ tmp.segments_v = seg_v;
+ if (! gl_object_allocate(&tmp.object, seg_u * (seg_v + 2),
+ 6 * (seg_u + 1) * (seg_v + 2)))
return NULL;
- }
- tmp.vertex = p;
+ vertex = tmp.object.vertex.data;
i = 0;
- while (i < segments_v) {
- angle_i = (i + 1) * M_PI / (segments_v + 1);
+ while (i < seg_v + 2) {
+ angle_i = (f64) i * M_PI / (seg_v + 2);
r = sin(angle_i);
z = cos(angle_i);
j = 0;
- while (j < segments_u) {
- angle_j = j * M_PI * 2.0 / segments_u;
- p->x = cos(angle_j) * r;
- p->y = sin(angle_j) * r;
- p->z = z;
- p++;
+ while (j < seg_u) {
+ angle_j = j * M_PI * 2.0 / seg_u;
+ vertex->position.x = cos(angle_j) * r;
+ vertex->position.y = sin(angle_j) * r;
+ vertex->position.z = z;
+ vertex->normal = vertex->position;
+ vertex->tex_coord.x = (f64) (seg_u - j) / seg_u;
+ vertex->tex_coord.y = (f64) i / (seg_v + 2);
+ vertex++;
j++;
}
i++;
}
- p->x = 0.0;
- p->y = 0.0;
- p->z = 1.0;
- p++;
- p->x = 0.0;
- p->y = 0.0;
- p->z = -1.0;
*sphere = tmp;
return sphere;
}
-s_gl_sphere * gl_sphere_new (uw segments_u, uw segments_w)
+s_gl_sphere * gl_sphere_new (uw segments_u, uw segments_v)
{
s_gl_sphere *sphere;
sphere = calloc(1, sizeof(s_gl_sphere));
@@ -91,7 +80,7 @@ s_gl_sphere * gl_sphere_new (uw segments_u, uw segments_w)
err_puts("gl_sphere_new: failed to allocate memory");
return NULL;
}
- if (! gl_sphere_init(sphere, segments_u, segments_w)) {
+ if (! gl_sphere_init(sphere, segments_u, segments_v)) {
free(sphere);
return NULL;
}
@@ -100,76 +89,11 @@ s_gl_sphere * gl_sphere_new (uw segments_u, uw segments_w)
void gl_sphere_render (const s_gl_sphere *sphere)
{
- uw i;
- uw j;
- s_gl_3d *p[3];
- s_gl_2d tex_coord[3];
- uw seg_u;
- uw seg_v;
assert(sphere);
- seg_u = sphere->segments_u;
- seg_v = sphere->segments_v;
- glDisable(GL_CULL_FACE);
- // first row
- glBegin(GL_QUAD_STRIP);
- tex_coord[0].y = 0.0;
- tex_coord[1].y = 1.0 / (seg_v + 1);
- p[0] = sphere->vertex + seg_u * seg_v;
- j = 0;
- while (j < seg_u + 1) {
- p[1] = sphere->vertex + j % seg_u;
- tex_coord[0].x = tex_coord[1].x = (f64) (seg_u - j) / seg_u;
- gl_tex_coord_2d(tex_coord);
- gl_normal_3d(p[0]);
- gl_vertex_3d(p[0]);
- gl_tex_coord_2d(tex_coord + 1);
- gl_normal_3d(p[1]);
- gl_vertex_3d(p[1]);
- j++;
- }
- glEnd();
- // whole
- i = 1;
- while (i < seg_v) {
- glBegin(GL_QUAD_STRIP);
- tex_coord[0].y = (f64) (i + 1) / (seg_v + 1);
- tex_coord[1].y = (f64) i / (seg_v + 1);
- j = 0;
- while (j < seg_u + 1) {
- p[0] = sphere->vertex + i * seg_u + j % seg_u;
- p[1] = sphere->vertex + (i - 1) * seg_u + j % seg_u;
- tex_coord[0].x = tex_coord[1].x = (f64) (seg_u - j) / seg_u;
- gl_tex_coord_2d(tex_coord);
- gl_normal_3d(p[0]);
- gl_vertex_3d(p[0]);
- gl_tex_coord_2d(tex_coord + 1);
- gl_normal_3d(p[1]);
- gl_vertex_3d(p[1]);
- j++;
- }
- glEnd();
- i++;
- }
- // last row
- glBegin(GL_QUAD_STRIP);
- tex_coord[0].y = 1.0;
- tex_coord[1].y = (f64) seg_v / (seg_v + 1);
- p[0] = sphere->vertex + seg_u * seg_v + 1;
- j = 0;
- while (j < seg_u + 1) {
- p[1] = sphere->vertex + (seg_v - 1) * seg_u + j % seg_u;
- tex_coord[0].x = tex_coord[1].x = (f64) (seg_u - j) / seg_u;
- gl_tex_coord_2d(tex_coord);
- gl_normal_3d(p[0]);
- gl_vertex_3d(p[0]);
- gl_tex_coord_2d(tex_coord + 1);
- gl_normal_3d(p[1]);
- gl_vertex_3d(p[1]);
- j++;
- }
- glEnd();
+ gl_object_render(&sphere->object);
}
+/*
void gl_sphere_render_wireframe (const s_gl_sphere *sphere)
{
uw i;
@@ -221,3 +145,4 @@ void gl_sphere_render_wireframe (const s_gl_sphere *sphere)
}
glEnd();
}
+*/
diff --git a/libc3/window/sdl2/sources.mk b/libc3/window/sdl2/sources.mk
index 21ad8ac..4201ba3 100644
--- a/libc3/window/sdl2/sources.mk
+++ b/libc3/window/sdl2/sources.mk
@@ -1,8 +1,12 @@
# sources.mk generated by update_sources
HEADERS = \
- "gl.h" \
"gl_camera.h" \
"gl_cylinder.h" \
+ "gl_matrix_3d.h" \
+ "gl_matrix_4d.h" \
+ "gl_object.h" \
+ "gl_point_2d.h" \
+ "gl_point_3d.h" \
"gl_sphere.h" \
"sdl2_font.h" \
"sdl2_sprite.h" \
@@ -10,9 +14,12 @@ HEADERS = \
"window_sdl2.h" \
SOURCES = \
- "gl.c" \
"gl_camera.c" \
"gl_cylinder.c" \
+ "gl_matrix_4d.c" \
+ "gl_object.c" \
+ "gl_point_2d.c" \
+ "gl_point_3d.c" \
"gl_sphere.c" \
"sdl2_font.c" \
"sdl2_sprite.c" \
diff --git a/libc3/window/sdl2/sources.sh b/libc3/window/sdl2/sources.sh
index 8a15de9..89c030d 100644
--- a/libc3/window/sdl2/sources.sh
+++ b/libc3/window/sdl2/sources.sh
@@ -1,3 +1,3 @@
# sources.sh generated by update_sources
-HEADERS='gl.h gl_camera.h gl_cylinder.h gl_sphere.h sdl2_font.h sdl2_sprite.h types.h window_sdl2.h '
-SOURCES='gl.c gl_camera.c gl_cylinder.c gl_sphere.c sdl2_font.c sdl2_sprite.c window_sdl2.c '
+HEADERS='gl_camera.h gl_cylinder.h gl_matrix_3d.h gl_matrix_4d.h gl_object.h gl_point_2d.h gl_point_3d.h gl_sphere.h sdl2_font.h sdl2_sprite.h types.h window_sdl2.h '
+SOURCES='gl_camera.c gl_cylinder.c gl_matrix_4d.c gl_object.c gl_point_2d.c gl_point_3d.c gl_sphere.c sdl2_font.c sdl2_sprite.c window_sdl2.c '
diff --git a/libc3/window/sdl2/types.h b/libc3/window/sdl2/types.h
index f97fadc..f63b883 100644
--- a/libc3/window/sdl2/types.h
+++ b/libc3/window/sdl2/types.h
@@ -19,28 +19,31 @@
#define LIBC3_WINDOW_SDL2_TYPES_H
#include <SDL.h>
+#include <GL/glew.h>
#if defined(__APPLE__)
-# include <OpenGL/gl.h>
+# include <OpenGL/glcorearb.h>
# include <OpenGL/glu.h>
#else
-# include <GL/gl.h>
-# include <GL/glu.h>
#endif
#include <FTGL/ftgl.h>
#include <png.h>
#include <libc3/types.h>
#include "../types.h"
-typedef struct gl_2d s_gl_2d;
-typedef struct gl_3d s_gl_3d;
-typedef struct gl_camera s_gl_camera;
-typedef struct gl_cylinder s_gl_cylinder;
-typedef struct gl_sphere s_gl_sphere;
-typedef struct sdl2_font s_sdl2_font;
-typedef struct sdl2_sprite s_sdl2_sprite;
-typedef struct rgb s_rgb;
-typedef struct rgba s_rgba;
-typedef struct window_sdl2 s_window_sdl2;
+typedef struct gl_camera s_gl_camera;
+typedef struct gl_cylinder s_gl_cylinder;
+typedef struct gl_matrix_3d s_gl_matrix_3d;
+typedef struct gl_matrix_4d s_gl_matrix_4d;
+typedef struct gl_object s_gl_object;
+typedef struct gl_point_2d s_gl_point_2d;
+typedef struct gl_point_3d s_gl_point_3d;
+typedef struct gl_sphere s_gl_sphere;
+typedef struct gl_vertex s_gl_vertex;
+typedef struct sdl2_font s_sdl2_font;
+typedef struct sdl2_sprite s_sdl2_sprite;
+typedef struct rgb s_rgb;
+typedef struct rgba s_rgba;
+typedef struct window_sdl2 s_window_sdl2;
/* return false to break event loop */
typedef bool (*f_window_sdl2_button) (s_window_sdl2 *window,
@@ -75,40 +78,59 @@ typedef bool (*f_window_sdl2_sequence_render) (s_sequence *seq,
typedef void (*f_window_sdl2_unload) (s_window_sdl2 *window);
/* 1 */
-struct gl_2d {
+struct gl_point_2d {
f64 x;
f64 y;
};
-struct gl_3d {
+struct gl_point_3d {
f64 x;
f64 y;
f64 z;
};
-struct gl_cylinder {
- uw segments_u;
- uw segments_v;
- s_gl_3d *vertex;
+struct gl_matrix_3d {
+ f64 xx;
+ f64 xy;
+ f64 xz;
+ f64 yx;
+ f64 yy;
+ f64 yz;
+ f64 zx;
+ f64 zy;
+ f64 zz;
};
-struct gl_sphere {
- uw segments_u;
- uw segments_v;
- s_gl_3d *vertex;
+struct gl_matrix_4d {
+ f64 xx;
+ f64 xy;
+ f64 xz;
+ f64 xt;
+ f64 yx;
+ f64 yy;
+ f64 yz;
+ f64 yt;
+ f64 zx;
+ f64 zy;
+ f64 zz;
+ f64 zt;
+ f64 tx;
+ f64 ty;
+ f64 tz;
+ f64 tt;
};
struct rgb {
- double r;
- double g;
- double b;
+ f64 r;
+ f64 g;
+ f64 b;
};
struct rgba {
- double r;
- double g;
- double b;
- double a;
+ f64 r;
+ f64 g;
+ f64 b;
+ f64 a;
};
struct sdl2_font {
@@ -119,19 +141,19 @@ struct sdl2_font {
s_str real_path;
};
-struct sdl2_sprite {
- s_str path;
- s_str real_path;
- uw total_w;
- uw total_h;
- uw dim_x;
- uw dim_y;
- uw frame_count;
- uw w;
- uw h;
- uw tex_w;
- uw tex_h;
- GLuint *texture;
+struct gl_vertex {
+ s_gl_point_3d position;
+ s_gl_point_3d normal;
+ s_gl_point_2d tex_coord;
+};
+
+struct gl_object {
+ s_array vertex;
+ s_array index;
+ u32 gl_mode;
+ u32 gl_vao;
+ u32 gl_vbo;
+ u32 gl_ebo;
};
/* Subtype of s_window. See libc3/window/types.h */
@@ -167,8 +189,39 @@ struct gl_camera {
f64 clip_z_far;
f64 clip_z_near;
f64 fov_y;
- s_gl_3d position;
- s_gl_3d rotation;
+ s_gl_point_3d position;
+ s_gl_point_3d rotation;
+ s_gl_matrix_4d matrix;
+ u32 gl_matrix_loc;
+ u32 gl_shader_program;
+};
+
+struct gl_cylinder {
+ s_gl_object object;
+ uw segments_u;
+ uw segments_v;
+};
+
+struct gl_sphere {
+ s_gl_object object;
+ uw segments_u;
+ uw segments_v;
+};
+
+struct sdl2_sprite {
+ s_gl_object object;
+ s_str path;
+ s_str real_path;
+ uw total_w;
+ uw total_h;
+ uw dim_x;
+ uw dim_y;
+ uw frame_count;
+ uw w;
+ uw h;
+ uw tex_w;
+ uw tex_h;
+ GLuint *texture;
};
#endif /* LIBC3_WINDOW_SDL2_TYPES_H */
diff --git a/libc3/window/sdl2/window_sdl2.c b/libc3/window/sdl2/window_sdl2.c
index 80a265f..2feec74 100644
--- a/libc3/window/sdl2/window_sdl2.c
+++ b/libc3/window/sdl2/window_sdl2.c
@@ -179,6 +179,7 @@ bool window_sdl2_run (s_window_sdl2 *window)
SDL_GetError());
goto ko;
}
+ glewInit();
int gl_w = window->w;
int gl_h = window->h;
SDL_GL_GetDrawableSize(sdl_window, &gl_w, &gl_h);
diff --git a/sources.mk b/sources.mk
index f36be28..b96c995 100644
--- a/sources.mk
+++ b/sources.mk
@@ -97,6 +97,7 @@ C3_C_SOURCES = \
"c3s/buf_readline.h" \
"ic3/ic3.c" \
"ic3/buf_linenoise.c" \
+ "ic3/config.h" \
"ic3/buf_linenoise.h" \
"ic3/linenoise.c" \
"ic3/buf_wineditline.c" \
@@ -105,82 +106,91 @@ C3_C_SOURCES = \
"libc3/struct.c" \
"libc3/abs.c" \
"libc3/buf.c" \
- "libc3/buf_inspect_s8.c" \
- "libc3/buf_inspect_s8.h" \
- "libc3/buf_inspect_s8_binary.c" \
- "libc3/buf_inspect_s8_binary.h" \
- "libc3/buf_inspect_s8_octal.c" \
- "libc3/buf_inspect_s8_octal.h" \
- "libc3/buf_inspect_s8_decimal.c" \
- "libc3/buf_inspect_s8_decimal.h" \
- "libc3/buf_inspect_s8_hexadecimal.c" \
- "libc3/buf_inspect_s16.c" \
+ "libc3/set__tag.c" \
+ "libc3/set_item__tag.c" \
+ "libc3/set__tag.h" \
+ "libc3/set_item__tag.h" \
+ "libc3/set_cursor__tag.h" \
+ "libc3/set_cursor__tag.c" \
+ "libc3/skiplist_node__fact.c" \
+ "libc3/skiplist_node__fact.h" \
+ "libc3/skiplist__fact.c" \
+ "libc3/skiplist__fact.h" \
+ "libc3/set_item__fact.h" \
+ "libc3/set__fact.c" \
"libc3/call.c" \
"libc3/buf_parse.c" \
"libc3/arg.c" \
"libc3/binding.c" \
"libc3/c3.c" \
- "libc3/buf_inspect_s8_hexadecimal.h" \
- "libc3/buf_inspect_s16.h" \
- "libc3/buf_inspect_s16_binary.c" \
- "libc3/buf_inspect_s16_binary.h" \
- "libc3/buf_inspect_s16_octal.c" \
- "libc3/buf_inspect_s16_octal.h" \
- "libc3/buf_inspect_s16_decimal.c" \
- "libc3/buf_inspect_s16_decimal.h" \
- "libc3/buf_inspect_s16_hexadecimal.c" \
- "libc3/buf_inspect_s16_hexadecimal.h" \
- "libc3/buf_inspect_s32.c" \
- "libc3/buf_inspect_s32.h" \
- "libc3/ptr_free.c" \
+ "libc3/set_item__fact.c" \
+ "libc3/set__fact.h" \
+ "libc3/set_cursor__fact.c" \
+ "libc3/set_cursor__fact.h" \
+ "libc3/uw.c" \
+ "libc3/sw.h" \
+ "libc3/uw.h" \
+ "libc3/sw.c" \
+ "libc3/buf_parse_uw.h" \
+ "libc3/buf_parse_uw.c" \
+ "libc3/buf_parse_sw.h" \
+ "libc3/buf_parse_sw.c" \
+ "libc3/buf_inspect_uw_hexadecimal.h" \
+ "libc3/buf_inspect_uw_hexadecimal.c" \
+ "libc3/buf_inspect_uw_decimal.h" \
+ "libc3/buf_inspect_uw_decimal.c" \
+ "libc3/u64.h" \
"libc3/bool.c" \
"libc3/bool.h" \
"libc3/buf_file.c" \
- "libc3/buf_inspect_s32_binary.c" \
- "libc3/buf_inspect_s32_binary.h" \
- "libc3/buf_inspect_s32_octal.c" \
- "libc3/buf_inspect_s32_octal.h" \
- "libc3/buf_inspect_s32_decimal.c" \
- "libc3/buf_inspect_s32_decimal.h" \
- "libc3/buf_inspect_s32_hexadecimal.c" \
- "libc3/buf_inspect_s32_hexadecimal.h" \
- "libc3/buf_inspect_s64.c" \
- "libc3/buf_inspect_s64.h" \
- "libc3/buf_inspect_s64_binary.c" \
- "libc3/buf_inspect_s64_binary.h" \
- "libc3/buf_inspect_sw.c" \
+ "libc3/buf_inspect_uw_octal.h" \
+ "libc3/buf_inspect_uw_octal.c" \
+ "libc3/buf_inspect_uw_binary.h" \
+ "libc3/buf_inspect_uw.h" \
+ "libc3/buf_inspect_uw_binary.c" \
+ "libc3/buf_inspect_uw.c" \
+ "libc3/buf_inspect_sw_hexadecimal.h" \
+ "libc3/buf_inspect_sw_hexadecimal.c" \
+ "libc3/buf_inspect_sw_decimal.h" \
+ "libc3/buf_inspect_sw_decimal.c" \
+ "libc3/buf_inspect_sw_octal.h" \
+ "libc3/buf_inspect_sw_octal.c" \
+ "libc3/buf_inspect_sw_binary.h" \
"libc3/buf_parse.h" \
"libc3/buf.h" \
"libc3/buf_save.c" \
"libc3/facts_spec_cursor.c" \
- "libc3/buf_inspect_s64_octal.c" \
- "libc3/buf_inspect_s64_octal.h" \
- "libc3/buf_inspect_s64_decimal.c" \
- "libc3/buf_inspect_s64_decimal.h" \
- "libc3/buf_inspect_s64_hexadecimal.c" \
- "libc3/buf_inspect_s64_hexadecimal.h" \
- "libc3/buf_inspect_sw.h" \
"libc3/buf_inspect_sw_binary.c" \
- "libc3/buf_inspect_sw_binary.h" \
- "libc3/buf_inspect_sw_octal.c" \
- "libc3/buf_inspect_sw_octal.h" \
- "libc3/buf_inspect_sw_decimal.c" \
+ "libc3/buf_inspect_sw.h" \
+ "libc3/buf_inspect_sw.c" \
+ "libc3/u64.c" \
+ "libc3/s64.h" \
+ "libc3/s64.c" \
+ "libc3/buf_parse_u64.h" \
+ "libc3/buf_parse_u64.c" \
+ "libc3/buf_parse_s64.h" \
+ "libc3/buf_parse_s64.c" \
+ "libc3/buf_inspect_u64_hexadecimal.h" \
+ "libc3/buf_inspect_u64_hexadecimal.c" \
+ "libc3/buf_inspect_u64_decimal.h" \
+ "libc3/buf_inspect_u64_decimal.c" \
+ "libc3/u32.h" \
"libc3/buf_file.h" \
"libc3/buf_save.h" \
"libc3/call.h" \
- "libc3/buf_inspect_sw_decimal.h" \
- "libc3/buf_inspect_sw_hexadecimal.c" \
- "libc3/buf_inspect_sw_hexadecimal.h" \
+ "libc3/buf_inspect_u64_octal.h" \
+ "libc3/buf_inspect_u64_octal.c" \
+ "libc3/buf_inspect_u64_binary.h" \
"libc3/buf_parse_s.c.in" \
- "libc3/buf_inspect_u8.h" \
- "libc3/buf_inspect_u8_binary.c" \
- "libc3/buf_inspect_u8_binary.h" \
- "libc3/buf_inspect_u8_octal.c" \
- "libc3/buf_inspect_u8_octal.h" \
- "libc3/buf_inspect_u8_decimal.c" \
- "libc3/buf_inspect_u8_decimal.h" \
+ "libc3/buf_inspect_u64_binary.c" \
+ "libc3/buf_inspect_u64.h" \
+ "libc3/buf_inspect_u64.c" \
+ "libc3/buf_inspect_s64_hexadecimal.h" \
+ "libc3/buf_inspect_s64_hexadecimal.c" \
+ "libc3/buf_inspect_s64_decimal.h" \
"libc3/binding.h" \
"libc3/sequence.c" \
+ "libc3/buf_inspect_s64_decimal.c" \
"libc3/io.c" \
"libc3/ceiling.c" \
"libc3/ceiling.h" \
@@ -188,139 +198,129 @@ C3_C_SOURCES = \
"libc3/cfn.h" \
"libc3/character.c" \
"libc3/character.h" \
- "libc3/buf_inspect_u8_hexadecimal.c" \
- "libc3/buf_inspect_u8_hexadecimal.h" \
- "libc3/buf_inspect_u16.c" \
- "libc3/buf_inspect_u16.h" \
- "libc3/buf_inspect_u16_binary.c" \
- "libc3/buf_inspect_u16_binary.h" \
- "libc3/buf_inspect_u16_octal.c" \
- "libc3/buf_inspect_u16_octal.h" \
- "libc3/buf_inspect_u16_decimal.c" \
- "libc3/buf_inspect_u16_decimal.h" \
- "libc3/buf_inspect_u16_hexadecimal.c" \
- "libc3/s8.c" \
+ "libc3/buf_inspect_s64_octal.h" \
+ "libc3/buf_inspect_s64_octal.c" \
+ "libc3/buf_inspect_s64_binary.h" \
+ "libc3/buf_inspect_s64_binary.c" \
+ "libc3/buf_inspect_s64.h" \
+ "libc3/buf_inspect_s64.c" \
+ "libc3/u8.c" \
+ "libc3/s32.h" \
+ "libc3/s32.c" \
+ "libc3/buf_parse_u32.h" \
+ "libc3/buf_parse_u32.c" \
+ "libc3/buf_parse_s32.h" \
+ "libc3/buf_parse_s32.c" \
+ "libc3/buf_inspect_u32_hexadecimal.h" \
+ "libc3/u16.h" \
"libc3/compare.c" \
"libc3/buf_inspect.c" \
"libc3/compare.h" \
- "libc3/buf_inspect_u16_hexadecimal.h" \
- "libc3/buf_inspect_u32.c" \
- "libc3/buf_inspect_u32.h" \
- "libc3/buf_inspect_u32_binary.c" \
- "libc3/buf_inspect_u32_binary.h" \
- "libc3/buf_inspect_u32_octal.c" \
- "libc3/buf_inspect_u32_octal.h" \
- "libc3/buf_inspect_u32_decimal.c" \
- "libc3/buf_inspect_u32_decimal.h" \
"libc3/buf_inspect_u32_hexadecimal.c" \
- "libc3/buf_inspect_u64.c" \
+ "libc3/buf_inspect_u32_decimal.h" \
+ "libc3/buf_inspect_u32_decimal.c" \
+ "libc3/buf_inspect_u32_octal.h" \
+ "libc3/buf_inspect_u32_octal.c" \
+ "libc3/buf_inspect_u32_binary.h" \
+ "libc3/buf_inspect_u32_binary.c" \
+ "libc3/buf_inspect_u32.h" \
+ "libc3/buf_inspect_s32_hexadecimal.h" \
+ "libc3/buf_inspect_u32.c" \
+ "libc3/buf_inspect_s32.c" \
"libc3/error.c" \
"libc3/error.h" \
"libc3/error_handler.c" \
"libc3/eval.h" \
"libc3/eval.c" \
"libc3/facts.h" \
- "libc3/buf_inspect_u32_hexadecimal.h" \
- "libc3/buf_inspect_u64.h" \
- "libc3/buf_inspect_u64_binary.c" \
- "libc3/buf_inspect_u64_binary.h" \
- "libc3/buf_inspect_u64_octal.c" \
- "libc3/buf_inspect_u64_octal.h" \
- "libc3/buf_inspect_u64_decimal.c" \
- "libc3/buf_inspect_u64_decimal.h" \
- "libc3/buf_inspect_u64_hexadecimal.c" \
- "libc3/buf_inspect_u64_hexadecimal.h" \
- "libc3/buf_inspect_uw.c" \
- "libc3/buf_parse_s8.c" \
- "libc3/fact.c" \
+ "libc3/buf_inspect_s32_hexadecimal.c" \
+ "libc3/buf_inspect_s32_decimal.h" \
+ "libc3/buf_inspect_s32_decimal.c" \
+ "libc3/buf_inspect_s32_octal.h" \
+ "libc3/buf_inspect_s32_octal.c" \
+ "libc3/buf_inspect_s32_binary.h" \
+ "libc3/buf_inspect_s32_binary.c" \
+ "libc3/buf_inspect_s32.h" \
+ "libc3/s16.h" \
+ "libc3/s16.c" \
+ "libc3/buf_parse_u16.h" \
+ "libc3/buf_parse_u16.c" \
+ "libc3/buf_parse_s16.h" \
+ "libc3/fn.c" \
"libc3/fact.h" \
"libc3/facts_cursor.c" \
- "libc3/buf_inspect_uw.h" \
- "libc3/buf_inspect_uw_binary.c" \
- "libc3/buf_inspect_uw_binary.h" \
- "libc3/buf_inspect_uw_octal.c" \
- "libc3/buf_inspect_uw_octal.h" \
- "libc3/buf_inspect_uw_decimal.c" \
- "libc3/buf_inspect_uw_decimal.h" \
- "libc3/buf_inspect_uw_hexadecimal.c" \
- "libc3/buf_inspect_uw_hexadecimal.h" \
- "libc3/buf_parse_s8.h" \
"libc3/buf_parse_s16.c" \
- "libc3/buf_parse_s16.h" \
- "libc3/buf_parse_s32.c" \
- "libc3/buf_parse_s32.h" \
- "libc3/list.c" \
+ "libc3/buf_inspect_u16_hexadecimal.h" \
+ "libc3/buf_inspect_u16_hexadecimal.c" \
+ "libc3/buf_inspect_u16_decimal.c" \
+ "libc3/buf_inspect_u16_decimal.h" \
+ "libc3/buf_inspect_u16_octal.h" \
+ "libc3/buf_inspect_u16_octal.c" \
+ "libc3/buf_inspect_u16_binary.h" \
+ "libc3/buf_inspect_u16_binary.c" \
+ "libc3/buf_inspect_u16.h" \
+ "libc3/buf_inspect_u16.c" \
+ "libc3/buf_inspect_s16_hexadecimal.h" \
+ "libc3/buf_inspect_s16_hexadecimal.c" \
"libc3/facts_cursor.h" \
"libc3/facts_spec.c" \
"libc3/facts_spec.h" \
"libc3/facts_spec_cursor.h" \
- "libc3/buf_parse_s64.c" \
- "libc3/buf_parse_s64.h" \
- "libc3/buf_parse_sw.c" \
- "libc3/buf_parse_sw.h" \
- "libc3/buf_parse_u8.c" \
- "libc3/buf_parse_u8.h" \
- "libc3/buf_parse_u16.c" \
- "libc3/buf_parse_u16.h" \
- "libc3/buf_parse_u32.c" \
- "libc3/buf_parse_u32.h" \
- "libc3/buf_parse_u64.c" \
- "libc3/buf_parse_u64.h" \
- "libc3/buf_parse_uw.c" \
- "libc3/buf_parse_uw.h" \
- "libc3/tag_init.h" \
+ "libc3/buf_inspect_s16_decimal.h" \
+ "libc3/buf_inspect_s16_decimal.c" \
+ "libc3/buf_inspect_s16_octal.h" \
+ "libc3/buf_inspect_s16_octal.c" \
+ "libc3/buf_inspect_s16_binary.h" \
+ "libc3/buf_inspect_s16_binary.c" \
+ "libc3/buf_inspect_s16.h" \
+ "libc3/buf_inspect_s16.c" \
+ "libc3/u8.h" \
+ "libc3/s8.h" \
+ "libc3/s8.c" \
"libc3/ptr_free.h" \
+ "libc3/buf_parse_u8.h" \
"libc3/buf_parse_u.h.in" \
"libc3/facts_with.c" \
"libc3/facts_with.h" \
"libc3/facts_with_cursor.c" \
- "libc3/set__fact.c" \
- "libc3/set__fact.h" \
- "libc3/set__tag.c" \
- "libc3/set__tag.h" \
- "libc3/set_cursor__fact.c" \
- "libc3/set_cursor__fact.h" \
- "libc3/set_cursor__tag.c" \
- "libc3/set_cursor__tag.h" \
- "libc3/set_item__fact.c" \
- "libc3/set_item__fact.h" \
- "libc3/set_item__tag.c" \
- "libc3/set_item__tag.h" \
- "libc3/skiplist__fact.c" \
- "libc3/skiplist__fact.h" \
- "libc3/skiplist_node__fact.c" \
- "libc3/skiplist_node__fact.h" \
- "libc3/s8.h" \
+ "libc3/buf_parse_u8.c" \
+ "libc3/buf_parse_s8.h" \
+ "libc3/buf_parse_s8.c" \
+ "libc3/buf_inspect_u8_hexadecimal.h" \
+ "libc3/buf_inspect_u8_decimal.h" \
+ "libc3/buf_inspect_u8_hexadecimal.c" \
+ "libc3/buf_inspect_u8_decimal.c" \
+ "libc3/buf_inspect_u8_octal.h" \
+ "libc3/buf_inspect_u8_octal.c" \
+ "libc3/buf_inspect_u8_binary.h" \
+ "libc3/buf_inspect_u8_binary.c" \
+ "libc3/buf_inspect_u8.h" \
+ "libc3/buf_inspect_u8.c" \
+ "libc3/buf_inspect_s8.h" \
"libc3/facts_with_cursor.h" \
"libc3/float.h" \
"libc3/frame.c" \
"libc3/frame.h" \
"libc3/types.h" \
- "libc3/s16.c" \
- "libc3/s16.h" \
- "libc3/s32.c" \
- "libc3/s32.h" \
+ "libc3/buf_inspect_s8_hexadecimal.h" \
"libc3/f64.h" \
- "libc3/s64.c" \
- "libc3/s64.h" \
- "libc3/sw.c" \
- "libc3/f32.c" \
- "libc3/sw.h" \
- "libc3/u8.c" \
- "libc3/u8.h" \
- "libc3/u16.c" \
- "libc3/u16.h" \
- "libc3/u32.c" \
- "libc3/u32.h" \
- "libc3/u64.c" \
- "libc3/u64.h" \
- "libc3/uw.c" \
- "libc3/uw.h" \
+ "libc3/buf_inspect_s8_hexadecimal.c" \
+ "libc3/hash.c" \
+ "libc3/buf_inspect_s8_decimal.h" \
+ "libc3/buf_inspect_s8_decimal.c" \
+ "libc3/buf_inspect_s8_octal.h" \
+ "libc3/buf_inspect_s8_octal.c" \
+ "libc3/buf_inspect_s8_binary.h" \
+ "libc3/buf_inspect_s8_binary.c" \
+ "libc3/buf_inspect_s8.c" \
+ "libc3/tag_init.h" \
+ "libc3/list_init.h" \
"libc3/hash.h" \
"libc3/ident.h" \
"libc3/integer.c" \
"libc3/integer.h" \
- "libc3/list.h" \
+ "libc3/point.h.in" \
+ "libc3/u.c.in" \
"libc3/log.c" \
"libc3/log.h" \
"libc3/buf_inspect_s.h.in" \
@@ -347,7 +347,6 @@ C3_C_SOURCES = \
"libc3/facts.c" \
"libc3/set_item.c.in" \
"libc3/set_item.h.in" \
- "libc3/sym.c" \
"libc3/s.h.in" \
"libc3/sign.c" \
"libc3/sign.h" \
@@ -370,13 +369,14 @@ C3_C_SOURCES = \
"libc3/buf_inspect_s.c.in" \
"libc3/tag.h" \
"libc3/list_init.c" \
+ "libc3/env.c" \
"libc3/tag_shift_right.c" \
"libc3/error_handler.h" \
- "libc3/buf_inspect_u8.c" \
+ "libc3/ptr_free.c" \
"libc3/ident.c" \
+ "libc3/tag_type.c" \
"libc3/assert.h" \
"libc3/tag_init.c" \
- "libc3/list_init.h" \
"libc3/tag_bor.c" \
"libc3/tag_bxor.c" \
"libc3/buf_inspect_s_base.c.in" \
@@ -430,11 +430,11 @@ C3_C_SOURCES = \
"libc3/window/sdl2/demo/window_sdl2_demo.c" \
"libc3/window/sdl2/demo/lightspeed.c" \
"libc3/window/sdl2/demo/lightspeed.h" \
+ "libc3/window/sdl2/demo/earth.c" \
"libc3/window/sdl2/demo/flies.c" \
"libc3/window/sdl2/demo/toasters.c" \
"libc3/window/sdl2/demo/flies.h" \
"libc3/window/sdl2/demo/toasters.h" \
- "libc3/window/sdl2/demo/earth.c" \
"libc3/window/sdl2/demo/earth.h" \
"libc3/window/sdl2/demo/window_sdl2_demo.h" \
"libc3/window/sdl2/types.h" \
@@ -444,26 +444,40 @@ C3_C_SOURCES = \
"libc3/window/sdl2/sdl2_font.c" \
"libc3/window/sdl2/sdl2_sprite.c" \
"libc3/window/sdl2/sdl2_sprite.h" \
- "libc3/window/sdl2/gl.c" \
"libc3/window/sdl2/gl_camera.c" \
"libc3/window/sdl2/gl_sphere.c" \
- "libc3/window/sdl2/gl.h" \
+ "libc3/window/sdl2/gl_point_3d.c" \
+ "libc3/window/sdl2/gl_point_2d.c" \
+ "libc3/window/sdl2/disabled/mandelbrot.c" \
+ "libc3/window/sdl2/disabled/mandelbrot.h" \
"libc3/window/sdl2/gl_camera.h" \
"libc3/window/sdl2/gl_cylinder.c" \
"libc3/window/sdl2/gl_cylinder.h" \
"libc3/window/sdl2/gl_sphere.h" \
+ "libc3/window/sdl2/gl_point_2d.h" \
+ "libc3/window/sdl2/gl_object.c" \
+ "libc3/window/sdl2/gl_object.h" \
+ "libc3/window/sdl2/gl_point_3d.h" \
+ "libc3/window/sdl2/gl_matrix_4d.h" \
+ "libc3/window/sdl2/gl_matrix_3d.h" \
+ "libc3/window/sdl2/gl_matrix_4d.c" \
"libc3/array.h" \
- "libc3/u.c.in" \
+ "libc3/u16.c" \
+ "libc3/list.c" \
"libc3/u.h.in" \
"libc3/sha1.h" \
"libc3/file.h" \
- "libc3/env.c" \
+ "libc3/fact.c" \
+ "libc3/list.h" \
"libc3/fn.h" \
"libc3/map.h" \
+ "libc3/sym.c" \
"libc3/struct_type.h" \
+ "libc3/u32.c" \
"libc3/license.c" \
"libc3/file.c" \
"libc3/operator.c" \
+ "libc3/f32.c" \
"libc3/ptr.c" \
"libc3/ptag.h" \
"libc3/tag_add.c" \
@@ -476,17 +490,14 @@ C3_C_SOURCES = \
"libc3/ptag.c" \
"libc3/var.h" \
"libc3/var.c" \
- "libc3/fn.c" \
- "libc3/time.h" \
"libc3/io.h" \
+ "libc3/time.h" \
"libc3/void.c" \
"libc3/void.h" \
- "libc3/tag_type.c" \
"libc3/struct.h" \
"libc3/module.c" \
"libc3/tag_type.h" \
"libc3/time.c" \
- "libc3/hash.c" \
"test/buf_inspect_test.c" \
"test/bool_test.c" \
"test/buf_parse_test.c" \
@@ -934,6 +945,14 @@ C3_EXTERNAL_SOURCES = \
"libffi/src/x86/win64_intel.S" \
"libffi/src/x86/unix64.S" \
"libffi/src/x86/win64.S" \
+ "libffi/src/x86/unix64.o" \
+ "libffi/src/x86/ffi64.o" \
+ "libffi/src/x86/ffi64.lo" \
+ "libffi/src/x86/win64.o" \
+ "libffi/src/x86/ffiw64.o" \
+ "libffi/src/x86/unix64.lo" \
+ "libffi/src/x86/ffiw64.lo" \
+ "libffi/src/x86/win64.lo" \
"libffi/src/xtensa/ffitarget.h" \
"libffi/src/xtensa/ffi.c" \
"libffi/src/xtensa/sysv.S" \
@@ -945,6 +964,18 @@ C3_EXTERNAL_SOURCES = \
"libffi/src/raw_api.c" \
"libffi/src/tramp.c" \
"libffi/src/types.c" \
+ "libffi/src/prep_cif.lo" \
+ "libffi/src/tramp.o" \
+ "libffi/src/types.o" \
+ "libffi/src/raw_api.o" \
+ "libffi/src/closures.o" \
+ "libffi/src/raw_api.lo" \
+ "libffi/src/tramp.lo" \
+ "libffi/src/prep_cif.o" \
+ "libffi/src/types.lo" \
+ "libffi/src/java_raw_api.o" \
+ "libffi/src/java_raw_api.lo" \
+ "libffi/src/closures.lo" \
"libffi/testsuite/config/default.exp" \
"libffi/testsuite/emscripten/build-tests.sh" \
"libffi/testsuite/emscripten/build.sh" \
@@ -1177,6 +1208,7 @@ C3_EXTERNAL_SOURCES = \
"libffi/testsuite/Makefile.am" \
"libffi/testsuite/Makefile.in" \
"libffi/testsuite/Makefile" \
+ "libffi/libffi_convenience.la" \
"libffi/LICENSE-BUILDTOOLS" \
"libffi/ChangeLog.old" \
"libffi/LICENSE" \
@@ -1203,6 +1235,7 @@ C3_EXTERNAL_SOURCES = \
"libffi/libtool-version" \
"libffi/ltmain.sh" \
"libffi/make_sunver.pl" \
+ "libffi/libffi.la" \
"libffi/missing" \
"libffi/msvcc.sh" \
"libffi/stamp-h.in" \
diff --git a/sources.sh b/sources.sh
index a2ad2e4..551cb78 100644
--- a/sources.sh
+++ b/sources.sh
@@ -1,7 +1,7 @@
# sources.sh generated by update_sources
C3_CONFIGURES='c3c/configure c3s/configure c3s/sources.sh c3s/update_sources ic3/configure ic3/sources.sh ic3/update_sources libc3/sources.sh libc3/configure libc3/update_sources libc3/window/cairo/xcb/configure libc3/window/cairo/xcb/update_sources libc3/window/cairo/xcb/demo/update_sources libc3/window/cairo/xcb/demo/configure libc3/window/cairo/xcb/demo/sources.sh libc3/window/cairo/xcb/sources.sh libc3/window/cairo/configure libc3/window/cairo/quartz/configure libc3/window/cairo/quartz/sources.sh libc3/window/cairo/quartz/update_sources libc3/window/cairo/quartz/demo/configure libc3/window/cairo/quartz/demo/sources.sh libc3/window/cairo/quartz/demo/update_sources libc3/window/cairo/demo/configure libc3/window/cairo/demo/sources.sh libc3/window/cairo/demo/update_sources libc3/window/cairo/update_sources libc3/window/cairo/sources.sh libc3/window/cairo/win32/configure libc3/window/cairo/win32/demo/sources.sh libc3/window/cairo/win32/demo/configure libc3/window/cairo/win32/demo/update_sources libc3/window/cairo/win32/sources.sh libc3/window/cairo/win32/update_sources libc3/window/configure libc3/window/sources.sh libc3/window/update_sources libc3/window/sdl2/configure libc3/window/sdl2/demo/configure libc3/window/sdl2/demo/macos/configure libc3/window/sdl2/demo/sources.sh libc3/window/sdl2/demo/update_sources libc3/window/sdl2/sources.sh libc3/window/sdl2/update_sources libtommath/configure libtommath/sources.sh libtommath/update_sources test/sources.sh test/configure test/update_sources ucd2c/configure '
C3_MAKEFILES='c3c/Makefile c3s/Makefile c3s/sources.mk ic3/Makefile ic3/sources.mk libc3/gen.mk libc3/sources.mk libc3/Makefile libc3/window/cairo/xcb/Makefile libc3/window/cairo/xcb/sources.mk libc3/window/cairo/xcb/demo/sources.mk libc3/window/cairo/xcb/demo/Makefile libc3/window/cairo/Makefile libc3/window/cairo/quartz/Makefile libc3/window/cairo/quartz/sources.mk libc3/window/cairo/quartz/demo/Makefile libc3/window/cairo/quartz/demo/sources.mk libc3/window/cairo/demo/Makefile libc3/window/cairo/demo/sources.mk libc3/window/cairo/sources.mk libc3/window/cairo/win32/Makefile libc3/window/cairo/win32/demo/Makefile libc3/window/cairo/win32/demo/sources.mk libc3/window/cairo/win32/sources.mk libc3/window/Makefile libc3/window/sources.mk libc3/window/sdl2/Makefile libc3/window/sdl2/demo/Makefile libc3/window/sdl2/demo/macos/Makefile libc3/window/sdl2/demo/sources.mk libc3/window/sdl2/sources.mk libtommath/Makefile libtommath/sources.mk test/Makefile test/sources.mk ucd2c/Makefile '
-C3_C_SOURCES='c3c/c3c.c c3s/buf_readline.c c3s/c3s.c c3s/buf_readline.h ic3/ic3.c ic3/buf_linenoise.c ic3/buf_linenoise.h ic3/linenoise.c ic3/buf_wineditline.c ic3/buf_wineditline.h libc3/array.c libc3/struct.c libc3/abs.c libc3/buf.c libc3/buf_inspect_s8.c libc3/buf_inspect_s8.h libc3/buf_inspect_s8_binary.c libc3/buf_inspect_s8_binary.h libc3/buf_inspect_s8_octal.c libc3/buf_inspect_s8_octal.h libc3/buf_inspect_s8_decimal.c libc3/buf_inspect_s8_decimal.h libc3/buf_inspect_s8_hexadecimal.c libc3/buf_inspect_s16.c libc3/call.c libc3/buf_parse.c libc3/arg.c libc3/binding.c libc3/c3.c libc3/buf_inspect_s8_hexadecimal.h libc3/buf_inspect_s16.h libc3/buf_inspect_s16_binary.c libc3/buf_inspect_s16_binary.h libc3/buf_inspect_s16_octal.c libc3/buf_inspect_s16_octal.h libc3/buf_inspect_s16_decimal.c libc3/buf_inspect_s16_decimal.h libc3/buf_inspect_s16_hexadecimal.c libc3/buf_inspect_s16_hexadecimal.h libc3/buf_inspect_s32.c libc3/buf_inspect_s32.h libc3/ptr_free.c libc3/bool.c libc3/bool.h libc3/buf_file.c libc3/buf_inspect_s32_binary.c libc3/buf_inspect_s32_binary.h libc3/buf_inspect_s32_octal.c libc3/buf_inspect_s32_octal.h libc3/buf_inspect_s32_decimal.c libc3/buf_inspect_s32_decimal.h libc3/buf_inspect_s32_hexadecimal.c libc3/buf_inspect_s32_hexadecimal.h libc3/buf_inspect_s64.c libc3/buf_inspect_s64.h libc3/buf_inspect_s64_binary.c libc3/buf_inspect_s64_binary.h libc3/buf_inspect_sw.c libc3/buf_parse.h libc3/buf.h libc3/buf_save.c libc3/facts_spec_cursor.c libc3/buf_inspect_s64_octal.c libc3/buf_inspect_s64_octal.h libc3/buf_inspect_s64_decimal.c libc3/buf_inspect_s64_decimal.h libc3/buf_inspect_s64_hexadecimal.c libc3/buf_inspect_s64_hexadecimal.h libc3/buf_inspect_sw.h libc3/buf_inspect_sw_binary.c libc3/buf_inspect_sw_binary.h libc3/buf_inspect_sw_octal.c libc3/buf_inspect_sw_octal.h libc3/buf_inspect_sw_decimal.c libc3/buf_file.h libc3/buf_save.h libc3/call.h libc3/buf_inspect_sw_decimal.h libc3/buf_inspect_sw_hexadecimal.c libc3/buf_inspect_sw_hexadecimal.h libc3/buf_parse_s.c.in libc3/buf_inspect_u8.h libc3/buf_inspect_u8_binary.c libc3/buf_inspect_u8_binary.h libc3/buf_inspect_u8_octal.c libc3/buf_inspect_u8_octal.h libc3/buf_inspect_u8_decimal.c libc3/buf_inspect_u8_decimal.h libc3/binding.h libc3/sequence.c libc3/io.c libc3/ceiling.c libc3/ceiling.h libc3/cfn.c libc3/cfn.h libc3/character.c libc3/character.h libc3/buf_inspect_u8_hexadecimal.c libc3/buf_inspect_u8_hexadecimal.h libc3/buf_inspect_u16.c libc3/buf_inspect_u16.h libc3/buf_inspect_u16_binary.c libc3/buf_inspect_u16_binary.h libc3/buf_inspect_u16_octal.c libc3/buf_inspect_u16_octal.h libc3/buf_inspect_u16_decimal.c libc3/buf_inspect_u16_decimal.h libc3/buf_inspect_u16_hexadecimal.c libc3/s8.c libc3/compare.c libc3/buf_inspect.c libc3/compare.h libc3/buf_inspect_u16_hexadecimal.h libc3/buf_inspect_u32.c libc3/buf_inspect_u32.h libc3/buf_inspect_u32_binary.c libc3/buf_inspect_u32_binary.h libc3/buf_inspect_u32_octal.c libc3/buf_inspect_u32_octal.h libc3/buf_inspect_u32_decimal.c libc3/buf_inspect_u32_decimal.h libc3/buf_inspect_u32_hexadecimal.c libc3/buf_inspect_u64.c libc3/error.c libc3/error.h libc3/error_handler.c libc3/eval.h libc3/eval.c libc3/facts.h libc3/buf_inspect_u32_hexadecimal.h libc3/buf_inspect_u64.h libc3/buf_inspect_u64_binary.c libc3/buf_inspect_u64_binary.h libc3/buf_inspect_u64_octal.c libc3/buf_inspect_u64_octal.h libc3/buf_inspect_u64_decimal.c libc3/buf_inspect_u64_decimal.h libc3/buf_inspect_u64_hexadecimal.c libc3/buf_inspect_u64_hexadecimal.h libc3/buf_inspect_uw.c libc3/buf_parse_s8.c libc3/fact.c libc3/fact.h libc3/facts_cursor.c libc3/buf_inspect_uw.h libc3/buf_inspect_uw_binary.c libc3/buf_inspect_uw_binary.h libc3/buf_inspect_uw_octal.c libc3/buf_inspect_uw_octal.h libc3/buf_inspect_uw_decimal.c libc3/buf_inspect_uw_decimal.h libc3/buf_inspect_uw_hexadecimal.c libc3/buf_inspect_uw_hexadecimal.h libc3/buf_parse_s8.h libc3/buf_parse_s16.c libc3/buf_parse_s16.h libc3/buf_parse_s32.c libc3/buf_parse_s32.h libc3/list.c libc3/facts_cursor.h libc3/facts_spec.c libc3/facts_spec.h libc3/facts_spec_cursor.h libc3/buf_parse_s64.c libc3/buf_parse_s64.h libc3/buf_parse_sw.c libc3/buf_parse_sw.h libc3/buf_parse_u8.c libc3/buf_parse_u8.h libc3/buf_parse_u16.c libc3/buf_parse_u16.h libc3/buf_parse_u32.c libc3/buf_parse_u32.h libc3/buf_parse_u64.c libc3/buf_parse_u64.h libc3/buf_parse_uw.c libc3/buf_parse_uw.h libc3/tag_init.h libc3/ptr_free.h libc3/buf_parse_u.h.in libc3/facts_with.c libc3/facts_with.h libc3/facts_with_cursor.c libc3/set__fact.c libc3/set__fact.h libc3/set__tag.c libc3/set__tag.h libc3/set_cursor__fact.c libc3/set_cursor__fact.h libc3/set_cursor__tag.c libc3/set_cursor__tag.h libc3/set_item__fact.c libc3/set_item__fact.h libc3/set_item__tag.c libc3/set_item__tag.h libc3/skiplist__fact.c libc3/skiplist__fact.h libc3/skiplist_node__fact.c libc3/skiplist_node__fact.h libc3/s8.h libc3/facts_with_cursor.h libc3/float.h libc3/frame.c libc3/frame.h libc3/types.h libc3/s16.c libc3/s16.h libc3/s32.c libc3/s32.h libc3/f64.h libc3/s64.c libc3/s64.h libc3/sw.c libc3/f32.c libc3/sw.h libc3/u8.c libc3/u8.h libc3/u16.c libc3/u16.h libc3/u32.c libc3/u32.h libc3/u64.c libc3/u64.h libc3/uw.c libc3/uw.h libc3/hash.h libc3/ident.h libc3/integer.c libc3/integer.h libc3/list.h libc3/log.c libc3/log.h libc3/buf_inspect_s.h.in libc3/ptr.h libc3/buf_inspect.h libc3/c3_main.h libc3/f64.c libc3/struct_type.c libc3/abs.h libc3/str.c libc3/module.h libc3/buf_parse_u.c.in libc3/quote.c libc3/quote.h libc3/set.c.in libc3/set.h.in libc3/buf_inspect_s_base.h.in libc3/sequence.h libc3/tag_mul.c libc3/tag_sub.c libc3/set_cursor.c.in libc3/set_cursor.h.in libc3/f32.h libc3/facts.c libc3/set_item.c.in libc3/set_item.h.in libc3/sym.c libc3/s.h.in libc3/sign.c libc3/sign.h libc3/skiplist.c.in libc3/skiplist.h.in libc3/type.h libc3/tag.c libc3/skiplist_node.c.in libc3/skiplist_node.h.in libc3/str.h libc3/tag_div.c libc3/tuple.c libc3/ucd.c libc3/sym.h libc3/tuple.h libc3/type.c libc3/ucd.h libc3/tag_shift_left.c libc3/buf_parse_s.h.in libc3/buf_inspect_s.c.in libc3/tag.h libc3/list_init.c libc3/tag_shift_right.c libc3/error_handler.h libc3/buf_inspect_u8.c libc3/ident.c libc3/assert.h libc3/tag_init.c libc3/list_init.h libc3/tag_bor.c libc3/tag_bxor.c libc3/buf_inspect_s_base.c.in libc3/buf_inspect_u.c.in libc3/buf_inspect_u.h.in libc3/env.h libc3/c3.h libc3/arg.h libc3/buf_inspect_u_base.c.in libc3/buf_inspect_u_base.h.in libc3/map.c libc3/window/cairo/xcb/config.h libc3/window/cairo/xcb/window_cairo_xcb.c libc3/window/cairo/xcb/demo/window_cairo_xcb_demo.c libc3/window/cairo/xcb/window_cairo_xcb.h libc3/window/cairo/types.h libc3/window/cairo/window_cairo.h libc3/window/cairo/window_cairo.c libc3/window/cairo/quartz/window_cairo_quartz.h libc3/window/cairo/quartz/demo/window_cairo_quartz_demo.c libc3/window/cairo/quartz/window_cairo_quartz_app_delegate.h libc3/window/cairo/quartz/xkbquartz.h libc3/window/cairo/quartz/window_cairo_quartz_view.h libc3/window/cairo/quartz/window_cairo_quartz_view_controller.h libc3/window/cairo/quartz/quartz_to_xkbcommon.c libc3/window/cairo/quartz/quartz_to_xkbcommon.h libc3/window/cairo/demo/bg_rect.c libc3/window/cairo/demo/bg_rect.h libc3/window/cairo/demo/lightspeed.c libc3/window/cairo/demo/lightspeed.h libc3/window/cairo/demo/window_cairo_demo.c libc3/window/cairo/demo/window_cairo_demo.h libc3/window/cairo/demo/toasters.c libc3/window/cairo/demo/flies.c libc3/window/cairo/demo/flies.h libc3/window/cairo/demo/toasters.h libc3/window/cairo/win32/demo/window_cairo_win32_demo.c libc3/window/cairo/win32/vk_to_xkbcommon.c libc3/window/cairo/win32/vk_to_xkbcommon.h libc3/window/cairo/win32/window_cairo_win32.c libc3/window/cairo/win32/window_cairo_win32.h libc3/window/cairo/cairo_sprite.c libc3/window/cairo/cairo_sprite.h libc3/window/cairo/cairo_font.c libc3/window/cairo/cairo_font.h libc3/window/types.h libc3/window/window.c libc3/window/window.h libc3/window/sdl2/demo/bg_rect.c libc3/window/sdl2/demo/bg_rect.h libc3/window/sdl2/demo/window_sdl2_demo.c libc3/window/sdl2/demo/lightspeed.c libc3/window/sdl2/demo/lightspeed.h libc3/window/sdl2/demo/flies.c libc3/window/sdl2/demo/toasters.c libc3/window/sdl2/demo/flies.h libc3/window/sdl2/demo/toasters.h libc3/window/sdl2/demo/earth.c libc3/window/sdl2/demo/earth.h libc3/window/sdl2/demo/window_sdl2_demo.h libc3/window/sdl2/types.h libc3/window/sdl2/window_sdl2.c libc3/window/sdl2/window_sdl2.h libc3/window/sdl2/sdl2_font.h libc3/window/sdl2/sdl2_font.c libc3/window/sdl2/sdl2_sprite.c libc3/window/sdl2/sdl2_sprite.h libc3/window/sdl2/gl.c libc3/window/sdl2/gl_camera.c libc3/window/sdl2/gl_sphere.c libc3/window/sdl2/gl.h libc3/window/sdl2/gl_camera.h libc3/window/sdl2/gl_cylinder.c libc3/window/sdl2/gl_cylinder.h libc3/window/sdl2/gl_sphere.h libc3/array.h libc3/u.c.in libc3/u.h.in libc3/sha1.h libc3/file.h libc3/env.c libc3/fn.h libc3/map.h libc3/struct_type.h libc3/license.c libc3/file.c libc3/operator.c libc3/ptr.c libc3/ptag.h libc3/tag_add.c libc3/tag_band.c libc3/fn_clause.h libc3/s.c.in libc3/operator.h libc3/fn_clause.c libc3/tag_mod.c libc3/ptag.c libc3/var.h libc3/var.c libc3/fn.c libc3/time.h libc3/io.h libc3/void.c libc3/void.h libc3/tag_type.c libc3/struct.h libc3/module.c libc3/tag_type.h libc3/time.c libc3/hash.c test/buf_inspect_test.c test/bool_test.c test/buf_parse_test.c test/facts_test.c test/buf_file_test.c test/list_test.c test/test.h test/buf_parse_test_u8.c test/buf_parse_test.h test/buf_parse_test_s16.c test/buf_parse_test_s32.c test/buf_parse_test_s64.c test/buf_parse_test_s8.c test/buf_parse_test_su.h test/test.c test/buf_parse_test_u16.c test/buf_parse_test_u32.c test/buf_parse_test_u64.c test/call_test.c test/facts_cursor_test.c test/sym_test.c test/cfn_test.c test/character_test.c test/env_test.c test/fact_test.c test/fact_test.h test/libc3_test.c test/str_test.c test/facts_with_test.c test/hash_test.c test/compare_test.c test/compare_test.h test/ident_test.c test/buf_test.c test/set__fact_test.c test/set__tag_test.c test/skiplist__fact_test.c test/tag_test.c test/tag_test.h test/array_test.c test/fn_test.c test/tuple_test.c test/types_test.c ucd2c/ucd.h ucd2c/ucd2c.c '
+C3_C_SOURCES='c3c/c3c.c c3s/buf_readline.c c3s/c3s.c c3s/buf_readline.h ic3/ic3.c ic3/buf_linenoise.c ic3/config.h ic3/buf_linenoise.h ic3/linenoise.c ic3/buf_wineditline.c ic3/buf_wineditline.h libc3/array.c libc3/struct.c libc3/abs.c libc3/buf.c libc3/set__tag.c libc3/set_item__tag.c libc3/set__tag.h libc3/set_item__tag.h libc3/set_cursor__tag.h libc3/set_cursor__tag.c libc3/skiplist_node__fact.c libc3/skiplist_node__fact.h libc3/skiplist__fact.c libc3/skiplist__fact.h libc3/set_item__fact.h libc3/set__fact.c libc3/call.c libc3/buf_parse.c libc3/arg.c libc3/binding.c libc3/c3.c libc3/set_item__fact.c libc3/set__fact.h libc3/set_cursor__fact.c libc3/set_cursor__fact.h libc3/uw.c libc3/sw.h libc3/uw.h libc3/sw.c libc3/buf_parse_uw.h libc3/buf_parse_uw.c libc3/buf_parse_sw.h libc3/buf_parse_sw.c libc3/buf_inspect_uw_hexadecimal.h libc3/buf_inspect_uw_hexadecimal.c libc3/buf_inspect_uw_decimal.h libc3/buf_inspect_uw_decimal.c libc3/u64.h libc3/bool.c libc3/bool.h libc3/buf_file.c libc3/buf_inspect_uw_octal.h libc3/buf_inspect_uw_octal.c libc3/buf_inspect_uw_binary.h libc3/buf_inspect_uw.h libc3/buf_inspect_uw_binary.c libc3/buf_inspect_uw.c libc3/buf_inspect_sw_hexadecimal.h libc3/buf_inspect_sw_hexadecimal.c libc3/buf_inspect_sw_decimal.h libc3/buf_inspect_sw_decimal.c libc3/buf_inspect_sw_octal.h libc3/buf_inspect_sw_octal.c libc3/buf_inspect_sw_binary.h libc3/buf_parse.h libc3/buf.h libc3/buf_save.c libc3/facts_spec_cursor.c libc3/buf_inspect_sw_binary.c libc3/buf_inspect_sw.h libc3/buf_inspect_sw.c libc3/u64.c libc3/s64.h libc3/s64.c libc3/buf_parse_u64.h libc3/buf_parse_u64.c libc3/buf_parse_s64.h libc3/buf_parse_s64.c libc3/buf_inspect_u64_hexadecimal.h libc3/buf_inspect_u64_hexadecimal.c libc3/buf_inspect_u64_decimal.h libc3/buf_inspect_u64_decimal.c libc3/u32.h libc3/buf_file.h libc3/buf_save.h libc3/call.h libc3/buf_inspect_u64_octal.h libc3/buf_inspect_u64_octal.c libc3/buf_inspect_u64_binary.h libc3/buf_parse_s.c.in libc3/buf_inspect_u64_binary.c libc3/buf_inspect_u64.h libc3/buf_inspect_u64.c libc3/buf_inspect_s64_hexadecimal.h libc3/buf_inspect_s64_hexadecimal.c libc3/buf_inspect_s64_decimal.h libc3/binding.h libc3/sequence.c libc3/buf_inspect_s64_decimal.c libc3/io.c libc3/ceiling.c libc3/ceiling.h libc3/cfn.c libc3/cfn.h libc3/character.c libc3/character.h libc3/buf_inspect_s64_octal.h libc3/buf_inspect_s64_octal.c libc3/buf_inspect_s64_binary.h libc3/buf_inspect_s64_binary.c libc3/buf_inspect_s64.h libc3/buf_inspect_s64.c libc3/u8.c libc3/s32.h libc3/s32.c libc3/buf_parse_u32.h libc3/buf_parse_u32.c libc3/buf_parse_s32.h libc3/buf_parse_s32.c libc3/buf_inspect_u32_hexadecimal.h libc3/u16.h libc3/compare.c libc3/buf_inspect.c libc3/compare.h libc3/buf_inspect_u32_hexadecimal.c libc3/buf_inspect_u32_decimal.h libc3/buf_inspect_u32_decimal.c libc3/buf_inspect_u32_octal.h libc3/buf_inspect_u32_octal.c libc3/buf_inspect_u32_binary.h libc3/buf_inspect_u32_binary.c libc3/buf_inspect_u32.h libc3/buf_inspect_s32_hexadecimal.h libc3/buf_inspect_u32.c libc3/buf_inspect_s32.c libc3/error.c libc3/error.h libc3/error_handler.c libc3/eval.h libc3/eval.c libc3/facts.h libc3/buf_inspect_s32_hexadecimal.c libc3/buf_inspect_s32_decimal.h libc3/buf_inspect_s32_decimal.c libc3/buf_inspect_s32_octal.h libc3/buf_inspect_s32_octal.c libc3/buf_inspect_s32_binary.h libc3/buf_inspect_s32_binary.c libc3/buf_inspect_s32.h libc3/s16.h libc3/s16.c libc3/buf_parse_u16.h libc3/buf_parse_u16.c libc3/buf_parse_s16.h libc3/fn.c libc3/fact.h libc3/facts_cursor.c libc3/buf_parse_s16.c libc3/buf_inspect_u16_hexadecimal.h libc3/buf_inspect_u16_hexadecimal.c libc3/buf_inspect_u16_decimal.c libc3/buf_inspect_u16_decimal.h libc3/buf_inspect_u16_octal.h libc3/buf_inspect_u16_octal.c libc3/buf_inspect_u16_binary.h libc3/buf_inspect_u16_binary.c libc3/buf_inspect_u16.h libc3/buf_inspect_u16.c libc3/buf_inspect_s16_hexadecimal.h libc3/buf_inspect_s16_hexadecimal.c libc3/facts_cursor.h libc3/facts_spec.c libc3/facts_spec.h libc3/facts_spec_cursor.h libc3/buf_inspect_s16_decimal.h libc3/buf_inspect_s16_decimal.c libc3/buf_inspect_s16_octal.h libc3/buf_inspect_s16_octal.c libc3/buf_inspect_s16_binary.h libc3/buf_inspect_s16_binary.c libc3/buf_inspect_s16.h libc3/buf_inspect_s16.c libc3/u8.h libc3/s8.h libc3/s8.c libc3/ptr_free.h libc3/buf_parse_u8.h libc3/buf_parse_u.h.in libc3/facts_with.c libc3/facts_with.h libc3/facts_with_cursor.c libc3/buf_parse_u8.c libc3/buf_parse_s8.h libc3/buf_parse_s8.c libc3/buf_inspect_u8_hexadecimal.h libc3/buf_inspect_u8_decimal.h libc3/buf_inspect_u8_hexadecimal.c libc3/buf_inspect_u8_decimal.c libc3/buf_inspect_u8_octal.h libc3/buf_inspect_u8_octal.c libc3/buf_inspect_u8_binary.h libc3/buf_inspect_u8_binary.c libc3/buf_inspect_u8.h libc3/buf_inspect_u8.c libc3/buf_inspect_s8.h libc3/facts_with_cursor.h libc3/float.h libc3/frame.c libc3/frame.h libc3/types.h libc3/buf_inspect_s8_hexadecimal.h libc3/f64.h libc3/buf_inspect_s8_hexadecimal.c libc3/hash.c libc3/buf_inspect_s8_decimal.h libc3/buf_inspect_s8_decimal.c libc3/buf_inspect_s8_octal.h libc3/buf_inspect_s8_octal.c libc3/buf_inspect_s8_binary.h libc3/buf_inspect_s8_binary.c libc3/buf_inspect_s8.c libc3/tag_init.h libc3/list_init.h libc3/hash.h libc3/ident.h libc3/integer.c libc3/integer.h libc3/point.h.in libc3/u.c.in libc3/log.c libc3/log.h libc3/buf_inspect_s.h.in libc3/ptr.h libc3/buf_inspect.h libc3/c3_main.h libc3/f64.c libc3/struct_type.c libc3/abs.h libc3/str.c libc3/module.h libc3/buf_parse_u.c.in libc3/quote.c libc3/quote.h libc3/set.c.in libc3/set.h.in libc3/buf_inspect_s_base.h.in libc3/sequence.h libc3/tag_mul.c libc3/tag_sub.c libc3/set_cursor.c.in libc3/set_cursor.h.in libc3/f32.h libc3/facts.c libc3/set_item.c.in libc3/set_item.h.in libc3/s.h.in libc3/sign.c libc3/sign.h libc3/skiplist.c.in libc3/skiplist.h.in libc3/type.h libc3/tag.c libc3/skiplist_node.c.in libc3/skiplist_node.h.in libc3/str.h libc3/tag_div.c libc3/tuple.c libc3/ucd.c libc3/sym.h libc3/tuple.h libc3/type.c libc3/ucd.h libc3/tag_shift_left.c libc3/buf_parse_s.h.in libc3/buf_inspect_s.c.in libc3/tag.h libc3/list_init.c libc3/env.c libc3/tag_shift_right.c libc3/error_handler.h libc3/ptr_free.c libc3/ident.c libc3/tag_type.c libc3/assert.h libc3/tag_init.c libc3/tag_bor.c libc3/tag_bxor.c libc3/buf_inspect_s_base.c.in libc3/buf_inspect_u.c.in libc3/buf_inspect_u.h.in libc3/env.h libc3/c3.h libc3/arg.h libc3/buf_inspect_u_base.c.in libc3/buf_inspect_u_base.h.in libc3/map.c libc3/window/cairo/xcb/config.h libc3/window/cairo/xcb/window_cairo_xcb.c libc3/window/cairo/xcb/demo/window_cairo_xcb_demo.c libc3/window/cairo/xcb/window_cairo_xcb.h libc3/window/cairo/types.h libc3/window/cairo/window_cairo.h libc3/window/cairo/window_cairo.c libc3/window/cairo/quartz/window_cairo_quartz.h libc3/window/cairo/quartz/demo/window_cairo_quartz_demo.c libc3/window/cairo/quartz/window_cairo_quartz_app_delegate.h libc3/window/cairo/quartz/xkbquartz.h libc3/window/cairo/quartz/window_cairo_quartz_view.h libc3/window/cairo/quartz/window_cairo_quartz_view_controller.h libc3/window/cairo/quartz/quartz_to_xkbcommon.c libc3/window/cairo/quartz/quartz_to_xkbcommon.h libc3/window/cairo/demo/bg_rect.c libc3/window/cairo/demo/bg_rect.h libc3/window/cairo/demo/lightspeed.c libc3/window/cairo/demo/lightspeed.h libc3/window/cairo/demo/window_cairo_demo.c libc3/window/cairo/demo/window_cairo_demo.h libc3/window/cairo/demo/toasters.c libc3/window/cairo/demo/flies.c libc3/window/cairo/demo/flies.h libc3/window/cairo/demo/toasters.h libc3/window/cairo/win32/demo/window_cairo_win32_demo.c libc3/window/cairo/win32/vk_to_xkbcommon.c libc3/window/cairo/win32/vk_to_xkbcommon.h libc3/window/cairo/win32/window_cairo_win32.c libc3/window/cairo/win32/window_cairo_win32.h libc3/window/cairo/cairo_sprite.c libc3/window/cairo/cairo_sprite.h libc3/window/cairo/cairo_font.c libc3/window/cairo/cairo_font.h libc3/window/types.h libc3/window/window.c libc3/window/window.h libc3/window/sdl2/demo/bg_rect.c libc3/window/sdl2/demo/bg_rect.h libc3/window/sdl2/demo/window_sdl2_demo.c libc3/window/sdl2/demo/lightspeed.c libc3/window/sdl2/demo/lightspeed.h libc3/window/sdl2/demo/earth.c libc3/window/sdl2/demo/flies.c libc3/window/sdl2/demo/toasters.c libc3/window/sdl2/demo/flies.h libc3/window/sdl2/demo/toasters.h libc3/window/sdl2/demo/earth.h libc3/window/sdl2/demo/window_sdl2_demo.h libc3/window/sdl2/types.h libc3/window/sdl2/window_sdl2.c libc3/window/sdl2/window_sdl2.h libc3/window/sdl2/sdl2_font.h libc3/window/sdl2/sdl2_font.c libc3/window/sdl2/sdl2_sprite.c libc3/window/sdl2/sdl2_sprite.h libc3/window/sdl2/gl_camera.c libc3/window/sdl2/gl_sphere.c libc3/window/sdl2/gl_point_3d.c libc3/window/sdl2/gl_point_2d.c libc3/window/sdl2/disabled/mandelbrot.c libc3/window/sdl2/disabled/mandelbrot.h libc3/window/sdl2/gl_camera.h libc3/window/sdl2/gl_cylinder.c libc3/window/sdl2/gl_cylinder.h libc3/window/sdl2/gl_sphere.h libc3/window/sdl2/gl_point_2d.h libc3/window/sdl2/gl_object.c libc3/window/sdl2/gl_object.h libc3/window/sdl2/gl_point_3d.h libc3/window/sdl2/gl_matrix_4d.h libc3/window/sdl2/gl_matrix_3d.h libc3/window/sdl2/gl_matrix_4d.c libc3/array.h libc3/u16.c libc3/list.c libc3/u.h.in libc3/sha1.h libc3/file.h libc3/fact.c libc3/list.h libc3/fn.h libc3/map.h libc3/sym.c libc3/struct_type.h libc3/u32.c libc3/license.c libc3/file.c libc3/operator.c libc3/f32.c libc3/ptr.c libc3/ptag.h libc3/tag_add.c libc3/tag_band.c libc3/fn_clause.h libc3/s.c.in libc3/operator.h libc3/fn_clause.c libc3/tag_mod.c libc3/ptag.c libc3/var.h libc3/var.c libc3/io.h libc3/time.h libc3/void.c libc3/void.h libc3/struct.h libc3/module.c libc3/tag_type.h libc3/time.c test/buf_inspect_test.c test/bool_test.c test/buf_parse_test.c test/facts_test.c test/buf_file_test.c test/list_test.c test/test.h test/buf_parse_test_u8.c test/buf_parse_test.h test/buf_parse_test_s16.c test/buf_parse_test_s32.c test/buf_parse_test_s64.c test/buf_parse_test_s8.c test/buf_parse_test_su.h test/test.c test/buf_parse_test_u16.c test/buf_parse_test_u32.c test/buf_parse_test_u64.c test/call_test.c test/facts_cursor_test.c test/sym_test.c test/cfn_test.c test/character_test.c test/env_test.c test/fact_test.c test/fact_test.h test/libc3_test.c test/str_test.c test/facts_with_test.c test/hash_test.c test/compare_test.c test/compare_test.h test/ident_test.c test/buf_test.c test/set__fact_test.c test/set__tag_test.c test/skiplist__fact_test.c test/tag_test.c test/tag_test.h test/array_test.c test/fn_test.c test/tuple_test.c test/types_test.c ucd2c/ucd.h ucd2c/ucd2c.c '
C3_OBJC_SOURCES='libc3/window/cairo/quartz/window_cairo_quartz.m libc3/window/cairo/quartz/window_cairo_quartz_view.m libc3/window/cairo/quartz/window_cairo_quartz_app_delegate.m libc3/window/cairo/quartz/window_cairo_quartz_view_controller.m '
C3_OTHER_SOURCES='AUTHORS Makefile README.md c3.index c3.version config.subr configure license.h sources.mk sources.sh img/c3.1.xcf img/c3.1080.jpg img/c3.1080.png img/c3.128.jpg img/c3.128.png img/c3.256.jpg img/c3.256.png img/c3.32.jpg img/c3.32.png img/c3.48.jpg img/c3.48.png img/c3.512.jpg img/c3.512.png img/c3.64.jpg img/c3.64.png img/c3.640.jpg img/c3.640.png img/c3.720.jpg img/c3.720.png img/c3.xcf img/iris-c3-004.jpeg img/iris-c3-004.png img/c3.16.png img/thodg_No_Prompt_073261d5-2c81-4b6e-9572-e0b840c55f1f.jpeg img/c3.iconset/icon_128x128.png img/c3.iconset/icon_16x16.png img/c3.iconset/icon_256x256.png img/c3.iconset/icon_32x32.png img/c3.iconset/icon_512x512.png img/c3.iconset/icon_64x64.png img/flaps.png img/toast.png img/fly-dead.png img/fly-noto.png img/earth.jpg img/earth.png img/flaps.256.png img/toast.128.png lib/c3/0.1/c3.facts lib/c3/0.1/array.facts lib/c3/0.1/gl/sphere.facts lib/c3/0.1/list.facts lib/c3/0.1/map.facts lib/c3/0.1/ptr_free.facts lib/c3/0.1/u8.facts lib/c3/0.1/s16.facts lib/c3/0.1/u32.facts lib/c3/0.1/u16.facts lib/c3/0.1/u64.facts lib/c3/0.1/uw.facts lib/c3/0.1/integer.facts lib/c3/0.1/s32.facts lib/c3/0.1/s64.facts lib/c3/0.1/s8.facts lib/c3/0.1/sw.facts libc3/tag_init.rb test/buf_parse_test_su.rb test/replace_lines.rb test/test.rb test/test_case_end.rb fonts/Courier New/Courier New.ttf test/ic3/map.in test/ic3/array.err.expected test/ic3/array.in test/ic3/array.out.expected test/ic3/array.ret.expected test/ic3/bool.err.expected test/ic3/bool.in test/ic3/bool.out.expected test/ic3/bool.ret.expected test/ic3/call.err.expected test/ic3/call.in test/ic3/cast.in test/ic3/call.out.expected test/ic3/call.ret.expected test/ic3/cast.out.expected test/ic3/cast.ret.expected test/ic3/character.err.expected test/ic3/character.in test/ic3/character.out.expected test/ic3/character.ret.expected test/ic3/comment.err.expected test/ic3/comment.in test/ic3/list.in test/ic3/comment.out.expected test/ic3/comment.ret.expected test/ic3/equal.err.expected test/ic3/equal.in test/ic3/equal.out.expected test/ic3/equal.ret.expected test/ic3/fn.err.expected test/ic3/fn.in test/ic3/fn.out.expected test/ic3/fn.ret.expected test/ic3/function_call.err.expected test/ic3/function_call.out.expected test/ic3/hello.err.expected test/ic3/function_call.ret.expected test/ic3/hello.in test/ic3/hello.out.expected test/ic3/hello.ret.expected test/ic3/ident.err.expected test/ic3/ident.in test/ic3/ident.out.expected test/ic3/ident.ret.expected test/ic3/integer.in test/ic3/integer.lisp test/ic3/integer.out.expected test/ic3/integer.ret.expected test/ic3/integer_add.in test/ic3/list.out.expected test/ic3/integer_add.out.expected test/ic3/integer_add.ret.expected test/ic3/integer_band.in test/ic3/integer_band.out.expected test/ic3/integer_band.ret.expected test/ic3/integer_bnot.in test/ic3/integer_bnot.out.expected test/ic3/integer_bnot.ret.expected test/ic3/integer_bor-2.in test/ic3/op.in test/ic3/integer_bor-2.out.expected test/ic3/integer_bor-2.ret.expected test/ic3/integer_bxor.in test/ic3/integer_bxor.out.expected test/ic3/integer_bxor.ret.expected test/ic3/integer_div.in test/ic3/integer_div.out.expected test/ic3/integer_div.ret.expected test/ic3/integer_eq.in test/ic3/integer_eq.out.expected test/ic3/integer_gt.in test/ic3/integer_eq.ret.expected test/ic3/integer_gt.out.expected test/ic3/integer_gt.ret.expected test/ic3/integer_lt.in test/ic3/integer_lt.out.expected test/ic3/integer_lt.ret.expected test/ic3/integer_mod-2.in test/ic3/integer_mod-2.out.expected test/ic3/integer_mod-2.ret.expected test/ic3/integer_mul.in test/ic3/integer_mul.out.expected test/ic3/integer_mul.ret.expected test/ic3/integer_neg.in test/ic3/integer_neg.out.expected test/ic3/integer_neg.ret.expected test/ic3/integer_sub.in test/ic3/integer_sub.out.expected test/ic3/integer_sub.ret.expected test/ic3/map.ret.expected test/ic3/list.err.expected test/ic3/sym.out.expected test/ic3/list.ret.expected test/ic3/str.in test/ic3/op.err.expected test/ic3/op.out.expected test/ic3/op.ret.expected test/ic3/str.err.expected test/ic3/str.out.expected test/ic3/str.ret.expected test/ic3/sym.err.expected test/ic3/sym.in test/ic3/sym.ret.expected test/ic3/tuple.err.expected test/ic3/tuple.in test/ic3/tuple.out.expected test/ic3/tuple.ret.expected test/ic3/map.out.expected test/ic3/plist.in test/ic3/plist.out.expected test/ic3/plist.err.expected test/ic3/plist.ret.expected test/facts_test_dump_file.expected.facts test/facts_test_load_file.facts test/facts_test_open_file.1.expected.facts test/facts_test_open_file.1.in.facts test/facts_test_open_file.2.expected.facts test/facts_test_open_file.2.in.facts test/facts_test_open_file.3.expected.facts test/facts_test_open_file.3.in.facts test/facts_test_save.expected.facts test/facts_test_log_add.expected.facts test/facts_test_log_remove.expected.facts test/ic3_test test/zero '
-C3_EXTERNAL_SOURCES='libffi/aclocal.m4 libffi/autom4te.cache/output.0 libffi/autom4te.cache/output.1 libffi/autom4te.cache/output.2 libffi/autom4te.cache/output.3 libffi/autom4te.cache/requests libffi/autom4te.cache/traces.0 libffi/autom4te.cache/traces.1 libffi/autom4te.cache/traces.2 libffi/autom4te.cache/traces.3 libffi/autom4te.cache/output.4 libffi/autom4te.cache/traces.4 libffi/autom4te.cache/output.5 libffi/autom4te.cache/traces.5 libffi/autom4te.cache/output.6 libffi/autom4te.cache/traces.6 libffi/doc/version.texi libffi/doc/Makefile.am libffi/doc/Makefile.in libffi/doc/libffi.info libffi/doc/libffi.texi libffi/doc/mdate-sh libffi/doc/texinfo.tex libffi/doc/Makefile libffi/include/ffi_common.h libffi/include/Makefile.am libffi/include/Makefile.in libffi/include/ffi.h.in libffi/include/ffi_cfi.h libffi/include/tramp.h libffi/include/Makefile libffi/include/ffi.h libffi/include/ffitarget.h libffi/libffi.xcodeproj/project.pbxproj libffi/m4/ax_append_flag.m4 libffi/m4/asmcfi.m4 libffi/m4/ax_cflags_warn_all.m4 libffi/m4/ax_cc_maxopt.m4 libffi/m4/ax_check_compile_flag.m4 libffi/m4/ax_compiler_vendor.m4 libffi/m4/ax_configure_args.m4 libffi/m4/ax_enable_builddir.m4 libffi/m4/ax_gcc_archflag.m4 libffi/m4/ax_gcc_x86_cpuid.m4 libffi/m4/ax_prepend_flag.m4 libffi/m4/ax_require_defined.m4 libffi/m4/libtool.m4 libffi/m4/ltoptions.m4 libffi/m4/ltsugar.m4 libffi/m4/ltversion.m4 libffi/m4/lt~obsolete.m4 libffi/man/ffi_prep_cif.3 libffi/man/Makefile.am libffi/man/Makefile.in libffi/man/ffi.3 libffi/man/ffi_call.3 libffi/man/ffi_prep_cif_var.3 libffi/man/Makefile libffi/msvc_build/aarch64/aarch64_include/fficonfig.h libffi/msvc_build/aarch64/aarch64_include/ffi.h libffi/msvc_build/aarch64/Ffi_staticLib.vcxproj libffi/msvc_build/aarch64/Ffi_staticLib.sln libffi/msvc_build/aarch64/Ffi_staticLib.vcxproj.filters libffi/msvc_build/aarch64/Ffi_staticLib.vcxproj.user libffi/src/aarch64/ffitarget.h libffi/src/aarch64/ffi.c libffi/src/aarch64/win64_armasm.S libffi/src/aarch64/internal.h libffi/src/aarch64/sysv.S libffi/src/alpha/ffitarget.h libffi/src/alpha/ffi.c libffi/src/alpha/internal.h libffi/src/alpha/osf.S libffi/src/arc/arcompact.S libffi/src/arc/ffi.c libffi/src/arc/ffitarget.h libffi/src/arm/ffitarget.h libffi/src/arm/ffi.c libffi/src/arm/sysv_msvc_arm32.S libffi/src/arm/internal.h libffi/src/arm/sysv.S libffi/src/avr32/ffitarget.h libffi/src/avr32/ffi.c libffi/src/avr32/sysv.S libffi/src/bfin/ffitarget.h libffi/src/bfin/ffi.c libffi/src/bfin/sysv.S libffi/src/cris/ffitarget.h libffi/src/cris/ffi.c libffi/src/cris/sysv.S libffi/src/csky/ffitarget.h libffi/src/csky/ffi.c libffi/src/csky/sysv.S libffi/src/frv/ffitarget.h libffi/src/frv/eabi.S libffi/src/frv/ffi.c libffi/src/ia64/ffitarget.h libffi/src/ia64/ffi.c libffi/src/ia64/ia64_flags.h libffi/src/ia64/unix.S libffi/src/kvx/ffitarget.h libffi/src/kvx/asm.h libffi/src/kvx/ffi.c libffi/src/kvx/sysv.S libffi/src/loongarch64/ffitarget.h libffi/src/loongarch64/ffi.c libffi/src/loongarch64/sysv.S libffi/src/m32r/ffitarget.h libffi/src/m32r/ffi.c libffi/src/m32r/sysv.S libffi/src/m68k/ffitarget.h libffi/src/m68k/ffi.c libffi/src/m68k/sysv.S libffi/src/m88k/ffitarget.h libffi/src/m88k/ffi.c libffi/src/m88k/obsd.S libffi/src/metag/ffitarget.h libffi/src/metag/ffi.c libffi/src/metag/sysv.S libffi/src/microblaze/ffitarget.h libffi/src/microblaze/ffi.c libffi/src/microblaze/sysv.S libffi/src/mips/ffitarget.h libffi/src/mips/ffi.c libffi/src/mips/n32.S libffi/src/mips/o32.S libffi/src/moxie/ffitarget.h libffi/src/moxie/eabi.S libffi/src/moxie/ffi.c libffi/src/nios2/ffitarget.h libffi/src/nios2/ffi.c libffi/src/nios2/sysv.S libffi/src/or1k/ffitarget.h libffi/src/or1k/ffi.c libffi/src/or1k/sysv.S libffi/src/pa/ffitarget.h libffi/src/pa/ffi.c libffi/src/pa/ffi64.c libffi/src/pa/hpux32.S libffi/src/pa/hpux64.S libffi/src/pa/linux.S libffi/src/powerpc/aix_closure.S libffi/src/powerpc/aix.S libffi/src/powerpc/darwin.S libffi/src/powerpc/asm.h libffi/src/powerpc/darwin_closure.S libffi/src/powerpc/ffi.c libffi/src/powerpc/ffi_darwin.c libffi/src/powerpc/ffi_linux64.c libffi/src/powerpc/ffi_powerpc.h libffi/src/powerpc/ffi_sysv.c libffi/src/powerpc/ffitarget.h libffi/src/powerpc/linux64.S libffi/src/powerpc/linux64_closure.S libffi/src/powerpc/ppc_closure.S libffi/src/powerpc/sysv.S libffi/src/powerpc/t-aix libffi/src/riscv/ffitarget.h libffi/src/riscv/ffi.c libffi/src/riscv/sysv.S libffi/src/s390/ffitarget.h libffi/src/s390/ffi.c libffi/src/s390/internal.h libffi/src/s390/sysv.S libffi/src/sh/ffitarget.h libffi/src/sh/ffi.c libffi/src/sh/sysv.S libffi/src/sh64/ffitarget.h libffi/src/sh64/ffi.c libffi/src/sh64/sysv.S libffi/src/sparc/ffitarget.h libffi/src/sparc/ffi.c libffi/src/sparc/ffi64.c libffi/src/sparc/internal.h libffi/src/sparc/v8.S libffi/src/sparc/v9.S libffi/src/tile/ffitarget.h libffi/src/tile/ffi.c libffi/src/tile/tile.S libffi/src/vax/elfbsd.S libffi/src/vax/ffi.c libffi/src/vax/ffitarget.h libffi/src/wasm32/ffitarget.h libffi/src/wasm32/ffi.c libffi/src/x86/internal64.h libffi/src/x86/asmnames.h libffi/src/x86/ffi.c libffi/src/x86/ffi64.c libffi/src/x86/ffitarget.h libffi/src/x86/ffiw64.c libffi/src/x86/internal.h libffi/src/x86/sysv_intel.S libffi/src/x86/sysv.S libffi/src/x86/win64_intel.S libffi/src/x86/unix64.S libffi/src/x86/win64.S libffi/src/xtensa/ffitarget.h libffi/src/xtensa/ffi.c libffi/src/xtensa/sysv.S libffi/src/java_raw_api.c libffi/src/closures.c libffi/src/debug.c libffi/src/dlmalloc.c libffi/src/prep_cif.c libffi/src/raw_api.c libffi/src/tramp.c libffi/src/types.c libffi/testsuite/config/default.exp libffi/testsuite/emscripten/build-tests.sh libffi/testsuite/emscripten/build.sh libffi/testsuite/emscripten/conftest.py libffi/testsuite/emscripten/node-tests.sh libffi/testsuite/emscripten/test.html libffi/testsuite/emscripten/test_libffi.py libffi/testsuite/lib/target-libpath.exp libffi/testsuite/lib/libffi.exp libffi/testsuite/lib/wrapper.exp libffi/testsuite/libffi.bhaible/test-callback.c libffi/testsuite/libffi.bhaible/Makefile libffi/testsuite/libffi.bhaible/README libffi/testsuite/libffi.bhaible/alignof.h libffi/testsuite/libffi.bhaible/bhaible.exp libffi/testsuite/libffi.bhaible/test-call.c libffi/testsuite/libffi.bhaible/testcases.c libffi/testsuite/libffi.call/err_bad_typedef.c libffi/testsuite/libffi.call/align_mixed.c libffi/testsuite/libffi.call/align_stdcall.c libffi/testsuite/libffi.call/bpo_38748.c libffi/testsuite/libffi.call/call.exp libffi/testsuite/libffi.call/many_double.c libffi/testsuite/libffi.call/ffitest.h libffi/testsuite/libffi.call/float.c libffi/testsuite/libffi.call/float1.c libffi/testsuite/libffi.call/float2.c libffi/testsuite/libffi.call/float3.c libffi/testsuite/libffi.call/float4.c libffi/testsuite/libffi.call/float_va.c libffi/testsuite/libffi.call/many.c libffi/testsuite/libffi.call/many2.c libffi/testsuite/libffi.call/many_mixed.c libffi/testsuite/libffi.call/negint.c libffi/testsuite/libffi.call/offsets.c libffi/testsuite/libffi.call/pr1172638.c libffi/testsuite/libffi.call/promotion.c libffi/testsuite/libffi.call/pyobjc_tc.c libffi/testsuite/libffi.call/struct_by_value_big.c libffi/testsuite/libffi.call/return_dbl.c libffi/testsuite/libffi.call/return_dbl1.c libffi/testsuite/libffi.call/return_dbl2.c libffi/testsuite/libffi.call/return_fl.c libffi/testsuite/libffi.call/return_fl1.c libffi/testsuite/libffi.call/return_fl2.c libffi/testsuite/libffi.call/return_fl3.c libffi/testsuite/libffi.call/return_ldl.c libffi/testsuite/libffi.call/return_ll.c libffi/testsuite/libffi.call/return_ll1.c libffi/testsuite/libffi.call/return_sc.c libffi/testsuite/libffi.call/return_sl.c libffi/testsuite/libffi.call/return_uc.c libffi/testsuite/libffi.call/return_ul.c libffi/testsuite/libffi.call/s55.c libffi/testsuite/libffi.call/strlen.c libffi/testsuite/libffi.call/strlen2.c libffi/testsuite/libffi.call/strlen3.c libffi/testsuite/libffi.call/strlen4.c libffi/testsuite/libffi.call/struct1.c libffi/testsuite/libffi.call/struct10.c libffi/testsuite/libffi.call/struct2.c libffi/testsuite/libffi.call/struct3.c libffi/testsuite/libffi.call/struct4.c libffi/testsuite/libffi.call/struct5.c libffi/testsuite/libffi.call/struct6.c libffi/testsuite/libffi.call/struct7.c libffi/testsuite/libffi.call/struct8.c libffi/testsuite/libffi.call/struct9.c libffi/testsuite/libffi.call/struct_by_value_2.c libffi/testsuite/libffi.call/struct_by_value_3.c libffi/testsuite/libffi.call/struct_by_value_4.c libffi/testsuite/libffi.call/va_struct1.c libffi/testsuite/libffi.call/va_1.c libffi/testsuite/libffi.call/struct_by_value_small.c libffi/testsuite/libffi.call/struct_return_2H.c libffi/testsuite/libffi.call/struct_return_8H.c libffi/testsuite/libffi.call/uninitialized.c libffi/testsuite/libffi.call/va_2.c libffi/testsuite/libffi.call/va_3.c libffi/testsuite/libffi.call/va_struct2.c libffi/testsuite/libffi.call/va_struct3.c libffi/testsuite/libffi.closures/closure_fn0.c libffi/testsuite/libffi.closures/closure.exp libffi/testsuite/libffi.closures/closure_loc_fn0.c libffi/testsuite/libffi.closures/closure_fn1.c libffi/testsuite/libffi.closures/closure_fn2.c libffi/testsuite/libffi.closures/closure_fn3.c libffi/testsuite/libffi.closures/closure_fn4.c libffi/testsuite/libffi.closures/closure_fn5.c libffi/testsuite/libffi.closures/closure_fn6.c libffi/testsuite/libffi.closures/closure_simple.c libffi/testsuite/libffi.closures/cls_12byte.c libffi/testsuite/libffi.closures/cls_16byte.c libffi/testsuite/libffi.closures/cls_18byte.c libffi/testsuite/libffi.closures/cls_19byte.c libffi/testsuite/libffi.closures/cls_1_1byte.c libffi/testsuite/libffi.closures/cls_20byte.c libffi/testsuite/libffi.closures/cls_20byte1.c libffi/testsuite/libffi.closures/cls_24byte.c libffi/testsuite/libffi.closures/cls_2byte.c libffi/testsuite/libffi.closures/cls_align_double.c libffi/testsuite/libffi.closures/cls_3_1byte.c libffi/testsuite/libffi.closures/cls_3byte1.c libffi/testsuite/libffi.closures/cls_3byte2.c libffi/testsuite/libffi.closures/cls_3float.c libffi/testsuite/libffi.closures/cls_4_1byte.c libffi/testsuite/libffi.closures/cls_4byte.c libffi/testsuite/libffi.closures/cls_5_1_byte.c libffi/testsuite/libffi.closures/cls_5byte.c libffi/testsuite/libffi.closures/cls_64byte.c libffi/testsuite/libffi.closures/cls_6_1_byte.c libffi/testsuite/libffi.closures/cls_6byte.c libffi/testsuite/libffi.closures/cls_7_1_byte.c libffi/testsuite/libffi.closures/cls_7byte.c libffi/testsuite/libffi.closures/cls_8byte.c libffi/testsuite/libffi.closures/cls_9byte1.c libffi/testsuite/libffi.closures/cls_9byte2.c libffi/testsuite/libffi.closures/cls_align_longdouble.c libffi/testsuite/libffi.closures/cls_align_float.c libffi/testsuite/libffi.closures/cls_longdouble.c libffi/testsuite/libffi.closures/cls_float.c libffi/testsuite/libffi.closures/cls_align_longdouble_split.c libffi/testsuite/libffi.closures/cls_align_longdouble_split2.c libffi/testsuite/libffi.closures/cls_align_pointer.c libffi/testsuite/libffi.closures/cls_align_sint16.c libffi/testsuite/libffi.closures/cls_align_sint32.c libffi/testsuite/libffi.closures/cls_align_sint64.c libffi/testsuite/libffi.closures/cls_align_uint16.c libffi/testsuite/libffi.closures/cls_align_uint32.c libffi/testsuite/libffi.closures/cls_align_uint64.c libffi/testsuite/libffi.closures/cls_dbls_struct.c libffi/testsuite/libffi.closures/cls_double.c libffi/testsuite/libffi.closures/cls_double_va.c libffi/testsuite/libffi.closures/cls_many_mixed_args.c libffi/testsuite/libffi.closures/cls_longdouble_va.c libffi/testsuite/libffi.closures/cls_many_mixed_float_double.c libffi/testsuite/libffi.closures/cls_multi_schar.c libffi/testsuite/libffi.closures/cls_multi_sshort.c libffi/testsuite/libffi.closures/cls_multi_sshortchar.c libffi/testsuite/libffi.closures/cls_multi_uchar.c libffi/testsuite/libffi.closures/cls_multi_ushort.c libffi/testsuite/libffi.closures/cls_multi_ushortchar.c libffi/testsuite/libffi.closures/cls_pointer.c libffi/testsuite/libffi.closures/cls_pointer_stack.c libffi/testsuite/libffi.closures/cls_schar.c libffi/testsuite/libffi.closures/cls_sint.c libffi/testsuite/libffi.closures/cls_sshort.c libffi/testsuite/libffi.closures/cls_struct_va1.c libffi/testsuite/libffi.closures/cls_uchar.c libffi/testsuite/libffi.closures/cls_uint.c libffi/testsuite/libffi.closures/cls_uint_va.c libffi/testsuite/libffi.closures/cls_ulong_va.c libffi/testsuite/libffi.closures/cls_ulonglong.c libffi/testsuite/libffi.closures/cls_ushort.c libffi/testsuite/libffi.closures/err_bad_abi.c libffi/testsuite/libffi.closures/ffitest.h libffi/testsuite/libffi.closures/huge_struct.c libffi/testsuite/libffi.closures/nested_struct.c libffi/testsuite/libffi.closures/problem1.c libffi/testsuite/libffi.closures/nested_struct1.c libffi/testsuite/libffi.closures/nested_struct10.c libffi/testsuite/libffi.closures/nested_struct11.c libffi/testsuite/libffi.closures/nested_struct12.c libffi/testsuite/libffi.closures/nested_struct13.c libffi/testsuite/libffi.closures/nested_struct2.c libffi/testsuite/libffi.closures/nested_struct3.c libffi/testsuite/libffi.closures/nested_struct4.c libffi/testsuite/libffi.closures/nested_struct5.c libffi/testsuite/libffi.closures/nested_struct6.c libffi/testsuite/libffi.closures/nested_struct7.c libffi/testsuite/libffi.closures/nested_struct8.c libffi/testsuite/libffi.closures/nested_struct9.c libffi/testsuite/libffi.closures/single_entry_structs1.c libffi/testsuite/libffi.closures/single_entry_structs2.c libffi/testsuite/libffi.closures/single_entry_structs3.c libffi/testsuite/libffi.closures/stret_large.c libffi/testsuite/libffi.closures/stret_large2.c libffi/testsuite/libffi.closures/stret_medium.c libffi/testsuite/libffi.closures/stret_medium2.c libffi/testsuite/libffi.closures/testclosure.c libffi/testsuite/libffi.closures/unwindtest.cc libffi/testsuite/libffi.closures/unwindtest_ffi_call.cc libffi/testsuite/libffi.complex/cls_align_complex_double.c libffi/testsuite/libffi.complex/cls_align_complex.inc libffi/testsuite/libffi.complex/cls_align_complex_longdouble.c libffi/testsuite/libffi.complex/cls_align_complex_float.c libffi/testsuite/libffi.complex/cls_complex_double.c libffi/testsuite/libffi.complex/cls_complex.inc libffi/testsuite/libffi.complex/cls_complex_longdouble.c libffi/testsuite/libffi.complex/cls_complex_float.c libffi/testsuite/libffi.complex/cls_complex_struct_double.c libffi/testsuite/libffi.complex/cls_complex_struct.inc libffi/testsuite/libffi.complex/cls_complex_struct_longdouble.c libffi/testsuite/libffi.complex/cls_complex_struct_float.c libffi/testsuite/libffi.complex/complex_double.c libffi/testsuite/libffi.complex/complex.exp libffi/testsuite/libffi.complex/cls_complex_va.inc libffi/testsuite/libffi.complex/cls_complex_va_double.c libffi/testsuite/libffi.complex/cls_complex_va_float.c libffi/testsuite/libffi.complex/cls_complex_va_longdouble.c libffi/testsuite/libffi.complex/complex.inc libffi/testsuite/libffi.complex/complex_defs_longdouble.inc libffi/testsuite/libffi.complex/complex_defs_double.inc libffi/testsuite/libffi.complex/complex_defs_float.inc libffi/testsuite/libffi.complex/complex_longdouble.c libffi/testsuite/libffi.complex/complex_float.c libffi/testsuite/libffi.complex/complex_int.c libffi/testsuite/libffi.complex/many_complex.inc libffi/testsuite/libffi.complex/ffitest.h libffi/testsuite/libffi.complex/many_complex_longdouble.c libffi/testsuite/libffi.complex/many_complex_double.c libffi/testsuite/libffi.complex/many_complex_float.c libffi/testsuite/libffi.complex/return_complex1_double.c libffi/testsuite/libffi.complex/return_complex.inc libffi/testsuite/libffi.complex/return_complex1.inc libffi/testsuite/libffi.complex/return_complex1_longdouble.c libffi/testsuite/libffi.complex/return_complex1_float.c libffi/testsuite/libffi.complex/return_complex2_double.c libffi/testsuite/libffi.complex/return_complex2.inc libffi/testsuite/libffi.complex/return_complex2_longdouble.c libffi/testsuite/libffi.complex/return_complex2_float.c libffi/testsuite/libffi.complex/return_complex_longdouble.c libffi/testsuite/libffi.complex/return_complex_double.c libffi/testsuite/libffi.complex/return_complex_float.c libffi/testsuite/libffi.go/static-chain.h libffi/testsuite/libffi.go/aa-direct.c libffi/testsuite/libffi.go/closure1.c libffi/testsuite/libffi.go/ffitest.h libffi/testsuite/libffi.go/go.exp libffi/testsuite/Makefile.am libffi/testsuite/Makefile.in libffi/testsuite/Makefile libffi/LICENSE-BUILDTOOLS libffi/ChangeLog.old libffi/LICENSE libffi/acinclude.m4 libffi/compile libffi/Makefile libffi/Makefile.am libffi/Makefile.in libffi/README.md libffi/config.guess libffi/config.log libffi/autogen.sh libffi/configure.ac libffi/config.sub libffi/configure libffi/configure.host libffi/depcomp libffi/fficonfig.h.in libffi/install-sh libffi/libffi.map.in libffi/generate-darwin-source-and-headers.py libffi/libffi.pc.in libffi/libtool-ldflags libffi/libtool-version libffi/ltmain.sh libffi/make_sunver.pl libffi/missing libffi/msvcc.sh libffi/stamp-h.in libffi/libffi.pc libffi/a.out libffi/local.exp libffi/config.status libffi/fficonfig.h libffi/stamp-h1 libffi/libtool linenoise/README.markdown linenoise/LICENSE linenoise/Makefile linenoise/example.c linenoise/linenoise.c linenoise/linenoise.h ucd2c/UCD/auxiliary/GraphemeBreakProperty.txt ucd2c/UCD/auxiliary/GraphemeBreakTest.txt ucd2c/UCD/auxiliary/GraphemeBreakTest.html ucd2c/UCD/auxiliary/LineBreakTest.txt ucd2c/UCD/auxiliary/LineBreakTest.html ucd2c/UCD/auxiliary/SentenceBreakProperty.txt ucd2c/UCD/auxiliary/WordBreakTest.txt ucd2c/UCD/auxiliary/SentenceBreakTest.html ucd2c/UCD/auxiliary/SentenceBreakTest.txt ucd2c/UCD/auxiliary/WordBreakProperty.txt ucd2c/UCD/auxiliary/WordBreakTest.html ucd2c/UCD/emoji/emoji-data.txt ucd2c/UCD/emoji/ReadMe.txt ucd2c/UCD/emoji/emoji-variation-sequences.txt ucd2c/UCD/extracted/DerivedBinaryProperties.txt ucd2c/UCD/extracted/DerivedBidiClass.txt ucd2c/UCD/extracted/DerivedDecompositionType.txt ucd2c/UCD/extracted/DerivedCombiningClass.txt ucd2c/UCD/extracted/DerivedEastAsianWidth.txt ucd2c/UCD/extracted/DerivedGeneralCategory.txt ucd2c/UCD/extracted/DerivedJoiningGroup.txt ucd2c/UCD/extracted/DerivedJoiningType.txt ucd2c/UCD/extracted/DerivedLineBreak.txt ucd2c/UCD/extracted/DerivedName.txt ucd2c/UCD/extracted/DerivedNumericType.txt ucd2c/UCD/extracted/DerivedNumericValues.txt ucd2c/UCD/BidiCharacterTest.txt ucd2c/UCD/ArabicShaping.txt ucd2c/UCD/BidiBrackets.txt ucd2c/UCD/CompositionExclusions.txt ucd2c/UCD/BidiMirroring.txt ucd2c/UCD/BidiTest.txt ucd2c/UCD/Blocks.txt ucd2c/UCD/CJKRadicals.txt ucd2c/UCD/CaseFolding.txt ucd2c/UCD/EastAsianWidth.txt ucd2c/UCD/DerivedAge.txt ucd2c/UCD/DerivedNormalizationProps.txt ucd2c/UCD/DerivedCoreProperties.txt ucd2c/UCD/LineBreak.txt ucd2c/UCD/Index.txt ucd2c/UCD/EmojiSources.txt ucd2c/UCD/EquivalentUnifiedIdeograph.txt ucd2c/UCD/HangulSyllableType.txt ucd2c/UCD/Jamo.txt ucd2c/UCD/NameAliases.txt ucd2c/UCD/IndicPositionalCategory.txt ucd2c/UCD/IndicSyllabicCategory.txt ucd2c/UCD/NamedSequencesProv.txt ucd2c/UCD/NamedSequences.txt ucd2c/UCD/NormalizationTest.txt ucd2c/UCD/NamesList.html ucd2c/UCD/NamesList.txt ucd2c/UCD/PropertyValueAliases.txt ucd2c/UCD/NormalizationCorrections.txt ucd2c/UCD/NushuSources.txt ucd2c/UCD/PropList.txt ucd2c/UCD/PropertyAliases.txt ucd2c/UCD/SpecialCasing.txt ucd2c/UCD/ReadMe.txt ucd2c/UCD/Scripts.txt ucd2c/UCD/ScriptExtensions.txt ucd2c/UCD/StandardizedVariants.txt ucd2c/UCD/TangutSources.txt ucd2c/UCD/USourceData.txt ucd2c/UCD/USourceGlyphs.pdf ucd2c/UCD/USourceRSChart.pdf ucd2c/UCD/UnicodeData.txt ucd2c/UCD/VerticalOrientation.txt ucd2c/Makefile ucd2c/UCD.zip ucd2c/configure ucd2c/config.mk ucd2c/license.txt ucd2c/ucd.c ucd2c/ucd.h ucd2c/ucd2c.c ucd2c/ucd2c.o ucd2c/ucd2c.lo ucd2c/ucd2c libtommath/demo/mtest_opponent.c libtommath/demo/shared.c libtommath/demo/shared.h libtommath/demo/test.c libtommath/demo/timing.c libtommath/etc/2kprime.c libtommath/etc/drprime.c libtommath/etc/mersenne.c libtommath/etc/mont.c libtommath/etc/pprime.c libtommath/etc/tune.c libtommath/mtest/mpi-config.h libtommath/mtest/logtab.h libtommath/mtest/mpi-types.h libtommath/mtest/mpi.c libtommath/mtest/mpi.h libtommath/mtest/mtest.c libtommath/bn_cutoffs.c libtommath/bn_deprecated.c libtommath/bn_mp_2expt.c libtommath/bn_mp_abs.c libtommath/bn_mp_add.c libtommath/bn_mp_add_d.c libtommath/bn_mp_cnt_lsb.c libtommath/bn_mp_addmod.c libtommath/bn_mp_and.c libtommath/bn_mp_clamp.c libtommath/bn_mp_clear.c libtommath/bn_mp_clear_multi.c libtommath/bn_mp_cmp.c libtommath/bn_mp_cmp_d.c libtommath/bn_mp_cmp_mag.c libtommath/bn_mp_div.c libtommath/bn_mp_complement.c libtommath/bn_mp_copy.c libtommath/bn_mp_count_bits.c libtommath/bn_mp_decr.c libtommath/bn_mp_div_2.c libtommath/bn_mp_div_2d.c libtommath/bn_mp_from_ubin.c libtommath/bn_mp_fwrite.c libtommath/bn_mp_div_3.c libtommath/bn_mp_div_d.c libtommath/bn_mp_dr_is_modulus.c libtommath/bn_mp_dr_reduce.c libtommath/bn_mp_dr_setup.c libtommath/bn_mp_error_to_string.c libtommath/bn_mp_exch.c libtommath/bn_mp_expt_u32.c libtommath/bn_mp_exptmod.c libtommath/bn_mp_exteuclid.c libtommath/bn_mp_fread.c libtommath/bn_mp_from_sbin.c libtommath/bn_mp_gcd.c libtommath/bn_mp_get_double.c libtommath/bn_mp_get_i32.c libtommath/bn_mp_get_i64.c libtommath/bn_mp_get_mag_u32.c libtommath/bn_mp_get_l.c libtommath/bn_mp_get_ll.c libtommath/bn_mp_get_mag_u64.c libtommath/bn_mp_get_mag_ul.c libtommath/bn_mp_get_mag_ull.c libtommath/bn_mp_grow.c libtommath/bn_mp_incr.c libtommath/bn_mp_init.c libtommath/bn_mp_init_copy.c libtommath/bn_mp_init_i32.c libtommath/bn_mp_init_i64.c libtommath/bn_mp_init_l.c libtommath/bn_mp_init_ll.c libtommath/bn_mp_init_multi.c libtommath/bn_mp_init_set.c libtommath/bn_mp_init_size.c libtommath/bn_mp_init_u32.c libtommath/bn_mp_init_u64.c libtommath/bn_mp_init_ul.c libtommath/bn_mp_init_ull.c libtommath/bn_mp_invmod.c libtommath/bn_mp_lcm.c libtommath/bn_mp_is_square.c libtommath/bn_mp_iseven.c libtommath/bn_mp_isodd.c libtommath/bn_mp_kronecker.c libtommath/bn_mp_log_u32.c libtommath/bn_mp_lshd.c libtommath/bn_mp_mod.c libtommath/bn_mp_mod_2d.c libtommath/bn_mp_mod_d.c libtommath/bn_mp_montgomery_calc_normalization.c libtommath/bn_mp_montgomery_reduce.c libtommath/bn_mp_mul.c libtommath/bn_mp_neg.c libtommath/bn_mp_montgomery_setup.c libtommath/bn_mp_prime_frobenius_underwood.c libtommath/bn_mp_mul_2.c libtommath/bn_mp_mul_2d.c libtommath/bn_mp_mul_d.c libtommath/bn_mp_mulmod.c libtommath/bn_mp_or.c libtommath/bn_mp_pack.c libtommath/bn_mp_pack_count.c libtommath/bn_mp_prime_fermat.c libtommath/bn_mp_prime_is_prime.c libtommath/bn_mp_prime_rand.c libtommath/bn_mp_prime_miller_rabin.c libtommath/bn_mp_prime_next_prime.c libtommath/bn_mp_prime_rabin_miller_trials.c libtommath/bn_mp_radix_size.c libtommath/bn_mp_prime_strong_lucas_selfridge.c libtommath/bn_mp_radix_smap.c libtommath/bn_mp_rand.c libtommath/bn_mp_read_radix.c libtommath/bn_mp_reduce.c libtommath/bn_mp_reduce_2k.c libtommath/bn_mp_reduce_2k_l.c libtommath/bn_mp_reduce_2k_setup.c libtommath/bn_mp_reduce_2k_setup_l.c libtommath/bn_mp_reduce_is_2k.c libtommath/bn_mp_reduce_is_2k_l.c libtommath/bn_mp_root_u32.c libtommath/bn_mp_reduce_setup.c libtommath/bn_mp_rshd.c libtommath/bn_mp_sbin_size.c libtommath/bn_mp_set.c libtommath/bn_mp_set_double.c libtommath/bn_mp_set_i32.c libtommath/bn_mp_set_i64.c libtommath/bn_mp_set_l.c libtommath/bn_mp_set_ll.c libtommath/bn_mp_set_u32.c libtommath/bn_mp_set_u64.c libtommath/bn_mp_set_ul.c libtommath/bn_mp_set_ull.c libtommath/bn_mp_shrink.c libtommath/bn_mp_signed_rsh.c libtommath/bn_mp_sqr.c libtommath/bn_mp_sqrmod.c libtommath/bn_mp_sqrt.c libtommath/bn_mp_sqrtmod_prime.c libtommath/bn_mp_sub.c libtommath/bn_mp_sub_d.c libtommath/bn_mp_xor.c libtommath/bn_mp_submod.c libtommath/bn_mp_to_radix.c libtommath/bn_mp_to_sbin.c libtommath/bn_mp_to_ubin.c libtommath/bn_mp_ubin_size.c libtommath/bn_mp_unpack.c libtommath/bn_mp_zero.c libtommath/bn_prime_tab.c libtommath/bn_s_mp_add.c libtommath/bn_s_mp_balance_mul.c libtommath/bn_s_mp_exptmod.c libtommath/bn_s_mp_exptmod_fast.c libtommath/bn_s_mp_karatsuba_mul.c libtommath/bn_s_mp_get_bit.c libtommath/bn_s_mp_invmod_fast.c libtommath/bn_s_mp_invmod_slow.c libtommath/bn_s_mp_karatsuba_sqr.c libtommath/bn_s_mp_montgomery_reduce_fast.c libtommath/bn_s_mp_mul_high_digs.c libtommath/bn_s_mp_reverse.c libtommath/bn_s_mp_mul_digs.c libtommath/bn_s_mp_mul_digs_fast.c libtommath/bn_s_mp_sqr.c libtommath/bn_s_mp_mul_high_digs_fast.c libtommath/bn_s_mp_prime_is_divisible.c libtommath/bn_s_mp_rand_jenkins.c libtommath/bn_s_mp_rand_platform.c libtommath/bn_s_mp_sqr_fast.c libtommath/bn_s_mp_sub.c libtommath/bn_s_mp_toom_mul.c libtommath/bn_s_mp_toom_sqr.c libtommath/tommath.h libtommath/tommath_class.h libtommath/tommath_cutoffs.h libtommath/tommath_private.h libtommath/tommath_superclass.h libtommath/LICENSE libtommath/README.md '
+C3_EXTERNAL_SOURCES='libffi/aclocal.m4 libffi/autom4te.cache/output.0 libffi/autom4te.cache/output.1 libffi/autom4te.cache/output.2 libffi/autom4te.cache/output.3 libffi/autom4te.cache/requests libffi/autom4te.cache/traces.0 libffi/autom4te.cache/traces.1 libffi/autom4te.cache/traces.2 libffi/autom4te.cache/traces.3 libffi/autom4te.cache/output.4 libffi/autom4te.cache/traces.4 libffi/autom4te.cache/output.5 libffi/autom4te.cache/traces.5 libffi/autom4te.cache/output.6 libffi/autom4te.cache/traces.6 libffi/doc/version.texi libffi/doc/Makefile.am libffi/doc/Makefile.in libffi/doc/libffi.info libffi/doc/libffi.texi libffi/doc/mdate-sh libffi/doc/texinfo.tex libffi/doc/Makefile libffi/include/ffi_common.h libffi/include/Makefile.am libffi/include/Makefile.in libffi/include/ffi.h.in libffi/include/ffi_cfi.h libffi/include/tramp.h libffi/include/Makefile libffi/include/ffi.h libffi/include/ffitarget.h libffi/libffi.xcodeproj/project.pbxproj libffi/m4/ax_append_flag.m4 libffi/m4/asmcfi.m4 libffi/m4/ax_cflags_warn_all.m4 libffi/m4/ax_cc_maxopt.m4 libffi/m4/ax_check_compile_flag.m4 libffi/m4/ax_compiler_vendor.m4 libffi/m4/ax_configure_args.m4 libffi/m4/ax_enable_builddir.m4 libffi/m4/ax_gcc_archflag.m4 libffi/m4/ax_gcc_x86_cpuid.m4 libffi/m4/ax_prepend_flag.m4 libffi/m4/ax_require_defined.m4 libffi/m4/libtool.m4 libffi/m4/ltoptions.m4 libffi/m4/ltsugar.m4 libffi/m4/ltversion.m4 libffi/m4/lt~obsolete.m4 libffi/man/ffi_prep_cif.3 libffi/man/Makefile.am libffi/man/Makefile.in libffi/man/ffi.3 libffi/man/ffi_call.3 libffi/man/ffi_prep_cif_var.3 libffi/man/Makefile libffi/msvc_build/aarch64/aarch64_include/fficonfig.h libffi/msvc_build/aarch64/aarch64_include/ffi.h libffi/msvc_build/aarch64/Ffi_staticLib.vcxproj libffi/msvc_build/aarch64/Ffi_staticLib.sln libffi/msvc_build/aarch64/Ffi_staticLib.vcxproj.filters libffi/msvc_build/aarch64/Ffi_staticLib.vcxproj.user libffi/src/aarch64/ffitarget.h libffi/src/aarch64/ffi.c libffi/src/aarch64/win64_armasm.S libffi/src/aarch64/internal.h libffi/src/aarch64/sysv.S libffi/src/alpha/ffitarget.h libffi/src/alpha/ffi.c libffi/src/alpha/internal.h libffi/src/alpha/osf.S libffi/src/arc/arcompact.S libffi/src/arc/ffi.c libffi/src/arc/ffitarget.h libffi/src/arm/ffitarget.h libffi/src/arm/ffi.c libffi/src/arm/sysv_msvc_arm32.S libffi/src/arm/internal.h libffi/src/arm/sysv.S libffi/src/avr32/ffitarget.h libffi/src/avr32/ffi.c libffi/src/avr32/sysv.S libffi/src/bfin/ffitarget.h libffi/src/bfin/ffi.c libffi/src/bfin/sysv.S libffi/src/cris/ffitarget.h libffi/src/cris/ffi.c libffi/src/cris/sysv.S libffi/src/csky/ffitarget.h libffi/src/csky/ffi.c libffi/src/csky/sysv.S libffi/src/frv/ffitarget.h libffi/src/frv/eabi.S libffi/src/frv/ffi.c libffi/src/ia64/ffitarget.h libffi/src/ia64/ffi.c libffi/src/ia64/ia64_flags.h libffi/src/ia64/unix.S libffi/src/kvx/ffitarget.h libffi/src/kvx/asm.h libffi/src/kvx/ffi.c libffi/src/kvx/sysv.S libffi/src/loongarch64/ffitarget.h libffi/src/loongarch64/ffi.c libffi/src/loongarch64/sysv.S libffi/src/m32r/ffitarget.h libffi/src/m32r/ffi.c libffi/src/m32r/sysv.S libffi/src/m68k/ffitarget.h libffi/src/m68k/ffi.c libffi/src/m68k/sysv.S libffi/src/m88k/ffitarget.h libffi/src/m88k/ffi.c libffi/src/m88k/obsd.S libffi/src/metag/ffitarget.h libffi/src/metag/ffi.c libffi/src/metag/sysv.S libffi/src/microblaze/ffitarget.h libffi/src/microblaze/ffi.c libffi/src/microblaze/sysv.S libffi/src/mips/ffitarget.h libffi/src/mips/ffi.c libffi/src/mips/n32.S libffi/src/mips/o32.S libffi/src/moxie/ffitarget.h libffi/src/moxie/eabi.S libffi/src/moxie/ffi.c libffi/src/nios2/ffitarget.h libffi/src/nios2/ffi.c libffi/src/nios2/sysv.S libffi/src/or1k/ffitarget.h libffi/src/or1k/ffi.c libffi/src/or1k/sysv.S libffi/src/pa/ffitarget.h libffi/src/pa/ffi.c libffi/src/pa/ffi64.c libffi/src/pa/hpux32.S libffi/src/pa/hpux64.S libffi/src/pa/linux.S libffi/src/powerpc/aix_closure.S libffi/src/powerpc/aix.S libffi/src/powerpc/darwin.S libffi/src/powerpc/asm.h libffi/src/powerpc/darwin_closure.S libffi/src/powerpc/ffi.c libffi/src/powerpc/ffi_darwin.c libffi/src/powerpc/ffi_linux64.c libffi/src/powerpc/ffi_powerpc.h libffi/src/powerpc/ffi_sysv.c libffi/src/powerpc/ffitarget.h libffi/src/powerpc/linux64.S libffi/src/powerpc/linux64_closure.S libffi/src/powerpc/ppc_closure.S libffi/src/powerpc/sysv.S libffi/src/powerpc/t-aix libffi/src/riscv/ffitarget.h libffi/src/riscv/ffi.c libffi/src/riscv/sysv.S libffi/src/s390/ffitarget.h libffi/src/s390/ffi.c libffi/src/s390/internal.h libffi/src/s390/sysv.S libffi/src/sh/ffitarget.h libffi/src/sh/ffi.c libffi/src/sh/sysv.S libffi/src/sh64/ffitarget.h libffi/src/sh64/ffi.c libffi/src/sh64/sysv.S libffi/src/sparc/ffitarget.h libffi/src/sparc/ffi.c libffi/src/sparc/ffi64.c libffi/src/sparc/internal.h libffi/src/sparc/v8.S libffi/src/sparc/v9.S libffi/src/tile/ffitarget.h libffi/src/tile/ffi.c libffi/src/tile/tile.S libffi/src/vax/elfbsd.S libffi/src/vax/ffi.c libffi/src/vax/ffitarget.h libffi/src/wasm32/ffitarget.h libffi/src/wasm32/ffi.c libffi/src/x86/internal64.h libffi/src/x86/asmnames.h libffi/src/x86/ffi.c libffi/src/x86/ffi64.c libffi/src/x86/ffitarget.h libffi/src/x86/ffiw64.c libffi/src/x86/internal.h libffi/src/x86/sysv_intel.S libffi/src/x86/sysv.S libffi/src/x86/win64_intel.S libffi/src/x86/unix64.S libffi/src/x86/win64.S libffi/src/x86/unix64.o libffi/src/x86/ffi64.o libffi/src/x86/ffi64.lo libffi/src/x86/win64.o libffi/src/x86/ffiw64.o libffi/src/x86/unix64.lo libffi/src/x86/ffiw64.lo libffi/src/x86/win64.lo libffi/src/xtensa/ffitarget.h libffi/src/xtensa/ffi.c libffi/src/xtensa/sysv.S libffi/src/java_raw_api.c libffi/src/closures.c libffi/src/debug.c libffi/src/dlmalloc.c libffi/src/prep_cif.c libffi/src/raw_api.c libffi/src/tramp.c libffi/src/types.c libffi/src/prep_cif.lo libffi/src/tramp.o libffi/src/types.o libffi/src/raw_api.o libffi/src/closures.o libffi/src/raw_api.lo libffi/src/tramp.lo libffi/src/prep_cif.o libffi/src/types.lo libffi/src/java_raw_api.o libffi/src/java_raw_api.lo libffi/src/closures.lo libffi/testsuite/config/default.exp libffi/testsuite/emscripten/build-tests.sh libffi/testsuite/emscripten/build.sh libffi/testsuite/emscripten/conftest.py libffi/testsuite/emscripten/node-tests.sh libffi/testsuite/emscripten/test.html libffi/testsuite/emscripten/test_libffi.py libffi/testsuite/lib/target-libpath.exp libffi/testsuite/lib/libffi.exp libffi/testsuite/lib/wrapper.exp libffi/testsuite/libffi.bhaible/test-callback.c libffi/testsuite/libffi.bhaible/Makefile libffi/testsuite/libffi.bhaible/README libffi/testsuite/libffi.bhaible/alignof.h libffi/testsuite/libffi.bhaible/bhaible.exp libffi/testsuite/libffi.bhaible/test-call.c libffi/testsuite/libffi.bhaible/testcases.c libffi/testsuite/libffi.call/err_bad_typedef.c libffi/testsuite/libffi.call/align_mixed.c libffi/testsuite/libffi.call/align_stdcall.c libffi/testsuite/libffi.call/bpo_38748.c libffi/testsuite/libffi.call/call.exp libffi/testsuite/libffi.call/many_double.c libffi/testsuite/libffi.call/ffitest.h libffi/testsuite/libffi.call/float.c libffi/testsuite/libffi.call/float1.c libffi/testsuite/libffi.call/float2.c libffi/testsuite/libffi.call/float3.c libffi/testsuite/libffi.call/float4.c libffi/testsuite/libffi.call/float_va.c libffi/testsuite/libffi.call/many.c libffi/testsuite/libffi.call/many2.c libffi/testsuite/libffi.call/many_mixed.c libffi/testsuite/libffi.call/negint.c libffi/testsuite/libffi.call/offsets.c libffi/testsuite/libffi.call/pr1172638.c libffi/testsuite/libffi.call/promotion.c libffi/testsuite/libffi.call/pyobjc_tc.c libffi/testsuite/libffi.call/struct_by_value_big.c libffi/testsuite/libffi.call/return_dbl.c libffi/testsuite/libffi.call/return_dbl1.c libffi/testsuite/libffi.call/return_dbl2.c libffi/testsuite/libffi.call/return_fl.c libffi/testsuite/libffi.call/return_fl1.c libffi/testsuite/libffi.call/return_fl2.c libffi/testsuite/libffi.call/return_fl3.c libffi/testsuite/libffi.call/return_ldl.c libffi/testsuite/libffi.call/return_ll.c libffi/testsuite/libffi.call/return_ll1.c libffi/testsuite/libffi.call/return_sc.c libffi/testsuite/libffi.call/return_sl.c libffi/testsuite/libffi.call/return_uc.c libffi/testsuite/libffi.call/return_ul.c libffi/testsuite/libffi.call/s55.c libffi/testsuite/libffi.call/strlen.c libffi/testsuite/libffi.call/strlen2.c libffi/testsuite/libffi.call/strlen3.c libffi/testsuite/libffi.call/strlen4.c libffi/testsuite/libffi.call/struct1.c libffi/testsuite/libffi.call/struct10.c libffi/testsuite/libffi.call/struct2.c libffi/testsuite/libffi.call/struct3.c libffi/testsuite/libffi.call/struct4.c libffi/testsuite/libffi.call/struct5.c libffi/testsuite/libffi.call/struct6.c libffi/testsuite/libffi.call/struct7.c libffi/testsuite/libffi.call/struct8.c libffi/testsuite/libffi.call/struct9.c libffi/testsuite/libffi.call/struct_by_value_2.c libffi/testsuite/libffi.call/struct_by_value_3.c libffi/testsuite/libffi.call/struct_by_value_4.c libffi/testsuite/libffi.call/va_struct1.c libffi/testsuite/libffi.call/va_1.c libffi/testsuite/libffi.call/struct_by_value_small.c libffi/testsuite/libffi.call/struct_return_2H.c libffi/testsuite/libffi.call/struct_return_8H.c libffi/testsuite/libffi.call/uninitialized.c libffi/testsuite/libffi.call/va_2.c libffi/testsuite/libffi.call/va_3.c libffi/testsuite/libffi.call/va_struct2.c libffi/testsuite/libffi.call/va_struct3.c libffi/testsuite/libffi.closures/closure_fn0.c libffi/testsuite/libffi.closures/closure.exp libffi/testsuite/libffi.closures/closure_loc_fn0.c libffi/testsuite/libffi.closures/closure_fn1.c libffi/testsuite/libffi.closures/closure_fn2.c libffi/testsuite/libffi.closures/closure_fn3.c libffi/testsuite/libffi.closures/closure_fn4.c libffi/testsuite/libffi.closures/closure_fn5.c libffi/testsuite/libffi.closures/closure_fn6.c libffi/testsuite/libffi.closures/closure_simple.c libffi/testsuite/libffi.closures/cls_12byte.c libffi/testsuite/libffi.closures/cls_16byte.c libffi/testsuite/libffi.closures/cls_18byte.c libffi/testsuite/libffi.closures/cls_19byte.c libffi/testsuite/libffi.closures/cls_1_1byte.c libffi/testsuite/libffi.closures/cls_20byte.c libffi/testsuite/libffi.closures/cls_20byte1.c libffi/testsuite/libffi.closures/cls_24byte.c libffi/testsuite/libffi.closures/cls_2byte.c libffi/testsuite/libffi.closures/cls_align_double.c libffi/testsuite/libffi.closures/cls_3_1byte.c libffi/testsuite/libffi.closures/cls_3byte1.c libffi/testsuite/libffi.closures/cls_3byte2.c libffi/testsuite/libffi.closures/cls_3float.c libffi/testsuite/libffi.closures/cls_4_1byte.c libffi/testsuite/libffi.closures/cls_4byte.c libffi/testsuite/libffi.closures/cls_5_1_byte.c libffi/testsuite/libffi.closures/cls_5byte.c libffi/testsuite/libffi.closures/cls_64byte.c libffi/testsuite/libffi.closures/cls_6_1_byte.c libffi/testsuite/libffi.closures/cls_6byte.c libffi/testsuite/libffi.closures/cls_7_1_byte.c libffi/testsuite/libffi.closures/cls_7byte.c libffi/testsuite/libffi.closures/cls_8byte.c libffi/testsuite/libffi.closures/cls_9byte1.c libffi/testsuite/libffi.closures/cls_9byte2.c libffi/testsuite/libffi.closures/cls_align_longdouble.c libffi/testsuite/libffi.closures/cls_align_float.c libffi/testsuite/libffi.closures/cls_longdouble.c libffi/testsuite/libffi.closures/cls_float.c libffi/testsuite/libffi.closures/cls_align_longdouble_split.c libffi/testsuite/libffi.closures/cls_align_longdouble_split2.c libffi/testsuite/libffi.closures/cls_align_pointer.c libffi/testsuite/libffi.closures/cls_align_sint16.c libffi/testsuite/libffi.closures/cls_align_sint32.c libffi/testsuite/libffi.closures/cls_align_sint64.c libffi/testsuite/libffi.closures/cls_align_uint16.c libffi/testsuite/libffi.closures/cls_align_uint32.c libffi/testsuite/libffi.closures/cls_align_uint64.c libffi/testsuite/libffi.closures/cls_dbls_struct.c libffi/testsuite/libffi.closures/cls_double.c libffi/testsuite/libffi.closures/cls_double_va.c libffi/testsuite/libffi.closures/cls_many_mixed_args.c libffi/testsuite/libffi.closures/cls_longdouble_va.c libffi/testsuite/libffi.closures/cls_many_mixed_float_double.c libffi/testsuite/libffi.closures/cls_multi_schar.c libffi/testsuite/libffi.closures/cls_multi_sshort.c libffi/testsuite/libffi.closures/cls_multi_sshortchar.c libffi/testsuite/libffi.closures/cls_multi_uchar.c libffi/testsuite/libffi.closures/cls_multi_ushort.c libffi/testsuite/libffi.closures/cls_multi_ushortchar.c libffi/testsuite/libffi.closures/cls_pointer.c libffi/testsuite/libffi.closures/cls_pointer_stack.c libffi/testsuite/libffi.closures/cls_schar.c libffi/testsuite/libffi.closures/cls_sint.c libffi/testsuite/libffi.closures/cls_sshort.c libffi/testsuite/libffi.closures/cls_struct_va1.c libffi/testsuite/libffi.closures/cls_uchar.c libffi/testsuite/libffi.closures/cls_uint.c libffi/testsuite/libffi.closures/cls_uint_va.c libffi/testsuite/libffi.closures/cls_ulong_va.c libffi/testsuite/libffi.closures/cls_ulonglong.c libffi/testsuite/libffi.closures/cls_ushort.c libffi/testsuite/libffi.closures/err_bad_abi.c libffi/testsuite/libffi.closures/ffitest.h libffi/testsuite/libffi.closures/huge_struct.c libffi/testsuite/libffi.closures/nested_struct.c libffi/testsuite/libffi.closures/problem1.c libffi/testsuite/libffi.closures/nested_struct1.c libffi/testsuite/libffi.closures/nested_struct10.c libffi/testsuite/libffi.closures/nested_struct11.c libffi/testsuite/libffi.closures/nested_struct12.c libffi/testsuite/libffi.closures/nested_struct13.c libffi/testsuite/libffi.closures/nested_struct2.c libffi/testsuite/libffi.closures/nested_struct3.c libffi/testsuite/libffi.closures/nested_struct4.c libffi/testsuite/libffi.closures/nested_struct5.c libffi/testsuite/libffi.closures/nested_struct6.c libffi/testsuite/libffi.closures/nested_struct7.c libffi/testsuite/libffi.closures/nested_struct8.c libffi/testsuite/libffi.closures/nested_struct9.c libffi/testsuite/libffi.closures/single_entry_structs1.c libffi/testsuite/libffi.closures/single_entry_structs2.c libffi/testsuite/libffi.closures/single_entry_structs3.c libffi/testsuite/libffi.closures/stret_large.c libffi/testsuite/libffi.closures/stret_large2.c libffi/testsuite/libffi.closures/stret_medium.c libffi/testsuite/libffi.closures/stret_medium2.c libffi/testsuite/libffi.closures/testclosure.c libffi/testsuite/libffi.closures/unwindtest.cc libffi/testsuite/libffi.closures/unwindtest_ffi_call.cc libffi/testsuite/libffi.complex/cls_align_complex_double.c libffi/testsuite/libffi.complex/cls_align_complex.inc libffi/testsuite/libffi.complex/cls_align_complex_longdouble.c libffi/testsuite/libffi.complex/cls_align_complex_float.c libffi/testsuite/libffi.complex/cls_complex_double.c libffi/testsuite/libffi.complex/cls_complex.inc libffi/testsuite/libffi.complex/cls_complex_longdouble.c libffi/testsuite/libffi.complex/cls_complex_float.c libffi/testsuite/libffi.complex/cls_complex_struct_double.c libffi/testsuite/libffi.complex/cls_complex_struct.inc libffi/testsuite/libffi.complex/cls_complex_struct_longdouble.c libffi/testsuite/libffi.complex/cls_complex_struct_float.c libffi/testsuite/libffi.complex/complex_double.c libffi/testsuite/libffi.complex/complex.exp libffi/testsuite/libffi.complex/cls_complex_va.inc libffi/testsuite/libffi.complex/cls_complex_va_double.c libffi/testsuite/libffi.complex/cls_complex_va_float.c libffi/testsuite/libffi.complex/cls_complex_va_longdouble.c libffi/testsuite/libffi.complex/complex.inc libffi/testsuite/libffi.complex/complex_defs_longdouble.inc libffi/testsuite/libffi.complex/complex_defs_double.inc libffi/testsuite/libffi.complex/complex_defs_float.inc libffi/testsuite/libffi.complex/complex_longdouble.c libffi/testsuite/libffi.complex/complex_float.c libffi/testsuite/libffi.complex/complex_int.c libffi/testsuite/libffi.complex/many_complex.inc libffi/testsuite/libffi.complex/ffitest.h libffi/testsuite/libffi.complex/many_complex_longdouble.c libffi/testsuite/libffi.complex/many_complex_double.c libffi/testsuite/libffi.complex/many_complex_float.c libffi/testsuite/libffi.complex/return_complex1_double.c libffi/testsuite/libffi.complex/return_complex.inc libffi/testsuite/libffi.complex/return_complex1.inc libffi/testsuite/libffi.complex/return_complex1_longdouble.c libffi/testsuite/libffi.complex/return_complex1_float.c libffi/testsuite/libffi.complex/return_complex2_double.c libffi/testsuite/libffi.complex/return_complex2.inc libffi/testsuite/libffi.complex/return_complex2_longdouble.c libffi/testsuite/libffi.complex/return_complex2_float.c libffi/testsuite/libffi.complex/return_complex_longdouble.c libffi/testsuite/libffi.complex/return_complex_double.c libffi/testsuite/libffi.complex/return_complex_float.c libffi/testsuite/libffi.go/static-chain.h libffi/testsuite/libffi.go/aa-direct.c libffi/testsuite/libffi.go/closure1.c libffi/testsuite/libffi.go/ffitest.h libffi/testsuite/libffi.go/go.exp libffi/testsuite/Makefile.am libffi/testsuite/Makefile.in libffi/testsuite/Makefile libffi/libffi_convenience.la libffi/LICENSE-BUILDTOOLS libffi/ChangeLog.old libffi/LICENSE libffi/acinclude.m4 libffi/compile libffi/Makefile libffi/Makefile.am libffi/Makefile.in libffi/README.md libffi/config.guess libffi/config.log libffi/autogen.sh libffi/configure.ac libffi/config.sub libffi/configure libffi/configure.host libffi/depcomp libffi/fficonfig.h.in libffi/install-sh libffi/libffi.map.in libffi/generate-darwin-source-and-headers.py libffi/libffi.pc.in libffi/libtool-ldflags libffi/libtool-version libffi/ltmain.sh libffi/make_sunver.pl libffi/libffi.la libffi/missing libffi/msvcc.sh libffi/stamp-h.in libffi/libffi.pc libffi/a.out libffi/local.exp libffi/config.status libffi/fficonfig.h libffi/stamp-h1 libffi/libtool linenoise/README.markdown linenoise/LICENSE linenoise/Makefile linenoise/example.c linenoise/linenoise.c linenoise/linenoise.h ucd2c/UCD/auxiliary/GraphemeBreakProperty.txt ucd2c/UCD/auxiliary/GraphemeBreakTest.txt ucd2c/UCD/auxiliary/GraphemeBreakTest.html ucd2c/UCD/auxiliary/LineBreakTest.txt ucd2c/UCD/auxiliary/LineBreakTest.html ucd2c/UCD/auxiliary/SentenceBreakProperty.txt ucd2c/UCD/auxiliary/WordBreakTest.txt ucd2c/UCD/auxiliary/SentenceBreakTest.html ucd2c/UCD/auxiliary/SentenceBreakTest.txt ucd2c/UCD/auxiliary/WordBreakProperty.txt ucd2c/UCD/auxiliary/WordBreakTest.html ucd2c/UCD/emoji/emoji-data.txt ucd2c/UCD/emoji/ReadMe.txt ucd2c/UCD/emoji/emoji-variation-sequences.txt ucd2c/UCD/extracted/DerivedBinaryProperties.txt ucd2c/UCD/extracted/DerivedBidiClass.txt ucd2c/UCD/extracted/DerivedDecompositionType.txt ucd2c/UCD/extracted/DerivedCombiningClass.txt ucd2c/UCD/extracted/DerivedEastAsianWidth.txt ucd2c/UCD/extracted/DerivedGeneralCategory.txt ucd2c/UCD/extracted/DerivedJoiningGroup.txt ucd2c/UCD/extracted/DerivedJoiningType.txt ucd2c/UCD/extracted/DerivedLineBreak.txt ucd2c/UCD/extracted/DerivedName.txt ucd2c/UCD/extracted/DerivedNumericType.txt ucd2c/UCD/extracted/DerivedNumericValues.txt ucd2c/UCD/BidiCharacterTest.txt ucd2c/UCD/ArabicShaping.txt ucd2c/UCD/BidiBrackets.txt ucd2c/UCD/CompositionExclusions.txt ucd2c/UCD/BidiMirroring.txt ucd2c/UCD/BidiTest.txt ucd2c/UCD/Blocks.txt ucd2c/UCD/CJKRadicals.txt ucd2c/UCD/CaseFolding.txt ucd2c/UCD/EastAsianWidth.txt ucd2c/UCD/DerivedAge.txt ucd2c/UCD/DerivedNormalizationProps.txt ucd2c/UCD/DerivedCoreProperties.txt ucd2c/UCD/LineBreak.txt ucd2c/UCD/Index.txt ucd2c/UCD/EmojiSources.txt ucd2c/UCD/EquivalentUnifiedIdeograph.txt ucd2c/UCD/HangulSyllableType.txt ucd2c/UCD/Jamo.txt ucd2c/UCD/NameAliases.txt ucd2c/UCD/IndicPositionalCategory.txt ucd2c/UCD/IndicSyllabicCategory.txt ucd2c/UCD/NamedSequencesProv.txt ucd2c/UCD/NamedSequences.txt ucd2c/UCD/NormalizationTest.txt ucd2c/UCD/NamesList.html ucd2c/UCD/NamesList.txt ucd2c/UCD/PropertyValueAliases.txt ucd2c/UCD/NormalizationCorrections.txt ucd2c/UCD/NushuSources.txt ucd2c/UCD/PropList.txt ucd2c/UCD/PropertyAliases.txt ucd2c/UCD/SpecialCasing.txt ucd2c/UCD/ReadMe.txt ucd2c/UCD/Scripts.txt ucd2c/UCD/ScriptExtensions.txt ucd2c/UCD/StandardizedVariants.txt ucd2c/UCD/TangutSources.txt ucd2c/UCD/USourceData.txt ucd2c/UCD/USourceGlyphs.pdf ucd2c/UCD/USourceRSChart.pdf ucd2c/UCD/UnicodeData.txt ucd2c/UCD/VerticalOrientation.txt ucd2c/Makefile ucd2c/UCD.zip ucd2c/configure ucd2c/config.mk ucd2c/license.txt ucd2c/ucd.c ucd2c/ucd.h ucd2c/ucd2c.c ucd2c/ucd2c.o ucd2c/ucd2c.lo ucd2c/ucd2c libtommath/demo/mtest_opponent.c libtommath/demo/shared.c libtommath/demo/shared.h libtommath/demo/test.c libtommath/demo/timing.c libtommath/etc/2kprime.c libtommath/etc/drprime.c libtommath/etc/mersenne.c libtommath/etc/mont.c libtommath/etc/pprime.c libtommath/etc/tune.c libtommath/mtest/mpi-config.h libtommath/mtest/logtab.h libtommath/mtest/mpi-types.h libtommath/mtest/mpi.c libtommath/mtest/mpi.h libtommath/mtest/mtest.c libtommath/bn_cutoffs.c libtommath/bn_deprecated.c libtommath/bn_mp_2expt.c libtommath/bn_mp_abs.c libtommath/bn_mp_add.c libtommath/bn_mp_add_d.c libtommath/bn_mp_cnt_lsb.c libtommath/bn_mp_addmod.c libtommath/bn_mp_and.c libtommath/bn_mp_clamp.c libtommath/bn_mp_clear.c libtommath/bn_mp_clear_multi.c libtommath/bn_mp_cmp.c libtommath/bn_mp_cmp_d.c libtommath/bn_mp_cmp_mag.c libtommath/bn_mp_div.c libtommath/bn_mp_complement.c libtommath/bn_mp_copy.c libtommath/bn_mp_count_bits.c libtommath/bn_mp_decr.c libtommath/bn_mp_div_2.c libtommath/bn_mp_div_2d.c libtommath/bn_mp_from_ubin.c libtommath/bn_mp_fwrite.c libtommath/bn_mp_div_3.c libtommath/bn_mp_div_d.c libtommath/bn_mp_dr_is_modulus.c libtommath/bn_mp_dr_reduce.c libtommath/bn_mp_dr_setup.c libtommath/bn_mp_error_to_string.c libtommath/bn_mp_exch.c libtommath/bn_mp_expt_u32.c libtommath/bn_mp_exptmod.c libtommath/bn_mp_exteuclid.c libtommath/bn_mp_fread.c libtommath/bn_mp_from_sbin.c libtommath/bn_mp_gcd.c libtommath/bn_mp_get_double.c libtommath/bn_mp_get_i32.c libtommath/bn_mp_get_i64.c libtommath/bn_mp_get_mag_u32.c libtommath/bn_mp_get_l.c libtommath/bn_mp_get_ll.c libtommath/bn_mp_get_mag_u64.c libtommath/bn_mp_get_mag_ul.c libtommath/bn_mp_get_mag_ull.c libtommath/bn_mp_grow.c libtommath/bn_mp_incr.c libtommath/bn_mp_init.c libtommath/bn_mp_init_copy.c libtommath/bn_mp_init_i32.c libtommath/bn_mp_init_i64.c libtommath/bn_mp_init_l.c libtommath/bn_mp_init_ll.c libtommath/bn_mp_init_multi.c libtommath/bn_mp_init_set.c libtommath/bn_mp_init_size.c libtommath/bn_mp_init_u32.c libtommath/bn_mp_init_u64.c libtommath/bn_mp_init_ul.c libtommath/bn_mp_init_ull.c libtommath/bn_mp_invmod.c libtommath/bn_mp_lcm.c libtommath/bn_mp_is_square.c libtommath/bn_mp_iseven.c libtommath/bn_mp_isodd.c libtommath/bn_mp_kronecker.c libtommath/bn_mp_log_u32.c libtommath/bn_mp_lshd.c libtommath/bn_mp_mod.c libtommath/bn_mp_mod_2d.c libtommath/bn_mp_mod_d.c libtommath/bn_mp_montgomery_calc_normalization.c libtommath/bn_mp_montgomery_reduce.c libtommath/bn_mp_mul.c libtommath/bn_mp_neg.c libtommath/bn_mp_montgomery_setup.c libtommath/bn_mp_prime_frobenius_underwood.c libtommath/bn_mp_mul_2.c libtommath/bn_mp_mul_2d.c libtommath/bn_mp_mul_d.c libtommath/bn_mp_mulmod.c libtommath/bn_mp_or.c libtommath/bn_mp_pack.c libtommath/bn_mp_pack_count.c libtommath/bn_mp_prime_fermat.c libtommath/bn_mp_prime_is_prime.c libtommath/bn_mp_prime_rand.c libtommath/bn_mp_prime_miller_rabin.c libtommath/bn_mp_prime_next_prime.c libtommath/bn_mp_prime_rabin_miller_trials.c libtommath/bn_mp_radix_size.c libtommath/bn_mp_prime_strong_lucas_selfridge.c libtommath/bn_mp_radix_smap.c libtommath/bn_mp_rand.c libtommath/bn_mp_read_radix.c libtommath/bn_mp_reduce.c libtommath/bn_mp_reduce_2k.c libtommath/bn_mp_reduce_2k_l.c libtommath/bn_mp_reduce_2k_setup.c libtommath/bn_mp_reduce_2k_setup_l.c libtommath/bn_mp_reduce_is_2k.c libtommath/bn_mp_reduce_is_2k_l.c libtommath/bn_mp_root_u32.c libtommath/bn_mp_reduce_setup.c libtommath/bn_mp_rshd.c libtommath/bn_mp_sbin_size.c libtommath/bn_mp_set.c libtommath/bn_mp_set_double.c libtommath/bn_mp_set_i32.c libtommath/bn_mp_set_i64.c libtommath/bn_mp_set_l.c libtommath/bn_mp_set_ll.c libtommath/bn_mp_set_u32.c libtommath/bn_mp_set_u64.c libtommath/bn_mp_set_ul.c libtommath/bn_mp_set_ull.c libtommath/bn_mp_shrink.c libtommath/bn_mp_signed_rsh.c libtommath/bn_mp_sqr.c libtommath/bn_mp_sqrmod.c libtommath/bn_mp_sqrt.c libtommath/bn_mp_sqrtmod_prime.c libtommath/bn_mp_sub.c libtommath/bn_mp_sub_d.c libtommath/bn_mp_xor.c libtommath/bn_mp_submod.c libtommath/bn_mp_to_radix.c libtommath/bn_mp_to_sbin.c libtommath/bn_mp_to_ubin.c libtommath/bn_mp_ubin_size.c libtommath/bn_mp_unpack.c libtommath/bn_mp_zero.c libtommath/bn_prime_tab.c libtommath/bn_s_mp_add.c libtommath/bn_s_mp_balance_mul.c libtommath/bn_s_mp_exptmod.c libtommath/bn_s_mp_exptmod_fast.c libtommath/bn_s_mp_karatsuba_mul.c libtommath/bn_s_mp_get_bit.c libtommath/bn_s_mp_invmod_fast.c libtommath/bn_s_mp_invmod_slow.c libtommath/bn_s_mp_karatsuba_sqr.c libtommath/bn_s_mp_montgomery_reduce_fast.c libtommath/bn_s_mp_mul_high_digs.c libtommath/bn_s_mp_reverse.c libtommath/bn_s_mp_mul_digs.c libtommath/bn_s_mp_mul_digs_fast.c libtommath/bn_s_mp_sqr.c libtommath/bn_s_mp_mul_high_digs_fast.c libtommath/bn_s_mp_prime_is_divisible.c libtommath/bn_s_mp_rand_jenkins.c libtommath/bn_s_mp_rand_platform.c libtommath/bn_s_mp_sqr_fast.c libtommath/bn_s_mp_sub.c libtommath/bn_s_mp_toom_mul.c libtommath/bn_s_mp_toom_sqr.c libtommath/tommath.h libtommath/tommath_class.h libtommath/tommath_cutoffs.h libtommath/tommath_private.h libtommath/tommath_superclass.h libtommath/LICENSE libtommath/README.md '