diff --git a/lib/c3/0.1/array.facts b/lib/c3/0.1/array.facts
index 57fb4ef..4bcb97c 100644
--- a/lib/c3/0.1/array.facts
+++ b/lib/c3/0.1/array.facts
@@ -1,7 +1,5 @@
%{module: C3.Facts.Dump,
version: 1}
add {Array, :is_a, :module}
-add {Array, :name, "Array"}
-add {Array, :path, "array.facts"}
add {Array, :symbol, Array.data}
-add {Array.data, :cfn, cfn :tag "array_data_tag" (:tag, :tag, :&result)}
+replace {Array.data, :cfn, cfn :tag "array_data_tag" (:tag, :tag, :&result)}
diff --git a/lib/c3/0.1/c3.facts b/lib/c3/0.1/c3.facts
index 92e8f31..104c387 100644
--- a/lib/c3/0.1/c3.facts
+++ b/lib/c3/0.1/c3.facts
@@ -1,8 +1,6 @@
%{module: C3.Facts.Dump,
version: 1}
add {C3, :is_a, :module}
-add {C3, :name, "C3"}
-add {C3, :path, "c3.facts"}
add {C3, :symbol, C3.!}
add {C3, :symbol, C3.&&}
add {C3, :symbol, C3.*}
@@ -20,80 +18,80 @@ add {C3, :symbol, C3.break}
add {C3, :symbol, C3.first}
add {C3, :symbol, C3.xor}
add {C3, :symbol, C3.||}
-add {C3.+, :arity, 2}
-add {C3.+, :cfn, cfn :tag "tag_add" (:tag, :tag, :&result)}
-add {C3.+, :is_a, :operator}
-add {C3.+, :operator_precedence, 1}
-add {C3.+, :operator_associativity, :left}
-add {C3.-, :arity, 2}
-add {C3.-, :cfn, cfn :tag "tag_sub" (:tag, :tag, :&result)}
-add {C3.-, :is_a, :operator}
-add {C3.-, :operator_precedence, 1}
-add {C3.-, :operator_associativity, :left}
-add {C3.*, :arity, 2}
-add {C3.*, :cfn, cfn :tag "tag_mul" (:tag, :tag, :&result)}
-add {C3.*, :is_a, :operator}
-add {C3.*, :operator_precedence, 2}
-add {C3.*, :operator_associativity, :left}
-add {C3./, :arity, 2}
-add {C3./, :cfn, cfn :tag "tag_div" (:tag, :tag, :&result)}
-add {C3./, :is_a, :operator}
-add {C3./, :operator_precedence, 2}
-add {C3./, :operator_associativity, :left}
-add {C3.<, :arity, 2}
-add {C3.<, :cfn, cfn :bool "tag_lt" (:tag, :tag)}
-add {C3.<, :is_a, :operator}
-add {C3.<, :operator_precedence, 3}
-add {C3.<, :operator_associativity, :left}
-add {C3.<=, :arity, 2}
-add {C3.<=, :cfn, cfn :bool "tag_lte" (:tag, :tag)}
-add {C3.<=, :is_a, :operator}
-add {C3.<=, :operator_precedence, 3}
-add {C3.<=, :operator_associativity, :left}
-add {C3.=, :arity, 2}
-add {C3.=, :cfn, cfn :tag "tag_equal" (:tag, :tag, :&result)}
-add {C3.=, :is_a, :operator}
-add {C3.=, :is_a, :special_operator}
-add {C3.=, :operator_precedence, 5}
-add {C3.=, :operator_associativity, :left}
-add {C3.==, :arity, 2}
-add {C3.==, :cfn, cfn :bool "tag_eq" (:tag, :tag)}
-add {C3.==, :is_a, :operator}
-add {C3.==, :operator_precedence, 3}
-add {C3.==, :operator_associativity, :left}
-add {C3.>=, :arity, 2}
-add {C3.>=, :cfn, cfn :bool "tag_gte" (:tag, :tag)}
-add {C3.>=, :is_a, :operator}
-add {C3.>=, :operator_precedence, 3}
-add {C3.>=, :operator_associativity, :left}
-add {C3.>, :arity, 2}
-add {C3.>, :cfn, cfn :bool "tag_gt" (:tag, :tag)}
-add {C3.>, :is_a, :operator}
-add {C3.>, :operator_precedence, 3}
-add {C3.>, :operator_associativity, :left}
-add {C3.!, :arity, 1}
-add {C3.!, :cfn, cfn :bool "tag_not" (:tag)}
-add {C3.!, :is_a, :operator}
-add {C3._"()", :arity, 1}
-add {C3._"()", :cfn, cfn :tag "tag_paren" (:tag, :&result)}
-add {C3._"()", :is_a, :operator}
-add {C3.&&, :arity, 2}
-add {C3.&&, :cfn, cfn :bool "tag_and" (:tag, :tag)}
-add {C3.&&, :is_a, :operator}
-add {C3.&&, :operator_precedence, 4}
-add {C3.&&, :operator_associativity, :left}
-add {C3.||, :arity, 2}
-add {C3.||, :cfn, cfn :bool "tag_or" (:tag, :tag)}
-add {C3.||, :is_a, :operator}
-add {C3.||, :operator_precedence, 4}
-add {C3.||, :operator_associativity, :left}
-add {C3.xor, :arity, 2}
-add {C3.xor, :cfn, cfn :bool "tag_xor" (:tag, :tag)}
-add {C3.xor, :is_a, :operator}
-add {C3.xor, :operator_precedence, 4}
-add {C3.xor, :operator_associativity, :left}
-add {C3.break, :cfn, cfn :void "c3_break" ()}
-add {C3.first, :fn, fn {
+replace {C3.+, :arity, 2}
+replace {C3.+, :cfn, cfn :tag "tag_add" (:tag, :tag, :&result)}
+replace {C3.+, :is_a, :operator}
+replace {C3.+, :operator_precedence, 1}
+replace {C3.+, :operator_associativity, :left}
+replace {C3.-, :arity, 2}
+replace {C3.-, :cfn, cfn :tag "tag_sub" (:tag, :tag, :&result)}
+replace {C3.-, :is_a, :operator}
+replace {C3.-, :operator_precedence, 1}
+replace {C3.-, :operator_associativity, :left}
+replace {C3.*, :arity, 2}
+replace {C3.*, :cfn, cfn :tag "tag_mul" (:tag, :tag, :&result)}
+replace {C3.*, :is_a, :operator}
+replace {C3.*, :operator_precedence, 2}
+replace {C3.*, :operator_associativity, :left}
+replace {C3./, :arity, 2}
+replace {C3./, :cfn, cfn :tag "tag_div" (:tag, :tag, :&result)}
+replace {C3./, :is_a, :operator}
+replace {C3./, :operator_precedence, 2}
+replace {C3./, :operator_associativity, :left}
+replace {C3.<, :arity, 2}
+replace {C3.<, :cfn, cfn :bool "tag_lt" (:tag, :tag)}
+replace {C3.<, :is_a, :operator}
+replace {C3.<, :operator_precedence, 3}
+replace {C3.<, :operator_associativity, :left}
+replace {C3.<=, :arity, 2}
+replace {C3.<=, :cfn, cfn :bool "tag_lte" (:tag, :tag)}
+replace {C3.<=, :is_a, :operator}
+replace {C3.<=, :operator_precedence, 3}
+replace {C3.<=, :operator_associativity, :left}
+replace {C3.=, :arity, 2}
+replace {C3.=, :cfn, cfn :tag "tag_equal" (:tag, :tag, :&result)}
+replace {C3.=, :is_a, :operator}
+replace {C3.=, :is_a, :special_operator}
+replace {C3.=, :operator_precedence, 5}
+replace {C3.=, :operator_associativity, :left}
+replace {C3.==, :arity, 2}
+replace {C3.==, :cfn, cfn :bool "tag_eq" (:tag, :tag)}
+replace {C3.==, :is_a, :operator}
+replace {C3.==, :operator_precedence, 3}
+replace {C3.==, :operator_associativity, :left}
+replace {C3.>=, :arity, 2}
+replace {C3.>=, :cfn, cfn :bool "tag_gte" (:tag, :tag)}
+replace {C3.>=, :is_a, :operator}
+replace {C3.>=, :operator_precedence, 3}
+replace {C3.>=, :operator_associativity, :left}
+replace {C3.>, :arity, 2}
+replace {C3.>, :cfn, cfn :bool "tag_gt" (:tag, :tag)}
+replace {C3.>, :is_a, :operator}
+replace {C3.>, :operator_precedence, 3}
+replace {C3.>, :operator_associativity, :left}
+replace {C3.!, :arity, 1}
+replace {C3.!, :cfn, cfn :bool "tag_not" (:tag)}
+replace {C3.!, :is_a, :operator}
+replace {C3._"()", :arity, 1}
+replace {C3._"()", :cfn, cfn :tag "tag_paren" (:tag, :&result)}
+replace {C3._"()", :is_a, :operator}
+replace {C3.&&, :arity, 2}
+replace {C3.&&, :cfn, cfn :bool "tag_and" (:tag, :tag)}
+replace {C3.&&, :is_a, :operator}
+replace {C3.&&, :operator_precedence, 4}
+replace {C3.&&, :operator_associativity, :left}
+replace {C3.||, :arity, 2}
+replace {C3.||, :cfn, cfn :bool "tag_or" (:tag, :tag)}
+replace {C3.||, :is_a, :operator}
+replace {C3.||, :operator_precedence, 4}
+replace {C3.||, :operator_associativity, :left}
+replace {C3.xor, :arity, 2}
+replace {C3.xor, :cfn, cfn :bool "tag_xor" (:tag, :tag)}
+replace {C3.xor, :is_a, :operator}
+replace {C3.xor, :operator_precedence, 4}
+replace {C3.xor, :operator_associativity, :left}
+replace {C3.break, :cfn, cfn :void "c3_break" ()}
+replace {C3.first, :fn, fn {
((a | _b)) { a }
({a, _b}) { a }
({a, _b, _c}) { a }
diff --git a/lib/c3/0.1/list.facts b/lib/c3/0.1/list.facts
index 2f777ba..1910f1b 100644
--- a/lib/c3/0.1/list.facts
+++ b/lib/c3/0.1/list.facts
@@ -1,11 +1,9 @@
%{module: C3.Facts.Dump,
version: 1}
add {List, :is_a, :module}
-add {List, :name, "List"}
-add {List, :path, "list.facts"}
add {List, :symbol, List.map}
add {List, :symbol, List.reverse}
-add {List.map, :fn, fn {
+replace {List.map, :fn, fn {
((), _) {
()
}
@@ -13,8 +11,8 @@ add {List.map, :fn, fn {
(f(a) | List.map(b, f))
}
}}
-add {List.reverse, :fn, fn {
+replace {List.reverse, :fn, fn {
(x) { List.reverse(x, ()) }
- ((), acc) { acc }
+ ((), acc) { (:reversed | acc) }
((a | b), acc) { List.reverse(b, (a | acc)) }
}}
diff --git a/libc3/env.c b/libc3/env.c
index f783ffc..d0c31c0 100644
--- a/libc3/env.c
+++ b/libc3/env.c
@@ -16,11 +16,31 @@
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
+#include "array.h"
#include "binding.h"
-#include "c3.h"
+#include "buf.h"
+#include "buf_file.h"
+#include "buf_inspect.h"
+#include "buf_save.h"
+#include "call.h"
+#include "cfn.h"
+#include "compare.h"
+#include "env.h"
#include "error.h"
#include "error_handler.h"
+#include "facts.h"
+#include "facts_with.h"
+#include "facts_with_cursor.h"
+#include "file.h"
+#include "fn.h"
#include "frame.h"
+#include "ident.h"
+#include "io.h"
+#include "list.h"
+#include "module.h"
+#include "str.h"
+#include "tag.h"
+#include "tuple.h"
s_env g_c3_env;
@@ -611,7 +631,8 @@ void env_longjmp (s_env *env, jmp_buf *jmp_buf)
bool env_module_load (s_env *env, const s_sym *name,
s_facts *facts)
{
- s_fact fact;
+ s_facts_with_cursor cursor;
+ s_fact *found;
s_str path;
s_tag tag_name;
s_tag tag_load_time;
@@ -624,14 +645,6 @@ bool env_module_load (s_env *env, const s_sym *name,
name->str.ptr.ps8);
return false;
}
- /*
- buf_write_1(&env->out, "module_load ");
- buf_write_str(&env->out, &name->str);
- buf_write_1(&env->out, " -> ");
- buf_write_str(&env->out, &path);
- buf_write_s8(&env->out, '\n');
- buf_flush(&env->out);
- */
if (facts_load_file(facts, &path) < 0) {
warnx("env_module_load: %s: facts_load_file",
path.ptr.ps8);
@@ -639,13 +652,35 @@ bool env_module_load (s_env *env, const s_sym *name,
return false;
}
str_clean(&path);
- fact.subject = tag_init_sym(&tag_name, name);
- fact.predicate = tag_init_sym(&tag_load_time, sym_1("load_time"));
- fact.object = tag_init_time(&tag_time);
- facts_add_fact(facts, &fact);
+ tag_init_sym(&tag_name, name);
+ tag_init_sym(&tag_load_time, sym_1("load_time"));
+ tag_init_var(&tag_time);
+ facts_with(facts, &cursor, (t_facts_spec) {
+ &tag_name, &tag_load_time, &tag_time, NULL, NULL });
+ while ((found = facts_with_cursor_next(&cursor)))
+ facts_remove_fact(facts, found);
+ tag_init_time(&tag_time);
+ facts_add_tags(facts, &tag_name, &tag_load_time, &tag_time);
return true;
}
+bool env_module_maybe_reload (s_env *env, const s_sym *name,
+ s_facts *facts)
+{
+ s_str path;
+ s_tag tag_load_time;
+ s_tag tag_mtime;
+ if (! module_load_time(name, facts, &tag_load_time))
+ return false;
+ if (! module_name_path(&env->module_path, name, &path))
+ return false;
+ if (! file_mtime(&path, &tag_mtime))
+ return false;
+ if (compare_tag(&tag_load_time, &tag_mtime) < 0)
+ return module_load(name, facts);
+ return true;
+ }
+
bool env_operator_is_binary (s_env *env, const s_ident *op)
{
s_facts_with_cursor cursor;
diff --git a/libc3/env.h b/libc3/env.h
index bf8ad2d..9aa1a91 100644
--- a/libc3/env.h
+++ b/libc3/env.h
@@ -53,6 +53,8 @@ bool env_eval_tuple (s_env *env, const s_tuple *tuple,
s_tag *dest);
bool env_module_load (s_env *env, const s_sym *name,
s_facts *facts);
+bool env_module_maybe_reload (s_env *env, const s_sym *name,
+ s_facts *facts);
bool env_operator_is_binary (s_env *env, const s_ident *op);
bool env_operator_is_right_associative (s_env *env,
const s_ident *op);
diff --git a/libc3/facts.c b/libc3/facts.c
index 7dcd487..f77c846 100644
--- a/libc3/facts.c
+++ b/libc3/facts.c
@@ -73,6 +73,37 @@ s_fact * facts_add_tags (s_facts *facts, const s_tag *subject,
return facts_add_fact(facts, &fact);
}
+s_fact * facts_replace_fact (s_facts *facts, const s_fact *fact)
+{
+ assert(facts);
+ assert(fact);
+ return facts_replace_tags(facts, fact->subject, fact->predicate,
+ fact->object);
+}
+
+s_fact * facts_replace_tags (s_facts *facts, const s_tag *subject,
+ const s_tag *predicate,
+ const s_tag *object)
+{
+ s_facts_cursor cursor;
+ s_fact *f;
+ s_tag var;
+ assert(facts);
+ assert(subject);
+ assert(predicate);
+ assert(object);
+ tag_init_var(&var);
+ facts_lock_w(facts);
+ facts_with_tags(facts, &cursor, (s_tag *) subject,
+ (s_tag *) predicate, &var);
+ while ((f = facts_cursor_next(&cursor)))
+ facts_remove_fact(facts, f);
+ facts_cursor_clean(&cursor);
+ f = facts_add_tags(facts, subject, predicate, object);
+ facts_lock_unlock_w(facts);
+ return f;
+}
+
void facts_clean (s_facts *facts)
{
if (facts->log)
@@ -215,6 +246,7 @@ sw facts_load (s_facts *facts, s_buf *buf, const s_str *path)
s_fact *factp;
u64 line;
sw r;
+ bool replace;
sw result = 0;
assert(facts);
assert(buf);
@@ -225,13 +257,25 @@ sw facts_load (s_facts *facts, s_buf *buf, const s_str *path)
result += r;
facts_lock_w(facts);
line = 3;
- while ((r = buf_read_1(buf, "add ")) > 0) {
+ while (1) {
+ if ((r = buf_read_1(buf, "replace ")) < 0)
+ break;
+ if (r)
+ replace = true;
+ else {
+ replace = false;
+ if ((r = buf_read_1(buf, "add ")) <= 0)
+ break;
+ }
result += r;
if ((r = buf_parse_fact(buf, &fact)) <= 0)
goto ko_fact;
result += r;
factp = fact_r(&fact);
- facts_add_fact(facts, factp);
+ if (replace)
+ facts_replace_fact(facts, factp);
+ else
+ facts_add_fact(facts, factp);
fact_w_clean(&fact);
if ((r = buf_read_1(buf, "\n")) <= 0) {
r = -1;
diff --git a/libc3/facts.h b/libc3/facts.h
index 53cf8d5..d741c7e 100644
--- a/libc3/facts.h
+++ b/libc3/facts.h
@@ -46,6 +46,10 @@ void facts_lock_w (s_facts *facts);
sw facts_open_file (s_facts *facts, const s_str *path);
s_tag * facts_ref_tag (s_facts *facts, const s_tag *tag);
bool facts_remove_fact (s_facts *facts, const s_fact *fact);
+s_fact * facts_replace_fact (s_facts *facts, const s_fact *fact);
+s_fact * facts_replace_tags (s_facts *facts, const s_tag *subject,
+ const s_tag *predicate,
+ const s_tag *object);
sw facts_save_file (s_facts *facts, const s8 *path);
bool facts_unref_tag (s_facts *facts, const s_tag *tag);
diff --git a/libc3/file.c b/libc3/file.c
new file mode 100644
index 0000000..1452254
--- /dev/null
+++ b/libc3/file.c
@@ -0,0 +1,29 @@
+/* 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 <assert.h>
+#include <err.h>
+#include <sys/stat.h>
+#include "file.h"
+#include "timespec.h"
+
+s_tag * file_mtime (const s_str *path, s_tag *dest)
+{
+ struct stat sb;
+ assert(path);
+ assert(dest);
+ if (stat(path->ptr.ps8, &sb)) {
+ warn("file_mtime: %s", path->ptr.ps8);
+ return NULL;
+ }
+ return timespec_to_tag(&sb.st_mtim, dest);
+}
diff --git a/libc3/file.h b/libc3/file.h
new file mode 100644
index 0000000..d50dd8b
--- /dev/null
+++ b/libc3/file.h
@@ -0,0 +1,27 @@
+/* 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.
+ */
+/**
+ * @file file.h
+ * @brief file operations.
+ *
+ * Structure to manipulate files.
+ */
+#ifndef FILE_H
+#define FILE_H
+
+#include "types.h"
+
+/* Observers */
+s_tag * file_mtime (const s_str *path, s_tag *dest);
+
+#endif /* FILE_H */
diff --git a/libc3/module.c b/libc3/module.c
index 431709a..60d8a40 100644
--- a/libc3/module.c
+++ b/libc3/module.c
@@ -15,10 +15,12 @@
#include <string.h>
#include "buf.h"
#include "character.h"
+#include "compare.h"
#include "env.h"
#include "facts.h"
#include "facts_with.h"
#include "facts_with_cursor.h"
+#include "file.h"
#include "module.h"
#include "tag.h"
@@ -44,7 +46,7 @@ bool module_ensure_loaded (const s_sym *name, s_facts *facts)
}
}
facts_with_cursor_clean(&cursor);
- return true;
+ return module_maybe_reload(name, facts);
}
bool module_load (const s_sym *name, s_facts *facts)
@@ -52,6 +54,32 @@ bool module_load (const s_sym *name, s_facts *facts)
return env_module_load(&g_c3_env, name, facts);
}
+s_tag * module_load_time (const s_sym *name, s_facts *facts,
+ s_tag *dest)
+{
+ s_facts_with_cursor cursor;
+ s_tag tag_name;
+ s_tag tag_load_time;
+ s_tag tag_time;
+ tag_init_sym(&tag_name, name);
+ tag_init_1( &tag_load_time, ":load_time");
+ tag_init_var(&tag_time);
+ facts_with(facts, &cursor, (t_facts_spec) {
+ &tag_name, &tag_load_time, &tag_time, NULL, NULL });
+ if (! facts_with_cursor_next(&cursor)) {
+ facts_with_cursor_clean(&cursor);
+ return NULL;
+ }
+ facts_with_cursor_clean(&cursor);
+ *dest = tag_time;
+ return dest;
+}
+
+bool module_maybe_reload (const s_sym *name, s_facts *facts)
+{
+ return env_module_maybe_reload(&g_c3_env, name, facts);
+}
+
s_str * module_name_path (const s_str *prefix, const s_sym *name,
s_str *dest)
{
diff --git a/libc3/module.h b/libc3/module.h
index d1f1c01..b20af17 100644
--- a/libc3/module.h
+++ b/libc3/module.h
@@ -25,8 +25,11 @@
/* Modifiers */
bool module_ensure_loaded (const s_sym *name, s_facts *facts);
bool module_load (const s_sym *name, s_facts *facts);
+bool module_maybe_reload (const s_sym *name, s_facts *facts);
/* Observers */
+s_tag * module_load_time (const s_sym *name, s_facts *facts,
+ s_tag *dest);
s_str * module_name_path (const s_str *prefix, const s_sym *name,
s_str *dest);
sw module_name_path_size (const s_str *prefix,
diff --git a/libc3/sources.mk b/libc3/sources.mk
index 419a65b..09ca73c 100644
--- a/libc3/sources.mk
+++ b/libc3/sources.mk
@@ -91,6 +91,7 @@ HEADERS = \
facts_spec_cursor.h \
facts_with.h \
facts_with_cursor.h \
+ file.h \
float.h \
fn.h \
fn_clause.h \
@@ -117,6 +118,7 @@ HEADERS = \
str.h \
sym.h \
tag.h \
+ timespec.h \
tuple.h \
type.h \
types.h \
@@ -211,6 +213,7 @@ SOURCES = \
facts_spec_cursor.c \
facts_with.c \
facts_with_cursor.c \
+ file.c \
fn.c \
fn_clause.c \
frame.c \
@@ -235,6 +238,7 @@ SOURCES = \
str.c \
sym.c \
tag.c \
+ timespec.c \
tuple.c \
type.c \
ucd.c \
@@ -328,6 +332,7 @@ LO_SOURCES = \
facts_spec_cursor.c \
facts_with.c \
facts_with_cursor.c \
+ file.c \
fn.c \
fn_clause.c \
frame.c \
@@ -352,6 +357,7 @@ LO_SOURCES = \
str.c \
sym.c \
tag.c \
+ timespec.c \
tuple.c \
type.c \
ucd.c \
diff --git a/libc3/sources.sh b/libc3/sources.sh
index ae481f0..c03e5f1 100644
--- a/libc3/sources.sh
+++ b/libc3/sources.sh
@@ -1,4 +1,4 @@
# sources.sh generated by update_sources
-HEADERS='abs.h arg.h array.h binding.h bool.h buf.h buf_file.h buf_inspect.h buf_inspect_s16.h buf_inspect_s16_binary.h buf_inspect_s16_decimal.h buf_inspect_s16_hexadecimal.h buf_inspect_s16_octal.h buf_inspect_s32.h buf_inspect_s32_binary.h buf_inspect_s32_decimal.h buf_inspect_s32_hexadecimal.h buf_inspect_s32_octal.h buf_inspect_s64.h buf_inspect_s64_binary.h buf_inspect_s64_decimal.h buf_inspect_s64_hexadecimal.h buf_inspect_s64_octal.h buf_inspect_s8.h buf_inspect_s8_binary.h buf_inspect_s8_decimal.h buf_inspect_s8_hexadecimal.h buf_inspect_s8_octal.h buf_inspect_sw.h buf_inspect_sw_binary.h buf_inspect_sw_decimal.h buf_inspect_sw_hexadecimal.h buf_inspect_sw_octal.h buf_inspect_u16.h buf_inspect_u16_binary.h buf_inspect_u16_decimal.h buf_inspect_u16_hexadecimal.h buf_inspect_u16_octal.h buf_inspect_u32.h buf_inspect_u32_binary.h buf_inspect_u32_decimal.h buf_inspect_u32_hexadecimal.h buf_inspect_u32_octal.h buf_inspect_u64.h buf_inspect_u64_binary.h buf_inspect_u64_decimal.h buf_inspect_u64_hexadecimal.h buf_inspect_u64_octal.h buf_inspect_u8.h buf_inspect_u8_binary.h buf_inspect_u8_decimal.h buf_inspect_u8_hexadecimal.h buf_inspect_u8_octal.h buf_inspect_uw.h buf_inspect_uw_binary.h buf_inspect_uw_decimal.h buf_inspect_uw_hexadecimal.h buf_inspect_uw_octal.h buf_parse.h buf_parse_c.h buf_parse_s16.h buf_parse_s32.h buf_parse_s64.h buf_parse_s8.h buf_parse_sw.h buf_parse_u16.h buf_parse_u32.h buf_parse_u64.h buf_parse_u8.h buf_parse_uw.h buf_save.h c3.h c3_main.h c_types.h call.h ceiling.h cfn.h character.h compare.h config.h env.h error.h error_handler.h eval.h fact.h facts.h facts_cursor.h facts_spec.h facts_spec_cursor.h facts_with.h facts_with_cursor.h float.h fn.h fn_clause.h frame.h hash.h ident.h integer.h io.h list.h log.h module.h operator.h quote.h set__fact.h set__tag.h set_cursor__fact.h set_cursor__tag.h set_item__fact.h set_item__tag.h sha1.h sign.h skiplist__fact.h skiplist_node__fact.h str.h sym.h tag.h tuple.h type.h types.h ucd.h '
-SOURCES='abs.c arg.c array.c binding.c bool.c buf.c buf_file.c buf_inspect.c buf_inspect_s16.c buf_inspect_s16_binary.c buf_inspect_s16_decimal.c buf_inspect_s16_hexadecimal.c buf_inspect_s16_octal.c buf_inspect_s32.c buf_inspect_s32_binary.c buf_inspect_s32_decimal.c buf_inspect_s32_hexadecimal.c buf_inspect_s32_octal.c buf_inspect_s64.c buf_inspect_s64_binary.c buf_inspect_s64_decimal.c buf_inspect_s64_hexadecimal.c buf_inspect_s64_octal.c buf_inspect_s8.c buf_inspect_s8_binary.c buf_inspect_s8_decimal.c buf_inspect_s8_hexadecimal.c buf_inspect_s8_octal.c buf_inspect_sw.c buf_inspect_sw_binary.c buf_inspect_sw_decimal.c buf_inspect_sw_hexadecimal.c buf_inspect_sw_octal.c buf_inspect_u16.c buf_inspect_u16_binary.c buf_inspect_u16_decimal.c buf_inspect_u16_hexadecimal.c buf_inspect_u16_octal.c buf_inspect_u32.c buf_inspect_u32_binary.c buf_inspect_u32_decimal.c buf_inspect_u32_hexadecimal.c buf_inspect_u32_octal.c buf_inspect_u64.c buf_inspect_u64_binary.c buf_inspect_u64_decimal.c buf_inspect_u64_hexadecimal.c buf_inspect_u64_octal.c buf_inspect_u8.c buf_inspect_u8_binary.c buf_inspect_u8_decimal.c buf_inspect_u8_hexadecimal.c buf_inspect_u8_octal.c buf_inspect_uw.c buf_inspect_uw_binary.c buf_inspect_uw_decimal.c buf_inspect_uw_hexadecimal.c buf_inspect_uw_octal.c buf_parse.c buf_parse_c.c buf_parse_s16.c buf_parse_s32.c buf_parse_s64.c buf_parse_s8.c buf_parse_sw.c buf_parse_u16.c buf_parse_u32.c buf_parse_u64.c buf_parse_u8.c buf_parse_uw.c buf_save.c c3.c call.c ceiling.c cfn.c character.c compare.c env.c error.c error_handler.c eval.c fact.c facts.c facts_cursor.c facts_spec.c facts_spec_cursor.c facts_with.c facts_with_cursor.c fn.c fn_clause.c frame.c hash.c ident.c integer.c io.c list.c log.c module.c operator.c quote.c set__fact.c set__tag.c set_cursor__fact.c set_cursor__tag.c set_item__fact.c set_item__tag.c sign.c skiplist__fact.c skiplist_node__fact.c str.c sym.c tag.c tuple.c type.c ucd.c '
-LO_SOURCES='abs.c arg.c array.c binding.c bool.c buf.c buf_file.c buf_inspect.c buf_inspect_s16.c buf_inspect_s16_binary.c buf_inspect_s16_decimal.c buf_inspect_s16_hexadecimal.c buf_inspect_s16_octal.c buf_inspect_s32.c buf_inspect_s32_binary.c buf_inspect_s32_decimal.c buf_inspect_s32_hexadecimal.c buf_inspect_s32_octal.c buf_inspect_s64.c buf_inspect_s64_binary.c buf_inspect_s64_decimal.c buf_inspect_s64_hexadecimal.c buf_inspect_s64_octal.c buf_inspect_s8.c buf_inspect_s8_binary.c buf_inspect_s8_decimal.c buf_inspect_s8_hexadecimal.c buf_inspect_s8_octal.c buf_inspect_sw.c buf_inspect_sw_binary.c buf_inspect_sw_decimal.c buf_inspect_sw_hexadecimal.c buf_inspect_sw_octal.c buf_inspect_u16.c buf_inspect_u16_binary.c buf_inspect_u16_decimal.c buf_inspect_u16_hexadecimal.c buf_inspect_u16_octal.c buf_inspect_u32.c buf_inspect_u32_binary.c buf_inspect_u32_decimal.c buf_inspect_u32_hexadecimal.c buf_inspect_u32_octal.c buf_inspect_u64.c buf_inspect_u64_binary.c buf_inspect_u64_decimal.c buf_inspect_u64_hexadecimal.c buf_inspect_u64_octal.c buf_inspect_u8.c buf_inspect_u8_binary.c buf_inspect_u8_decimal.c buf_inspect_u8_hexadecimal.c buf_inspect_u8_octal.c buf_inspect_uw.c buf_inspect_uw_binary.c buf_inspect_uw_decimal.c buf_inspect_uw_hexadecimal.c buf_inspect_uw_octal.c buf_parse.c buf_parse_c.c buf_parse_s16.c buf_parse_s32.c buf_parse_s64.c buf_parse_s8.c buf_parse_sw.c buf_parse_u16.c buf_parse_u32.c buf_parse_u64.c buf_parse_u8.c buf_parse_uw.c buf_save.c c3.c call.c ceiling.c cfn.c character.c compare.c env.c error.c error_handler.c eval.c fact.c facts.c facts_cursor.c facts_spec.c facts_spec_cursor.c facts_with.c facts_with_cursor.c fn.c fn_clause.c frame.c hash.c ident.c integer.c io.c list.c log.c module.c operator.c quote.c set__fact.c set__tag.c set_cursor__fact.c set_cursor__tag.c set_item__fact.c set_item__tag.c sign.c skiplist__fact.c skiplist_node__fact.c str.c sym.c tag.c tuple.c type.c ucd.c ../libtommath/bn_cutoffs.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_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_cnt_lsb.c ../libtommath/bn_mp_complement.c ../libtommath/bn_mp_copy.c ../libtommath/bn_mp_count_bits.c ../libtommath/bn_mp_div.c ../libtommath/bn_mp_div_2.c ../libtommath/bn_mp_div_2d.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_exptmod.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_mag_u64.c ../libtommath/bn_mp_grow.c ../libtommath/bn_mp_init.c ../libtommath/bn_mp_init_copy.c ../libtommath/bn_mp_init_multi.c ../libtommath/bn_mp_init_size.c ../libtommath/bn_mp_invmod.c ../libtommath/bn_mp_lcm.c ../libtommath/bn_mp_lshd.c ../libtommath/bn_mp_mod.c ../libtommath/bn_mp_mod_2d.c ../libtommath/bn_mp_montgomery_calc_normalization.c ../libtommath/bn_mp_montgomery_reduce.c ../libtommath/bn_mp_montgomery_setup.c ../libtommath/bn_mp_mul.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_neg.c ../libtommath/bn_mp_or.c ../libtommath/bn_mp_radix_size.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_reduce_setup.c ../libtommath/bn_mp_rshd.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_u32.c ../libtommath/bn_mp_set_u64.c ../libtommath/bn_mp_set_ul.c ../libtommath/bn_mp_sqr.c ../libtommath/bn_mp_sqrt.c ../libtommath/bn_mp_sub.c ../libtommath/bn_mp_sub_d.c ../libtommath/bn_mp_xor.c ../libtommath/bn_mp_zero.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_invmod_fast.c ../libtommath/bn_s_mp_invmod_slow.c ../libtommath/bn_s_mp_karatsuba_mul.c ../libtommath/bn_s_mp_karatsuba_sqr.c ../libtommath/bn_s_mp_montgomery_reduce_fast.c ../libtommath/bn_s_mp_mul_digs.c ../libtommath/bn_s_mp_mul_digs_fast.c ../libtommath/bn_s_mp_mul_high_digs.c ../libtommath/bn_s_mp_mul_high_digs_fast.c ../libtommath/bn_s_mp_rand_platform.c ../libtommath/bn_s_mp_sqr.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 '
+HEADERS='abs.h arg.h array.h binding.h bool.h buf.h buf_file.h buf_inspect.h buf_inspect_s16.h buf_inspect_s16_binary.h buf_inspect_s16_decimal.h buf_inspect_s16_hexadecimal.h buf_inspect_s16_octal.h buf_inspect_s32.h buf_inspect_s32_binary.h buf_inspect_s32_decimal.h buf_inspect_s32_hexadecimal.h buf_inspect_s32_octal.h buf_inspect_s64.h buf_inspect_s64_binary.h buf_inspect_s64_decimal.h buf_inspect_s64_hexadecimal.h buf_inspect_s64_octal.h buf_inspect_s8.h buf_inspect_s8_binary.h buf_inspect_s8_decimal.h buf_inspect_s8_hexadecimal.h buf_inspect_s8_octal.h buf_inspect_sw.h buf_inspect_sw_binary.h buf_inspect_sw_decimal.h buf_inspect_sw_hexadecimal.h buf_inspect_sw_octal.h buf_inspect_u16.h buf_inspect_u16_binary.h buf_inspect_u16_decimal.h buf_inspect_u16_hexadecimal.h buf_inspect_u16_octal.h buf_inspect_u32.h buf_inspect_u32_binary.h buf_inspect_u32_decimal.h buf_inspect_u32_hexadecimal.h buf_inspect_u32_octal.h buf_inspect_u64.h buf_inspect_u64_binary.h buf_inspect_u64_decimal.h buf_inspect_u64_hexadecimal.h buf_inspect_u64_octal.h buf_inspect_u8.h buf_inspect_u8_binary.h buf_inspect_u8_decimal.h buf_inspect_u8_hexadecimal.h buf_inspect_u8_octal.h buf_inspect_uw.h buf_inspect_uw_binary.h buf_inspect_uw_decimal.h buf_inspect_uw_hexadecimal.h buf_inspect_uw_octal.h buf_parse.h buf_parse_c.h buf_parse_s16.h buf_parse_s32.h buf_parse_s64.h buf_parse_s8.h buf_parse_sw.h buf_parse_u16.h buf_parse_u32.h buf_parse_u64.h buf_parse_u8.h buf_parse_uw.h buf_save.h c3.h c3_main.h c_types.h call.h ceiling.h cfn.h character.h compare.h config.h env.h error.h error_handler.h eval.h fact.h facts.h facts_cursor.h facts_spec.h facts_spec_cursor.h facts_with.h facts_with_cursor.h file.h float.h fn.h fn_clause.h frame.h hash.h ident.h integer.h io.h list.h log.h module.h operator.h quote.h set__fact.h set__tag.h set_cursor__fact.h set_cursor__tag.h set_item__fact.h set_item__tag.h sha1.h sign.h skiplist__fact.h skiplist_node__fact.h str.h sym.h tag.h timespec.h tuple.h type.h types.h ucd.h '
+SOURCES='abs.c arg.c array.c binding.c bool.c buf.c buf_file.c buf_inspect.c buf_inspect_s16.c buf_inspect_s16_binary.c buf_inspect_s16_decimal.c buf_inspect_s16_hexadecimal.c buf_inspect_s16_octal.c buf_inspect_s32.c buf_inspect_s32_binary.c buf_inspect_s32_decimal.c buf_inspect_s32_hexadecimal.c buf_inspect_s32_octal.c buf_inspect_s64.c buf_inspect_s64_binary.c buf_inspect_s64_decimal.c buf_inspect_s64_hexadecimal.c buf_inspect_s64_octal.c buf_inspect_s8.c buf_inspect_s8_binary.c buf_inspect_s8_decimal.c buf_inspect_s8_hexadecimal.c buf_inspect_s8_octal.c buf_inspect_sw.c buf_inspect_sw_binary.c buf_inspect_sw_decimal.c buf_inspect_sw_hexadecimal.c buf_inspect_sw_octal.c buf_inspect_u16.c buf_inspect_u16_binary.c buf_inspect_u16_decimal.c buf_inspect_u16_hexadecimal.c buf_inspect_u16_octal.c buf_inspect_u32.c buf_inspect_u32_binary.c buf_inspect_u32_decimal.c buf_inspect_u32_hexadecimal.c buf_inspect_u32_octal.c buf_inspect_u64.c buf_inspect_u64_binary.c buf_inspect_u64_decimal.c buf_inspect_u64_hexadecimal.c buf_inspect_u64_octal.c buf_inspect_u8.c buf_inspect_u8_binary.c buf_inspect_u8_decimal.c buf_inspect_u8_hexadecimal.c buf_inspect_u8_octal.c buf_inspect_uw.c buf_inspect_uw_binary.c buf_inspect_uw_decimal.c buf_inspect_uw_hexadecimal.c buf_inspect_uw_octal.c buf_parse.c buf_parse_c.c buf_parse_s16.c buf_parse_s32.c buf_parse_s64.c buf_parse_s8.c buf_parse_sw.c buf_parse_u16.c buf_parse_u32.c buf_parse_u64.c buf_parse_u8.c buf_parse_uw.c buf_save.c c3.c call.c ceiling.c cfn.c character.c compare.c env.c error.c error_handler.c eval.c fact.c facts.c facts_cursor.c facts_spec.c facts_spec_cursor.c facts_with.c facts_with_cursor.c file.c fn.c fn_clause.c frame.c hash.c ident.c integer.c io.c list.c log.c module.c operator.c quote.c set__fact.c set__tag.c set_cursor__fact.c set_cursor__tag.c set_item__fact.c set_item__tag.c sign.c skiplist__fact.c skiplist_node__fact.c str.c sym.c tag.c timespec.c tuple.c type.c ucd.c '
+LO_SOURCES='abs.c arg.c array.c binding.c bool.c buf.c buf_file.c buf_inspect.c buf_inspect_s16.c buf_inspect_s16_binary.c buf_inspect_s16_decimal.c buf_inspect_s16_hexadecimal.c buf_inspect_s16_octal.c buf_inspect_s32.c buf_inspect_s32_binary.c buf_inspect_s32_decimal.c buf_inspect_s32_hexadecimal.c buf_inspect_s32_octal.c buf_inspect_s64.c buf_inspect_s64_binary.c buf_inspect_s64_decimal.c buf_inspect_s64_hexadecimal.c buf_inspect_s64_octal.c buf_inspect_s8.c buf_inspect_s8_binary.c buf_inspect_s8_decimal.c buf_inspect_s8_hexadecimal.c buf_inspect_s8_octal.c buf_inspect_sw.c buf_inspect_sw_binary.c buf_inspect_sw_decimal.c buf_inspect_sw_hexadecimal.c buf_inspect_sw_octal.c buf_inspect_u16.c buf_inspect_u16_binary.c buf_inspect_u16_decimal.c buf_inspect_u16_hexadecimal.c buf_inspect_u16_octal.c buf_inspect_u32.c buf_inspect_u32_binary.c buf_inspect_u32_decimal.c buf_inspect_u32_hexadecimal.c buf_inspect_u32_octal.c buf_inspect_u64.c buf_inspect_u64_binary.c buf_inspect_u64_decimal.c buf_inspect_u64_hexadecimal.c buf_inspect_u64_octal.c buf_inspect_u8.c buf_inspect_u8_binary.c buf_inspect_u8_decimal.c buf_inspect_u8_hexadecimal.c buf_inspect_u8_octal.c buf_inspect_uw.c buf_inspect_uw_binary.c buf_inspect_uw_decimal.c buf_inspect_uw_hexadecimal.c buf_inspect_uw_octal.c buf_parse.c buf_parse_c.c buf_parse_s16.c buf_parse_s32.c buf_parse_s64.c buf_parse_s8.c buf_parse_sw.c buf_parse_u16.c buf_parse_u32.c buf_parse_u64.c buf_parse_u8.c buf_parse_uw.c buf_save.c c3.c call.c ceiling.c cfn.c character.c compare.c env.c error.c error_handler.c eval.c fact.c facts.c facts_cursor.c facts_spec.c facts_spec_cursor.c facts_with.c facts_with_cursor.c file.c fn.c fn_clause.c frame.c hash.c ident.c integer.c io.c list.c log.c module.c operator.c quote.c set__fact.c set__tag.c set_cursor__fact.c set_cursor__tag.c set_item__fact.c set_item__tag.c sign.c skiplist__fact.c skiplist_node__fact.c str.c sym.c tag.c timespec.c tuple.c type.c ucd.c ../libtommath/bn_cutoffs.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_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_cnt_lsb.c ../libtommath/bn_mp_complement.c ../libtommath/bn_mp_copy.c ../libtommath/bn_mp_count_bits.c ../libtommath/bn_mp_div.c ../libtommath/bn_mp_div_2.c ../libtommath/bn_mp_div_2d.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_exptmod.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_mag_u64.c ../libtommath/bn_mp_grow.c ../libtommath/bn_mp_init.c ../libtommath/bn_mp_init_copy.c ../libtommath/bn_mp_init_multi.c ../libtommath/bn_mp_init_size.c ../libtommath/bn_mp_invmod.c ../libtommath/bn_mp_lcm.c ../libtommath/bn_mp_lshd.c ../libtommath/bn_mp_mod.c ../libtommath/bn_mp_mod_2d.c ../libtommath/bn_mp_montgomery_calc_normalization.c ../libtommath/bn_mp_montgomery_reduce.c ../libtommath/bn_mp_montgomery_setup.c ../libtommath/bn_mp_mul.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_neg.c ../libtommath/bn_mp_or.c ../libtommath/bn_mp_radix_size.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_reduce_setup.c ../libtommath/bn_mp_rshd.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_u32.c ../libtommath/bn_mp_set_u64.c ../libtommath/bn_mp_set_ul.c ../libtommath/bn_mp_sqr.c ../libtommath/bn_mp_sqrt.c ../libtommath/bn_mp_sub.c ../libtommath/bn_mp_sub_d.c ../libtommath/bn_mp_xor.c ../libtommath/bn_mp_zero.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_invmod_fast.c ../libtommath/bn_s_mp_invmod_slow.c ../libtommath/bn_s_mp_karatsuba_mul.c ../libtommath/bn_s_mp_karatsuba_sqr.c ../libtommath/bn_s_mp_montgomery_reduce_fast.c ../libtommath/bn_s_mp_mul_digs.c ../libtommath/bn_s_mp_mul_digs_fast.c ../libtommath/bn_s_mp_mul_high_digs.c ../libtommath/bn_s_mp_mul_high_digs_fast.c ../libtommath/bn_s_mp_rand_platform.c ../libtommath/bn_s_mp_sqr.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 '
diff --git a/libc3/tag.c b/libc3/tag.c
index 37d4567..262f08d 100644
--- a/libc3/tag.c
+++ b/libc3/tag.c
@@ -15,8 +15,25 @@
#include <stdlib.h>
#include <string.h>
#include <strings.h>
-#include "c3.h"
+#include "array.h"
+#include "buf.h"
+#include "buf_inspect.h"
+#include "buf_parse.h"
+#include "call.h"
+#include "cfn.h"
+#include "compare.h"
+#include "env.h"
+#include "fn.h"
#include "frame.h"
+#include "hash.h"
+#include "ident.h"
+#include "integer.h"
+#include "list.h"
+#include "quote.h"
+#include "str.h"
+#include "tag.h"
+#include "timespec.h"
+#include "tuple.h"
s_tag g_tag_first;
s_tag g_tag_last;
@@ -2206,13 +2223,8 @@ s_tag * tag_init_sym_1 (s_tag *tag, const s8 *p)
s_tag * tag_init_time (s_tag *tag)
{
struct timespec time;
- s_tag tmp;
- tag_init_tuple(&tmp, 2);
clock_gettime(CLOCK_REALTIME, &time);
- tag_init_s64(&tmp.data.tuple.tag[0], time.tv_sec);
- tag_init_s64(&tmp.data.tuple.tag[1], time.tv_nsec);
- *tag = tmp;
- return tag;
+ return timespec_to_tag(&time, tag);
}
s_tag * tag_init_tuple (s_tag *tag, uw count)
diff --git a/libc3/timespec.c b/libc3/timespec.c
new file mode 100644
index 0000000..8509507
--- /dev/null
+++ b/libc3/timespec.c
@@ -0,0 +1,24 @@
+/* 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 "tag.h"
+#include "timespec.h"
+
+s_tag * timespec_to_tag (const struct timespec *time, s_tag *dest)
+{
+ s_tag tmp;
+ tag_init_tuple(&tmp, 2);
+ tag_init_s64(&tmp.data.tuple.tag[0], time->tv_sec);
+ tag_init_s64(&tmp.data.tuple.tag[1], time->tv_nsec);
+ *dest = tmp;
+ return dest;
+}
diff --git a/libc3/timespec.h b/libc3/timespec.h
new file mode 100644
index 0000000..40ab9b7
--- /dev/null
+++ b/libc3/timespec.h
@@ -0,0 +1,28 @@
+/* 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.
+ */
+/**
+ * @file timespec.h
+ * @brief operations on struct timespec
+ *
+ * Struct timespec
+ */
+#ifndef TIMESPEC_H
+#define TIMESPEC_H
+
+#include <time.h>
+#include "types.h"
+
+/* Observers */
+s_tag * timespec_to_tag (const struct timespec *time, s_tag *dest);
+
+#endif /* TIMESPEC_H */
diff --git a/sources.mk b/sources.mk
index 4104b29..d523517 100644
--- a/sources.mk
+++ b/sources.mk
@@ -5,10 +5,10 @@ C3_CONFIGURES = \
c3s/update_sources \
ic3/configure \
ic3/update_sources \
- libc3/configure \
libc3/update_sources \
- libtommath/update_sources \
+ libc3/configure \
libtommath/configure \
+ libtommath/update_sources \
test/configure \
test/update_sources \
ucd2c/configure \
@@ -28,309 +28,314 @@ C3_C_SOURCES = \
c3s/buf_readline.c \
c3s/c3s.c \
c3s/buf_readline.h \
- ic3/ic3.c \
ic3/buf_linenoise.c \
+ ic3/ic3.c \
ic3/buf_linenoise.h \
ic3/linenoise.c \
- libc3/abs.c \
- libc3/abs.h \
- libc3/buf.c \
- libc3/buf.h \
- libc3/buf_inspect_s8_decimal.h \
- libc3/buf_inspect_s8_hexadecimal.c \
- libc3/buf_inspect_s8_hexadecimal.h \
- libc3/buf_inspect_s16.c \
- libc3/buf_inspect_s16.h \
- libc3/buf_inspect_s16_binary.c \
- libc3/buf_inspect_s16_binary.h \
- libc3/buf_parse_s8.c \
- libc3/call.c \
+ libc3/buf_parse_u64.h \
+ libc3/buf_parse_uw.c \
+ libc3/buf_parse_uw.h \
libc3/arg.c \
libc3/arg.h \
- libc3/array.c \
- libc3/array.h \
+ 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/integer.c \
libc3/binding.c \
- libc3/c3.c \
- 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/binding.h \
- libc3/buf_inspect_s16_hexadecimal.c \
- libc3/buf_inspect_s16_hexadecimal.h \
+ libc3/facts_with_cursor.c \
+ libc3/array.c \
+ libc3/array.h \
+ libc3/buf.c \
+ libc3/buf_parse.c \
+ libc3/integer.h \
+ libc3/types.h \
+ libc3/type.c \
+ libc3/buf_inspect_s8.c \
+ libc3/buf_inspect_s8.h \
+ libc3/buf_inspect_s16.c \
+ libc3/buf_inspect_s16.h \
libc3/buf_inspect_s32.c \
libc3/buf_inspect_s32.h \
- libc3/buf_inspect_s32_binary.c \
- libc3/buf_inspect_s32_binary.h \
- libc3/buf_inspect_s32_octal.c \
- libc3/bool.c \
- libc3/bool.h \
libc3/buf_file.c \
libc3/buf_file.h \
- 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_s64_octal.c \
- libc3/buf_inspect_s64_octal.h \
- libc3/buf_inspect_s64_decimal.c \
- libc3/buf_parse.h \
+ libc3/bool.c \
+ libc3/io.h \
+ libc3/skiplist__fact.c \
+ libc3/skiplist__fact.h \
+ libc3/skiplist_node__fact.c \
+ libc3/skiplist_node__fact.h \
+ libc3/io.c \
+ libc3/abs.h \
+ libc3/fn_clause.c \
+ libc3/file.c \
+ libc3/ceiling.c \
libc3/buf_parse_c.c \
+ libc3/buf_parse_c.h \
libc3/buf_save.c \
- libc3/buf_inspect_s64_decimal.h \
- libc3/facts_spec_cursor.c \
- libc3/buf_inspect_s64_hexadecimal.c \
- libc3/buf_inspect_s64_hexadecimal.h \
+ libc3/buf_parse.h \
+ libc3/compare.c \
+ libc3/buf_inspect_u64_hexadecimal.h \
+ libc3/buf_inspect_uw.h \
+ libc3/buf_parse_s8.c \
+ 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/buf_parse_s64.c \
+ libc3/call.h \
+ libc3/bool.h \
+ libc3/buf_save.h \
+ libc3/fact.h \
+ libc3/error.c \
+ libc3/error.h \
+ libc3/env.h \
+ libc3/character.h \
+ libc3/compare.h \
+ libc3/operator.h \
+ libc3/operator.c \
+ libc3/tag.h \
+ libc3/sign.h \
+ libc3/buf.h \
+ libc3/buf_inspect_s64.c \
+ libc3/buf_inspect_s64.h \
libc3/buf_inspect_sw.c \
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_decimal.h \
- libc3/buf_inspect_sw_hexadecimal.c \
- libc3/buf_parse_c.h \
- libc3/buf_save.h \
- libc3/c3.h \
- libc3/c_types.h \
- libc3/call.h \
- libc3/buf_inspect_sw_hexadecimal.h \
libc3/buf_inspect_u8.c \
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_u8_hexadecimal.c \
- libc3/buf_inspect_u8_hexadecimal.h \
libc3/buf_inspect_u16.c \
- libc3/ceiling.c \
- libc3/ceiling.h \
- libc3/cfn.c \
- libc3/cfn.h \
- libc3/character.c \
- libc3/character.h \
- 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/buf_inspect_u16_hexadecimal.h \
- libc3/buf_inspect_u32.c \
- libc3/buf_inspect_u32.h \
- libc3/buf_inspect_u64.c \
- libc3/compare.c \
- libc3/buf_inspect.c \
- libc3/compare.h \
- libc3/buf_parse.c \
- libc3/env.c \
- libc3/env.h \
- libc3/facts.c \
- libc3/facts.h \
- libc3/hash.c \
- libc3/ident.c \
- libc3/operator.c \
- libc3/operator.h \
- libc3/sym.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/error.c \
- libc3/error.h \
libc3/error_handler.c \
+ libc3/set_cursor.c.in \
+ libc3/set_cursor.h.in \
+ libc3/set_item.c.in \
+ libc3/set_item.h.in \
libc3/error_handler.h \
libc3/eval.c \
libc3/eval.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_u32_hexadecimal.h \
- libc3/buf_inspect_u64.h \
- libc3/buf_inspect_u64_binary.c \
- libc3/buf_inspect_u64_binary.h \
libc3/fact.c \
- libc3/fact.h \
+ libc3/facts.h \
libc3/facts_cursor.c \
+ libc3/fn.h \
+ libc3/ceiling.h \
+ 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_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/set__fact.c \
+ libc3/sym.c \
libc3/facts_cursor.h \
libc3/facts_spec.c \
+ libc3/frame.h \
+ libc3/sign.c \
+ libc3/skiplist.c.in \
+ libc3/timespec.h \
libc3/facts_spec.h \
+ libc3/facts_spec_cursor.c \
+ libc3/hash.c \
libc3/facts_spec_cursor.h \
- 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/buf_parse_s64.c \
+ libc3/buf_inspect_s16_binary.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/c3.c \
+ libc3/facts_with.c \
+ libc3/facts_with.h \
+ libc3/ident.c \
+ libc3/buf_parse_u.c.in \
+ libc3/fn_clause.h \
+ libc3/abs.c \
+ libc3/facts_with_cursor.h \
+ libc3/ident.h \
+ libc3/str.c \
+ libc3/c_types.h \
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_s.c.in \
libc3/buf_parse_u16.c \
- libc3/facts_with.c \
- libc3/facts_with.h \
- libc3/facts_with_cursor.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/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/facts_with_cursor.h \
- libc3/float.h \
- libc3/fn.c \
- libc3/fn.h \
- libc3/frame.c \
- libc3/frame.h \
- libc3/set_item__tag.h \
- libc3/skiplist__fact.c \
- libc3/skiplist__fact.h \
- libc3/skiplist_node__fact.c \
- libc3/skiplist_node__fact.h \
- libc3/types.h \
- libc3/hash.h \
- libc3/ident.h \
- libc3/integer.c \
- libc3/integer.h \
- libc3/io.c \
- libc3/io.h \
+ libc3/buf_inspect.c \
+ libc3/set.c.in \
libc3/list.c \
- libc3/list.h \
libc3/log.c \
libc3/log.h \
- libc3/buf_inspect_s.h.in \
+ libc3/sym.h \
+ libc3/c3.h \
libc3/module.c \
- libc3/str.c \
- libc3/module.h \
- libc3/buf_parse_u.c.in \
libc3/quote.c \
libc3/quote.h \
- libc3/set.c.in \
+ libc3/character.c \
+ libc3/cfn.c \
+ libc3/fn.c \
+ libc3/module.h \
libc3/set.h.in \
- libc3/buf_inspect_s_base.h.in \
- libc3/sha1.h \
- libc3/set_cursor.c.in \
- libc3/set_cursor.h.in \
- libc3/buf_inspect.h \
- libc3/set_item.c.in \
- libc3/set_item.h.in \
- libc3/sign.c \
- libc3/sign.h \
- libc3/skiplist.c.in \
+ libc3/tag.c \
libc3/skiplist.h.in \
- libc3/type.h \
+ libc3/sha1.h \
libc3/skiplist_node.c.in \
libc3/skiplist_node.h.in \
- libc3/str.h \
- libc3/ucd.c \
- libc3/sym.h \
libc3/tuple.c \
libc3/tuple.h \
- libc3/type.c \
+ libc3/ucd.c \
libc3/ucd.h \
- libc3/buf_parse_s.c.in \
+ libc3/str.h \
+ libc3/type.h \
libc3/buf_parse_s.h.in \
- libc3/buf_inspect_s.c.in \
libc3/buf_parse_u.h.in \
+ libc3/facts.c \
+ libc3/float.h \
+ libc3/frame.c \
libc3/buf_inspect_s_base.c.in \
+ libc3/buf_inspect_s.c.in \
+ libc3/buf_inspect_u16.h \
+ libc3/buf_inspect_s.h.in \
+ libc3/buf_inspect_u32.c \
+ libc3/buf_inspect_u32.h \
+ libc3/buf_inspect_u64.c \
+ libc3/buf_inspect_u64.h \
libc3/buf_inspect_u.c.in \
- libc3/buf_inspect_u.h.in \
+ libc3/buf_inspect_u64_binary.c \
+ libc3/buf_inspect_uw.c \
libc3/buf_inspect_u_base.c.in \
+ libc3/buf_inspect_u.h.in \
libc3/buf_inspect_u_base.h.in \
- libc3/tag.h \
- libc3/tag.c \
- libc3/fn_clause.h \
- libc3/fn_clause.c \
+ libc3/cfn.h \
+ libc3/buf_inspect_s16_binary.c \
+ libc3/file.h \
+ libc3/buf_inspect_s16_octal.c \
+ libc3/buf_inspect_s16_octal.h \
+ libc3/buf_inspect_s32_binary.c \
+ libc3/buf_inspect_s32_binary.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_s32_octal.c \
+ libc3/buf_inspect_s32_octal.h \
+ libc3/buf_inspect_s64_binary.c \
+ libc3/buf_inspect_s64_binary.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_s64_octal.c \
+ libc3/buf_inspect_s64_octal.h \
+ libc3/buf_inspect_s8_binary.c \
+ libc3/buf_inspect_s8_binary.h \
+ libc3/buf_inspect_s8_decimal.c \
+ libc3/buf_inspect_s8_decimal.h \
+ libc3/buf_inspect_s8_hexadecimal.c \
+ libc3/buf_inspect_s8_hexadecimal.h \
+ libc3/buf_inspect_s8_octal.c \
+ libc3/buf_inspect_s8_octal.h \
+ libc3/buf_inspect_sw_binary.c \
+ libc3/buf_inspect_sw_binary.h \
+ libc3/buf_inspect_sw_decimal.c \
+ libc3/buf_inspect_sw_decimal.h \
+ libc3/buf_inspect_sw_hexadecimal.c \
+ libc3/buf_inspect_sw_hexadecimal.h \
+ libc3/buf_inspect_sw_octal.c \
+ libc3/buf_inspect_sw_octal.h \
+ libc3/buf_inspect_u16_binary.c \
+ libc3/buf_inspect_u16_binary.h \
+ libc3/buf_inspect_u16_decimal.c \
+ libc3/buf_inspect_u16_decimal.h \
+ libc3/buf_inspect.h \
+ libc3/buf_inspect_u16_hexadecimal.c \
+ libc3/buf_inspect_u16_hexadecimal.h \
+ libc3/buf_inspect_u16_octal.c \
+ libc3/buf_inspect_u16_octal.h \
+ libc3/buf_inspect_u32_binary.c \
+ libc3/buf_inspect_u32_binary.h \
+ libc3/buf_inspect_u32_decimal.c \
+ libc3/buf_inspect_u32_decimal.h \
+ libc3/buf_inspect_u32_hexadecimal.c \
+ libc3/buf_inspect_u32_hexadecimal.h \
+ libc3/buf_inspect_u32_octal.c \
+ libc3/buf_inspect_u32_octal.h \
+ libc3/buf_inspect_uw_binary.c \
+ libc3/buf_inspect_uw_binary.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_inspect_uw_octal.c \
+ libc3/buf_inspect_uw_octal.h \
+ libc3/env.c \
+ libc3/timespec.c \
+ libc3/buf_inspect_s_base.h.in \
+ libc3/buf_inspect_u8_binary.c \
+ libc3/buf_inspect_u8_binary.h \
+ libc3/buf_inspect_u8_decimal.c \
+ libc3/buf_inspect_u8_decimal.h \
+ libc3/buf_inspect_u8_hexadecimal.c \
+ libc3/buf_inspect_u8_hexadecimal.h \
+ libc3/buf_inspect_u8_octal.c \
+ libc3/buf_inspect_u8_octal.h \
+ libc3/list.h \
libc3/c3_main.h \
- test/buf_inspect_test.c \
- test/bool_test.c \
- test/buf_parse_test.c \
+ libc3/call.c \
+ libc3/hash.h \
+ test/facts_cursor_test.c \
test/facts_test.c \
- test/buf_file_test.c \
- test/libc3_test.c \
- test/list_test.c \
+ test/facts_with_test.c \
+ test/set__fact_test.c \
+ test/fn_test.c \
test/test.c \
+ test/buf_parse_test.c \
+ test/array_test.c \
+ test/compare_test.c \
+ test/set__tag_test.c \
+ test/tag_test.c \
+ test/sym_test.c \
+ test/tag_test.h \
+ test/tuple_test.c \
+ test/types_test.c \
+ test/call_test.c \
+ test/skiplist__fact_test.c \
+ test/fact_test.c \
+ test/compare_test.h \
+ test/fact_test.h \
+ test/str_test.c \
+ test/list_test.c \
+ test/env_test.c \
+ test/hash_test.c \
+ test/ident_test.c \
+ test/libc3_test.c \
+ test/buf_inspect_test.c \
test/test.h \
- test/buf_parse_test_u8.c \
- test/buf_parse_test.h \
- test/buf_parse_test_s16.c \
+ test/bool_test.c \
+ test/cfn_test.c \
+ test/buf_parse_test_s8.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/buf_parse_test_u16.c \
+ test/buf_parse_test_u8.c \
test/buf_parse_test_u32.c \
- test/buf_test.c \
test/buf_parse_test_u64.c \
- test/call_test.c \
- test/facts_cursor_test.c \
- test/cfn_test.c \
+ test/buf_parse_test.h \
+ test/buf_test.c \
+ test/buf_parse_test_su.h \
test/character_test.c \
- test/compare_test.c \
- test/compare_test.h \
- test/env_test.c \
- test/fact_test.c \
- test/fact_test.h \
- test/facts_with_test.c \
- test/hash_test.c \
- test/ident_test.c \
- test/set__fact_test.c \
- test/set__tag_test.c \
- test/skiplist__fact_test.c \
- test/str_test.c \
- test/sym_test.c \
- test/tag_test.c \
- test/tag_test.h \
- test/array_test.c \
- test/tuple_test.c \
- test/types_test.c \
+ test/buf_parse_test_s16.c \
+ test/buf_file_test.c \
ucd2c/ucd.h \
ucd2c/ucd2c.c \
diff --git a/sources.sh b/sources.sh
index 306d817..3eecf10 100644
--- a/sources.sh
+++ b/sources.sh
@@ -1,4 +1,4 @@
# sources.sh generated by update_sources
-C3_CONFIGURES='c3c/configure c3s/configure c3s/update_sources ic3/configure ic3/update_sources libc3/configure libc3/update_sources libtommath/update_sources libtommath/configure test/configure test/update_sources ucd2c/configure '
+C3_CONFIGURES='c3c/configure c3s/configure c3s/update_sources ic3/configure ic3/update_sources libc3/update_sources libc3/configure libtommath/configure libtommath/update_sources test/configure test/update_sources ucd2c/configure '
C3_MAKEFILES='c3c/Makefile c3s/Makefile ic3/Makefile libc3/Makefile libc3/gen.mk libtommath/Makefile test/Makefile 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 libc3/abs.c libc3/abs.h libc3/buf.c libc3/buf.h libc3/buf_inspect_s8_decimal.h libc3/buf_inspect_s8_hexadecimal.c libc3/buf_inspect_s8_hexadecimal.h libc3/buf_inspect_s16.c libc3/buf_inspect_s16.h libc3/buf_inspect_s16_binary.c libc3/buf_inspect_s16_binary.h libc3/buf_parse_s8.c libc3/call.c libc3/arg.c libc3/arg.h libc3/array.c libc3/array.h libc3/binding.c libc3/c3.c 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/binding.h libc3/buf_inspect_s16_hexadecimal.c libc3/buf_inspect_s16_hexadecimal.h libc3/buf_inspect_s32.c libc3/buf_inspect_s32.h libc3/buf_inspect_s32_binary.c libc3/buf_inspect_s32_binary.h libc3/buf_inspect_s32_octal.c libc3/bool.c libc3/bool.h libc3/buf_file.c libc3/buf_file.h 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_s64_octal.c libc3/buf_inspect_s64_octal.h libc3/buf_inspect_s64_decimal.c libc3/buf_parse.h libc3/buf_parse_c.c libc3/buf_save.c libc3/buf_inspect_s64_decimal.h libc3/facts_spec_cursor.c libc3/buf_inspect_s64_hexadecimal.c libc3/buf_inspect_s64_hexadecimal.h libc3/buf_inspect_sw.c 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_decimal.h libc3/buf_inspect_sw_hexadecimal.c libc3/buf_parse_c.h libc3/buf_save.h libc3/c3.h libc3/c_types.h libc3/call.h libc3/buf_inspect_sw_hexadecimal.h libc3/buf_inspect_u8.c 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_u8_hexadecimal.c libc3/buf_inspect_u8_hexadecimal.h libc3/buf_inspect_u16.c libc3/ceiling.c libc3/ceiling.h libc3/cfn.c libc3/cfn.h libc3/character.c libc3/character.h 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/buf_inspect_u16_hexadecimal.h libc3/buf_inspect_u32.c libc3/buf_inspect_u32.h libc3/buf_inspect_u64.c libc3/compare.c libc3/buf_inspect.c libc3/compare.h libc3/buf_parse.c libc3/env.c libc3/env.h libc3/facts.c libc3/facts.h libc3/hash.c libc3/ident.c libc3/operator.c libc3/operator.h libc3/sym.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/error.c libc3/error.h libc3/error_handler.c libc3/error_handler.h libc3/eval.c libc3/eval.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_u32_hexadecimal.h libc3/buf_inspect_u64.h libc3/buf_inspect_u64_binary.c libc3/buf_inspect_u64_binary.h libc3/fact.c libc3/fact.h libc3/facts_cursor.c 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_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/set__fact.c libc3/facts_cursor.h libc3/facts_spec.c libc3/facts_spec.h libc3/facts_spec_cursor.h 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/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/facts_with.c libc3/facts_with.h libc3/facts_with_cursor.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/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/facts_with_cursor.h libc3/float.h libc3/fn.c libc3/fn.h libc3/frame.c libc3/frame.h libc3/set_item__tag.h libc3/skiplist__fact.c libc3/skiplist__fact.h libc3/skiplist_node__fact.c libc3/skiplist_node__fact.h libc3/types.h libc3/hash.h libc3/ident.h libc3/integer.c libc3/integer.h libc3/io.c libc3/io.h libc3/list.c libc3/list.h libc3/log.c libc3/log.h libc3/buf_inspect_s.h.in libc3/module.c 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/sha1.h libc3/set_cursor.c.in libc3/set_cursor.h.in libc3/buf_inspect.h libc3/set_item.c.in libc3/set_item.h.in libc3/sign.c libc3/sign.h libc3/skiplist.c.in libc3/skiplist.h.in libc3/type.h libc3/skiplist_node.c.in libc3/skiplist_node.h.in libc3/str.h libc3/ucd.c libc3/sym.h libc3/tuple.c libc3/tuple.h libc3/type.c libc3/ucd.h libc3/buf_parse_s.c.in libc3/buf_parse_s.h.in libc3/buf_inspect_s.c.in libc3/buf_parse_u.h.in libc3/buf_inspect_s_base.c.in libc3/buf_inspect_u.c.in libc3/buf_inspect_u.h.in libc3/buf_inspect_u_base.c.in libc3/buf_inspect_u_base.h.in libc3/tag.h libc3/tag.c libc3/fn_clause.h libc3/fn_clause.c libc3/c3_main.h test/buf_inspect_test.c test/bool_test.c test/buf_parse_test.c test/facts_test.c test/buf_file_test.c test/libc3_test.c test/list_test.c test/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/buf_parse_test_u16.c test/buf_parse_test_u32.c test/buf_test.c test/buf_parse_test_u64.c test/call_test.c test/facts_cursor_test.c test/cfn_test.c test/character_test.c test/compare_test.c test/compare_test.h test/env_test.c test/fact_test.c test/fact_test.h test/facts_with_test.c test/hash_test.c test/ident_test.c test/set__fact_test.c test/set__tag_test.c test/skiplist__fact_test.c test/str_test.c test/sym_test.c test/tag_test.c test/tag_test.h test/array_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/buf_linenoise.c ic3/ic3.c ic3/buf_linenoise.h ic3/linenoise.c libc3/buf_parse_u64.h libc3/buf_parse_uw.c libc3/buf_parse_uw.h libc3/arg.c libc3/arg.h 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/integer.c libc3/binding.c libc3/binding.h libc3/facts_with_cursor.c libc3/array.c libc3/array.h libc3/buf.c libc3/buf_parse.c libc3/integer.h libc3/types.h libc3/type.c libc3/buf_inspect_s8.c libc3/buf_inspect_s8.h libc3/buf_inspect_s16.c libc3/buf_inspect_s16.h libc3/buf_inspect_s32.c libc3/buf_inspect_s32.h libc3/buf_file.c libc3/buf_file.h libc3/bool.c libc3/io.h libc3/skiplist__fact.c libc3/skiplist__fact.h libc3/skiplist_node__fact.c libc3/skiplist_node__fact.h libc3/io.c libc3/abs.h libc3/fn_clause.c libc3/file.c libc3/ceiling.c libc3/buf_parse_c.c libc3/buf_parse_c.h libc3/buf_save.c libc3/buf_parse.h libc3/compare.c libc3/buf_inspect_u64_hexadecimal.h libc3/buf_inspect_uw.h libc3/buf_parse_s8.c 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/buf_parse_s64.c libc3/call.h libc3/bool.h libc3/buf_save.h libc3/fact.h libc3/error.c libc3/error.h libc3/env.h libc3/character.h libc3/compare.h libc3/operator.h libc3/operator.c libc3/tag.h libc3/sign.h libc3/buf.h libc3/buf_inspect_s64.c libc3/buf_inspect_s64.h libc3/buf_inspect_sw.c libc3/buf_inspect_sw.h libc3/buf_inspect_u8.c libc3/buf_inspect_u8.h libc3/buf_inspect_u16.c libc3/error_handler.c libc3/set_cursor.c.in libc3/set_cursor.h.in libc3/set_item.c.in libc3/set_item.h.in libc3/error_handler.h libc3/eval.c libc3/eval.h libc3/fact.c libc3/facts.h libc3/facts_cursor.c libc3/fn.h libc3/ceiling.h 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/sym.c libc3/facts_cursor.h libc3/facts_spec.c libc3/frame.h libc3/sign.c libc3/skiplist.c.in libc3/timespec.h libc3/facts_spec.h libc3/facts_spec_cursor.c libc3/hash.c libc3/facts_spec_cursor.h libc3/buf_inspect_s16_binary.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/c3.c libc3/facts_with.c libc3/facts_with.h libc3/ident.c libc3/buf_parse_u.c.in libc3/fn_clause.h libc3/abs.c libc3/facts_with_cursor.h libc3/ident.h libc3/str.c libc3/c_types.h 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_s.c.in 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_inspect.c libc3/set.c.in libc3/list.c libc3/log.c libc3/log.h libc3/sym.h libc3/c3.h libc3/module.c libc3/quote.c libc3/quote.h libc3/character.c libc3/cfn.c libc3/fn.c libc3/module.h libc3/set.h.in libc3/tag.c libc3/skiplist.h.in libc3/sha1.h libc3/skiplist_node.c.in libc3/skiplist_node.h.in libc3/tuple.c libc3/tuple.h libc3/ucd.c libc3/ucd.h libc3/str.h libc3/type.h libc3/buf_parse_s.h.in libc3/buf_parse_u.h.in libc3/facts.c libc3/float.h libc3/frame.c libc3/buf_inspect_s_base.c.in libc3/buf_inspect_s.c.in libc3/buf_inspect_u16.h libc3/buf_inspect_s.h.in libc3/buf_inspect_u32.c libc3/buf_inspect_u32.h libc3/buf_inspect_u64.c libc3/buf_inspect_u64.h libc3/buf_inspect_u.c.in libc3/buf_inspect_u64_binary.c libc3/buf_inspect_uw.c libc3/buf_inspect_u_base.c.in libc3/buf_inspect_u.h.in libc3/buf_inspect_u_base.h.in libc3/cfn.h libc3/buf_inspect_s16_binary.c libc3/file.h libc3/buf_inspect_s16_octal.c libc3/buf_inspect_s16_octal.h libc3/buf_inspect_s32_binary.c libc3/buf_inspect_s32_binary.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_s32_octal.c libc3/buf_inspect_s32_octal.h libc3/buf_inspect_s64_binary.c libc3/buf_inspect_s64_binary.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_s64_octal.c libc3/buf_inspect_s64_octal.h libc3/buf_inspect_s8_binary.c libc3/buf_inspect_s8_binary.h libc3/buf_inspect_s8_decimal.c libc3/buf_inspect_s8_decimal.h libc3/buf_inspect_s8_hexadecimal.c libc3/buf_inspect_s8_hexadecimal.h libc3/buf_inspect_s8_octal.c libc3/buf_inspect_s8_octal.h libc3/buf_inspect_sw_binary.c libc3/buf_inspect_sw_binary.h libc3/buf_inspect_sw_decimal.c libc3/buf_inspect_sw_decimal.h libc3/buf_inspect_sw_hexadecimal.c libc3/buf_inspect_sw_hexadecimal.h libc3/buf_inspect_sw_octal.c libc3/buf_inspect_sw_octal.h libc3/buf_inspect_u16_binary.c libc3/buf_inspect_u16_binary.h libc3/buf_inspect_u16_decimal.c libc3/buf_inspect_u16_decimal.h libc3/buf_inspect.h libc3/buf_inspect_u16_hexadecimal.c libc3/buf_inspect_u16_hexadecimal.h libc3/buf_inspect_u16_octal.c libc3/buf_inspect_u16_octal.h libc3/buf_inspect_u32_binary.c libc3/buf_inspect_u32_binary.h libc3/buf_inspect_u32_decimal.c libc3/buf_inspect_u32_decimal.h libc3/buf_inspect_u32_hexadecimal.c libc3/buf_inspect_u32_hexadecimal.h libc3/buf_inspect_u32_octal.c libc3/buf_inspect_u32_octal.h libc3/buf_inspect_uw_binary.c libc3/buf_inspect_uw_binary.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_inspect_uw_octal.c libc3/buf_inspect_uw_octal.h libc3/env.c libc3/timespec.c libc3/buf_inspect_s_base.h.in libc3/buf_inspect_u8_binary.c libc3/buf_inspect_u8_binary.h libc3/buf_inspect_u8_decimal.c libc3/buf_inspect_u8_decimal.h libc3/buf_inspect_u8_hexadecimal.c libc3/buf_inspect_u8_hexadecimal.h libc3/buf_inspect_u8_octal.c libc3/buf_inspect_u8_octal.h libc3/list.h libc3/c3_main.h libc3/call.c libc3/hash.h test/facts_cursor_test.c test/facts_test.c test/facts_with_test.c test/set__fact_test.c test/fn_test.c test/test.c test/buf_parse_test.c test/array_test.c test/compare_test.c test/set__tag_test.c test/tag_test.c test/sym_test.c test/tag_test.h test/tuple_test.c test/types_test.c test/call_test.c test/skiplist__fact_test.c test/fact_test.c test/compare_test.h test/fact_test.h test/str_test.c test/list_test.c test/env_test.c test/hash_test.c test/ident_test.c test/libc3_test.c test/buf_inspect_test.c test/test.h test/bool_test.c test/cfn_test.c test/buf_parse_test_s8.c test/buf_parse_test_s32.c test/buf_parse_test_s64.c test/buf_parse_test_u16.c test/buf_parse_test_u8.c test/buf_parse_test_u32.c test/buf_parse_test_u64.c test/buf_parse_test.h test/buf_test.c test/buf_parse_test_su.h test/character_test.c test/buf_parse_test_s16.c test/buf_file_test.c ucd2c/ucd.h ucd2c/ucd2c.c '