diff --git a/.ikc3_history b/.ikc3_history
index 7b5fdad..462d6a8 100644
--- a/.ikc3_history
+++ b/.ikc3_history
@@ -1,4 +1,3 @@
-z
if true then true end
if 42 then true end
if 0 then true end
@@ -97,3 +96,4 @@ op.id
type(op.id)
type(op.sym)
(Str) op.sym
+[fd: (S32) -1]
diff --git a/configure b/configure
index 2eb0933..93cde43 100755
--- a/configure
+++ b/configure
@@ -39,4 +39,13 @@ echo "HAVE_ASAN = ${HAVE_ASAN}" >> ${CONFIG_MK}
update_config_mk
env_reset
-config_subdirs libtommath ucd2c libkc3 ikc3 kc3s ekc3 test libkc3_window
+config_subdirs \
+ libtommath \
+ ucd2c \
+ libkc3 \
+ ikc3 \
+ kc3s \
+ ekc3 \
+ http \
+ test \
+ libkc3_window
diff --git a/http/socket.c b/http/socket.c
index a733470..cf27876 100644
--- a/http/socket.c
+++ b/http/socket.c
@@ -12,12 +12,12 @@
*/
#include <errno.h>
#include <string.h>
-#include <sys/socket.h>
#include <netdb.h>
#include <netinet/in.h>
#include <unistd.h>
#include <libkc3/kc3.h>
#include "socket.h"
+#include "socket_buf.h"
void socket_close (p_socket s)
{
@@ -49,57 +49,6 @@ p_socket socket_init_accept (p_socket s, p_socket listening)
return s;
}
-p_socket socket_init_connect (p_socket s, const s_str *host,
- const s_str *service)
-{
- struct addrinfo hints = {0};
- struct addrinfo *res;
- struct addrinfo *res0;
- s32 e;
- const char *error_reason;
- t_socket tmp;
- assert(s);
- assert(host);
- hints.ai_family = AF_INET;
- e = getaddrinfo(host->ptr.pchar, service->ptr.pchar, &hints, &res0);
- if (e) {
- err_write_1("socket_init_connect(");
- err_write_1(host->ptr.pchar);
- err_write_1(", ");
- err_write_1(service->ptr.pchar);
- err_write_1("): getaddrinfo: ");
- err_puts(gai_strerror(e));
- assert(! "socket_init_connect: getaddrinfo");
- return NULL;
- }
- e = 0;
- tmp = -1;
- res = res0;
- while (res) {
- tmp = socket(res->ai_family, SOCK_STREAM, res->ai_protocol);
- if (tmp < 0) {
- e = errno;
- error_reason = "socket_init_connect: socket: ";
- goto next;
- }
- if (connect(tmp, res->ai_addr, res->ai_addrlen) < 0) {
- e = errno;
- error_reason = "socket_init_connect: connect: ";
- goto next;
- }
- next:
- res = res->ai_next;
- }
- if (tmp < 0) {
- err_write_1(error_reason);
- err_puts(strerror(e));
- assert(! "socket_init_connect");
- return NULL;
- }
- *s = tmp;
- return s;
-}
-
p_socket socket_init_listen (p_socket s, const s_str *host,
const s_str *service)
{
@@ -108,7 +57,7 @@ p_socket socket_init_listen (p_socket s, const s_str *host,
struct addrinfo *res0;
s32 e;
const char *error_reason;
- t_socket tmp;
+ t_socket sockfd;
assert(s);
assert(host);
hints.ai_family = AF_INET;
@@ -124,26 +73,26 @@ p_socket socket_init_listen (p_socket s, const s_str *host,
return NULL;
}
e = 0;
- tmp = -1;
+ sockfd = -1;
res = res0;
while (res) {
- tmp = socket(res->ai_family, SOCK_STREAM, res->ai_protocol);
- if (tmp < 0) {
+ sockfd = socket(res->ai_family, SOCK_STREAM, res->ai_protocol);
+ if (sockfd < 0) {
e = errno;
error_reason = "socket_init_listen: socket: ";
goto next;
}
- if (setsockopt(tmp, SOL_SOCKET, SO_REUSEADDR, &(int) {1},
+ if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &(int) {1},
sizeof(int)) < 0) {
error_reason = "setsockopt(SO_REUSEADDR)";
goto next;
}
- if (bind(tmp, res->ai_addr, res->ai_addrlen) < 0) {
+ if (bind(sockfd, res->ai_addr, res->ai_addrlen) < 0) {
e = errno;
error_reason = "socket_init_listen: bind: ";
goto next;
}
- if (listen(tmp, SOMAXCONN) < 0) {
+ if (listen(sockfd, SOMAXCONN) < 0) {
e = errno;
error_reason = "socket_init_listen: listen: ";
goto next;
@@ -151,12 +100,12 @@ p_socket socket_init_listen (p_socket s, const s_str *host,
next:
res = res->ai_next;
}
- if (tmp < 0) {
+ if (sockfd < 0) {
err_write_1(error_reason);
err_puts(strerror(e));
assert(! "socket_init_listen");
return NULL;
}
- *s = tmp;
+ *s = sockfd;
return s;
}
diff --git a/http/socket_buf.c b/http/socket_buf.c
new file mode 100644
index 0000000..1d2e8c6
--- /dev/null
+++ b/http/socket_buf.c
@@ -0,0 +1,109 @@
+/* kc3
+ * Copyright 2022,2023,2024 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 <errno.h>
+#include <string.h>
+#include <netdb.h>
+#include <netinet/in.h>
+#include <unistd.h>
+#include <libkc3/kc3.h>
+#include "socket_buf.h"
+
+void socket_buf_clean (s_socket_buf *sb)
+{
+ assert(sb);
+ close(sb->sockfd);
+ buf_rw_clean(&sb->buf_rw);
+}
+
+s_socket_buf * socket_buf_init (s_socket_buf *sb, t_socket sockfd,
+ struct sockaddr *addr,
+ u32 addr_len)
+{
+ s_socket_buf tmp = {0};
+ assert(sb);
+ assert(sockfd >= 0);
+ assert(addr);
+ assert(addr_len);
+ if (! buf_rw_init_alloc(&tmp.buf_rw, BUF_SIZE)) {
+ err_puts("socket_buf_init: buf_rw_init_alloc");
+ assert(! "socket_buf_init: buf_rw_init_alloc");
+ return NULL;
+ }
+ tmp.buf_rw.r.user_ptr = sb;
+ tmp.buf_rw.w.user_ptr = sb;
+ tmp.sockfd = sockfd;
+ tmp.addr_len = addr_len;
+ memcpy(&tmp.addr, addr, addr_len);
+ *sb = tmp;
+ return sb;
+}
+
+s_socket_buf * socket_buf_init_connect (s_socket_buf *sb,
+ const s_str *host,
+ const s_str *service)
+{
+ struct addrinfo hints = {0};
+ struct addrinfo *res;
+ struct addrinfo *res0;
+ s32 e;
+ const char *error_reason;
+ t_socket sockfd;
+ s_socket_buf tmp;
+ assert(sb);
+ assert(host);
+ assert(service);
+ hints.ai_family = AF_INET;
+ e = getaddrinfo(host->ptr.pchar, service->ptr.pchar, &hints, &res0);
+ if (e) {
+ err_write_1("socket_buf_init_connect(");
+ err_write_1(host->ptr.pchar);
+ err_write_1(", ");
+ err_write_1(service->ptr.pchar);
+ err_write_1("): getaddrinfo: ");
+ err_puts(gai_strerror(e));
+ assert(! "socket_buf_init_connect: getaddrinfo");
+ return NULL;
+ }
+ e = 0;
+ sockfd = -1;
+ res = res0;
+ while (res) {
+ sockfd = socket(res->ai_family, SOCK_STREAM, res->ai_protocol);
+ if (sockfd < 0) {
+ e = errno;
+ error_reason = "socket_buf_init_connect: socket: ";
+ goto next;
+ }
+ if (connect(sockfd, res->ai_addr, res->ai_addrlen) < 0) {
+ e = errno;
+ error_reason = "socket_buf_init_connect: connect: ";
+ goto next;
+ }
+ next:
+ res = res->ai_next;
+ }
+ if (sockfd < 0) {
+ err_write_1(error_reason);
+ err_puts(strerror(e));
+ assert(! "socket_buf_init_connect");
+ return NULL;
+ }
+ if (! socket_buf_init(&tmp, sockfd, res->ai_addr, res->ai_addrlen)) {
+ err_puts("socket_buf_init_connect: socket_buf_init");
+ assert(! "socket_buf_init_connect: socket_buf_init");
+ return NULL;
+ }
+ freeaddrinfo(res0);
+ *sb = tmp;
+ return sb;
+}
diff --git a/http/socket_buf.h b/http/socket_buf.h
new file mode 100644
index 0000000..e5989d4
--- /dev/null
+++ b/http/socket_buf.h
@@ -0,0 +1,27 @@
+/* kc3
+ * Copyright 2022,2023,2024 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 SOCKET_BUF_H
+#define SOCKET_BUF_H
+
+#include "types.h"
+
+/* Stack-allocation compatible functions, call socket_buf_clean after
+ use. */
+void socket_buf_clean (s_socket_buf *sb);
+s_socket_buf * socket_buf_init (s_socket_buf *sb, t_socket sockfd,
+ struct sockaddr *addr, u32 addr_len);
+s_socket_buf * socket_buf_init_connect (s_socket_buf *sb,
+ const s_str *host,
+ const s_str *service);
+
+#endif /* SOCKET_BUF_H */
diff --git a/http/sources.mk b/http/sources.mk
index 6d2e05e..ec84b73 100644
--- a/http/sources.mk
+++ b/http/sources.mk
@@ -2,9 +2,11 @@
HEADERS = \
"http.h" \
"socket.h" \
+ "socket_buf.h" \
"types.h" \
SOURCES = \
"http.c" \
"socket.c" \
+ "socket_buf.c" \
diff --git a/http/sources.sh b/http/sources.sh
index ba1e699..3a1b805 100644
--- a/http/sources.sh
+++ b/http/sources.sh
@@ -1,3 +1,3 @@
# sources.sh generated by update_sources
-HEADERS='http.h socket.h types.h '
-SOURCES='http.c socket.c '
+HEADERS='http.h socket.h socket_buf.h types.h '
+SOURCES='http.c socket.c socket_buf.c '
diff --git a/http/types.h b/http/types.h
index ff12d73..8fea30a 100644
--- a/http/types.h
+++ b/http/types.h
@@ -13,12 +13,22 @@
#ifndef HTTP_TYPES_H
#define HTTP_TYPES_H
+#include <sys/socket.h>
#include <libkc3/types.h>
/* 1 */
-typedef int t_socket;
+typedef s32 t_socket;
+typedef struct socket_buf s_socket_buf;
/* 2 */
typedef t_socket *p_socket;
+/* Struct 1 */
+struct socket_buf {
+ s_buf_rw buf_rw;
+ t_socket sockfd;
+ struct sockaddr_storage addr;
+ u32 addr_len;
+};
+
#endif /* HTTP_TYPES_H */
diff --git a/lib/kc3/0.1/buf.kc3 b/lib/kc3/0.1/buf.kc3
new file mode 100644
index 0000000..5d11df3
--- /dev/null
+++ b/lib/kc3/0.1/buf.kc3
@@ -0,0 +1,16 @@
+defmodule Buf do
+
+ defstruct [column: Sw,
+ flush: Ptr,
+ free: Bool,
+ line: Sw,
+ ptr: Ptr,
+ refill: Ptr,
+ rpos: Uw,
+ save: Ptr,
+ seek: Ptr,
+ size: Uw,
+ user_ptr: Ptr,
+ wpos: Uw]
+
+end
diff --git a/lib/kc3/0.1/buf_rw.kc3 b/lib/kc3/0.1/buf_rw.kc3
new file mode 100644
index 0000000..b7f76c6
--- /dev/null
+++ b/lib/kc3/0.1/buf_rw.kc3
@@ -0,0 +1,6 @@
+defmodule BufRW do
+
+ defstruct [r: %Buf{},
+ w: %Buf{}]
+
+end
diff --git a/lib/kc3/0.1/socket.kc3 b/lib/kc3/0.1/socket.kc3
index c380af3..fb66948 100644
--- a/lib/kc3/0.1/socket.kc3
+++ b/lib/kc3/0.1/socket.kc3
@@ -8,7 +8,8 @@ defmodule Socket do
def close = cfn Void "socket_close" (Socket)
- def connect = cfn Socket "socket_init_connect" (Result, Str, Str)
+ def connect = cfn Socket.Buf "socket_buf_init_connect" (Result, Str,
+ Str)
def listen = cfn Socket "socket_init_listen" (Result, Str, Str)
diff --git a/lib/kc3/0.1/socket/addr.kc3 b/lib/kc3/0.1/socket/addr.kc3
new file mode 100644
index 0000000..8d58dc2
--- /dev/null
+++ b/lib/kc3/0.1/socket/addr.kc3
@@ -0,0 +1,5 @@
+defmodule Socket.Addr do
+
+ defstruct [data: (U8[256]) {}]
+
+end
diff --git a/lib/kc3/0.1/socket/buf.kc3 b/lib/kc3/0.1/socket/buf.kc3
new file mode 100644
index 0000000..0f0f816
--- /dev/null
+++ b/lib/kc3/0.1/socket/buf.kc3
@@ -0,0 +1,8 @@
+defmodule Socket.Buf do
+
+ defstruct [buf_rw: %BufRW{},
+ sockfd: S32,
+ addr: %Socket.Addr{},
+ addr_len: U32]
+
+end
diff --git a/libkc3/buf_inspect.c b/libkc3/buf_inspect.c
index 31ec4d5..409bc73 100644
--- a/libkc3/buf_inspect.c
+++ b/libkc3/buf_inspect.c
@@ -1845,9 +1845,16 @@ sw buf_inspect_paren_sym (s_buf *buf, const s_sym *sym)
if ((r = buf_write_1(buf, "(")) <= 0)
goto clean;
result += r;
- if ((r = buf_inspect_sym(buf, &sym)) <= 0)
- goto clean;
- result += r;
+ if (sym_is_array_type(sym)) {
+ if ((r = buf_write_str(buf, &sym->str)) <= 0)
+ goto clean;
+ result += r;
+ }
+ else {
+ if ((r = buf_inspect_sym(buf, &sym)) <= 0)
+ goto clean;
+ result += r;
+ }
if ((r = buf_write_1(buf, ")")) <= 0)
goto clean;
result += r;
diff --git a/libkc3/buf_parse.c b/libkc3/buf_parse.c
index fa300a1..0ab5aaf 100644
--- a/libkc3/buf_parse.c
+++ b/libkc3/buf_parse.c
@@ -431,11 +431,16 @@ sw buf_parse_block (s_buf *buf, s_block *block)
return r;
}
result += r;
- if ((r = buf_parse_block_inner(buf, short_form, block)) <= 0) {
- err_puts("buf_parse_block: buf_parse_block_inner");
- assert(! "buf_parse_block: buf_parse_block_inner");
+ if ((r = buf_parse_block_inner(buf, short_form, block)) < 0) {
+ err_puts("buf_parse_block: buf_parse_block_inner < 0");
+ assert(! "buf_parse_block: buf_parse_block_inner < 0");
return r;
}
+ if (! r) {
+ err_puts("buf_parse_block: buf_parse_block_inner = 0");
+ assert(! "buf_parse_block: buf_parse_block_inner = 0");
+ return -1;
+ }
result += r;
return result;
}
@@ -807,11 +812,9 @@ sw buf_parse_call_access (s_buf *buf, s_call *dest)
s_call tmp2 = {0};
assert(buf);
assert(dest);
+ if (! call_init_op(&tmp))
+ return -1;
buf_save_init(buf, &save);
- if (! call_init_op(&tmp)) {
- r = -1;
- goto clean;
- }
tag_left = &tmp.arguments->tag;
tmp.ident.module = &g_sym_KC3;
tmp.ident.sym = &g_sym_access;
@@ -1039,21 +1042,21 @@ sw buf_parse_call_op_unary (s_buf *buf, s_call *dest)
result += r;
if (! operator_resolve(&tmp.ident, 1, &tmp.ident))
goto restore;
+ buf_save_clean(buf, &save);
if ((r = buf_ignore_spaces(buf)) < 0)
- goto restore;
+ goto clean;
result += r;
if ((r = buf_parse_tag_primary(buf, &tmp.arguments->tag)) <= 0)
- goto restore;
+ goto clean;
result += r;
*dest = tmp;
- r = result;
- goto clean;
+ return result;
restore:
buf_save_restore_rpos(buf, &save);
- call_clean(&tmp);
+ buf_save_clean(buf, &save);
r = 0;
clean:
- buf_save_clean(buf, &save);
+ call_clean(&tmp);
return r;
}
@@ -2846,10 +2849,13 @@ sw buf_parse_new_tag (s_buf *buf, s_tag **dest)
sw buf_parse_paren_sym (s_buf *buf, const s_sym **dest)
{
+ uw b;
sw r;
sw result = 0;
s_buf_save save;
const s_sym *tmp;
+ s_buf tmp_buf;
+ s8 tmp_buf_data[64] = {0};
buf_save_init(buf, &save);
if ((r = buf_read_1(buf, "(")) <= 0)
goto clean;
@@ -2863,6 +2869,31 @@ sw buf_parse_paren_sym (s_buf *buf, const s_sym **dest)
if ((r = buf_ignore_spaces(buf)) < 0)
goto restore;
result += r;
+ if ((r = buf_peek_1(buf, "[")) < 0)
+ goto restore;
+ if (r > 0) {
+ while (1) {
+ if ((r = buf_read_1(buf, "[")) < 0)
+ goto restore;
+ if (! r)
+ break;
+ result += r;
+ buf_init(&tmp_buf, false, sizeof(tmp_buf_data),
+ (char *) tmp_buf_data);
+ buf_inspect_sym(&tmp_buf, &tmp);
+ buf_write_1(&tmp_buf, "[");
+ if ((r = buf_parse_uw(buf, &b)) <= 0)
+ goto restore;
+ result += r;
+ buf_inspect_uw(&tmp_buf, &b);
+ if ((r = buf_read_1(buf, "]")) <= 0)
+ goto restore;
+ result += r;
+ buf_write_1(&tmp_buf, "]");
+ }
+ buf_write_u8(&tmp_buf, 0);
+ tmp = sym_1(tmp_buf.ptr.pchar);
+ }
if ((r = buf_read_1(buf, ")")) <= 0)
goto restore;
result += r;
@@ -3850,13 +3881,13 @@ sw buf_parse_tag_primary_2 (s_buf *buf, s_tag *dest)
(r = buf_parse_tag_call_paren(buf, dest)) != 0 ||
(r = buf_parse_tag_quote(buf, dest)) != 0 ||
(r = buf_parse_tag_call_op_unary(buf, dest)) != 0 ||
+ (r = buf_parse_tag_special_operator(buf, dest)) != 0 ||
(r = buf_parse_tag_bool(buf, dest)) != 0 ||
(r = buf_parse_tag_character(buf, dest)) != 0 ||
(r = buf_parse_tag_map(buf, dest)) != 0 ||
(r = buf_parse_tag_str(buf, dest)) != 0 ||
(r = buf_parse_tag_tuple(buf, dest)) != 0 ||
(r = buf_parse_tag_block(buf, dest)) != 0 ||
- (r = buf_parse_tag_special_operator(buf, dest)) != 0 ||
(r = buf_parse_tag_cfn(buf, dest)) != 0 ||
(r = buf_parse_tag_fn(buf, dest)) != 0 ||
(r = buf_parse_tag_struct(buf, dest)) != 0 ||
diff --git a/libkc3/buf_rw.c b/libkc3/buf_rw.c
new file mode 100644
index 0000000..86edc5a
--- /dev/null
+++ b/libkc3/buf_rw.c
@@ -0,0 +1,35 @@
+/* kc3
+ * Copyright 2022,2023,2024 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 "buf.h"
+#include "buf_rw.h"
+
+void buf_rw_clean (s_buf_rw *buf_rw)
+{
+ assert(buf_rw);
+ buf_clean(&buf_rw->w);
+ buf_clean(&buf_rw->r);
+}
+
+s_buf_rw * buf_rw_init_alloc (s_buf_rw *buf_rw, uw size)
+{
+ s_buf_rw tmp = {0};
+ if (! buf_init_alloc(&tmp.r, size))
+ return NULL;
+ if (! buf_init_alloc(&tmp.w, size)) {
+ buf_clean(&tmp.r);
+ return NULL;
+ }
+ *buf_rw = tmp;
+ return buf_rw;
+}
diff --git a/libkc3/buf_rw.h b/libkc3/buf_rw.h
new file mode 100644
index 0000000..3dcaceb
--- /dev/null
+++ b/libkc3/buf_rw.h
@@ -0,0 +1,29 @@
+/* kc3
+ * Copyright 2022,2023,2024 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 buf_rw.h
+ * @brief Read/write byte buffers.
+ *
+ * Structure to manipulate read/write byte buffers.
+ */
+#ifndef LIBKC3_BUF_RW_H
+#define LIBKC3_BUF_RW_H
+
+#include "types.h"
+
+/* Stack-allocation compatible functions, call buf_rw_clean after
+ use. */
+void buf_rw_clean (s_buf_rw *buf_rw);
+s_buf_rw * buf_rw_init_alloc (s_buf_rw *buf_rw, uw size);
+
+#endif /* LIBKC3_BUF_RW_H */
diff --git a/libkc3/cfn.c b/libkc3/cfn.c
index 8205ccb..59930af 100644
--- a/libkc3/cfn.c
+++ b/libkc3/cfn.c
@@ -125,6 +125,8 @@ s_tag * cfn_apply (s_cfn *cfn, s_list *args, s_tag *dest)
if (result_pointer != arg_pointer_result) {
err_write_1("cfn_apply: ");
err_inspect_str(&cfn->name->str);
+ err_write_1(" ");
+ err_inspect_list((const s_list * const *) &args);
err_write_1(": ");
err_inspect_pointer(result_pointer);
err_write_1(" != ");
diff --git a/libkc3/env.c b/libkc3/env.c
index bf73031..51493a3 100644
--- a/libkc3/env.c
+++ b/libkc3/env.c
@@ -195,8 +195,12 @@ s_tag * env_def (s_env *env, const s_call *call, s_tag *dest)
if (! facts_add_tags(&env->facts, &tag_module, &tag_symbol,
&tag_ident))
return NULL;
- if (! env_eval_tag(env, &list_next(call->arguments)->tag, &tag_value))
+ if (! env_eval_tag(env, &list_next(call->arguments)->tag,
+ &tag_value)) {
+ err_puts("env_def: env_eval_tag");
+ assert(! "env_def: env_eval_tag");
return NULL;
+ }
if (tag_value.type == TAG_STRUCT &&
(s = &tag_value.data.struct_) &&
s->type->module == &g_sym_KC3__Operator) {
@@ -2670,15 +2674,19 @@ bool env_sym_search_modules (s_env *env, const s_sym *sym,
assert(! "env_sym_search_modules: invalid env->search_modules");
return false;
}
- if (! env_module_has_symbol(env, module, sym, &b))
+ if (! env_module_has_symbol(env, module, sym, &b)) {
+ err_puts("env_sym_search_modules: env_module_has_symbol");
+ assert(! "env_sym_search_modules: env_module_has_symbol");
return false;
+ }
if (b) {
*dest = module;
return true;
}
search_module = list_next(search_module);
}
- return false;
+ *dest = NULL;
+ return true;
}
u8 env_special_operator_arity (s_env *env, const s_ident *ident)
diff --git a/libkc3/io.c b/libkc3/io.c
index eb96f86..cf493c4 100644
--- a/libkc3/io.c
+++ b/libkc3/io.c
@@ -55,7 +55,7 @@ sw err_inspect (const s_tag *x)
sw err_inspect_buf (const s_buf *buf)
{
uw pos;
- pos = (buf->rpos < 20) ? 0 : buf->rpos - 20;
+ pos = (buf->rpos < 40) ? 0 : buf->rpos - 40;
return err_write(buf->ptr.pchar + pos, buf->rpos - pos);
}
@@ -124,7 +124,7 @@ sw io_inspect (const s_tag *x)
sw io_inspect_buf (const s_buf *buf)
{
uw pos;
- pos = (buf->rpos < 20) ? 0 : buf->rpos - 20;
+ pos = (buf->rpos < 40) ? 0 : buf->rpos - 40;
return io_write(buf->ptr.pchar + pos, buf->rpos - pos);
}
diff --git a/libkc3/kc3.h b/libkc3/kc3.h
index 1bb4084..171b658 100644
--- a/libkc3/kc3.h
+++ b/libkc3/kc3.h
@@ -44,6 +44,7 @@
#include "buf_parse_u32.h"
#include "buf_parse_u64.h"
#include "buf_parse_uw.h"
+#include "buf_rw.h"
#include "buf_save.h"
#include "call.h"
#include "ceiling.h"
diff --git a/libkc3/module.c b/libkc3/module.c
index 97de0f8..b931c92 100644
--- a/libkc3/module.c
+++ b/libkc3/module.c
@@ -80,8 +80,10 @@ s_str * module_path (const s_sym *module, const s_str *prefix,
if ((r = buf_write_str(&out, prefix)) < 0)
goto error;
while ((r = buf_read_character_utf8(&in, &c)) > 0) {
- if (c == '.')
+ if (c == '.') {
+ b = c;
c = '/';
+ }
else if (character_is_uppercase(c)) {
if (character_is_lowercase(b)) {
if ((r = buf_write_1(&out, "_")) < 0)
diff --git a/libkc3/sources.mk b/libkc3/sources.mk
index 7e8dd89..e13538f 100644
--- a/libkc3/sources.mk
+++ b/libkc3/sources.mk
@@ -75,6 +75,7 @@ HEADERS = \
"buf_parse_u64.h" \
"buf_parse_u8.h" \
"buf_parse_uw.h" \
+ "buf_rw.h" \
"buf_save.h" \
"call.h" \
"ceiling.h" \
@@ -239,6 +240,7 @@ SOURCES = \
"buf_parse_u64.c" \
"buf_parse_u8.c" \
"buf_parse_uw.c" \
+ "buf_rw.c" \
"buf_save.c" \
"call.c" \
"ceiling.c" \
@@ -511,6 +513,7 @@ LO_SOURCES = \
"buf_parse_u64.c" \
"buf_parse_u8.c" \
"buf_parse_uw.c" \
+ "buf_rw.c" \
"buf_save.c" \
"call.c" \
"ceiling.c" \
diff --git a/libkc3/sources.sh b/libkc3/sources.sh
index 9ae37e5..65af033 100644
--- a/libkc3/sources.sh
+++ b/libkc3/sources.sh
@@ -1,4 +1,4 @@
# sources.sh generated by update_sources
-HEADERS='abs.h alloc.h arg.h array.h assert.h binding.h block.h bool.h buf.h buf_fd.h buf_file.h buf_getc.h buf_getchar.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_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 call.h ceiling.h cfn.h character.h compare.h complex.h cow.h data.h env.h error.h error_handler.h eval.h f128.h f32.h f64.h fact.h fact_action.h fact_list.h facts.h facts_cursor.h facts_spec.h facts_spec_cursor.h facts_transaction.h facts_with.h facts_with_cursor.h file.h float.h fn.h fn_clause.h frame.h hash.h ident.h inspect.h integer.h io.h kc3.h kc3_main.h list.h list_init.h log.h map.h module.h operator.h pcomplex.h pcow.h ptag.h ptr.h ptr_free.h queue.h quote.h ratio.h s16.h s32.h s64.h s8.h sequence.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 special_operator.h str.h struct.h struct_type.h sw.h sym.h tag.h tag_init.h tag_type.h time.h tuple.h types.h u16.h u32.h u64.h u8.h ucd.h unquote.h uw.h var.h void.h '
-SOURCES='abs.c alloc.c arg.c array.c binding.c block.c bool.c buf.c buf_fd.c buf_file.c buf_getc.c buf_getchar.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_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 call.c ceiling.c cfn.c character.c compare.c complex.c cow.c data.c env.c error.c error_handler.c eval.c f128.c f32.c f64.c fact.c fact_action.c fact_list.c facts.c facts_cursor.c facts_spec.c facts_spec_cursor.c facts_transaction.c facts_with.c facts_with_cursor.c file.c fn.c fn_clause.c frame.c hash.c ident.c inspect.c integer.c io.c kc3.c license.c list.c list_init.c log.c map.c module.c operator.c pcomplex.c pcow.c ptag.c ptr.c ptr_free.c queue.c quote.c ratio.c s16.c s32.c s64.c s8.c sequence.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 special_operator.c str.c struct.c struct_type.c sw.c sym.c tag.c tag_add.c tag_addi.c tag_band.c tag_bnot.c tag_bor.c tag_bxor.c tag_div.c tag_init.c tag_mod.c tag_mul.c tag_neg.c tag_shift_left.c tag_shift_right.c tag_sqrt.c tag_sub.c tag_type.c time.c tuple.c u16.c u32.c u64.c u8.c ucd.c unquote.c uw.c var.c void.c '
-LO_SOURCES=' ../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 abs.c alloc.c arg.c array.c binding.c block.c bool.c buf.c buf_fd.c buf_file.c buf_getc.c buf_getchar.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_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 call.c ceiling.c cfn.c character.c compare.c complex.c cow.c data.c env.c error.c error_handler.c eval.c f128.c f32.c f64.c fact.c fact_action.c fact_list.c facts.c facts_cursor.c facts_spec.c facts_spec_cursor.c facts_transaction.c facts_with.c facts_with_cursor.c file.c fn.c fn_clause.c frame.c hash.c ident.c inspect.c integer.c io.c kc3.c license.c list.c list_init.c log.c map.c module.c operator.c pcomplex.c pcow.c ptag.c ptr.c ptr_free.c queue.c quote.c ratio.c s16.c s32.c s64.c s8.c sequence.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 special_operator.c str.c struct.c struct_type.c sw.c sym.c tag.c tag_add.c tag_addi.c tag_band.c tag_bnot.c tag_bor.c tag_bxor.c tag_div.c tag_init.c tag_mod.c tag_mul.c tag_neg.c tag_shift_left.c tag_shift_right.c tag_sqrt.c tag_sub.c tag_type.c time.c tuple.c u16.c u32.c u64.c u8.c ucd.c unquote.c uw.c var.c void.c '
+HEADERS='abs.h alloc.h arg.h array.h assert.h binding.h block.h bool.h buf.h buf_fd.h buf_file.h buf_getc.h buf_getchar.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_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_rw.h buf_save.h call.h ceiling.h cfn.h character.h compare.h complex.h cow.h data.h env.h error.h error_handler.h eval.h f128.h f32.h f64.h fact.h fact_action.h fact_list.h facts.h facts_cursor.h facts_spec.h facts_spec_cursor.h facts_transaction.h facts_with.h facts_with_cursor.h file.h float.h fn.h fn_clause.h frame.h hash.h ident.h inspect.h integer.h io.h kc3.h kc3_main.h list.h list_init.h log.h map.h module.h operator.h pcomplex.h pcow.h ptag.h ptr.h ptr_free.h queue.h quote.h ratio.h s16.h s32.h s64.h s8.h sequence.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 special_operator.h str.h struct.h struct_type.h sw.h sym.h tag.h tag_init.h tag_type.h time.h tuple.h types.h u16.h u32.h u64.h u8.h ucd.h unquote.h uw.h var.h void.h '
+SOURCES='abs.c alloc.c arg.c array.c binding.c block.c bool.c buf.c buf_fd.c buf_file.c buf_getc.c buf_getchar.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_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_rw.c buf_save.c call.c ceiling.c cfn.c character.c compare.c complex.c cow.c data.c env.c error.c error_handler.c eval.c f128.c f32.c f64.c fact.c fact_action.c fact_list.c facts.c facts_cursor.c facts_spec.c facts_spec_cursor.c facts_transaction.c facts_with.c facts_with_cursor.c file.c fn.c fn_clause.c frame.c hash.c ident.c inspect.c integer.c io.c kc3.c license.c list.c list_init.c log.c map.c module.c operator.c pcomplex.c pcow.c ptag.c ptr.c ptr_free.c queue.c quote.c ratio.c s16.c s32.c s64.c s8.c sequence.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 special_operator.c str.c struct.c struct_type.c sw.c sym.c tag.c tag_add.c tag_addi.c tag_band.c tag_bnot.c tag_bor.c tag_bxor.c tag_div.c tag_init.c tag_mod.c tag_mul.c tag_neg.c tag_shift_left.c tag_shift_right.c tag_sqrt.c tag_sub.c tag_type.c time.c tuple.c u16.c u32.c u64.c u8.c ucd.c unquote.c uw.c var.c void.c '
+LO_SOURCES=' ../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 abs.c alloc.c arg.c array.c binding.c block.c bool.c buf.c buf_fd.c buf_file.c buf_getc.c buf_getchar.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_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_rw.c buf_save.c call.c ceiling.c cfn.c character.c compare.c complex.c cow.c data.c env.c error.c error_handler.c eval.c f128.c f32.c f64.c fact.c fact_action.c fact_list.c facts.c facts_cursor.c facts_spec.c facts_spec_cursor.c facts_transaction.c facts_with.c facts_with_cursor.c file.c fn.c fn_clause.c frame.c hash.c ident.c inspect.c integer.c io.c kc3.c license.c list.c list_init.c log.c map.c module.c operator.c pcomplex.c pcow.c ptag.c ptr.c ptr_free.c queue.c quote.c ratio.c s16.c s32.c s64.c s8.c sequence.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 special_operator.c str.c struct.c struct_type.c sw.c sym.c tag.c tag_add.c tag_addi.c tag_band.c tag_bnot.c tag_bor.c tag_bxor.c tag_div.c tag_init.c tag_mod.c tag_mul.c tag_neg.c tag_shift_left.c tag_shift_right.c tag_sqrt.c tag_sub.c tag_type.c time.c tuple.c u16.c u32.c u64.c u8.c ucd.c unquote.c uw.c var.c void.c '
diff --git a/libkc3/tuple.c b/libkc3/tuple.c
index cc52f3f..7b00067 100644
--- a/libkc3/tuple.c
+++ b/libkc3/tuple.c
@@ -25,10 +25,12 @@ void tuple_clean (s_tuple *tuple)
{
uw i;
assert(tuple);
- i = tuple->count;
- while (i--)
- tag_clean(tuple->tag + i);
- free(tuple->tag);
+ if (tuple->tag) {
+ i = tuple->count;
+ while (i--)
+ tag_clean(tuple->tag + i);
+ free(tuple->tag);
+ }
}
void tuple_delete (s_tuple *tuple)
diff --git a/libkc3/types.h b/libkc3/types.h
index 1d09ef3..5c617c4 100644
--- a/libkc3/types.h
+++ b/libkc3/types.h
@@ -144,6 +144,7 @@ typedef struct array_dimension s_array_dimension;
typedef struct binding s_binding;
typedef struct block s_block;
typedef struct buf s_buf;
+typedef struct buf_rw s_buf_rw;
typedef struct buf_save s_buf_save;
typedef struct call s_call;
typedef struct cfn s_cfn;
@@ -390,6 +391,11 @@ struct struct_type {
/* 3 */
+struct buf_rw {
+ s_buf r;
+ s_buf w;
+};
+
struct call {
/* key */
s_ident ident;
diff --git a/sources.mk b/sources.mk
index e6305e3..a7e2633 100644
--- a/sources.mk
+++ b/sources.mk
@@ -128,6 +128,8 @@ KC3_C_SOURCES = \
"libkc3/bool.h" \
"libkc3/buf.c" \
"libkc3/buf.h" \
+ "libkc3/buf_fd.c" \
+ "libkc3/buf_fd.h" \
"libkc3/buf_file.c" \
"libkc3/buf_file.h" \
"libkc3/buf_getc.c" \
@@ -270,6 +272,8 @@ KC3_C_SOURCES = \
"libkc3/buf_parse_u8.h" \
"libkc3/buf_parse_uw.c" \
"libkc3/buf_parse_uw.h" \
+ "libkc3/buf_rw.c" \
+ "libkc3/buf_rw.h" \
"libkc3/buf_save.c" \
"libkc3/buf_save.h" \
"libkc3/call.c" \
@@ -608,6 +612,7 @@ KC3_C_SOURCES = \
"test/fn_test.c" \
"test/hash_test.c" \
"test/ident_test.c" \
+ "test/inspect_test.c" \
"test/libkc3_test.c" \
"test/list_test.c" \
"test/ratio_test.c" \
@@ -889,7 +894,6 @@ KC3_OTHER_SOURCES = \
"lib/kc3/0.1/gl/vec2.kc3" \
"lib/kc3/0.1/gl/vec3.kc3" \
"lib/kc3/0.1/gl/vertex.kc3" \
- "lib/kc3/0.1/http.kc3" \
"lib/kc3/0.1/integer.facts" \
"lib/kc3/0.1/kc3.facts" \
"lib/kc3/0.1/kc3/operator.kc3" \
@@ -899,14 +903,12 @@ KC3_OTHER_SOURCES = \
"lib/kc3/0.1/ptr_free.facts" \
"lib/kc3/0.1/ratio.facts" \
"lib/kc3/0.1/s16.facts" \
- "lib/kc3/0.1/s16.kc3" \
- "lib/kc3/0.1/s32.kc3" \
+ "lib/kc3/0.1/s32.facts" \
"lib/kc3/0.1/s64.facts" \
- "lib/kc3/0.1/s64.kc3" \
- "lib/kc3/0.1/s8.kc3" \
+ "lib/kc3/0.1/s8.facts" \
"lib/kc3/0.1/socket.kc3" \
"lib/kc3/0.1/str.facts" \
- "lib/kc3/0.1/sw.kc3" \
+ "lib/kc3/0.1/sw.facts" \
"lib/kc3/0.1/sym.facts" \
"lib/kc3/0.1/u16.facts" \
"lib/kc3/0.1/u32.facts" \
@@ -935,6 +937,7 @@ KC3_OTHER_SOURCES = \
"test/facts_test_save.expected.facts" \
"test/http/server.kc3.ret.expected" \
"test/http/server.out.expected" \
+ "test/http/server.ret.expected" \
"test/ikc3/access.out.expected" \
"test/ikc3/access.ret.expected" \
"test/ikc3/array.err.expected" \
diff --git a/sources.sh b/sources.sh
index cf2d7a3..501b454 100644
--- a/sources.sh
+++ b/sources.sh
@@ -1,7 +1,7 @@
# sources.sh generated by update_sources
KC3_CONFIGURES='ekc3/configure ekc3/sources.sh ekc3/update_sources ikc3/configure ikc3/sources.sh ikc3/update_sources kc3c/configure kc3s/configure kc3s/sources.sh kc3s/update_sources libkc3/configure libkc3/sources.sh libkc3/update_sources libkc3_window/cairo/configure libkc3_window/cairo/demo/configure libkc3_window/cairo/demo/sources.sh libkc3_window/cairo/demo/update_sources libkc3_window/cairo/quartz/configure libkc3_window/cairo/quartz/demo/configure libkc3_window/cairo/quartz/demo/sources.sh libkc3_window/cairo/quartz/demo/update_sources libkc3_window/cairo/quartz/sources.sh libkc3_window/cairo/quartz/update_sources libkc3_window/cairo/sources.sh libkc3_window/cairo/update_sources libkc3_window/cairo/win32/configure libkc3_window/cairo/win32/demo/configure libkc3_window/cairo/win32/demo/sources.sh libkc3_window/cairo/win32/demo/update_sources libkc3_window/cairo/win32/sources.sh libkc3_window/cairo/win32/update_sources libkc3_window/cairo/xcb/configure libkc3_window/cairo/xcb/demo/configure libkc3_window/cairo/xcb/demo/sources.sh libkc3_window/cairo/xcb/demo/update_sources libkc3_window/cairo/xcb/sources.sh libkc3_window/cairo/xcb/update_sources libkc3_window/configure libkc3_window/sdl2/configure libkc3_window/sdl2/demo/configure libkc3_window/sdl2/demo/macos/configure libkc3_window/sdl2/demo/sources.sh libkc3_window/sdl2/demo/update_sources libkc3_window/sdl2/sources.sh libkc3_window/sdl2/update_sources libkc3_window/sources.sh libkc3_window/update_sources libtommath/configure libtommath/sources.sh libtommath/update_sources test/configure test/sources.sh test/update_sources ucd2c/configure '
KC3_MAKEFILES='ekc3/Makefile ekc3/sources.mk ikc3/Makefile ikc3/sources.mk kc3c/Makefile kc3s/Makefile kc3s/sources.mk libkc3/Makefile libkc3/gen.mk libkc3/sources.mk libkc3_window/Makefile libkc3_window/cairo/Makefile libkc3_window/cairo/demo/Makefile libkc3_window/cairo/demo/sources.mk libkc3_window/cairo/quartz/Makefile libkc3_window/cairo/quartz/demo/Makefile libkc3_window/cairo/quartz/demo/sources.mk libkc3_window/cairo/quartz/sources.mk libkc3_window/cairo/sources.mk libkc3_window/cairo/win32/Makefile libkc3_window/cairo/win32/demo/Makefile libkc3_window/cairo/win32/demo/sources.mk libkc3_window/cairo/win32/sources.mk libkc3_window/cairo/xcb/Makefile libkc3_window/cairo/xcb/demo/Makefile libkc3_window/cairo/xcb/demo/sources.mk libkc3_window/cairo/xcb/sources.mk libkc3_window/sdl2/Makefile libkc3_window/sdl2/demo/Makefile libkc3_window/sdl2/demo/macos/Makefile libkc3_window/sdl2/demo/sources.mk libkc3_window/sdl2/sources.mk libkc3_window/sources.mk libtommath/Makefile libtommath/sources.mk test/Makefile test/sources.mk ucd2c/Makefile '
-KC3_C_SOURCES='ekc3/ekc3.c ekc3/ekc3.h ekc3/html.c ekc3/html.h ekc3/types.h ikc3/buf_linenoise.c ikc3/buf_linenoise.h ikc3/buf_wineditline.c ikc3/buf_wineditline.h ikc3/ikc3.c ikc3/linenoise.c kc3c/c3c.c kc3s/buf_readline.c kc3s/buf_readline.h kc3s/kc3s.c libkc3/abs.c libkc3/abs.h libkc3/alloc.c libkc3/alloc.h libkc3/arg.c libkc3/arg.h libkc3/array.c libkc3/array.h libkc3/assert.h libkc3/binding.c libkc3/binding.h libkc3/block.c libkc3/block.h libkc3/bool.c libkc3/bool.h libkc3/buf.c libkc3/buf.h libkc3/buf_file.c libkc3/buf_file.h libkc3/buf_getc.c libkc3/buf_getc.h libkc3/buf_getchar.c libkc3/buf_getchar.h libkc3/buf_inspect.c libkc3/buf_inspect.h libkc3/buf_inspect_s.c.in libkc3/buf_inspect_s.h.in libkc3/buf_inspect_s16.c libkc3/buf_inspect_s16.h libkc3/buf_inspect_s16_binary.c libkc3/buf_inspect_s16_binary.h libkc3/buf_inspect_s16_decimal.c libkc3/buf_inspect_s16_decimal.h libkc3/buf_inspect_s16_hexadecimal.c libkc3/buf_inspect_s16_hexadecimal.h libkc3/buf_inspect_s16_octal.c libkc3/buf_inspect_s16_octal.h libkc3/buf_inspect_s32.c libkc3/buf_inspect_s32.h libkc3/buf_inspect_s32_binary.c libkc3/buf_inspect_s32_binary.h libkc3/buf_inspect_s32_decimal.c libkc3/buf_inspect_s32_decimal.h libkc3/buf_inspect_s32_hexadecimal.c libkc3/buf_inspect_s32_hexadecimal.h libkc3/buf_inspect_s32_octal.c libkc3/buf_inspect_s32_octal.h libkc3/buf_inspect_s64.c libkc3/buf_inspect_s64.h libkc3/buf_inspect_s64_binary.c libkc3/buf_inspect_s64_binary.h libkc3/buf_inspect_s64_decimal.c libkc3/buf_inspect_s64_decimal.h libkc3/buf_inspect_s64_hexadecimal.c libkc3/buf_inspect_s64_hexadecimal.h libkc3/buf_inspect_s64_octal.c libkc3/buf_inspect_s64_octal.h libkc3/buf_inspect_s8.c libkc3/buf_inspect_s8.h libkc3/buf_inspect_s8_binary.c libkc3/buf_inspect_s8_binary.h libkc3/buf_inspect_s8_decimal.c libkc3/buf_inspect_s8_decimal.h libkc3/buf_inspect_s8_hexadecimal.c libkc3/buf_inspect_s8_hexadecimal.h libkc3/buf_inspect_s8_octal.c libkc3/buf_inspect_s8_octal.h libkc3/buf_inspect_s_base.c.in libkc3/buf_inspect_s_base.h.in libkc3/buf_inspect_sw.c libkc3/buf_inspect_sw.h libkc3/buf_inspect_sw_binary.c libkc3/buf_inspect_sw_binary.h libkc3/buf_inspect_sw_decimal.c libkc3/buf_inspect_sw_decimal.h libkc3/buf_inspect_sw_hexadecimal.c libkc3/buf_inspect_sw_hexadecimal.h libkc3/buf_inspect_sw_octal.c libkc3/buf_inspect_sw_octal.h libkc3/buf_inspect_u.c.in libkc3/buf_inspect_u.h.in libkc3/buf_inspect_u16.c libkc3/buf_inspect_u16.h libkc3/buf_inspect_u16_binary.c libkc3/buf_inspect_u16_binary.h libkc3/buf_inspect_u16_decimal.c libkc3/buf_inspect_u16_decimal.h libkc3/buf_inspect_u16_hexadecimal.c libkc3/buf_inspect_u16_hexadecimal.h libkc3/buf_inspect_u16_octal.c libkc3/buf_inspect_u16_octal.h libkc3/buf_inspect_u32.c libkc3/buf_inspect_u32.h libkc3/buf_inspect_u32_binary.c libkc3/buf_inspect_u32_binary.h libkc3/buf_inspect_u32_decimal.c libkc3/buf_inspect_u32_decimal.h libkc3/buf_inspect_u32_hexadecimal.c libkc3/buf_inspect_u32_hexadecimal.h libkc3/buf_inspect_u32_octal.c libkc3/buf_inspect_u32_octal.h libkc3/buf_inspect_u64.c libkc3/buf_inspect_u64.h libkc3/buf_inspect_u64_binary.c libkc3/buf_inspect_u64_binary.h libkc3/buf_inspect_u64_decimal.c libkc3/buf_inspect_u64_decimal.h libkc3/buf_inspect_u64_hexadecimal.c libkc3/buf_inspect_u64_hexadecimal.h libkc3/buf_inspect_u64_octal.c libkc3/buf_inspect_u64_octal.h libkc3/buf_inspect_u8.c libkc3/buf_inspect_u8.h libkc3/buf_inspect_u8_binary.c libkc3/buf_inspect_u8_binary.h libkc3/buf_inspect_u8_decimal.c libkc3/buf_inspect_u8_decimal.h libkc3/buf_inspect_u8_hexadecimal.c libkc3/buf_inspect_u8_hexadecimal.h libkc3/buf_inspect_u8_octal.c libkc3/buf_inspect_u8_octal.h libkc3/buf_inspect_u_base.c.in libkc3/buf_inspect_u_base.h.in libkc3/buf_inspect_uw.c libkc3/buf_inspect_uw.h libkc3/buf_inspect_uw_binary.c libkc3/buf_inspect_uw_binary.h libkc3/buf_inspect_uw_decimal.c libkc3/buf_inspect_uw_decimal.h libkc3/buf_inspect_uw_hexadecimal.c libkc3/buf_inspect_uw_hexadecimal.h libkc3/buf_inspect_uw_octal.c libkc3/buf_inspect_uw_octal.h libkc3/buf_parse.c libkc3/buf_parse.h libkc3/buf_parse_s.c.in libkc3/buf_parse_s.h.in libkc3/buf_parse_s16.c libkc3/buf_parse_s16.h libkc3/buf_parse_s32.c libkc3/buf_parse_s32.h libkc3/buf_parse_s64.c libkc3/buf_parse_s64.h libkc3/buf_parse_s8.c libkc3/buf_parse_s8.h libkc3/buf_parse_sw.c libkc3/buf_parse_sw.h libkc3/buf_parse_u.c.in libkc3/buf_parse_u.h.in libkc3/buf_parse_u16.c libkc3/buf_parse_u16.h libkc3/buf_parse_u32.c libkc3/buf_parse_u32.h libkc3/buf_parse_u64.c libkc3/buf_parse_u64.h libkc3/buf_parse_u8.c libkc3/buf_parse_u8.h libkc3/buf_parse_uw.c libkc3/buf_parse_uw.h libkc3/buf_save.c libkc3/buf_save.h libkc3/call.c libkc3/call.h libkc3/ceiling.c libkc3/ceiling.h libkc3/cfn.c libkc3/cfn.h libkc3/character.c libkc3/character.h libkc3/compare.c libkc3/compare.h libkc3/complex.c libkc3/complex.h libkc3/cow.c libkc3/cow.h libkc3/data.c libkc3/data.h libkc3/env.c libkc3/env.h libkc3/error.c libkc3/error.h libkc3/error_handler.c libkc3/error_handler.h libkc3/eval.c libkc3/eval.h libkc3/f128.c libkc3/f128.h libkc3/f32.c libkc3/f32.h libkc3/f64.c libkc3/f64.h libkc3/fact.c libkc3/fact.h libkc3/fact_action.c libkc3/fact_action.h libkc3/fact_list.c libkc3/fact_list.h libkc3/facts.c libkc3/facts.h libkc3/facts_cursor.c libkc3/facts_cursor.h libkc3/facts_spec.c libkc3/facts_spec.h libkc3/facts_spec_cursor.c libkc3/facts_spec_cursor.h libkc3/facts_transaction.c libkc3/facts_transaction.h libkc3/facts_with.c libkc3/facts_with.h libkc3/facts_with_cursor.c libkc3/facts_with_cursor.h libkc3/file.c libkc3/file.h libkc3/float.h libkc3/fn.c libkc3/fn.h libkc3/fn_clause.c libkc3/fn_clause.h libkc3/frame.c libkc3/frame.h libkc3/hash.c libkc3/hash.h libkc3/ident.c libkc3/ident.h libkc3/inspect.c libkc3/inspect.h libkc3/integer.c libkc3/integer.h libkc3/io.c libkc3/io.h libkc3/kc3.c libkc3/kc3.h libkc3/kc3_main.h libkc3/license.c libkc3/list.c libkc3/list.h libkc3/list_init.c libkc3/list_init.h libkc3/log.c libkc3/log.h libkc3/map.c libkc3/map.h libkc3/module.c libkc3/module.h libkc3/operator.c libkc3/operator.h libkc3/pcomplex.c libkc3/pcomplex.h libkc3/pcow.c libkc3/pcow.h libkc3/ptag.c libkc3/ptag.h libkc3/ptr.c libkc3/ptr.h libkc3/ptr_free.c libkc3/ptr_free.h libkc3/queue.c libkc3/queue.h libkc3/quote.c libkc3/quote.h libkc3/ratio.c libkc3/ratio.h libkc3/s.c.in libkc3/s.h.in libkc3/s16.c libkc3/s16.h libkc3/s32.c libkc3/s32.h libkc3/s64.c libkc3/s64.h libkc3/s8.c libkc3/s8.h libkc3/sequence.c libkc3/sequence.h libkc3/set.c.in libkc3/set.h.in libkc3/set__fact.c libkc3/set__fact.h libkc3/set__tag.c libkc3/set__tag.h libkc3/set_cursor.c.in libkc3/set_cursor.h.in libkc3/set_cursor__fact.c libkc3/set_cursor__fact.h libkc3/set_cursor__tag.c libkc3/set_cursor__tag.h libkc3/set_item.c.in libkc3/set_item.h.in libkc3/set_item__fact.c libkc3/set_item__fact.h libkc3/set_item__tag.c libkc3/set_item__tag.h libkc3/sha1.h libkc3/sign.c libkc3/sign.h libkc3/skiplist.c.in libkc3/skiplist.h.in libkc3/skiplist__fact.c libkc3/skiplist__fact.h libkc3/skiplist_node.c.in libkc3/skiplist_node.h.in libkc3/skiplist_node__fact.c libkc3/skiplist_node__fact.h libkc3/special_operator.c libkc3/special_operator.h libkc3/str.c libkc3/str.h libkc3/struct.c libkc3/struct.h libkc3/struct_type.c libkc3/struct_type.h libkc3/sw.c libkc3/sw.h libkc3/sym.c libkc3/sym.h libkc3/tag.c libkc3/tag.h libkc3/tag_add.c libkc3/tag_addi.c libkc3/tag_band.c libkc3/tag_bnot.c libkc3/tag_bor.c libkc3/tag_bxor.c libkc3/tag_div.c libkc3/tag_init.c libkc3/tag_init.h libkc3/tag_mod.c libkc3/tag_mul.c libkc3/tag_neg.c libkc3/tag_shift_left.c libkc3/tag_shift_right.c libkc3/tag_sqrt.c libkc3/tag_sub.c libkc3/tag_type.c libkc3/tag_type.h libkc3/time.c libkc3/time.h libkc3/tuple.c libkc3/tuple.h libkc3/types.h libkc3/u.c.in libkc3/u.h.in libkc3/u16.c libkc3/u16.h libkc3/u32.c libkc3/u32.h libkc3/u64.c libkc3/u64.h libkc3/u8.c libkc3/u8.h libkc3/ucd.c libkc3/ucd.h libkc3/unquote.c libkc3/unquote.h libkc3/uw.c libkc3/uw.h libkc3/var.c libkc3/var.h libkc3/void.c libkc3/void.h libkc3_window/cairo/cairo_font.c libkc3_window/cairo/cairo_font.h libkc3_window/cairo/cairo_sprite.c libkc3_window/cairo/cairo_sprite.h libkc3_window/cairo/cairo_text.c libkc3_window/cairo/cairo_text.h libkc3_window/cairo/demo/bg_rect.c libkc3_window/cairo/demo/bg_rect.h libkc3_window/cairo/demo/flies.c libkc3_window/cairo/demo/flies.h libkc3_window/cairo/demo/lightspeed.c libkc3_window/cairo/demo/lightspeed.h libkc3_window/cairo/demo/mandelbrot_f128.c libkc3_window/cairo/demo/mandelbrot_f128.h libkc3_window/cairo/demo/toasters.c libkc3_window/cairo/demo/toasters.h libkc3_window/cairo/demo/window_cairo_demo.c libkc3_window/cairo/demo/window_cairo_demo.h libkc3_window/cairo/quartz/demo/window_cairo_quartz_demo.c libkc3_window/cairo/quartz/quartz_to_xkbcommon.c libkc3_window/cairo/quartz/quartz_to_xkbcommon.h libkc3_window/cairo/quartz/window_cairo_quartz.h libkc3_window/cairo/quartz/window_cairo_quartz_app_delegate.h libkc3_window/cairo/quartz/window_cairo_quartz_view.h libkc3_window/cairo/quartz/window_cairo_quartz_view_controller.h libkc3_window/cairo/quartz/xkbquartz.h libkc3_window/cairo/types.h libkc3_window/cairo/win32/demo/window_cairo_win32_demo.c libkc3_window/cairo/win32/vk_to_xkbcommon.c libkc3_window/cairo/win32/vk_to_xkbcommon.h libkc3_window/cairo/win32/window_cairo_win32.c libkc3_window/cairo/win32/window_cairo_win32.h libkc3_window/cairo/window_cairo.c libkc3_window/cairo/window_cairo.h libkc3_window/cairo/xcb/demo/window_cairo_xcb_demo.c libkc3_window/cairo/xcb/window_cairo_xcb.c libkc3_window/cairo/xcb/window_cairo_xcb.h libkc3_window/sdl2/demo/bg_rect.c libkc3_window/sdl2/demo/bg_rect.h libkc3_window/sdl2/demo/earth.c libkc3_window/sdl2/demo/earth.h libkc3_window/sdl2/demo/flies.c libkc3_window/sdl2/demo/flies.h libkc3_window/sdl2/demo/lightspeed.c libkc3_window/sdl2/demo/lightspeed.h libkc3_window/sdl2/demo/mandelbrot_f128.c libkc3_window/sdl2/demo/mandelbrot_f128.h libkc3_window/sdl2/demo/matrix.c libkc3_window/sdl2/demo/matrix.h libkc3_window/sdl2/demo/toasters.c libkc3_window/sdl2/demo/toasters.h libkc3_window/sdl2/demo/window_sdl2_demo.c libkc3_window/sdl2/demo/window_sdl2_demo.h libkc3_window/sdl2/disabled/mandelbrot.c libkc3_window/sdl2/disabled/mandelbrot.h libkc3_window/sdl2/disabled/sdl2_font.c libkc3_window/sdl2/disabled/sdl2_font.h libkc3_window/sdl2/disabled/sdl2_sprite.c libkc3_window/sdl2/disabled/sdl2_sprite.h libkc3_window/sdl2/dmat3.h libkc3_window/sdl2/dmat4.c libkc3_window/sdl2/dmat4.h libkc3_window/sdl2/dvec2.c libkc3_window/sdl2/dvec2.h libkc3_window/sdl2/dvec3.c libkc3_window/sdl2/dvec3.h libkc3_window/sdl2/gl_camera.c libkc3_window/sdl2/gl_camera.h libkc3_window/sdl2/gl_cylinder.c libkc3_window/sdl2/gl_cylinder.h libkc3_window/sdl2/gl_deprecated.c libkc3_window/sdl2/gl_deprecated.h libkc3_window/sdl2/gl_font.c libkc3_window/sdl2/gl_font.h libkc3_window/sdl2/gl_lines.c libkc3_window/sdl2/gl_lines.h libkc3_window/sdl2/gl_object.c libkc3_window/sdl2/gl_object.h libkc3_window/sdl2/gl_ortho.c libkc3_window/sdl2/gl_ortho.h libkc3_window/sdl2/gl_sphere.c libkc3_window/sdl2/gl_sphere.h libkc3_window/sdl2/gl_sprite.c libkc3_window/sdl2/gl_sprite.h libkc3_window/sdl2/gl_square.c libkc3_window/sdl2/gl_square.h libkc3_window/sdl2/gl_text.c libkc3_window/sdl2/gl_text.h libkc3_window/sdl2/gl_triangle.c libkc3_window/sdl2/gl_triangle.h libkc3_window/sdl2/gl_vertex.c libkc3_window/sdl2/gl_vertex.h libkc3_window/sdl2/gl_vtext.c libkc3_window/sdl2/gl_vtext.h libkc3_window/sdl2/mat3.h libkc3_window/sdl2/mat4.c libkc3_window/sdl2/mat4.h libkc3_window/sdl2/types.h libkc3_window/sdl2/vec2.c libkc3_window/sdl2/vec2.h libkc3_window/sdl2/vec3.c libkc3_window/sdl2/vec3.h libkc3_window/sdl2/window_sdl2.c libkc3_window/sdl2/window_sdl2.h libkc3_window/types.h libkc3_window/window.c libkc3_window/window.h test/array_test.c test/bool_test.c test/buf_file_test.c test/buf_inspect_test.c test/buf_parse_test.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_parse_test_u64.c test/buf_parse_test_u8.c test/buf_test.c test/call_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_cursor_test.c test/facts_test.c test/facts_with_test.c test/fn_test.c test/hash_test.c test/ident_test.c test/libkc3_test.c test/list_test.c test/ratio_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/test.c test/test.h test/tuple_test.c test/types_test.c ucd2c/ucd.h ucd2c/ucd2c.c '
+KC3_C_SOURCES='ekc3/ekc3.c ekc3/ekc3.h ekc3/html.c ekc3/html.h ekc3/types.h ikc3/buf_linenoise.c ikc3/buf_linenoise.h ikc3/buf_wineditline.c ikc3/buf_wineditline.h ikc3/ikc3.c ikc3/linenoise.c kc3c/c3c.c kc3s/buf_readline.c kc3s/buf_readline.h kc3s/kc3s.c libkc3/abs.c libkc3/abs.h libkc3/alloc.c libkc3/alloc.h libkc3/arg.c libkc3/arg.h libkc3/array.c libkc3/array.h libkc3/assert.h libkc3/binding.c libkc3/binding.h libkc3/block.c libkc3/block.h libkc3/bool.c libkc3/bool.h libkc3/buf.c libkc3/buf.h libkc3/buf_fd.c libkc3/buf_fd.h libkc3/buf_file.c libkc3/buf_file.h libkc3/buf_getc.c libkc3/buf_getc.h libkc3/buf_getchar.c libkc3/buf_getchar.h libkc3/buf_inspect.c libkc3/buf_inspect.h libkc3/buf_inspect_s.c.in libkc3/buf_inspect_s.h.in libkc3/buf_inspect_s16.c libkc3/buf_inspect_s16.h libkc3/buf_inspect_s16_binary.c libkc3/buf_inspect_s16_binary.h libkc3/buf_inspect_s16_decimal.c libkc3/buf_inspect_s16_decimal.h libkc3/buf_inspect_s16_hexadecimal.c libkc3/buf_inspect_s16_hexadecimal.h libkc3/buf_inspect_s16_octal.c libkc3/buf_inspect_s16_octal.h libkc3/buf_inspect_s32.c libkc3/buf_inspect_s32.h libkc3/buf_inspect_s32_binary.c libkc3/buf_inspect_s32_binary.h libkc3/buf_inspect_s32_decimal.c libkc3/buf_inspect_s32_decimal.h libkc3/buf_inspect_s32_hexadecimal.c libkc3/buf_inspect_s32_hexadecimal.h libkc3/buf_inspect_s32_octal.c libkc3/buf_inspect_s32_octal.h libkc3/buf_inspect_s64.c libkc3/buf_inspect_s64.h libkc3/buf_inspect_s64_binary.c libkc3/buf_inspect_s64_binary.h libkc3/buf_inspect_s64_decimal.c libkc3/buf_inspect_s64_decimal.h libkc3/buf_inspect_s64_hexadecimal.c libkc3/buf_inspect_s64_hexadecimal.h libkc3/buf_inspect_s64_octal.c libkc3/buf_inspect_s64_octal.h libkc3/buf_inspect_s8.c libkc3/buf_inspect_s8.h libkc3/buf_inspect_s8_binary.c libkc3/buf_inspect_s8_binary.h libkc3/buf_inspect_s8_decimal.c libkc3/buf_inspect_s8_decimal.h libkc3/buf_inspect_s8_hexadecimal.c libkc3/buf_inspect_s8_hexadecimal.h libkc3/buf_inspect_s8_octal.c libkc3/buf_inspect_s8_octal.h libkc3/buf_inspect_s_base.c.in libkc3/buf_inspect_s_base.h.in libkc3/buf_inspect_sw.c libkc3/buf_inspect_sw.h libkc3/buf_inspect_sw_binary.c libkc3/buf_inspect_sw_binary.h libkc3/buf_inspect_sw_decimal.c libkc3/buf_inspect_sw_decimal.h libkc3/buf_inspect_sw_hexadecimal.c libkc3/buf_inspect_sw_hexadecimal.h libkc3/buf_inspect_sw_octal.c libkc3/buf_inspect_sw_octal.h libkc3/buf_inspect_u.c.in libkc3/buf_inspect_u.h.in libkc3/buf_inspect_u16.c libkc3/buf_inspect_u16.h libkc3/buf_inspect_u16_binary.c libkc3/buf_inspect_u16_binary.h libkc3/buf_inspect_u16_decimal.c libkc3/buf_inspect_u16_decimal.h libkc3/buf_inspect_u16_hexadecimal.c libkc3/buf_inspect_u16_hexadecimal.h libkc3/buf_inspect_u16_octal.c libkc3/buf_inspect_u16_octal.h libkc3/buf_inspect_u32.c libkc3/buf_inspect_u32.h libkc3/buf_inspect_u32_binary.c libkc3/buf_inspect_u32_binary.h libkc3/buf_inspect_u32_decimal.c libkc3/buf_inspect_u32_decimal.h libkc3/buf_inspect_u32_hexadecimal.c libkc3/buf_inspect_u32_hexadecimal.h libkc3/buf_inspect_u32_octal.c libkc3/buf_inspect_u32_octal.h libkc3/buf_inspect_u64.c libkc3/buf_inspect_u64.h libkc3/buf_inspect_u64_binary.c libkc3/buf_inspect_u64_binary.h libkc3/buf_inspect_u64_decimal.c libkc3/buf_inspect_u64_decimal.h libkc3/buf_inspect_u64_hexadecimal.c libkc3/buf_inspect_u64_hexadecimal.h libkc3/buf_inspect_u64_octal.c libkc3/buf_inspect_u64_octal.h libkc3/buf_inspect_u8.c libkc3/buf_inspect_u8.h libkc3/buf_inspect_u8_binary.c libkc3/buf_inspect_u8_binary.h libkc3/buf_inspect_u8_decimal.c libkc3/buf_inspect_u8_decimal.h libkc3/buf_inspect_u8_hexadecimal.c libkc3/buf_inspect_u8_hexadecimal.h libkc3/buf_inspect_u8_octal.c libkc3/buf_inspect_u8_octal.h libkc3/buf_inspect_u_base.c.in libkc3/buf_inspect_u_base.h.in libkc3/buf_inspect_uw.c libkc3/buf_inspect_uw.h libkc3/buf_inspect_uw_binary.c libkc3/buf_inspect_uw_binary.h libkc3/buf_inspect_uw_decimal.c libkc3/buf_inspect_uw_decimal.h libkc3/buf_inspect_uw_hexadecimal.c libkc3/buf_inspect_uw_hexadecimal.h libkc3/buf_inspect_uw_octal.c libkc3/buf_inspect_uw_octal.h libkc3/buf_parse.c libkc3/buf_parse.h libkc3/buf_parse_s.c.in libkc3/buf_parse_s.h.in libkc3/buf_parse_s16.c libkc3/buf_parse_s16.h libkc3/buf_parse_s32.c libkc3/buf_parse_s32.h libkc3/buf_parse_s64.c libkc3/buf_parse_s64.h libkc3/buf_parse_s8.c libkc3/buf_parse_s8.h libkc3/buf_parse_sw.c libkc3/buf_parse_sw.h libkc3/buf_parse_u.c.in libkc3/buf_parse_u.h.in libkc3/buf_parse_u16.c libkc3/buf_parse_u16.h libkc3/buf_parse_u32.c libkc3/buf_parse_u32.h libkc3/buf_parse_u64.c libkc3/buf_parse_u64.h libkc3/buf_parse_u8.c libkc3/buf_parse_u8.h libkc3/buf_parse_uw.c libkc3/buf_parse_uw.h libkc3/buf_rw.c libkc3/buf_rw.h libkc3/buf_save.c libkc3/buf_save.h libkc3/call.c libkc3/call.h libkc3/ceiling.c libkc3/ceiling.h libkc3/cfn.c libkc3/cfn.h libkc3/character.c libkc3/character.h libkc3/compare.c libkc3/compare.h libkc3/complex.c libkc3/complex.h libkc3/cow.c libkc3/cow.h libkc3/data.c libkc3/data.h libkc3/env.c libkc3/env.h libkc3/error.c libkc3/error.h libkc3/error_handler.c libkc3/error_handler.h libkc3/eval.c libkc3/eval.h libkc3/f128.c libkc3/f128.h libkc3/f32.c libkc3/f32.h libkc3/f64.c libkc3/f64.h libkc3/fact.c libkc3/fact.h libkc3/fact_action.c libkc3/fact_action.h libkc3/fact_list.c libkc3/fact_list.h libkc3/facts.c libkc3/facts.h libkc3/facts_cursor.c libkc3/facts_cursor.h libkc3/facts_spec.c libkc3/facts_spec.h libkc3/facts_spec_cursor.c libkc3/facts_spec_cursor.h libkc3/facts_transaction.c libkc3/facts_transaction.h libkc3/facts_with.c libkc3/facts_with.h libkc3/facts_with_cursor.c libkc3/facts_with_cursor.h libkc3/file.c libkc3/file.h libkc3/float.h libkc3/fn.c libkc3/fn.h libkc3/fn_clause.c libkc3/fn_clause.h libkc3/frame.c libkc3/frame.h libkc3/hash.c libkc3/hash.h libkc3/ident.c libkc3/ident.h libkc3/inspect.c libkc3/inspect.h libkc3/integer.c libkc3/integer.h libkc3/io.c libkc3/io.h libkc3/kc3.c libkc3/kc3.h libkc3/kc3_main.h libkc3/license.c libkc3/list.c libkc3/list.h libkc3/list_init.c libkc3/list_init.h libkc3/log.c libkc3/log.h libkc3/map.c libkc3/map.h libkc3/module.c libkc3/module.h libkc3/operator.c libkc3/operator.h libkc3/pcomplex.c libkc3/pcomplex.h libkc3/pcow.c libkc3/pcow.h libkc3/ptag.c libkc3/ptag.h libkc3/ptr.c libkc3/ptr.h libkc3/ptr_free.c libkc3/ptr_free.h libkc3/queue.c libkc3/queue.h libkc3/quote.c libkc3/quote.h libkc3/ratio.c libkc3/ratio.h libkc3/s.c.in libkc3/s.h.in libkc3/s16.c libkc3/s16.h libkc3/s32.c libkc3/s32.h libkc3/s64.c libkc3/s64.h libkc3/s8.c libkc3/s8.h libkc3/sequence.c libkc3/sequence.h libkc3/set.c.in libkc3/set.h.in libkc3/set__fact.c libkc3/set__fact.h libkc3/set__tag.c libkc3/set__tag.h libkc3/set_cursor.c.in libkc3/set_cursor.h.in libkc3/set_cursor__fact.c libkc3/set_cursor__fact.h libkc3/set_cursor__tag.c libkc3/set_cursor__tag.h libkc3/set_item.c.in libkc3/set_item.h.in libkc3/set_item__fact.c libkc3/set_item__fact.h libkc3/set_item__tag.c libkc3/set_item__tag.h libkc3/sha1.h libkc3/sign.c libkc3/sign.h libkc3/skiplist.c.in libkc3/skiplist.h.in libkc3/skiplist__fact.c libkc3/skiplist__fact.h libkc3/skiplist_node.c.in libkc3/skiplist_node.h.in libkc3/skiplist_node__fact.c libkc3/skiplist_node__fact.h libkc3/special_operator.c libkc3/special_operator.h libkc3/str.c libkc3/str.h libkc3/struct.c libkc3/struct.h libkc3/struct_type.c libkc3/struct_type.h libkc3/sw.c libkc3/sw.h libkc3/sym.c libkc3/sym.h libkc3/tag.c libkc3/tag.h libkc3/tag_add.c libkc3/tag_addi.c libkc3/tag_band.c libkc3/tag_bnot.c libkc3/tag_bor.c libkc3/tag_bxor.c libkc3/tag_div.c libkc3/tag_init.c libkc3/tag_init.h libkc3/tag_mod.c libkc3/tag_mul.c libkc3/tag_neg.c libkc3/tag_shift_left.c libkc3/tag_shift_right.c libkc3/tag_sqrt.c libkc3/tag_sub.c libkc3/tag_type.c libkc3/tag_type.h libkc3/time.c libkc3/time.h libkc3/tuple.c libkc3/tuple.h libkc3/types.h libkc3/u.c.in libkc3/u.h.in libkc3/u16.c libkc3/u16.h libkc3/u32.c libkc3/u32.h libkc3/u64.c libkc3/u64.h libkc3/u8.c libkc3/u8.h libkc3/ucd.c libkc3/ucd.h libkc3/unquote.c libkc3/unquote.h libkc3/uw.c libkc3/uw.h libkc3/var.c libkc3/var.h libkc3/void.c libkc3/void.h libkc3_window/cairo/cairo_font.c libkc3_window/cairo/cairo_font.h libkc3_window/cairo/cairo_sprite.c libkc3_window/cairo/cairo_sprite.h libkc3_window/cairo/cairo_text.c libkc3_window/cairo/cairo_text.h libkc3_window/cairo/demo/bg_rect.c libkc3_window/cairo/demo/bg_rect.h libkc3_window/cairo/demo/flies.c libkc3_window/cairo/demo/flies.h libkc3_window/cairo/demo/lightspeed.c libkc3_window/cairo/demo/lightspeed.h libkc3_window/cairo/demo/mandelbrot_f128.c libkc3_window/cairo/demo/mandelbrot_f128.h libkc3_window/cairo/demo/toasters.c libkc3_window/cairo/demo/toasters.h libkc3_window/cairo/demo/window_cairo_demo.c libkc3_window/cairo/demo/window_cairo_demo.h libkc3_window/cairo/quartz/demo/window_cairo_quartz_demo.c libkc3_window/cairo/quartz/quartz_to_xkbcommon.c libkc3_window/cairo/quartz/quartz_to_xkbcommon.h libkc3_window/cairo/quartz/window_cairo_quartz.h libkc3_window/cairo/quartz/window_cairo_quartz_app_delegate.h libkc3_window/cairo/quartz/window_cairo_quartz_view.h libkc3_window/cairo/quartz/window_cairo_quartz_view_controller.h libkc3_window/cairo/quartz/xkbquartz.h libkc3_window/cairo/types.h libkc3_window/cairo/win32/demo/window_cairo_win32_demo.c libkc3_window/cairo/win32/vk_to_xkbcommon.c libkc3_window/cairo/win32/vk_to_xkbcommon.h libkc3_window/cairo/win32/window_cairo_win32.c libkc3_window/cairo/win32/window_cairo_win32.h libkc3_window/cairo/window_cairo.c libkc3_window/cairo/window_cairo.h libkc3_window/cairo/xcb/demo/window_cairo_xcb_demo.c libkc3_window/cairo/xcb/window_cairo_xcb.c libkc3_window/cairo/xcb/window_cairo_xcb.h libkc3_window/sdl2/demo/bg_rect.c libkc3_window/sdl2/demo/bg_rect.h libkc3_window/sdl2/demo/earth.c libkc3_window/sdl2/demo/earth.h libkc3_window/sdl2/demo/flies.c libkc3_window/sdl2/demo/flies.h libkc3_window/sdl2/demo/lightspeed.c libkc3_window/sdl2/demo/lightspeed.h libkc3_window/sdl2/demo/mandelbrot_f128.c libkc3_window/sdl2/demo/mandelbrot_f128.h libkc3_window/sdl2/demo/matrix.c libkc3_window/sdl2/demo/matrix.h libkc3_window/sdl2/demo/toasters.c libkc3_window/sdl2/demo/toasters.h libkc3_window/sdl2/demo/window_sdl2_demo.c libkc3_window/sdl2/demo/window_sdl2_demo.h libkc3_window/sdl2/disabled/mandelbrot.c libkc3_window/sdl2/disabled/mandelbrot.h libkc3_window/sdl2/disabled/sdl2_font.c libkc3_window/sdl2/disabled/sdl2_font.h libkc3_window/sdl2/disabled/sdl2_sprite.c libkc3_window/sdl2/disabled/sdl2_sprite.h libkc3_window/sdl2/dmat3.h libkc3_window/sdl2/dmat4.c libkc3_window/sdl2/dmat4.h libkc3_window/sdl2/dvec2.c libkc3_window/sdl2/dvec2.h libkc3_window/sdl2/dvec3.c libkc3_window/sdl2/dvec3.h libkc3_window/sdl2/gl_camera.c libkc3_window/sdl2/gl_camera.h libkc3_window/sdl2/gl_cylinder.c libkc3_window/sdl2/gl_cylinder.h libkc3_window/sdl2/gl_deprecated.c libkc3_window/sdl2/gl_deprecated.h libkc3_window/sdl2/gl_font.c libkc3_window/sdl2/gl_font.h libkc3_window/sdl2/gl_lines.c libkc3_window/sdl2/gl_lines.h libkc3_window/sdl2/gl_object.c libkc3_window/sdl2/gl_object.h libkc3_window/sdl2/gl_ortho.c libkc3_window/sdl2/gl_ortho.h libkc3_window/sdl2/gl_sphere.c libkc3_window/sdl2/gl_sphere.h libkc3_window/sdl2/gl_sprite.c libkc3_window/sdl2/gl_sprite.h libkc3_window/sdl2/gl_square.c libkc3_window/sdl2/gl_square.h libkc3_window/sdl2/gl_text.c libkc3_window/sdl2/gl_text.h libkc3_window/sdl2/gl_triangle.c libkc3_window/sdl2/gl_triangle.h libkc3_window/sdl2/gl_vertex.c libkc3_window/sdl2/gl_vertex.h libkc3_window/sdl2/gl_vtext.c libkc3_window/sdl2/gl_vtext.h libkc3_window/sdl2/mat3.h libkc3_window/sdl2/mat4.c libkc3_window/sdl2/mat4.h libkc3_window/sdl2/types.h libkc3_window/sdl2/vec2.c libkc3_window/sdl2/vec2.h libkc3_window/sdl2/vec3.c libkc3_window/sdl2/vec3.h libkc3_window/sdl2/window_sdl2.c libkc3_window/sdl2/window_sdl2.h libkc3_window/types.h libkc3_window/window.c libkc3_window/window.h test/array_test.c test/bool_test.c test/buf_file_test.c test/buf_inspect_test.c test/buf_parse_test.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_parse_test_u64.c test/buf_parse_test_u8.c test/buf_test.c test/call_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_cursor_test.c test/facts_test.c test/facts_with_test.c test/fn_test.c test/hash_test.c test/ident_test.c test/inspect_test.c test/libkc3_test.c test/list_test.c test/ratio_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/test.c test/test.h test/tuple_test.c test/types_test.c ucd2c/ucd.h ucd2c/ucd2c.c '
KC3_OBJC_SOURCES='libkc3_window/cairo/quartz/window_cairo_quartz.m libkc3_window/cairo/quartz/window_cairo_quartz_app_delegate.m libkc3_window/cairo/quartz/window_cairo_quartz_view.m libkc3_window/cairo/quartz/window_cairo_quartz_view_controller.m '
-KC3_OTHER_SOURCES='AUTHORS Makefile README.md config.subr configure fonts/Computer Modern/cmunbl-webfont.ttf fonts/Computer Modern/cmunbl.otf fonts/Computer Modern/cmunbx-webfont.ttf fonts/Computer Modern/cmunbx.otf fonts/Computer Modern/cmunbxo-webfont.ttf fonts/Computer Modern/cmunbxo.otf fonts/Computer Modern/cmunrm-webfont.ttf fonts/Computer Modern/cmunrm.otf fonts/Computer Modern/cmunsi-webfont.ttf fonts/Computer Modern/cmunsi.otf fonts/Computer Modern/cmunsl-webfont.ttf fonts/Computer Modern/cmunsl.otf fonts/Computer Modern/cmunss-webfont.ttf fonts/Computer Modern/cmunss.otf fonts/Computer Modern/cmunsx-webfont.ttf fonts/Computer Modern/cmunsx.otf fonts/Courier New/Courier New.ttf fonts/Courier/fonts/OGCourier-Bold.otf fonts/Courier/fonts/OGCourier-Bold.ttf fonts/Courier/fonts/OGCourier-BoldItalic.otf fonts/Courier/fonts/OGCourier-BoldItalic.ttf fonts/Courier/fonts/OGCourier-Italic.otf fonts/Courier/fonts/OGCourier-Italic.ttf fonts/Courier/fonts/OGCourier.otf fonts/Courier/fonts/OGCourier.ttf fonts/Courier/fonts/zero-dot/OGCourierZeroDot-Bold.otf fonts/Courier/fonts/zero-dot/OGCourierZeroDot-Bold.ttf fonts/Courier/fonts/zero-dot/OGCourierZeroDot-BoldItalic.otf fonts/Courier/fonts/zero-dot/OGCourierZeroDot-BoldItalic.ttf fonts/Courier/fonts/zero-dot/OGCourierZeroDot-Italic.otf fonts/Courier/fonts/zero-dot/OGCourierZeroDot-Italic.ttf fonts/Courier/fonts/zero-dot/OGCourierZeroDot.otf fonts/Courier/fonts/zero-dot/OGCourierZeroDot.ttf fonts/Courier/fonts/zero-slash/OGCourierZeroSlash-Bold.otf fonts/Courier/fonts/zero-slash/OGCourierZeroSlash-Bold.ttf fonts/Courier/fonts/zero-slash/OGCourierZeroSlash-BoldItalic.otf fonts/Courier/fonts/zero-slash/OGCourierZeroSlash-BoldItalic.ttf fonts/Courier/fonts/zero-slash/OGCourierZeroSlash-Italic.otf fonts/Courier/fonts/zero-slash/OGCourierZeroSlash-Italic.ttf fonts/Courier/fonts/zero-slash/OGCourierZeroSlash.otf fonts/Courier/fonts/zero-slash/OGCourierZeroSlash.ttf fonts/Courier/sfd/OGCourier-Bold.sfd.ttf fonts/Courier/sfd/OGCourier-BoldItalic.sfd.ttf fonts/Courier/sfd/OGCourier-Italic.sfd.ttf fonts/Courier/sfd/OGCourier.sfd.ttf fonts/Inter/InterVariable-Italic.ttf fonts/Inter/InterVariable.ttf fonts/Inter/extras/otf/Inter-Black.otf fonts/Inter/extras/otf/Inter-BlackItalic.otf fonts/Inter/extras/otf/Inter-Bold.otf fonts/Inter/extras/otf/Inter-BoldItalic.otf fonts/Inter/extras/otf/Inter-ExtraBold.otf fonts/Inter/extras/otf/Inter-ExtraBoldItalic.otf fonts/Inter/extras/otf/Inter-ExtraLight.otf fonts/Inter/extras/otf/Inter-ExtraLightItalic.otf fonts/Inter/extras/otf/Inter-Italic.otf fonts/Inter/extras/otf/Inter-Light.otf fonts/Inter/extras/otf/Inter-LightItalic.otf fonts/Inter/extras/otf/Inter-Medium.otf fonts/Inter/extras/otf/Inter-MediumItalic.otf fonts/Inter/extras/otf/Inter-Regular.otf fonts/Inter/extras/otf/Inter-SemiBold.otf fonts/Inter/extras/otf/Inter-SemiBoldItalic.otf fonts/Inter/extras/otf/Inter-Thin.otf fonts/Inter/extras/otf/Inter-ThinItalic.otf fonts/Inter/extras/otf/InterDisplay-Black.otf fonts/Inter/extras/otf/InterDisplay-BlackItalic.otf fonts/Inter/extras/otf/InterDisplay-Bold.otf fonts/Inter/extras/otf/InterDisplay-BoldItalic.otf fonts/Inter/extras/otf/InterDisplay-ExtraBold.otf fonts/Inter/extras/otf/InterDisplay-ExtraBoldItalic.otf fonts/Inter/extras/otf/InterDisplay-ExtraLight.otf fonts/Inter/extras/otf/InterDisplay-ExtraLightItalic.otf fonts/Inter/extras/otf/InterDisplay-Italic.otf fonts/Inter/extras/otf/InterDisplay-Light.otf fonts/Inter/extras/otf/InterDisplay-LightItalic.otf fonts/Inter/extras/otf/InterDisplay-Medium.otf fonts/Inter/extras/otf/InterDisplay-MediumItalic.otf fonts/Inter/extras/otf/InterDisplay-Regular.otf fonts/Inter/extras/otf/InterDisplay-SemiBold.otf fonts/Inter/extras/otf/InterDisplay-SemiBoldItalic.otf fonts/Inter/extras/otf/InterDisplay-Thin.otf fonts/Inter/extras/otf/InterDisplay-ThinItalic.otf fonts/Inter/extras/ttf/Inter-Black.ttf fonts/Inter/extras/ttf/Inter-BlackItalic.ttf fonts/Inter/extras/ttf/Inter-Bold.ttf fonts/Inter/extras/ttf/Inter-BoldItalic.ttf fonts/Inter/extras/ttf/Inter-ExtraBold.ttf fonts/Inter/extras/ttf/Inter-ExtraBoldItalic.ttf fonts/Inter/extras/ttf/Inter-ExtraLight.ttf fonts/Inter/extras/ttf/Inter-ExtraLightItalic.ttf fonts/Inter/extras/ttf/Inter-Italic.ttf fonts/Inter/extras/ttf/Inter-Light.ttf fonts/Inter/extras/ttf/Inter-LightItalic.ttf fonts/Inter/extras/ttf/Inter-Medium.ttf fonts/Inter/extras/ttf/Inter-MediumItalic.ttf fonts/Inter/extras/ttf/Inter-Regular.ttf fonts/Inter/extras/ttf/Inter-SemiBold.ttf fonts/Inter/extras/ttf/Inter-SemiBoldItalic.ttf fonts/Inter/extras/ttf/Inter-Thin.ttf fonts/Inter/extras/ttf/Inter-ThinItalic.ttf fonts/Inter/extras/ttf/InterDisplay-Black.ttf fonts/Inter/extras/ttf/InterDisplay-BlackItalic.ttf fonts/Inter/extras/ttf/InterDisplay-Bold.ttf fonts/Inter/extras/ttf/InterDisplay-BoldItalic.ttf fonts/Inter/extras/ttf/InterDisplay-ExtraBold.ttf fonts/Inter/extras/ttf/InterDisplay-ExtraBoldItalic.ttf fonts/Inter/extras/ttf/InterDisplay-ExtraLight.ttf fonts/Inter/extras/ttf/InterDisplay-ExtraLightItalic.ttf fonts/Inter/extras/ttf/InterDisplay-Italic.ttf fonts/Inter/extras/ttf/InterDisplay-Light.ttf fonts/Inter/extras/ttf/InterDisplay-LightItalic.ttf fonts/Inter/extras/ttf/InterDisplay-Medium.ttf fonts/Inter/extras/ttf/InterDisplay-MediumItalic.ttf fonts/Inter/extras/ttf/InterDisplay-Regular.ttf fonts/Inter/extras/ttf/InterDisplay-SemiBold.ttf fonts/Inter/extras/ttf/InterDisplay-SemiBoldItalic.ttf fonts/Inter/extras/ttf/InterDisplay-Thin.ttf fonts/Inter/extras/ttf/InterDisplay-ThinItalic.ttf fonts/Noto Sans/NotoSans-Black.ttf fonts/Noto Sans/NotoSans-BlackItalic.ttf fonts/Noto Sans/NotoSans-Bold.ttf fonts/Noto Sans/NotoSans-BoldItalic.ttf fonts/Noto Sans/NotoSans-ExtraBold.ttf fonts/Noto Sans/NotoSans-ExtraBoldItalic.ttf fonts/Noto Sans/NotoSans-ExtraLight.ttf fonts/Noto Sans/NotoSans-ExtraLightItalic.ttf fonts/Noto Sans/NotoSans-Italic-VariableFont_wdth,wght.ttf fonts/Noto Sans/NotoSans-Italic.ttf fonts/Noto Sans/NotoSans-Light.ttf fonts/Noto Sans/NotoSans-LightItalic.ttf fonts/Noto Sans/NotoSans-Medium.ttf fonts/Noto Sans/NotoSans-MediumItalic.ttf fonts/Noto Sans/NotoSans-Regular.ttf fonts/Noto Sans/NotoSans-SemiBold.ttf fonts/Noto Sans/NotoSans-SemiBoldItalic.ttf fonts/Noto Sans/NotoSans-Thin.ttf fonts/Noto Sans/NotoSans-ThinItalic.ttf fonts/Noto Sans/NotoSans-VariableFont_wdth,wght.ttf fonts/Noto Sans/NotoSans_Condensed-Black.ttf fonts/Noto Sans/NotoSans_Condensed-BlackItalic.ttf fonts/Noto Sans/NotoSans_Condensed-Bold.ttf fonts/Noto Sans/NotoSans_Condensed-BoldItalic.ttf fonts/Noto Sans/NotoSans_Condensed-ExtraBold.ttf fonts/Noto Sans/NotoSans_Condensed-ExtraBoldItalic.ttf fonts/Noto Sans/NotoSans_Condensed-ExtraLight.ttf fonts/Noto Sans/NotoSans_Condensed-ExtraLightItalic.ttf fonts/Noto Sans/NotoSans_Condensed-Italic.ttf fonts/Noto Sans/NotoSans_Condensed-Light.ttf fonts/Noto Sans/NotoSans_Condensed-LightItalic.ttf fonts/Noto Sans/NotoSans_Condensed-Medium.ttf fonts/Noto Sans/NotoSans_Condensed-MediumItalic.ttf fonts/Noto Sans/NotoSans_Condensed-Regular.ttf fonts/Noto Sans/NotoSans_Condensed-SemiBold.ttf fonts/Noto Sans/NotoSans_Condensed-SemiBoldItalic.ttf fonts/Noto Sans/NotoSans_Condensed-Thin.ttf fonts/Noto Sans/NotoSans_Condensed-ThinItalic.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-Black.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-BlackItalic.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-Bold.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-BoldItalic.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-ExtraBold.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-ExtraBoldItalic.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-ExtraLight.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-ExtraLightItalic.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-Italic.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-Light.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-LightItalic.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-Medium.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-MediumItalic.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-Regular.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-SemiBold.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-SemiBoldItalic.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-Thin.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-ThinItalic.ttf fonts/Noto Sans/NotoSans_SemiCondensed-Black.ttf fonts/Noto Sans/NotoSans_SemiCondensed-BlackItalic.ttf fonts/Noto Sans/NotoSans_SemiCondensed-Bold.ttf fonts/Noto Sans/NotoSans_SemiCondensed-BoldItalic.ttf fonts/Noto Sans/NotoSans_SemiCondensed-ExtraBold.ttf fonts/Noto Sans/NotoSans_SemiCondensed-ExtraBoldItalic.ttf fonts/Noto Sans/NotoSans_SemiCondensed-ExtraLight.ttf fonts/Noto Sans/NotoSans_SemiCondensed-ExtraLightItalic.ttf fonts/Noto Sans/NotoSans_SemiCondensed-Italic.ttf fonts/Noto Sans/NotoSans_SemiCondensed-Light.ttf fonts/Noto Sans/NotoSans_SemiCondensed-LightItalic.ttf fonts/Noto Sans/NotoSans_SemiCondensed-Medium.ttf fonts/Noto Sans/NotoSans_SemiCondensed-MediumItalic.ttf fonts/Noto Sans/NotoSans_SemiCondensed-Regular.ttf fonts/Noto Sans/NotoSans_SemiCondensed-SemiBold.ttf fonts/Noto Sans/NotoSans_SemiCondensed-SemiBoldItalic.ttf fonts/Noto Sans/NotoSans_SemiCondensed-Thin.ttf fonts/Noto Sans/NotoSans_SemiCondensed-ThinItalic.ttf img/c3.1.xcf img/c3.1080.jpg img/c3.1080.png img/c3.128.jpg img/c3.128.png img/c3.16.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.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/c3.xcf img/earth.jpg img/earth.png img/flaps.256.png img/flaps.png img/fly-dead.png img/fly-noto.png img/iris-c3-004.jpeg img/mandelbrot_f128_limit.1.png img/mandelbrot_f128_limit.2.png img/mandelbrot_f128_limit.3.png img/mandelbrot_f128_limit.png img/matrix_shade.png img/thodg_No_Prompt_073261d5-2c81-4b6e-9572-e0b840c55f1f.jpeg img/toast.128.png img/toast.png kc3.index kc3.version lib/kc3/0.1/array.kc3 lib/kc3/0.1/complex.facts lib/kc3/0.1/cow.kc3 lib/kc3/0.1/ekc3.kc3 lib/kc3/0.1/f128.facts lib/kc3/0.1/f32.facts lib/kc3/0.1/f64.facts lib/kc3/0.1/gl/dvec2.kc3 lib/kc3/0.1/gl/dvec3.kc3 lib/kc3/0.1/gl/object.kc3 lib/kc3/0.1/gl/sphere.kc3 lib/kc3/0.1/gl/triangle.kc3 lib/kc3/0.1/gl/vec2.kc3 lib/kc3/0.1/gl/vec3.kc3 lib/kc3/0.1/gl/vertex.kc3 lib/kc3/0.1/http.kc3 lib/kc3/0.1/integer.facts lib/kc3/0.1/kc3.facts lib/kc3/0.1/kc3/operator.kc3 lib/kc3/0.1/list.kc3 lib/kc3/0.1/map.facts lib/kc3/0.1/ptr.facts lib/kc3/0.1/ptr_free.facts lib/kc3/0.1/ratio.facts lib/kc3/0.1/s16.facts lib/kc3/0.1/s16.kc3 lib/kc3/0.1/s32.kc3 lib/kc3/0.1/s64.facts lib/kc3/0.1/s64.kc3 lib/kc3/0.1/s8.kc3 lib/kc3/0.1/socket.kc3 lib/kc3/0.1/str.facts lib/kc3/0.1/sw.kc3 lib/kc3/0.1/sym.facts lib/kc3/0.1/u16.facts lib/kc3/0.1/u32.facts lib/kc3/0.1/u64.facts lib/kc3/0.1/u8.facts lib/kc3/0.1/uw.facts lib/kc3/0.1/var.facts lib/kc3/0.1/void.facts libkc3/tag_init.rb license.h sources.mk sources.sh test/buf_parse_test_su.rb test/ekc3/title.out.expected test/ekc3/title.ret.expected test/facts_test_dump_file.expected.facts test/facts_test_load_file.facts test/facts_test_log_add.expected.facts test/facts_test_log_remove.expected.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/http/server.kc3.ret.expected test/http/server.out.expected test/ikc3/access.out.expected test/ikc3/access.ret.expected test/ikc3/array.err.expected test/ikc3/array.out.expected test/ikc3/array.ret.expected test/ikc3/block.out.expected test/ikc3/block.ret.expected test/ikc3/bool.err.expected test/ikc3/bool.out.expected test/ikc3/bool.ret.expected test/ikc3/call.err.expected test/ikc3/call.out.expected test/ikc3/call.ret.expected test/ikc3/cast.out.expected test/ikc3/cast.ret.expected test/ikc3/character.err.expected test/ikc3/character.out.expected test/ikc3/character.ret.expected test/ikc3/comment.err.expected test/ikc3/comment.out.expected test/ikc3/comment.ret.expected test/ikc3/complex.out.expected test/ikc3/complex.ret.expected test/ikc3/def.out.expected test/ikc3/def.ret.expected test/ikc3/defmodule.out.expected test/ikc3/defmodule.ret.expected test/ikc3/defoperator.out.expected test/ikc3/defoperator.ret.expected test/ikc3/defstruct.out.expected test/ikc3/defstruct.ret.expected test/ikc3/equal.err.expected test/ikc3/equal.out.expected test/ikc3/equal.ret.expected test/ikc3/fn.err.expected test/ikc3/fn.out.expected test/ikc3/fn.ret.expected test/ikc3/function_call.err.expected test/ikc3/function_call.out.expected test/ikc3/function_call.ret.expected test/ikc3/gl.out.expected test/ikc3/gl.ret.expected test/ikc3/globals.out.expected test/ikc3/globals.ret.expected test/ikc3/hello.err.expected test/ikc3/hello.out.expected test/ikc3/hello.ret.expected test/ikc3/ident.err.expected test/ikc3/ident.out.expected test/ikc3/ident.ret.expected test/ikc3/if.out.expected test/ikc3/if.ret.expected test/ikc3/integer.lisp test/ikc3/integer.out.expected test/ikc3/integer.ret.expected test/ikc3/integer_add.out.expected test/ikc3/integer_add.ret.expected test/ikc3/integer_band.out.expected test/ikc3/integer_band.ret.expected test/ikc3/integer_bnot.out.expected test/ikc3/integer_bnot.ret.expected test/ikc3/integer_bor-2.out.expected test/ikc3/integer_bor-2.ret.expected test/ikc3/integer_bxor.out.expected test/ikc3/integer_bxor.ret.expected test/ikc3/integer_div.out.expected test/ikc3/integer_div.ret.expected test/ikc3/integer_eq.out.expected test/ikc3/integer_eq.ret.expected test/ikc3/integer_gt.out.expected test/ikc3/integer_gt.ret.expected test/ikc3/integer_lt.out.expected test/ikc3/integer_lt.ret.expected test/ikc3/integer_mod-2.out.expected test/ikc3/integer_mod-2.ret.expected test/ikc3/integer_mul.out.expected test/ikc3/integer_mul.ret.expected test/ikc3/integer_neg.out.expected test/ikc3/integer_neg.ret.expected test/ikc3/integer_sub.out.expected test/ikc3/integer_sub.ret.expected test/ikc3/let.out.expected test/ikc3/let.ret.expected test/ikc3/list.err.expected test/ikc3/list.out.expected test/ikc3/list.ret.expected test/ikc3/macro.out.expected test/ikc3/macro.ret.expected test/ikc3/map.out.expected test/ikc3/map.ret.expected test/ikc3/op.err.expected test/ikc3/op.out.expected test/ikc3/op.ret.expected test/ikc3/plist.err.expected test/ikc3/plist.out.expected test/ikc3/plist.ret.expected test/ikc3/puts.out.expected test/ikc3/puts.ret.expected test/ikc3/quote.out.expected test/ikc3/quote.ret.expected test/ikc3/ratio.out.expected test/ikc3/ratio.ret.expected test/ikc3/str.err.expected test/ikc3/str.out.expected test/ikc3/str.ret.expected test/ikc3/struct.out.expected test/ikc3/struct.ret.expected test/ikc3/sym.err.expected test/ikc3/sym.out.expected test/ikc3/sym.ret.expected test/ikc3/tuple.err.expected test/ikc3/tuple.out.expected test/ikc3/tuple.ret.expected test/ikc3/var.out.expected test/ikc3/var.ret.expected test/ikc3/void.out.expected test/ikc3/void.ret.expected test/ikc3_test test/replace_lines.rb test/test.rb test/test_case_end.rb test/zero '
+KC3_OTHER_SOURCES='AUTHORS Makefile README.md config.subr configure fonts/Computer Modern/cmunbl-webfont.ttf fonts/Computer Modern/cmunbl.otf fonts/Computer Modern/cmunbx-webfont.ttf fonts/Computer Modern/cmunbx.otf fonts/Computer Modern/cmunbxo-webfont.ttf fonts/Computer Modern/cmunbxo.otf fonts/Computer Modern/cmunrm-webfont.ttf fonts/Computer Modern/cmunrm.otf fonts/Computer Modern/cmunsi-webfont.ttf fonts/Computer Modern/cmunsi.otf fonts/Computer Modern/cmunsl-webfont.ttf fonts/Computer Modern/cmunsl.otf fonts/Computer Modern/cmunss-webfont.ttf fonts/Computer Modern/cmunss.otf fonts/Computer Modern/cmunsx-webfont.ttf fonts/Computer Modern/cmunsx.otf fonts/Courier New/Courier New.ttf fonts/Courier/fonts/OGCourier-Bold.otf fonts/Courier/fonts/OGCourier-Bold.ttf fonts/Courier/fonts/OGCourier-BoldItalic.otf fonts/Courier/fonts/OGCourier-BoldItalic.ttf fonts/Courier/fonts/OGCourier-Italic.otf fonts/Courier/fonts/OGCourier-Italic.ttf fonts/Courier/fonts/OGCourier.otf fonts/Courier/fonts/OGCourier.ttf fonts/Courier/fonts/zero-dot/OGCourierZeroDot-Bold.otf fonts/Courier/fonts/zero-dot/OGCourierZeroDot-Bold.ttf fonts/Courier/fonts/zero-dot/OGCourierZeroDot-BoldItalic.otf fonts/Courier/fonts/zero-dot/OGCourierZeroDot-BoldItalic.ttf fonts/Courier/fonts/zero-dot/OGCourierZeroDot-Italic.otf fonts/Courier/fonts/zero-dot/OGCourierZeroDot-Italic.ttf fonts/Courier/fonts/zero-dot/OGCourierZeroDot.otf fonts/Courier/fonts/zero-dot/OGCourierZeroDot.ttf fonts/Courier/fonts/zero-slash/OGCourierZeroSlash-Bold.otf fonts/Courier/fonts/zero-slash/OGCourierZeroSlash-Bold.ttf fonts/Courier/fonts/zero-slash/OGCourierZeroSlash-BoldItalic.otf fonts/Courier/fonts/zero-slash/OGCourierZeroSlash-BoldItalic.ttf fonts/Courier/fonts/zero-slash/OGCourierZeroSlash-Italic.otf fonts/Courier/fonts/zero-slash/OGCourierZeroSlash-Italic.ttf fonts/Courier/fonts/zero-slash/OGCourierZeroSlash.otf fonts/Courier/fonts/zero-slash/OGCourierZeroSlash.ttf fonts/Courier/sfd/OGCourier-Bold.sfd.ttf fonts/Courier/sfd/OGCourier-BoldItalic.sfd.ttf fonts/Courier/sfd/OGCourier-Italic.sfd.ttf fonts/Courier/sfd/OGCourier.sfd.ttf fonts/Inter/InterVariable-Italic.ttf fonts/Inter/InterVariable.ttf fonts/Inter/extras/otf/Inter-Black.otf fonts/Inter/extras/otf/Inter-BlackItalic.otf fonts/Inter/extras/otf/Inter-Bold.otf fonts/Inter/extras/otf/Inter-BoldItalic.otf fonts/Inter/extras/otf/Inter-ExtraBold.otf fonts/Inter/extras/otf/Inter-ExtraBoldItalic.otf fonts/Inter/extras/otf/Inter-ExtraLight.otf fonts/Inter/extras/otf/Inter-ExtraLightItalic.otf fonts/Inter/extras/otf/Inter-Italic.otf fonts/Inter/extras/otf/Inter-Light.otf fonts/Inter/extras/otf/Inter-LightItalic.otf fonts/Inter/extras/otf/Inter-Medium.otf fonts/Inter/extras/otf/Inter-MediumItalic.otf fonts/Inter/extras/otf/Inter-Regular.otf fonts/Inter/extras/otf/Inter-SemiBold.otf fonts/Inter/extras/otf/Inter-SemiBoldItalic.otf fonts/Inter/extras/otf/Inter-Thin.otf fonts/Inter/extras/otf/Inter-ThinItalic.otf fonts/Inter/extras/otf/InterDisplay-Black.otf fonts/Inter/extras/otf/InterDisplay-BlackItalic.otf fonts/Inter/extras/otf/InterDisplay-Bold.otf fonts/Inter/extras/otf/InterDisplay-BoldItalic.otf fonts/Inter/extras/otf/InterDisplay-ExtraBold.otf fonts/Inter/extras/otf/InterDisplay-ExtraBoldItalic.otf fonts/Inter/extras/otf/InterDisplay-ExtraLight.otf fonts/Inter/extras/otf/InterDisplay-ExtraLightItalic.otf fonts/Inter/extras/otf/InterDisplay-Italic.otf fonts/Inter/extras/otf/InterDisplay-Light.otf fonts/Inter/extras/otf/InterDisplay-LightItalic.otf fonts/Inter/extras/otf/InterDisplay-Medium.otf fonts/Inter/extras/otf/InterDisplay-MediumItalic.otf fonts/Inter/extras/otf/InterDisplay-Regular.otf fonts/Inter/extras/otf/InterDisplay-SemiBold.otf fonts/Inter/extras/otf/InterDisplay-SemiBoldItalic.otf fonts/Inter/extras/otf/InterDisplay-Thin.otf fonts/Inter/extras/otf/InterDisplay-ThinItalic.otf fonts/Inter/extras/ttf/Inter-Black.ttf fonts/Inter/extras/ttf/Inter-BlackItalic.ttf fonts/Inter/extras/ttf/Inter-Bold.ttf fonts/Inter/extras/ttf/Inter-BoldItalic.ttf fonts/Inter/extras/ttf/Inter-ExtraBold.ttf fonts/Inter/extras/ttf/Inter-ExtraBoldItalic.ttf fonts/Inter/extras/ttf/Inter-ExtraLight.ttf fonts/Inter/extras/ttf/Inter-ExtraLightItalic.ttf fonts/Inter/extras/ttf/Inter-Italic.ttf fonts/Inter/extras/ttf/Inter-Light.ttf fonts/Inter/extras/ttf/Inter-LightItalic.ttf fonts/Inter/extras/ttf/Inter-Medium.ttf fonts/Inter/extras/ttf/Inter-MediumItalic.ttf fonts/Inter/extras/ttf/Inter-Regular.ttf fonts/Inter/extras/ttf/Inter-SemiBold.ttf fonts/Inter/extras/ttf/Inter-SemiBoldItalic.ttf fonts/Inter/extras/ttf/Inter-Thin.ttf fonts/Inter/extras/ttf/Inter-ThinItalic.ttf fonts/Inter/extras/ttf/InterDisplay-Black.ttf fonts/Inter/extras/ttf/InterDisplay-BlackItalic.ttf fonts/Inter/extras/ttf/InterDisplay-Bold.ttf fonts/Inter/extras/ttf/InterDisplay-BoldItalic.ttf fonts/Inter/extras/ttf/InterDisplay-ExtraBold.ttf fonts/Inter/extras/ttf/InterDisplay-ExtraBoldItalic.ttf fonts/Inter/extras/ttf/InterDisplay-ExtraLight.ttf fonts/Inter/extras/ttf/InterDisplay-ExtraLightItalic.ttf fonts/Inter/extras/ttf/InterDisplay-Italic.ttf fonts/Inter/extras/ttf/InterDisplay-Light.ttf fonts/Inter/extras/ttf/InterDisplay-LightItalic.ttf fonts/Inter/extras/ttf/InterDisplay-Medium.ttf fonts/Inter/extras/ttf/InterDisplay-MediumItalic.ttf fonts/Inter/extras/ttf/InterDisplay-Regular.ttf fonts/Inter/extras/ttf/InterDisplay-SemiBold.ttf fonts/Inter/extras/ttf/InterDisplay-SemiBoldItalic.ttf fonts/Inter/extras/ttf/InterDisplay-Thin.ttf fonts/Inter/extras/ttf/InterDisplay-ThinItalic.ttf fonts/Noto Sans/NotoSans-Black.ttf fonts/Noto Sans/NotoSans-BlackItalic.ttf fonts/Noto Sans/NotoSans-Bold.ttf fonts/Noto Sans/NotoSans-BoldItalic.ttf fonts/Noto Sans/NotoSans-ExtraBold.ttf fonts/Noto Sans/NotoSans-ExtraBoldItalic.ttf fonts/Noto Sans/NotoSans-ExtraLight.ttf fonts/Noto Sans/NotoSans-ExtraLightItalic.ttf fonts/Noto Sans/NotoSans-Italic-VariableFont_wdth,wght.ttf fonts/Noto Sans/NotoSans-Italic.ttf fonts/Noto Sans/NotoSans-Light.ttf fonts/Noto Sans/NotoSans-LightItalic.ttf fonts/Noto Sans/NotoSans-Medium.ttf fonts/Noto Sans/NotoSans-MediumItalic.ttf fonts/Noto Sans/NotoSans-Regular.ttf fonts/Noto Sans/NotoSans-SemiBold.ttf fonts/Noto Sans/NotoSans-SemiBoldItalic.ttf fonts/Noto Sans/NotoSans-Thin.ttf fonts/Noto Sans/NotoSans-ThinItalic.ttf fonts/Noto Sans/NotoSans-VariableFont_wdth,wght.ttf fonts/Noto Sans/NotoSans_Condensed-Black.ttf fonts/Noto Sans/NotoSans_Condensed-BlackItalic.ttf fonts/Noto Sans/NotoSans_Condensed-Bold.ttf fonts/Noto Sans/NotoSans_Condensed-BoldItalic.ttf fonts/Noto Sans/NotoSans_Condensed-ExtraBold.ttf fonts/Noto Sans/NotoSans_Condensed-ExtraBoldItalic.ttf fonts/Noto Sans/NotoSans_Condensed-ExtraLight.ttf fonts/Noto Sans/NotoSans_Condensed-ExtraLightItalic.ttf fonts/Noto Sans/NotoSans_Condensed-Italic.ttf fonts/Noto Sans/NotoSans_Condensed-Light.ttf fonts/Noto Sans/NotoSans_Condensed-LightItalic.ttf fonts/Noto Sans/NotoSans_Condensed-Medium.ttf fonts/Noto Sans/NotoSans_Condensed-MediumItalic.ttf fonts/Noto Sans/NotoSans_Condensed-Regular.ttf fonts/Noto Sans/NotoSans_Condensed-SemiBold.ttf fonts/Noto Sans/NotoSans_Condensed-SemiBoldItalic.ttf fonts/Noto Sans/NotoSans_Condensed-Thin.ttf fonts/Noto Sans/NotoSans_Condensed-ThinItalic.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-Black.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-BlackItalic.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-Bold.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-BoldItalic.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-ExtraBold.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-ExtraBoldItalic.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-ExtraLight.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-ExtraLightItalic.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-Italic.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-Light.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-LightItalic.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-Medium.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-MediumItalic.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-Regular.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-SemiBold.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-SemiBoldItalic.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-Thin.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-ThinItalic.ttf fonts/Noto Sans/NotoSans_SemiCondensed-Black.ttf fonts/Noto Sans/NotoSans_SemiCondensed-BlackItalic.ttf fonts/Noto Sans/NotoSans_SemiCondensed-Bold.ttf fonts/Noto Sans/NotoSans_SemiCondensed-BoldItalic.ttf fonts/Noto Sans/NotoSans_SemiCondensed-ExtraBold.ttf fonts/Noto Sans/NotoSans_SemiCondensed-ExtraBoldItalic.ttf fonts/Noto Sans/NotoSans_SemiCondensed-ExtraLight.ttf fonts/Noto Sans/NotoSans_SemiCondensed-ExtraLightItalic.ttf fonts/Noto Sans/NotoSans_SemiCondensed-Italic.ttf fonts/Noto Sans/NotoSans_SemiCondensed-Light.ttf fonts/Noto Sans/NotoSans_SemiCondensed-LightItalic.ttf fonts/Noto Sans/NotoSans_SemiCondensed-Medium.ttf fonts/Noto Sans/NotoSans_SemiCondensed-MediumItalic.ttf fonts/Noto Sans/NotoSans_SemiCondensed-Regular.ttf fonts/Noto Sans/NotoSans_SemiCondensed-SemiBold.ttf fonts/Noto Sans/NotoSans_SemiCondensed-SemiBoldItalic.ttf fonts/Noto Sans/NotoSans_SemiCondensed-Thin.ttf fonts/Noto Sans/NotoSans_SemiCondensed-ThinItalic.ttf img/c3.1.xcf img/c3.1080.jpg img/c3.1080.png img/c3.128.jpg img/c3.128.png img/c3.16.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.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/c3.xcf img/earth.jpg img/earth.png img/flaps.256.png img/flaps.png img/fly-dead.png img/fly-noto.png img/iris-c3-004.jpeg img/mandelbrot_f128_limit.1.png img/mandelbrot_f128_limit.2.png img/mandelbrot_f128_limit.3.png img/mandelbrot_f128_limit.png img/matrix_shade.png img/thodg_No_Prompt_073261d5-2c81-4b6e-9572-e0b840c55f1f.jpeg img/toast.128.png img/toast.png kc3.index kc3.version lib/kc3/0.1/array.kc3 lib/kc3/0.1/complex.facts lib/kc3/0.1/cow.kc3 lib/kc3/0.1/ekc3.kc3 lib/kc3/0.1/f128.facts lib/kc3/0.1/f32.facts lib/kc3/0.1/f64.facts lib/kc3/0.1/gl/dvec2.kc3 lib/kc3/0.1/gl/dvec3.kc3 lib/kc3/0.1/gl/object.kc3 lib/kc3/0.1/gl/sphere.kc3 lib/kc3/0.1/gl/triangle.kc3 lib/kc3/0.1/gl/vec2.kc3 lib/kc3/0.1/gl/vec3.kc3 lib/kc3/0.1/gl/vertex.kc3 lib/kc3/0.1/integer.facts lib/kc3/0.1/kc3.facts lib/kc3/0.1/kc3/operator.kc3 lib/kc3/0.1/list.kc3 lib/kc3/0.1/map.facts lib/kc3/0.1/ptr.facts lib/kc3/0.1/ptr_free.facts lib/kc3/0.1/ratio.facts lib/kc3/0.1/s16.facts lib/kc3/0.1/s32.facts lib/kc3/0.1/s64.facts lib/kc3/0.1/s8.facts lib/kc3/0.1/socket.kc3 lib/kc3/0.1/str.facts lib/kc3/0.1/sw.facts lib/kc3/0.1/sym.facts lib/kc3/0.1/u16.facts lib/kc3/0.1/u32.facts lib/kc3/0.1/u64.facts lib/kc3/0.1/u8.facts lib/kc3/0.1/uw.facts lib/kc3/0.1/var.facts lib/kc3/0.1/void.facts libkc3/tag_init.rb license.h sources.mk sources.sh test/buf_parse_test_su.rb test/ekc3/title.out.expected test/ekc3/title.ret.expected test/facts_test_dump_file.expected.facts test/facts_test_load_file.facts test/facts_test_log_add.expected.facts test/facts_test_log_remove.expected.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/http/server.kc3.ret.expected test/http/server.out.expected test/http/server.ret.expected test/ikc3/access.out.expected test/ikc3/access.ret.expected test/ikc3/array.err.expected test/ikc3/array.out.expected test/ikc3/array.ret.expected test/ikc3/block.out.expected test/ikc3/block.ret.expected test/ikc3/bool.err.expected test/ikc3/bool.out.expected test/ikc3/bool.ret.expected test/ikc3/call.err.expected test/ikc3/call.out.expected test/ikc3/call.ret.expected test/ikc3/cast.out.expected test/ikc3/cast.ret.expected test/ikc3/character.err.expected test/ikc3/character.out.expected test/ikc3/character.ret.expected test/ikc3/comment.err.expected test/ikc3/comment.out.expected test/ikc3/comment.ret.expected test/ikc3/complex.out.expected test/ikc3/complex.ret.expected test/ikc3/def.out.expected test/ikc3/def.ret.expected test/ikc3/defmodule.out.expected test/ikc3/defmodule.ret.expected test/ikc3/defoperator.out.expected test/ikc3/defoperator.ret.expected test/ikc3/defstruct.out.expected test/ikc3/defstruct.ret.expected test/ikc3/equal.err.expected test/ikc3/equal.out.expected test/ikc3/equal.ret.expected test/ikc3/fn.err.expected test/ikc3/fn.out.expected test/ikc3/fn.ret.expected test/ikc3/function_call.err.expected test/ikc3/function_call.out.expected test/ikc3/function_call.ret.expected test/ikc3/gl.out.expected test/ikc3/gl.ret.expected test/ikc3/globals.out.expected test/ikc3/globals.ret.expected test/ikc3/hello.err.expected test/ikc3/hello.out.expected test/ikc3/hello.ret.expected test/ikc3/ident.err.expected test/ikc3/ident.out.expected test/ikc3/ident.ret.expected test/ikc3/if.out.expected test/ikc3/if.ret.expected test/ikc3/integer.lisp test/ikc3/integer.out.expected test/ikc3/integer.ret.expected test/ikc3/integer_add.out.expected test/ikc3/integer_add.ret.expected test/ikc3/integer_band.out.expected test/ikc3/integer_band.ret.expected test/ikc3/integer_bnot.out.expected test/ikc3/integer_bnot.ret.expected test/ikc3/integer_bor-2.out.expected test/ikc3/integer_bor-2.ret.expected test/ikc3/integer_bxor.out.expected test/ikc3/integer_bxor.ret.expected test/ikc3/integer_div.out.expected test/ikc3/integer_div.ret.expected test/ikc3/integer_eq.out.expected test/ikc3/integer_eq.ret.expected test/ikc3/integer_gt.out.expected test/ikc3/integer_gt.ret.expected test/ikc3/integer_lt.out.expected test/ikc3/integer_lt.ret.expected test/ikc3/integer_mod-2.out.expected test/ikc3/integer_mod-2.ret.expected test/ikc3/integer_mul.out.expected test/ikc3/integer_mul.ret.expected test/ikc3/integer_neg.out.expected test/ikc3/integer_neg.ret.expected test/ikc3/integer_sub.out.expected test/ikc3/integer_sub.ret.expected test/ikc3/let.out.expected test/ikc3/let.ret.expected test/ikc3/list.err.expected test/ikc3/list.out.expected test/ikc3/list.ret.expected test/ikc3/macro.out.expected test/ikc3/macro.ret.expected test/ikc3/map.out.expected test/ikc3/map.ret.expected test/ikc3/op.err.expected test/ikc3/op.out.expected test/ikc3/op.ret.expected test/ikc3/plist.err.expected test/ikc3/plist.out.expected test/ikc3/plist.ret.expected test/ikc3/puts.out.expected test/ikc3/puts.ret.expected test/ikc3/quote.out.expected test/ikc3/quote.ret.expected test/ikc3/ratio.out.expected test/ikc3/ratio.ret.expected test/ikc3/str.err.expected test/ikc3/str.out.expected test/ikc3/str.ret.expected test/ikc3/struct.out.expected test/ikc3/struct.ret.expected test/ikc3/sym.err.expected test/ikc3/sym.out.expected test/ikc3/sym.ret.expected test/ikc3/tuple.err.expected test/ikc3/tuple.out.expected test/ikc3/tuple.ret.expected test/ikc3/var.out.expected test/ikc3/var.ret.expected test/ikc3/void.out.expected test/ikc3/void.ret.expected test/ikc3_test test/replace_lines.rb test/test.rb test/test_case_end.rb test/zero '
KC3_EXTERNAL_SOURCES='libtommath/LICENSE libtommath/README.md 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_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_cnt_lsb.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.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_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_from_ubin.c libtommath/bn_mp_fwrite.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_l.c libtommath/bn_mp_get_ll.c libtommath/bn_mp_get_mag_u32.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_is_square.c libtommath/bn_mp_iseven.c libtommath/bn_mp_isodd.c libtommath/bn_mp_kronecker.c libtommath/bn_mp_lcm.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_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_pack.c libtommath/bn_mp_pack_count.c libtommath/bn_mp_prime_fermat.c libtommath/bn_mp_prime_frobenius_underwood.c libtommath/bn_mp_prime_is_prime.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_prime_rand.c libtommath/bn_mp_prime_strong_lucas_selfridge.c libtommath/bn_mp_radix_size.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_reduce_setup.c libtommath/bn_mp_root_u32.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_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_xor.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_get_bit.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_prime_is_divisible.c libtommath/bn_s_mp_rand_jenkins.c libtommath/bn_s_mp_rand_platform.c libtommath/bn_s_mp_reverse.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 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/logtab.h libtommath/mtest/mpi-config.h libtommath/mtest/mpi-types.h libtommath/mtest/mpi.c libtommath/mtest/mpi.h libtommath/mtest/mtest.c libtommath/tommath.h libtommath/tommath_class.h libtommath/tommath_cutoffs.h libtommath/tommath_private.h libtommath/tommath_superclass.h linenoise/LICENSE linenoise/README.markdown linenoise/example.c linenoise/linenoise.c linenoise/linenoise.h ucd2c/UCD.zip ucd2c/UCD/ArabicShaping.txt ucd2c/UCD/BidiBrackets.txt ucd2c/UCD/BidiCharacterTest.txt ucd2c/UCD/BidiMirroring.txt ucd2c/UCD/BidiTest.txt ucd2c/UCD/Blocks.txt ucd2c/UCD/CJKRadicals.txt ucd2c/UCD/CaseFolding.txt ucd2c/UCD/CompositionExclusions.txt ucd2c/UCD/DerivedAge.txt ucd2c/UCD/DerivedCoreProperties.txt ucd2c/UCD/DerivedNormalizationProps.txt ucd2c/UCD/EastAsianWidth.txt ucd2c/UCD/EmojiSources.txt ucd2c/UCD/EquivalentUnifiedIdeograph.txt ucd2c/UCD/HangulSyllableType.txt ucd2c/UCD/Index.txt ucd2c/UCD/IndicPositionalCategory.txt ucd2c/UCD/IndicSyllabicCategory.txt ucd2c/UCD/Jamo.txt ucd2c/UCD/LineBreak.txt ucd2c/UCD/NameAliases.txt ucd2c/UCD/NamedSequences.txt ucd2c/UCD/NamedSequencesProv.txt ucd2c/UCD/NamesList.txt ucd2c/UCD/NormalizationCorrections.txt ucd2c/UCD/NormalizationTest.txt ucd2c/UCD/NushuSources.txt ucd2c/UCD/PropList.txt ucd2c/UCD/PropertyAliases.txt ucd2c/UCD/PropertyValueAliases.txt ucd2c/UCD/ReadMe.txt ucd2c/UCD/ScriptExtensions.txt ucd2c/UCD/Scripts.txt ucd2c/UCD/SpecialCasing.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/UCD/auxiliary/GraphemeBreakProperty.txt ucd2c/UCD/auxiliary/GraphemeBreakTest.txt ucd2c/UCD/auxiliary/LineBreakTest.txt ucd2c/UCD/auxiliary/SentenceBreakProperty.txt ucd2c/UCD/auxiliary/SentenceBreakTest.txt ucd2c/UCD/auxiliary/WordBreakProperty.txt ucd2c/UCD/auxiliary/WordBreakTest.txt ucd2c/UCD/emoji/ReadMe.txt ucd2c/UCD/emoji/emoji-data.txt ucd2c/UCD/emoji/emoji-variation-sequences.txt ucd2c/UCD/extracted/DerivedBidiClass.txt ucd2c/UCD/extracted/DerivedBinaryProperties.txt ucd2c/UCD/extracted/DerivedCombiningClass.txt ucd2c/UCD/extracted/DerivedDecompositionType.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 '
diff --git a/test/Makefile b/test/Makefile
index a0ee8c0..bdb861d 100644
--- a/test/Makefile
+++ b/test/Makefile
@@ -19,6 +19,10 @@ CLEANFILES = \
ekc3/*.ret \
*.gcno \
*.html \
+ http/*.diff \
+ http/*.err \
+ http/*.out \
+ http/*.ret \
*.lo \
*.o \
.libs \
diff --git a/test/http/01_socket_buf.kc3 b/test/http/01_socket_buf.kc3
new file mode 100644
index 0000000..25d1ac4
--- /dev/null
+++ b/test/http/01_socket_buf.kc3
@@ -0,0 +1,4 @@
+quote %Socket.Buf{}
+%Socket.Buf{}
+quote %Socket{}
+%Socket{}
diff --git a/test/http/01_socket_buf.out.expected b/test/http/01_socket_buf.out.expected
new file mode 100644
index 0000000..9f024e3
--- /dev/null
+++ b/test/http/01_socket_buf.out.expected
@@ -0,0 +1,4 @@
+%Socket.Buf{}
+%Socket.Buf{buf_rw: %BufRW{r: %Buf{column: Sw, flush: Ptr, free: Bool, line: Sw, ptr: Ptr, refill: Ptr, rpos: Uw, save: Ptr, seek: Ptr, size: Uw, user_ptr: Ptr, wpos: Uw}, w: %Buf{column: Sw, flush: Ptr, free: Bool, line: Sw, ptr: Ptr, refill: Ptr, rpos: Uw, save: Ptr, seek: Ptr, size: Uw, user_ptr: Ptr, wpos: Uw}}, sockfd: S32, addr: %Socket.Addr{data: (U8[256]) {}}, addr_len: U32}
+%Socket{}
+%Socket{fd: -1}
diff --git a/test/http/01_socket_buf.ret.expected b/test/http/01_socket_buf.ret.expected
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/test/http/01_socket_buf.ret.expected
@@ -0,0 +1 @@
+0
diff --git a/test/http/02_socket.kc3 b/test/http/02_socket.kc3
new file mode 100644
index 0000000..0ab7bdb
--- /dev/null
+++ b/test/http/02_socket.kc3
@@ -0,0 +1,2 @@
+quote %Socket{}
+%Socket{}
diff --git a/test/http/02_socket.out.expected b/test/http/02_socket.out.expected
new file mode 100644
index 0000000..5431a58
--- /dev/null
+++ b/test/http/02_socket.out.expected
@@ -0,0 +1,2 @@
+%Socket{}
+%Socket{}
diff --git a/test/http/02_socket.ret.expected b/test/http/02_socket.ret.expected
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/test/http/02_socket.ret.expected
@@ -0,0 +1 @@
+0
diff --git a/test/http/03_server.kc3 b/test/http/03_server.kc3
new file mode 100644
index 0000000..4c7599a
--- /dev/null
+++ b/test/http/03_server.kc3
@@ -0,0 +1,12 @@
+quote server = Socket.listen("localhost", "8000")
+server = Socket.listen("localhost", "8000")
+quote client = Socket.connect("localhost", "8000")
+client = Socket.connect("localhost", "8000")
+quote server_client = Socket.accept(server)
+server_client = Socket.accept(server)
+quote Socket.close(client)
+Socket.close(client)
+quote Socket.close(server_client)
+Socket.close(server_client)
+quote Socket.close(server)
+Socket.close(server)
diff --git a/test/http/03_server.out.expected b/test/http/03_server.out.expected
new file mode 100644
index 0000000..d7cff23
--- /dev/null
+++ b/test/http/03_server.out.expected
@@ -0,0 +1,12 @@
+server = Socket.listen("localhost", "8000")
+%Socket{fd: 4}
+client = Socket.connect("localhost", "8000")
+%Socket{fd: 5}
+server_client = Socket.accept(server)
+%Socket{fd: 6}
+Socket.close(client)
+void
+Socket.close(server_client)
+void
+Socket.close(server)
+void
diff --git a/test/http/03_server.ret.expected b/test/http/03_server.ret.expected
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/test/http/03_server.ret.expected
@@ -0,0 +1 @@
+0
diff --git a/test/http/server.kc3 b/test/http/server.kc3
deleted file mode 100644
index 4c7599a..0000000
--- a/test/http/server.kc3
+++ /dev/null
@@ -1,12 +0,0 @@
-quote server = Socket.listen("localhost", "8000")
-server = Socket.listen("localhost", "8000")
-quote client = Socket.connect("localhost", "8000")
-client = Socket.connect("localhost", "8000")
-quote server_client = Socket.accept(server)
-server_client = Socket.accept(server)
-quote Socket.close(client)
-Socket.close(client)
-quote Socket.close(server_client)
-Socket.close(server_client)
-quote Socket.close(server)
-Socket.close(server)
diff --git a/test/http/server.kc3.ret.expected b/test/http/server.kc3.ret.expected
deleted file mode 100644
index 573541a..0000000
--- a/test/http/server.kc3.ret.expected
+++ /dev/null
@@ -1 +0,0 @@
-0
diff --git a/test/http/server.out.expected b/test/http/server.out.expected
deleted file mode 100644
index d7cff23..0000000
--- a/test/http/server.out.expected
+++ /dev/null
@@ -1,12 +0,0 @@
-server = Socket.listen("localhost", "8000")
-%Socket{fd: 4}
-client = Socket.connect("localhost", "8000")
-%Socket{fd: 5}
-server_client = Socket.accept(server)
-%Socket{fd: 6}
-Socket.close(client)
-void
-Socket.close(server_client)
-void
-Socket.close(server)
-void
diff --git a/test/http/server.ret b/test/http/server.ret
deleted file mode 100644
index 573541a..0000000
--- a/test/http/server.ret
+++ /dev/null
@@ -1 +0,0 @@
-0
diff --git a/test/http/server.ret.expected b/test/http/server.ret.expected
deleted file mode 100644
index 573541a..0000000
--- a/test/http/server.ret.expected
+++ /dev/null
@@ -1 +0,0 @@
-0
diff --git a/test/sources.mk b/test/sources.mk
index 7066a93..cf74282 100644
--- a/test/sources.mk
+++ b/test/sources.mk
@@ -34,6 +34,7 @@ SOURCES = \
"fn_test.c" \
"hash_test.c" \
"ident_test.c" \
+ "inspect_test.c" \
"libkc3_test.c" \
"list_test.c" \
"ratio_test.c" \
diff --git a/test/sources.sh b/test/sources.sh
index bdea418..ae02300 100644
--- a/test/sources.sh
+++ b/test/sources.sh
@@ -1,3 +1,3 @@
# sources.sh generated by update_sources
HEADERS='buf_parse_test.h buf_parse_test_su.h compare_test.h fact_test.h tag_test.h test.h '
-SOURCES='array_test.c bool_test.c buf_file_test.c buf_inspect_test.c buf_parse_test.c buf_parse_test_s16.c buf_parse_test_s32.c buf_parse_test_s64.c buf_parse_test_s8.c buf_parse_test_u16.c buf_parse_test_u32.c buf_parse_test_u64.c buf_parse_test_u8.c buf_test.c call_test.c cfn_test.c character_test.c compare_test.c env_test.c fact_test.c facts_cursor_test.c facts_test.c facts_with_test.c fn_test.c hash_test.c ident_test.c libkc3_test.c list_test.c ratio_test.c set__fact_test.c set__tag_test.c skiplist__fact_test.c str_test.c sym_test.c tag_test.c test.c tuple_test.c types_test.c '
+SOURCES='array_test.c bool_test.c buf_file_test.c buf_inspect_test.c buf_parse_test.c buf_parse_test_s16.c buf_parse_test_s32.c buf_parse_test_s64.c buf_parse_test_s8.c buf_parse_test_u16.c buf_parse_test_u32.c buf_parse_test_u64.c buf_parse_test_u8.c buf_test.c call_test.c cfn_test.c character_test.c compare_test.c env_test.c fact_test.c facts_cursor_test.c facts_test.c facts_with_test.c fn_test.c hash_test.c ident_test.c inspect_test.c libkc3_test.c list_test.c ratio_test.c set__fact_test.c set__tag_test.c skiplist__fact_test.c str_test.c sym_test.c tag_test.c test.c tuple_test.c types_test.c '
diff --git a/update_sources b/update_sources
index 1c0406f..641af67 100755
--- a/update_sources
+++ b/update_sources
@@ -61,5 +61,6 @@ update_sources_sh
( cd ikc3 && ./update_sources; )
( cd kc3s && ./update_sources; )
( cd ekc3 && ./update_sources; )
+( cd http && ./update_sources; )
( cd test && ./update_sources; )
( cd libkc3_window && ./update_sources; )