]> git.xolatile.top Git - emil-xolatilization.git/commitdiff
Dumped everything including unfinished stuff... master
authorxolatile <xolatile@proton.me>
Fri, 13 Jun 2025 16:09:50 +0000 (18:09 +0200)
committerxolatile <xolatile@proton.me>
Fri, 13 Jun 2025 16:09:50 +0000 (18:09 +0200)
246 files changed:
anon.ebuild [new file with mode: 0644]
build.sh [new file with mode: 0644]
install.sh
test.c
xachine.h
xanguage.h [changed mode: 0755->0644]
xanguage/ada.h
xanguage/bash.h
xanguage/c++.h
xanguage/c.h
xanguage/common.h
xanguage/d.h
xanguage/eaxhla.h
xanguage/flat.h
xanguage/fortran.h
xanguage/go.h
xanguage/haskell.h
xanguage/holy_c.h
xanguage/lua.h
xanguage/pascal.h
xanguage/python.h
xanguage/valgrind.h
xaptor
xaptor.c
xaptor.h
xarbon.c
xarticle.h
xatrix.h
xcript.h
xctree.h
xector.h
xenu.h [new file with mode: 0644]
xerminal.h
xhallenge.c
xhape.h
xiasma.h
xighlight.c
xision.h
xogueout.c
xommon.h
xop.c
xormat.h
xormat/jxl.h
xormat/png.h
xource.c [new file with mode: 0644]
xpengl.h
xphere.h
xprite.h
xrena.h
xrocessor.h
xross.h
xscii.c
xtandard.h
xui.h
xui/button_left.png [new file with mode: 0755]
xui/button_lower.png [new file with mode: 0755]
xui/button_lower_left.png [new file with mode: 0755]
xui/button_lower_right.png [new file with mode: 0755]
xui/button_middle.png [new file with mode: 0755]
xui/button_right.png [new file with mode: 0755]
xui/button_upper.png [new file with mode: 0755]
xui/button_upper_left.png [new file with mode: 0755]
xui/button_upper_right.png [new file with mode: 0755]
xui/check_box_off.png [new file with mode: 0755]
xui/check_box_on.png [new file with mode: 0755]
xui/cursor.png [new file with mode: 0755]
xui/dwarf/fill_bar_base.png
xui/dwarf/fill_bar_left.png
xui/dwarf/fill_bar_middle.png
xui/dwarf/fill_bar_right.png
xui/dwarf/monospace.png [new file with mode: 0755]
xui/dwarf/regular.png [new file with mode: 0755]
xui/dwarf/scroll_bar_slider.png
xui/dwarf/separator_center.png
xui/dwarf/status_left.png
xui/dwarf/status_lower.png
xui/dwarf/status_lower_left.png
xui/dwarf/status_lower_right.png
xui/dwarf/status_middle.png
xui/dwarf/status_right.png
xui/dwarf/status_upper.png
xui/dwarf/status_upper_left.png
xui/dwarf/status_upper_right.png
xui/end_turn_button.png [new file with mode: 0755]
xui/fairy/fill_bar_base.png
xui/fairy/fill_bar_left.png
xui/fairy/fill_bar_middle.png
xui/fairy/fill_bar_right.png
xui/fairy/monospace.png [new file with mode: 0755]
xui/fairy/regular.png [new file with mode: 0755]
xui/fairy/scroll_bar_lower.png
xui/fairy/scroll_bar_middle.png
xui/fairy/scroll_bar_upper.png
xui/fairy/separator_center.png
xui/fairy/status_left.png
xui/fairy/status_lower.png
xui/fairy/status_lower_left.png
xui/fairy/status_lower_right.png
xui/fairy/status_middle.png
xui/fairy/status_right.png
xui/fairy/status_upper.png
xui/fairy/status_upper_left.png
xui/fairy/status_upper_right.png
xui/fairy/title_bar_middle.png
xui/fairy/title_bar_right.png
xui/fill_bar_base.png [new file with mode: 0755]
xui/fill_bar_left.png [new file with mode: 0755]
xui/fill_bar_middle.png [new file with mode: 0755]
xui/fill_bar_right.png [new file with mode: 0755]
xui/frame_left.png [new file with mode: 0755]
xui/frame_lower.png [new file with mode: 0755]
xui/frame_lower_left.png [new file with mode: 0755]
xui/frame_lower_right.png [new file with mode: 0755]
xui/frame_right.png [new file with mode: 0755]
xui/frame_upper.png [new file with mode: 0755]
xui/frame_upper_left.png [new file with mode: 0755]
xui/frame_upper_right.png [new file with mode: 0755]
xui/fullscreen_off.png [deleted file]
xui/fullscreen_on.png [deleted file]
xui/gnoll/fill_bar_base.png
xui/gnoll/fill_bar_middle.png
xui/gnoll/fill_bar_right.png
xui/gnoll/monospace.png [new file with mode: 0755]
xui/gnoll/regular.png [new file with mode: 0755]
xui/gnoll/scroll_bar_slider.png
xui/gnoll/separator_center.png
xui/gnoll/status_left.png
xui/gnoll/status_lower.png
xui/gnoll/status_middle.png
xui/gnoll/status_right.png
xui/gnoll/status_upper.png
xui/goblin/fill_bar_base.png
xui/goblin/fill_bar_middle.png
xui/goblin/fill_bar_right.png
xui/goblin/monospace.png [new file with mode: 0755]
xui/goblin/regular.png [new file with mode: 0755]
xui/goblin/scroll_bar_slider.png
xui/goblin/separator_center.png
xui/goblin/status_middle.png
xui/goblin/title_bar_middle.png
xui/goblin/title_bar_right.png
xui/icon_frame.png [new file with mode: 0755]
xui/imp/fill_bar_base.png
xui/imp/fill_bar_middle.png
xui/imp/fill_bar_right.png
xui/imp/monospace.png [new file with mode: 0755]
xui/imp/regular.png [new file with mode: 0755]
xui/imp/scroll_bar_slider.png
xui/imp/separator_center.png
xui/imp/status_left.png
xui/imp/status_lower.png
xui/imp/status_lower_left.png
xui/imp/status_lower_right.png
xui/imp/status_middle.png
xui/imp/status_right.png
xui/imp/status_upper.png
xui/imp/status_upper_left.png
xui/imp/status_upper_right.png
xui/imp/title_bar_middle.png
xui/kobold/fill_bar_base.png
xui/kobold/fill_bar_middle.png
xui/kobold/fill_bar_right.png
xui/kobold/monospace.png [new file with mode: 0755]
xui/kobold/regular.png [new file with mode: 0755]
xui/kobold/scroll_bar_slider.png
xui/kobold/separator_center.png
xui/kobold/status_left.png
xui/kobold/status_lower.png
xui/kobold/status_lower_left.png
xui/kobold/status_lower_right.png
xui/kobold/status_middle.png
xui/kobold/status_right.png
xui/kobold/status_upper.png
xui/kobold/status_upper_left.png
xui/kobold/status_upper_right.png
xui/main/fill_bar_base.png
xui/main/fill_bar_left.png
xui/main/fill_bar_middle.png
xui/main/fill_bar_right.png
xui/main/monospace.png [new file with mode: 0755]
xui/main/regular.png [new file with mode: 0755]
xui/main/scroll_bar_slider.png
xui/main/separator_center.png
xui/main/status_left.png
xui/main/status_lower.png
xui/main/status_lower_left.png
xui/main/status_lower_right.png
xui/main/status_middle.png
xui/main/status_right.png
xui/main/status_upper.png
xui/main/status_upper_left.png
xui/main/status_upper_right.png
xui/map_preview_panel_off.png [deleted file]
xui/map_preview_panel_on.png [deleted file]
xui/menu_left.png [new file with mode: 0755]
xui/menu_lower.png [new file with mode: 0755]
xui/menu_lower_left.png [new file with mode: 0755]
xui/menu_lower_right.png [new file with mode: 0755]
xui/menu_middle.png [new file with mode: 0755]
xui/menu_right.png [new file with mode: 0755]
xui/menu_upper.png [new file with mode: 0755]
xui/menu_upper_left.png [new file with mode: 0755]
xui/menu_upper_right.png [new file with mode: 0755]
xui/overicon_frame.png [new file with mode: 0755]
xui/palette.png [deleted file]
xui/scroll_bar_lower.png [new file with mode: 0755]
xui/scroll_bar_middle.png [new file with mode: 0755]
xui/scroll_bar_slider.png [new file with mode: 0755]
xui/scroll_bar_upper.png [new file with mode: 0755]
xui/separator_center.png [new file with mode: 0755]
xui/separator_left.png [new file with mode: 0755]
xui/separator_middle.png [new file with mode: 0755]
xui/separator_right.png [new file with mode: 0755]
xui/status_left.png [new file with mode: 0755]
xui/status_lower.png [new file with mode: 0755]
xui/status_lower_left.png [new file with mode: 0755]
xui/status_lower_right.png [new file with mode: 0755]
xui/status_middle.png [new file with mode: 0755]
xui/status_preview_panel_off.png [deleted file]
xui/status_preview_panel_on.png [deleted file]
xui/status_right.png [new file with mode: 0755]
xui/status_upper.png [new file with mode: 0755]
xui/status_upper_left.png [new file with mode: 0755]
xui/status_upper_right.png [new file with mode: 0755]
xui/text_box_panel_off.png [deleted file]
xui/text_box_panel_on.png [deleted file]
xui/tiny_fill_bar_base.png [new file with mode: 0755]
xui/tiny_fill_bar_left.png [new file with mode: 0755]
xui/tiny_fill_bar_middle.png [new file with mode: 0755]
xui/tiny_fill_bar_right.png [new file with mode: 0755]
xui/title_bar_left.png [new file with mode: 0755]
xui/title_bar_middle.png [new file with mode: 0755]
xui/title_bar_right.png [new file with mode: 0755]
xui/ubericon_frame.png [new file with mode: 0755]
xui/window_left.png [new file with mode: 0755]
xui/window_lower.png [new file with mode: 0755]
xui/window_lower_left.png [new file with mode: 0755]
xui/window_lower_right.png [new file with mode: 0755]
xui/window_right.png [new file with mode: 0755]
xui/window_upper.png [new file with mode: 0755]
xui/window_upper_left.png [new file with mode: 0755]
xui/window_upper_right.png [new file with mode: 0755]
xulkan.h
xungeon.h
xuxuxu.c
xyntax.h

diff --git a/anon.ebuild b/anon.ebuild
new file mode 100644 (file)
index 0000000..6c9a97d
--- /dev/null
@@ -0,0 +1,42 @@
+# Copyright 2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+EGIT_REPO_URI="https://bis64wqhh3louusbd45iyj76kmn4rzw5ysawyan5bkxwyzihj67c5lid.onion/xolatile/xolatilization"
+inherit git-r3-tor
+
+DESCRIPTION="The most hateful set of programs and libraries ever written..."
+
+LICENSE="GPL-3"
+SLOT="0"
+KEYWORDS="amd64 x86"
+
+DEPEND=""
+
+TARGET_LIST=(
+    xop
+    xscii
+    xighlight
+    xhallenge
+    xuxuxu
+    xarbon
+)
+
+src_compile() {
+    CFLAGS="-I. -std=gnu99 -Ofast"
+    CFLAGS="${CFLAGS} -Wno-unused-result -Wno-discarded-qualifiers"
+    CLIBS="-lpng"
+
+    ln -s $(realpath .) xolatile
+
+    for i in ${TARGET_LIST[@]}; do
+        gcc ${CFLAGS} -o $i $i.c ${CLIBS}
+    done
+}
+
+src_install() {
+    for i in ${TARGET_LIST[@]}; do
+        dobin $i
+    done
+}
diff --git a/build.sh b/build.sh
new file mode 100644 (file)
index 0000000..1ef9add
--- /dev/null
+++ b/build.sh
@@ -0,0 +1,19 @@
+#!/bin/bash
+
+
+FILES=(
+    xop.c
+    xscii.c
+    xighlight.c
+    xhallenge.c
+    xuxuxu.c
+    xarbon.c
+)
+
+CFLAGS="-I. -std=gnu99 -Ofast"
+CFLAGS="${CFLAGS} -Wno-unused-result -Wno-discarded-qualifiers"
+CLIBS="-lpng"
+
+for i in ${FILES[@]}; do
+    gcc ${CFLAGS} -o $(basename -s .c $i) $i ${CLIBS}
+done
\ No newline at end of file
index 5ec3b17646a66c6bc4fbe790e777150cbc1947df..a893d9452abe91f74ad3332bc5e6dd9d0381ee01 100755 (executable)
@@ -21,6 +21,7 @@ cp -f xommon.h   /usr/local/include/xolatile/xommon.h
 cp -f xpengl.h   /usr/local/include/xolatile/xpengl.h
 cp -f xross.h    /usr/local/include/xolatile/xross.h
 cp -f xui.h      /usr/local/include/xolatile/xui.h
 cp -f xpengl.h   /usr/local/include/xolatile/xpengl.h
 cp -f xross.h    /usr/local/include/xolatile/xross.h
 cp -f xui.h      /usr/local/include/xolatile/xui.h
+cp -f xenu.h     /usr/local/include/xolatile/xenu.h
 cp -f xungeon.h  /usr/local/include/xolatile/xungeon.h
 
 cp -rf xanguage /usr/local/include/xolatile/
 cp -f xungeon.h  /usr/local/include/xolatile/xungeon.h
 
 cp -rf xanguage /usr/local/include/xolatile/
diff --git a/test.c b/test.c
index 8f5a100d9bc6d1f5304553790a683a1f952d2e4b..8dee96b8f79dce719eb825f6240e76f4bb1980e7 100644 (file)
--- a/test.c
+++ b/test.c
@@ -9,20 +9,20 @@
 #include "xhape.h"
 #include "xision.h"
 
 #include "xhape.h"
 #include "xision.h"
 
-static v0 print_shape (shape_node * sh) {
+static procedure print_shape (shape_node * sh) {
        print ("shape data:\n");
        print ("v = %i // %i\n", sh->vertex_count, sh->vertex_limit);
        print ("i = %i // %i\n", sh->index_count, sh->index_limit);
 }
 
        print ("shape data:\n");
        print ("v = %i // %i\n", sh->vertex_count, sh->vertex_limit);
        print ("i = %i // %i\n", sh->index_count, sh->index_limit);
 }
 
-static v0 render_shape (vision_structure * vision, shape_node * sh) {
-       //~u4 vc = sh->vertex_count;
-       //~u4 ic = sh->index_count;
+static procedure render_shape (vision_structure * vision, shape_node * sh) {
+       //~natural vc = sh->vertex_count;
+       //~natural ic = sh->index_count;
 
 
-       //~f4 va [100] = { 0 };
-       //~u4  ia [100] = { 0 };
+       //~real va [100] = { 0 };
+       //~natural  ia [100] = { 0 };
 
 
-       //~for (u4 i = 0; i < vc; i += 5) {
+       //~for (natural i = 0; i < vc; i += 5) {
                //~va [i+0] = sh->vertex_array [i/5]->x;
                //~va [i+1] = sh->vertex_array [i/5]->y;
                //~va [i+2] = sh->vertex_array [i/5]->z;
                //~va [i+0] = sh->vertex_array [i/5]->x;
                //~va [i+1] = sh->vertex_array [i/5]->y;
                //~va [i+2] = sh->vertex_array [i/5]->z;
@@ -30,14 +30,14 @@ static v0 render_shape (vision_structure * vision, shape_node * sh) {
                //~va [i+4] = sh->unwrap_array [i/5]->y;
        //~}
 
                //~va [i+4] = sh->unwrap_array [i/5]->y;
        //~}
 
-       //~for (u4 i = 0; i < ic; i += 5) {
+       //~for (natural i = 0; i < ic; i += 5) {
                //~ia [i] = sh->index_array [i];
        //~}
 
        vision_render_base (vision, sh->vertex_count, sh->vertex_array, sh->index_count, sh->index_array, 0, 0xff7733ff);
 }
 
                //~ia [i] = sh->index_array [i];
        //~}
 
        vision_render_base (vision, sh->vertex_count, sh->vertex_array, sh->index_count, sh->index_array, 0, 0xff7733ff);
 }
 
-s4 main (v0) {
+integer main (none) {
        //~vector_3 as = { +2,0,0 };
        //~vector_3 bs = { -2,0,0 };
        //~vector_3 cs = { 0,+2,0 };
        //~vector_3 as = { +2,0,0 };
        //~vector_3 bs = { -2,0,0 };
        //~vector_3 cs = { 0,+2,0 };
@@ -59,11 +59,11 @@ s4 main (v0) {
        vision_structure   * vision   = vision_initialize   (60, 60, false, 6000, 3000, 256);
        particle_structure * particle = particle_initialize (1024);
 
        vision_structure   * vision   = vision_initialize   (60, 60, false, 6000, 3000, 256);
        particle_structure * particle = particle_initialize (1024);
 
-       u4 i0 = vision_sprite_import (vision, "xui/goblin/end_turn_button.png");
-       u4 i1 = vision_sprite_import (vision, "xui/goblin/separator_center.png");
-       u4 i2 = vision_sprite_import (vision, "xui/goblin/separator_left.png");
-       u4 i3 = vision_sprite_import (vision, "xui/goblin/separator_middle.png");
-       u4 i4 = vision_sprite_import (vision, "xui/goblin/separator_right.png");
+       natural i0 = vision_sprite_import (vision, "xui/goblin/end_turn_button.png");
+       natural i1 = vision_sprite_import (vision, "xui/goblin/separator_center.png");
+       natural i2 = vision_sprite_import (vision, "xui/goblin/separator_left.png");
+       natural i3 = vision_sprite_import (vision, "xui/goblin/separator_middle.png");
+       natural i4 = vision_sprite_import (vision, "xui/goblin/separator_right.png");
 
        vision_configure (vision, 800, 600, "Xube");
 
 
        vision_configure (vision, 800, 600, "Xube");
 
@@ -107,12 +107,12 @@ s4 main (v0) {
                render_shape (vision, e);
                render_shape (vision, f);
 
                render_shape (vision, e);
                render_shape (vision, f);
 
-               //~f4 t0 [] = {1,0,0,0,0,1,0,1,0};
-               //~f4 t1 [] = {1,0,0,0,0,1,0,1,0};
-               //~f4 t2 [] = {1,0,0,0,0,1,0,1,0};
-               //~f4 t3 [] = {1,0,0,0,0,1,0,1,0};
-               //~f4 t4 [] = {1,0,0,0,0,1,0,1,0};
-               //~f4 t5 [] = {1,0,0,0,0,1,0,1,0};
+               //~real t0 [] = {1,0,0,0,0,1,0,1,0};
+               //~real t1 [] = {1,0,0,0,0,1,0,1,0};
+               //~real t2 [] = {1,0,0,0,0,1,0,1,0};
+               //~real t3 [] = {1,0,0,0,0,1,0,1,0};
+               //~real t4 [] = {1,0,0,0,0,1,0,1,0};
+               //~real t5 [] = {1,0,0,0,0,1,0,1,0};
 
                //~vision_render_triangle (vision, t0, 0xff7733ff);
                //~vision_render_triangle (vision, t1, 0xff7733ff);
 
                //~vision_render_triangle (vision, t0, 0xff7733ff);
                //~vision_render_triangle (vision, t1, 0xff7733ff);
@@ -121,7 +121,7 @@ s4 main (v0) {
                //~vision_render_triangle (vision, t4, 0xff7733ff);
                //~vision_render_triangle (vision, t5, 0xff7733ff);
 
                //~vision_render_triangle (vision, t4, 0xff7733ff);
                //~vision_render_triangle (vision, t5, 0xff7733ff);
 
-               //~for (u4 i = 0; i < particle->count; ++i) {
+               //~for (natural i = 0; i < particle->count; ++i) {
                        //~Vector3 vector = {particle->position [i]->x, particle->position [i]->y, particle->position [i]->z};
                        //~DrawBillboard (camera, texture, vector, 1, RED);
                //~}
                        //~Vector3 vector = {particle->position [i]->x, particle->position [i]->y, particle->position [i]->z};
                        //~DrawBillboard (camera, texture, vector, 1, RED);
                //~}
@@ -131,14 +131,14 @@ s4 main (v0) {
 
 
 
 
 
 
-               //~f4 va [] = {
+               //~real va [] = {
                        //~-1, -1, 0, 0, 1, 1, 1, 1, 1,
                        //~-1, +1, 0, 0, 0, 1, 1, 1, 1,
                        //~+1, +1, 0, 1, 0, 1, 1, 1, 1,
                        //~+1, -1, 0, 1, 1, 1, 1, 1, 1
                //~};
 
                        //~-1, -1, 0, 0, 1, 1, 1, 1, 1,
                        //~-1, +1, 0, 0, 0, 1, 1, 1, 1,
                        //~+1, +1, 0, 1, 0, 1, 1, 1, 1,
                        //~+1, -1, 0, 1, 1, 1, 1, 1, 1
                //~};
 
-               //~u4 ia [] = { 2, 1, 0, 3, 2, 1 };
+               //~natural ia [] = { 2, 1, 0, 3, 2, 1 };
 
                //~vision_render_base (vision, sizeof(va)/4, va, sizeof(ia)/4, ia, 1, 0xff7733ff);
 
 
                //~vision_render_base (vision, sizeof(va)/4, va, sizeof(ia)/4, ia, 1, 0xff7733ff);
 
index fcfa5f581b5c72d918a134801b1b15e8356c36a5..b1a0dab7efc021d649e9868a67daa6cdadb64a06 100755 (executable)
--- a/xachine.h
+++ b/xachine.h
@@ -45,11 +45,11 @@ typedef enum {
 
 #ifdef use_debug_printing
 
 
 #ifdef use_debug_printing
 
-static c1 * operand_name [operand_count] = {
+static character * operand_name [operand_count] = {
        "rel",          "reg",          "mem",          "imm"
 };
 
        "rel",          "reg",          "mem",          "imm"
 };
 
-static c1 * operation_name [operation_count] = {
+static character * operation_name [operation_count] = {
        "asmmem",       "asmrel",       "asmnum",       "asmstr",
        "add",          "or",           "adc",          "sbb",          "and",          "sub",          "xor",          "cmp",
        "inc",          "dec",          "not",          "neg",          "mul",          "imul",         "div",          "idiv",
        "asmmem",       "asmrel",       "asmnum",       "asmstr",
        "add",          "or",           "adc",          "sbb",          "and",          "sub",          "xor",          "cmp",
        "inc",          "dec",          "not",          "neg",          "mul",          "imul",         "div",          "idiv",
@@ -61,19 +61,19 @@ static c1 * operation_name [operation_count] = {
 
 #endif
 
 
 #endif
 
-static u4    main_entry_pos4 = 0;
-static u4    text_sector_size = 0;
-static u1 * text_sector_byte = null;
-static u4    data_sector_size = 0;    // This is unused, and it should be used...
-static u1 * data_sector_byte = null; // This is unused, and it should be used...
+static natural    main_entry_pointeger = 0;
+static natural    text_sector_size = 0;
+static natural_8 * text_sector_byte = null;
+static natural    data_sector_size = 0;    // This is unused, and it should be used...
+static natural_8 * data_sector_byte = null; // This is unused, and it should be used...
 
 
-static u4   empty_count = 1;
-static u4   empty_holes = 1;
-static u4 * empty_array = null;
-static u4 * empty_imbue = null;
-static u4 * empty_store = null;
+static natural   empty_count = 1;
+static natural   empty_holes = 1;
+static natural * empty_array = null;
+static natural * empty_imbue = null;
+static natural * empty_store = null;
 
 
-static u1 elf_main_header_byte [elf_main_header_size] = { // These should be done properly...
+static natural_8 elf_main_header_byte [elf_main_header_size] = { // These should be done properly...
        0x7f, 0x45, 0x4c, 0x46, 0x02, 0x01, 0x01, 0x03,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x02, 0x00, 0x3e, 0x00, 0x01, 0x00, 0x00, 0x00,
        0x7f, 0x45, 0x4c, 0x46, 0x02, 0x01, 0x01, 0x03,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x02, 0x00, 0x3e, 0x00, 0x01, 0x00, 0x00, 0x00,
@@ -84,7 +84,7 @@ static u1 elf_main_header_byte [elf_main_header_size] = { // These should be don
        0x02, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00
 };
 
        0x02, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00
 };
 
-static u1 elf_text_sector_byte [elf_text_sector_size] = {
+static natural_8 elf_text_sector_byte [elf_text_sector_size] = {
        0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
@@ -94,7 +94,7 @@ static u1 elf_text_sector_byte [elf_text_sector_size] = {
        0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 };
 
        0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 };
 
-static u1 elf_data_sector_byte [elf_data_sector_size] = {
+static natural_8 elf_data_sector_byte [elf_data_sector_size] = {
        0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x10, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x10, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
@@ -104,36 +104,36 @@ static u1 elf_data_sector_byte [elf_data_sector_size] = {
        0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 };
 
        0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 };
 
-static b4 register_register  (u4 to, u4 from) { return ((to == operand_register) && (from == operand_register));  }
-static b4 register_memory    (u4 to, u4 from) { return ((to == operand_register) && (from == operand_memory));    }
-static b4 register_immediate (u4 to, u4 from) { return ((to == operand_register) && (from == operand_immediate)); }
-static b4 memory_register    (u4 to, u4 from) { return ((to == operand_memory)   && (from == operand_register));  }
-static b4 memory_immediate   (u4 to, u4 from) { return ((to == operand_memory)   && (from == operand_immediate)); }
-static b4 register_relative  (u4 to, u4 from) { return ((to == operand_register) && (from == operand_relative));  }
+static boolean register_register  (natural to, natural from) { return ((to == operand_register) && (from == operand_register));  }
+static boolean register_memory    (natural to, natural from) { return ((to == operand_register) && (from == operand_memory));    }
+static boolean register_immediate (natural to, natural from) { return ((to == operand_register) && (from == operand_immediate)); }
+static boolean memory_register    (natural to, natural from) { return ((to == operand_memory)   && (from == operand_register));  }
+static boolean memory_immediate   (natural to, natural from) { return ((to == operand_memory)   && (from == operand_immediate)); }
+static boolean register_relative  (natural to, natural from) { return ((to == operand_register) && (from == operand_relative));  }
 
 
-static u4 absolute (v0) { return (0x4010b0 - text_sector_size - 4); }
-static u4 relative (v0) { return (0x1000   - text_sector_size - 4); }
+static natural absolute (none) { return (0x4010b0 - text_sector_size - 4); }
+static natural relative (none) { return (0x1000   - text_sector_size - 4); }
 
 
-static v0 replace (u1 * destination, u1 * source, u8 size) {
+static procedure replace (natural_8 * destination, natural_8 * source, caliber size) {
        for (--size; size >= 0; --size) {
                destination [size] = source [size];
        }
 }
 
        for (--size; size >= 0; --size) {
                destination [size] = source [size];
        }
 }
 
-static v0 inset (b4 when, u1 data) {
+static procedure inset (boolean when, natural_8 data) {
        text_sector_byte [text_sector_size] = data;
 
        text_sector_byte [text_sector_size] = data;
 
-       text_sector_size += (u4) when;
+       text_sector_size += (natural) when;
 }
 
 }
 
-static v0 inset_immediate (b4 when, u4 data) {
+static procedure inset_immediate (boolean when, natural data) {
        inset (when, (data >>  0) & 0xff);
        inset (when, (data >>  8) & 0xff);
        inset (when, (data >> 16) & 0xff);
        inset (when, (data >> 24) & 0xff);
 }
 
        inset (when, (data >>  0) & 0xff);
        inset (when, (data >>  8) & 0xff);
        inset (when, (data >> 16) & 0xff);
        inset (when, (data >> 24) & 0xff);
 }
 
-static v0 inset_memory (b4 when, u4 data, u4 base) {
+static procedure inset_memory (boolean when, natural data, natural base) {
        empty_array [empty_holes] = text_sector_size;
        empty_imbue [empty_holes] = data;
 
        empty_array [empty_holes] = text_sector_size;
        empty_imbue [empty_holes] = data;
 
@@ -142,7 +142,7 @@ static v0 inset_memory (b4 when, u4 data, u4 base) {
        inset_immediate (when, base);
 }
 
        inset_immediate (when, base);
 }
 
-static v0 inset_relative (b4 when, u4 data, u4 base) {
+static procedure inset_relative (boolean when, natural data, natural base) {
        empty_array [empty_holes] = 0;
        empty_imbue [empty_holes] = data;
 
        empty_array [empty_holes] = 0;
        empty_imbue [empty_holes] = data;
 
@@ -151,16 +151,16 @@ static v0 inset_relative (b4 when, u4 data, u4 base) {
        inset_immediate (when, base);
 }
 
        inset_immediate (when, base);
 }
 
-static u4 mc0 (u4 code, u4 base) {
+static natural mc0 (natural code, natural base) {
        return (0xc0 + 0x01 * (code % 8) + 0x08 * (base % 8));
 }
 
        return (0xc0 + 0x01 * (code % 8) + 0x08 * (base % 8));
 }
 
-static u4 m05 (u4 code) {
+static natural m05 (natural code) {
        return (0x05 + 0x08 * code);
 }
 
        return (0x05 + 0x08 * code);
 }
 
-static u4 store_relative (u4 * array) {
-       u4 relative = array [1];
+static natural store_relative (natural * array) {
+       natural relative = array [1];
 #ifdef use_debug_printing
        print ("/3asmrel/- %i", relative);
 #endif
 #ifdef use_debug_printing
        print ("/3asmrel/- %i", relative);
 #endif
@@ -172,8 +172,8 @@ static u4 store_relative (u4 * array) {
        return 1;
 }
 
        return 1;
 }
 
-static u4 store_memory (u4 * array) {
-       u4 memory = array [1];
+static natural store_memory (natural * array) {
+       natural memory = array [1];
 #ifdef use_debug_printing
        print ("/3asmmem/- %i", memory);
 #endif
 #ifdef use_debug_printing
        print ("/3asmmem/- %i", memory);
 #endif
@@ -184,38 +184,38 @@ static u4 store_memory (u4 * array) {
        return 1;
 }
 
        return 1;
 }
 
-static u4 store_number (u4 * array) {
-       u4 amount = array [1];
+static natural store_number (natural * array) {
+       natural amount = array [1];
 
 #ifdef use_debug_printing
        print ("/3asmnum/- %i", amount);
 #endif
 
 #ifdef use_debug_printing
        print ("/3asmnum/- %i", amount);
 #endif
-       for (u4 index = 0; index < amount; ++index) {
+       for (natural index = 0; index < amount; ++index) {
                inset_immediate (true, array [2 + index]);
        }
 
        return amount + 1;
 }
 
                inset_immediate (true, array [2 + index]);
        }
 
        return amount + 1;
 }
 
-static u4 store_string (u4 * array) {
-       u4 amount = array [1];
+static natural store_string (natural * array) {
+       natural amount = array [1];
 
 #ifdef use_debug_printing
        print ("/3asmstr/- %i", amount);
 #endif
 
 #ifdef use_debug_printing
        print ("/3asmstr/- %i", amount);
 #endif
-       for (u4 index = 0; index < amount; ++index) {
+       for (natural index = 0; index < amount; ++index) {
                inset (true, array [2 + index]);
        }
 
        return amount + 1;
 }
 
                inset (true, array [2 + index]);
        }
 
        return amount + 1;
 }
 
-static u4 build_f8 (u4 * array) {
-       u4 operation   = array [0];
-       u4 to          = array [1];
-       u4 destination = array [2];
-       u4 from        = array [3];
-       u4 source      = array [4];
+static natural build_real_64 (natural * array) {
+       natural operation   = array [0];
+       natural to          = array [1];
+       natural destination = array [2];
+       natural from        = array [3];
+       natural source      = array [4];
 #ifdef use_debug_printing
        print ("/3%s/- /6%s/- %i /6%s/- %i", operation_name [operation], operand_name [to], destination, operand_name [from], source);
 #endif
 #ifdef use_debug_printing
        print ("/3%s/- /6%s/- %i /6%s/- %i", operation_name [operation], operand_name [to], destination, operand_name [from], source);
 #endif
@@ -248,10 +248,10 @@ static u4 build_f8 (u4 * array) {
        return 4;
 }
 
        return 4;
 }
 
-static u4 build_single (u4 * array) {
-       u4 operation   = array [0];
-       u4 to          = array [1];
-       u4 destination = array [2];
+static natural build_single (natural * array) {
+       natural operation   = array [0];
+       natural to          = array [1];
+       natural destination = array [2];
 #ifdef use_debug_printing
        print ("/3%s/- /6%s/- %i", operation_name [operation], operand_name [to], destination);
 #endif
 #ifdef use_debug_printing
        print ("/3%s/- /6%s/- %i", operation_name [operation], operand_name [to], destination);
 #endif
@@ -264,15 +264,15 @@ static u4 build_single (u4 * array) {
        return 2;
 }
 
        return 2;
 }
 
-static u4 build_shift (u4 * array) {
-       u4 operation   = array [0];
-       u4 to          = array [1];
-       u4 destination = array [2];
-       u4 offset      = array [3];
+static natural build_shift (natural * array) {
+       natural operation   = array [0];
+       natural to          = array [1];
+       natural destination = array [2];
+       natural offset      = array [3];
 #ifdef use_debug_printing
        print ("/3%s/- /6%s/- %i /cimm/- %i", operation_name [operation], operand_name [to], destination, offset);
 #endif
 #ifdef use_debug_printing
        print ("/3%s/- /6%s/- %i /cimm/- %i", operation_name [operation], operand_name [to], destination, offset);
 #endif
-       inset (true, 0xc1);
+       inset (true, 0xcharacter);
 
        inset (to == operand_register, 0x05 + 0x08 * (operation - operation_rotate_left));
        inset (to == operand_memory, 0xc0 + 0x08 * (operation - operation_rotate_left));
 
        inset (to == operand_register, 0x05 + 0x08 * (operation - operation_rotate_left));
        inset (to == operand_memory, 0xc0 + 0x08 * (operation - operation_rotate_left));
@@ -284,8 +284,8 @@ static u4 build_shift (u4 * array) {
        return 3;
 }
 
        return 3;
 }
 
-static u4 build_static_1 (u4 * array) {
-       u4 operation = array [0];
+static natural build_static_1 (natural * array) {
+       natural operation = array [0];
 #ifdef use_debug_printing
        print ("/3%s/-", operation_name [operation]);
 #endif
 #ifdef use_debug_printing
        print ("/3%s/-", operation_name [operation]);
 #endif
@@ -299,9 +299,9 @@ static u4 build_static_1 (u4 * array) {
        return 0;
 }
 
        return 0;
 }
 
-static u4 build_jump_if (u4 * array) {
-       u4 operation = array [0];
-       u4 location  = array [1];
+static natural build_jump_if (natural * array) {
+       natural operation = array [0];
+       natural location  = array [1];
 #ifdef use_debug_printing
        print ("/3%s/- %i", operation_name [operation], location);
 #endif
 #ifdef use_debug_printing
        print ("/3%s/- %i", operation_name [operation], location);
 #endif
@@ -313,9 +313,9 @@ static u4 build_jump_if (u4 * array) {
        return 2;
 }
 
        return 2;
 }
 
-static u4 build_jump (u4 * array) {
-       u4 to          = array [1];
-       u4 destination = array [2];
+static natural build_jump (natural * array) {
+       natural to          = array [1];
+       natural destination = array [2];
 #ifdef use_debug_printing
        print ("/3jmp/- /6%s/- %i", operand_name [to], destination);
 #endif
 #ifdef use_debug_printing
        print ("/3jmp/- /6%s/- %i", operand_name [to], destination);
 #endif
@@ -328,11 +328,11 @@ static u4 build_jump (u4 * array) {
        return 2;
 }
 
        return 2;
 }
 
-static u4 build_move (u4 * array) {
-       u4 to          = array [1];
-       u4 destination = array [2];
-       u4 from        = array [3];
-       u4 source      = array [4];
+static natural build_move (natural * array) {
+       natural to          = array [1];
+       natural destination = array [2];
+       natural from        = array [3];
+       natural source      = array [4];
 #ifdef use_debug_printing
        print ("/3mov/- /6%s/- %i /6%s/- %i", operand_name [to], destination, operand_name [from], source);
 #endif
 #ifdef use_debug_printing
        print ("/3mov/- /6%s/- %i /6%s/- %i", operand_name [to], destination, operand_name [from], source);
 #endif
@@ -359,9 +359,9 @@ static u4 build_move (u4 * array) {
        return 4;
 }
 
        return 4;
 }
 
-static u4 build_call (u4 * array) {
-       u4 from   = array [1];
-       u4 source = array [2];
+static natural build_call (natural * array) {
+       natural from   = array [1];
+       natural source = array [2];
 #ifdef use_debug_printing
        print ("/3call/- /6%s/- %i", operand_name [from], source);
 #endif
 #ifdef use_debug_printing
        print ("/3call/- /6%s/- %i", operand_name [from], source);
 #endif
@@ -374,7 +374,7 @@ static u4 build_call (u4 * array) {
        return 2;
 }
 
        return 2;
 }
 
-static u4 (* build_instruction [operation_count]) (u4 * array) = {
+static natural (* build_instruction [operation_count]) (natural * array) = {
        store_memory,   // operation_memory : LABEL
        store_relative, // operation_relative : "IMPLEMENTED"
        store_number,
        store_memory,   // operation_memory : LABEL
        store_relative, // operation_relative : "IMPLEMENTED"
        store_number,
@@ -387,7 +387,7 @@ static u4 (* build_instruction [operation_count]) (u4 * array) = {
        build_static_1, build_static_1, build_static_1, build_call,     build_jump,     build_move
 };
 
        build_static_1, build_static_1, build_static_1, build_call,     build_jump,     build_move
 };
 
-static v0 assemble (u4 count, u4 * array, u4 external_memory, u4 internal_memory) {
+static procedure assemble (natural count, natural * array, natural external_memory, natural internal_memory) {
        text_sector_byte = arena_add (external_memory * sizeof (* text_sector_byte));
        data_sector_byte = arena_add (external_memory * sizeof (* text_sector_byte));
 
        text_sector_byte = arena_add (external_memory * sizeof (* text_sector_byte));
        data_sector_byte = arena_add (external_memory * sizeof (* text_sector_byte));
 
@@ -395,10 +395,10 @@ static v0 assemble (u4 count, u4 * array, u4 external_memory, u4 internal_memory
        empty_imbue = arena_add (internal_memory * sizeof (* empty_imbue));
        empty_store = arena_add (internal_memory * sizeof (* empty_store));
 
        empty_imbue = arena_add (internal_memory * sizeof (* empty_imbue));
        empty_store = arena_add (internal_memory * sizeof (* empty_store));
 
-       for (u4 index = 0; index < count; ++index) {
-               u4 size = text_sector_size;
+       for (natural index = 0; index < count; ++index) {
+               natural size = text_sector_size;
 
 
-               u1 byte = 0;
+               natural_8 byte = 0;
 #ifdef use_debug_nopping
                inset (array [index] > operation_string, 0x90);
 #endif
 #ifdef use_debug_nopping
                inset (array [index] > operation_string, 0x90);
 #endif
@@ -406,28 +406,28 @@ static v0 assemble (u4 count, u4 * array, u4 external_memory, u4 internal_memory
 #ifdef use_debug_printing
                print (" /0--/- ");
                for (byte = size; byte < text_sector_size; ++byte) {
 #ifdef use_debug_printing
                print (" /0--/- ");
                for (byte = size; byte < text_sector_size; ++byte) {
-                       print ("/5%s/- ", format_to_string ((u1) text_sector_byte [byte], false, 16, 2, '0'));
+                       print ("/5%s/- ", format_to_string ((natural_8) text_sector_byte [byte], false, 16, 2, '0'));
                }
                print ("\n");
 #endif
        }
 
                }
                print ("\n");
 #endif
        }
 
-       main_entry_pos4 = empty_store [0];
+       main_entry_pointeger = empty_store [0];
 
 
-       for (u4 index = 1; index < empty_holes; ++index) {
-               u4 set = 0;
-               u4 get = empty_array [index];
+       for (natural index = 1; index < empty_holes; ++index) {
+               natural set = 0;
+               natural get = empty_array [index];
 
 
-               replace ((u1 *) & set, & text_sector_byte [get], sizeof (set));
+               replace ((natural_8 *) & set, & text_sector_byte [get], sizeof (set));
 
                set += empty_store [empty_imbue [index]];
 
 
                set += empty_store [empty_imbue [index]];
 
-               replace (& text_sector_byte [get], (u1 *) & set, sizeof (get));
+               replace (& text_sector_byte [get], (natural_8 *) & set, sizeof (get));
        }
 }
 
        }
 }
 
-static v0 elf_main_header (u4 entry_point, b4 has_program, b4 for_linux, b4 for_x86_64) {
-       u4 enter = entry_pos4 + 0x4000b0;
+static procedure elf_main_header (natural entry_point, boolean has_program, boolean for_linux, boolean for_x86_64) {
+       natural enter = entry_pointeger + 0x4000b0;
 
        elf_main_header_byte [16] = (has_program) ? 0x02 : 0x03;
        elf_main_header_byte [ 7] = (for_linux)   ? 0x03 : 0x00;
 
        elf_main_header_byte [16] = (has_program) ? 0x02 : 0x03;
        elf_main_header_byte [ 7] = (for_linux)   ? 0x03 : 0x00;
@@ -436,17 +436,17 @@ static v0 elf_main_header (u4 entry_point, b4 has_program, b4 for_linux, b4 for_
        memory_copy (& elf_main_header_byte [24], & enter, sizeof (enter));
 }
 
        memory_copy (& elf_main_header_byte [24], & enter, sizeof (enter));
 }
 
-static v0 elf_text_sector (u4 text_size, u4 data_size) {
-       u4 text = elf_header_size + text_size - data_size;
+static procedure elf_text_sector (natural text_size, natural data_size) {
+       natural text = elf_header_size + text_size - data_size;
 
        memory_copy (& elf_text_sector_byte [32], & text, sizeof (text));
        memory_copy (& elf_text_sector_byte [40], & text, sizeof (text));
 }
 
 
        memory_copy (& elf_text_sector_byte [32], & text, sizeof (text));
        memory_copy (& elf_text_sector_byte [40], & text, sizeof (text));
 }
 
-static v0 elf_data_sector (u4 text_size, u4 data_size) {
-       u4 data = data_size;
-       u4 core = elf_header_size + text_size - data_size;
-       u4 move = 0x401000 + core;
+static procedure elf_data_sector (natural text_size, natural data_size) {
+       natural data = data_size;
+       natural core = elf_header_size + text_size - data_size;
+       natural move = 0x401000 + core;
 
        memory_copy (& elf_data_sector_byte [ 8], & core, sizeof (core));
        memory_copy (& elf_data_sector_byte [16], & move, sizeof (move));
 
        memory_copy (& elf_data_sector_byte [ 8], & core, sizeof (core));
        memory_copy (& elf_data_sector_byte [16], & move, sizeof (move));
old mode 100755 (executable)
new mode 100644 (file)
index bf29cfe..723e6c1
 /// warranty of merchantability or fitness for a particular purpose, because it is pointless. Please see the GNU (Geenoo) General Public License
 /// for more details, if you dare, it is a lot of text that nobody wants to read...
 
 /// warranty of merchantability or fitness for a particular purpose, because it is pointless. Please see the GNU (Geenoo) General Public License
 /// for more details, if you dare, it is a lot of text that nobody wants to read...
 
+/// Description
+///
+/// Xanguage, core programming and scripting language definitions created using Xyntax, with few more output definitions that I care about, for
+/// example Valgrind. There's not much to document about this library, it's used in my projects Xarbon and Xighlight. You can add support for
+/// your language of choice by adding one enumeration value, creating header file similar to existing ones, including it here and editing
+/// functions below to match 'language_count'. If you don't like how I highlight one or more of these languages, feel free to add more fields in
+/// 'language_structure' or edit existing ones inside 'xanguage' folder. This header file may look unfamiliar, especially to my other projects,
+/// but that's the cost of highlighting multiple languages in very low amount of code.
+
+/// Enumeration of supported languages, in no particular order.
+
 typedef enum {
        language_common,                language_ada,                   language_c,                     language_cpp,
        language_d,                     language_eaxhla,                language_flat,                  language_fortran,
        language_pascal,                language_python,                language_go,                    language_lua,
 typedef enum {
        language_common,                language_ada,                   language_c,                     language_cpp,
        language_d,                     language_eaxhla,                language_flat,                  language_fortran,
        language_pascal,                language_python,                language_go,                    language_lua,
-       language_bash,                  language_haskell,               language_valgrind,
+       language_bash,                  language_haskell,               language_valgrind,              language_holy_c,
        language_count
 } language_enumeration;
 
        language_count
 } language_enumeration;
 
+/// Structure of single language definition, highlighting-wise, this will be initialized below, check out how it is used.
+///
+/// language_structure * language = null;
+
 typedef struct {
 typedef struct {
-       u4 comment_colour;
-       u4 processor_colour;
-       u4 character_colour;
-       u4 string_colour;
-       u4 keyword_colour;
-       u4 type_colour;
-       u4 bracket_colour;
-       u4 operator_colour;
-       u4 number_colour;
-       u4 lowercase_colour;
-       u4 uppercase_colour;
-       u4 underscore_colour;
-       u4 register_colour;
-       u4 extension_colour;
-       u4 fatal_colour;
-       u4 comment_effect;
-       u4 processor_effect;
-       u4 character_effect;
-       u4 string_effect;
-       u4 keyword_effect;
-       u4 type_effect;
-       u4 bracket_effect;
-       u4 operator_effect;
-       u4 number_effect;
-       u4 lowercase_effect;
-       u4 uppercase_effect;
-       u4 underscore_effect;
-       u4 register_effect;
-       u4 extension_effect;
-       u4 fatal_effect;
+       natural comment_colour;    /// Colours for basic language syntax information.
+       natural processor_colour;
+       natural character_colour;
+       natural string_colour;
+       natural keyword_colour;
+       natural type_colour;
+       natural bracket_colour;
+       natural operator_colour;
+       natural number_colour;
+       natural lowercase_colour;
+       natural uppercase_colour;
+       natural underscore_colour;
+       natural register_colour;
+       natural extension_colour;
+       natural fatal_colour;
+       natural comment_effect;    /// Effects for basic language syntax information.
+       natural processor_effect;
+       natural character_effect;
+       natural string_effect;
+       natural keyword_effect;
+       natural type_effect;
+       natural bracket_effect;
+       natural operator_effect;
+       natural number_effect;
+       natural lowercase_effect;
+       natural uppercase_effect;
+       natural underscore_effect;
+       natural register_effect;
+       natural extension_effect;
+       natural fatal_effect;
 } language_structure;
 
 } language_structure;
 
+/// Warning: Local macros! You don't need to use this at all, it's covered by other functions, don't worry about it.
+///
+/// You shouldn't care about these local macros, they made few lines of code shorter, we're including files in this order, in this place.
+
 #define language_lowercase "abcdefghijklmnopqrstuvwxyz"
 #define language_uppercase "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
 #define language_letters   "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
 #define language_lowercase "abcdefghijklmnopqrstuvwxyz"
 #define language_uppercase "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
 #define language_letters   "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
@@ -72,33 +91,52 @@ typedef struct {
 #include <xolatile/xanguage/pascal.h>
 #include <xolatile/xanguage/python.h>
 #include <xolatile/xanguage/go.h>
 #include <xolatile/xanguage/pascal.h>
 #include <xolatile/xanguage/python.h>
 #include <xolatile/xanguage/go.h>
+#include <xolatile/xanguage/holy_c.h>
 #include <xolatile/xanguage/lua.h>
 #include <xolatile/xanguage/bash.h>
 #include <xolatile/xanguage/haskell.h>
 #include <xolatile/xanguage/valgrind.h>
 
 #include <xolatile/xanguage/lua.h>
 #include <xolatile/xanguage/bash.h>
 #include <xolatile/xanguage/haskell.h>
 #include <xolatile/xanguage/valgrind.h>
 
-static v0 (* language_highlighter [language_count]) (language_structure * language, syntax_structure * syntax) = {
+#undef language_lowercase
+#undef language_uppercase
+#undef language_letters
+#undef language_digits
+
+/// Array of function pointers enumerated above, these functions are defined in separate header files in 'xanguage' folder.
+
+static procedure (* language_highlighter [language_count]) (language_structure * language, syntax_structure * syntax) = {
        language_highlight_common,      language_highlight_ada,         language_highlight_c,           language_highlight_cpp,
        language_highlight_d,           language_highlight_eaxhla,      language_highlight_flat,        language_highlight_fortran,
        language_highlight_pascal,      language_highlight_python,      language_highlight_go,          language_highlight_lua,
        language_highlight_common,      language_highlight_ada,         language_highlight_c,           language_highlight_cpp,
        language_highlight_d,           language_highlight_eaxhla,      language_highlight_flat,        language_highlight_fortran,
        language_highlight_pascal,      language_highlight_python,      language_highlight_go,          language_highlight_lua,
-       language_highlight_bash,        language_highlight_haskell,     language_highlight_valgrind
+       language_highlight_bash,        language_highlight_haskell,     language_highlight_valgrind,    language_highlight_holy_c
 };
 
 };
 
-static c1 * language_short_option [language_count] = {
-       "-X",   "-A",   "-C",   "-S",   "-D",   "-E",   "-T",   "-F",   "-P",   "-Y",   "-G",   "-L",   "-B",   "-H",   "-V"
+/// Array of short command line argument enumerated above, makes main function less bloated.
+
+static character * language_short_option [language_count] = {
+       "-X",   "-A",   "-C",   "-S",   "-D",   "-E",   "-T",   "-F",   "-P",   "-Y",   "-G",   "-L",   "-B",   "-H",   "-V",   "-O"
 };
 
 };
 
-static c1 * language_long_option [language_count] = {
+/// Array of long command line argument enumerated above, makes main function less bloated.
+
+static character * language_long_option [language_count] = {
        "--common",     "--ada",        "--c",          "--cpp",        "--d",          "--eaxhla",     "--flat",       "--fortran",
        "--common",     "--ada",        "--c",          "--cpp",        "--d",          "--eaxhla",     "--flat",       "--fortran",
-       "--pascal",     "--python",     "--go",         "--lua",        "--bash",       "--haskell",    "--valgrind"
+       "--pascal",     "--python",     "--go",         "--lua",        "--bash",       "--haskell",    "--valgrind",   "--holyc"
 };
 
 };
 
-static c1 * language_identifier [language_count] = {
+/// Array of pretty language name enumerated above, makes things pretty.
+
+static character * language_identifier [language_count] = {
        "Common",       "Ada",          "C",            "C++",          "D",            "EAXHLA",       "Flat",         "Fortran",
        "Common",       "Ada",          "C",            "C++",          "D",            "EAXHLA",       "Flat",         "Fortran",
-       "Pascal",       "Python",       "Go",           "Lua",          "Bash",         "Haskell",      "Valgrind"
+       "Pascal",       "Python",       "Go",           "Lua",          "Bash",         "Haskell",      "Valgrind",     "Holy C"
 };
 
 };
 
-static language_structure * language_initialize (b4 true_colour) {
+/// After you've defined global or local language variable, you want to initialize it, edit this function if you dislike my themes.
+///
+/// language = language_initialize (false); /// You're probably using this library to render an image.
+/// language = language_initialize (true);  /// You're probably using this library to print to terminal.
+
+static language_structure * language_initialize (boolean true_colour) {
        language_structure * language = allocate (sizeof (* language));
 
        if (true_colour == true) {
        language_structure * language = allocate (sizeof (* language));
 
        if (true_colour == true) {
@@ -153,11 +191,22 @@ static language_structure * language_initialize (b4 true_colour) {
        return (language);
 }
 
        return (language);
 }
 
+/// When you're done doing your thing, just call this function nicely to avoid leaking memory.
+///
+/// language = language_deinitialize (language);
+
 static language_structure * language_deinitialize (language_structure * language) {
        return (deallocate (language));
 }
 
 static language_structure * language_deinitialize (language_structure * language) {
        return (deallocate (language));
 }
 
-static v0 language_conditionally_select (language_structure * language, syntax_structure * syntax, language_enumeration select) {
+/// This is just a helper function that I used a lot, it made sense to define it in this file, so here it is... This function will call specific
+/// function from 'xanguage' folder, based on what file type you pass to it, enumerated in Xtandard. It takes natural number as selection value
+/// due to avoiding type-related errors that dumb compilers might warn about, because some C compilers treat enumeration values as signed, while
+/// others treat them as unsigned, unless you manually define some value there negative, which is braindead.
+///
+/// language_conditionally_select (language, syntax, selection_index);
+
+static procedure language_conditionally_select (language_structure * language, syntax_structure * syntax, natural select) {
        if (syntax->count == 0) {
                if ((select == file_type_c_source) || (select == file_type_c_header)) {
                        language_highlight_c (language, syntax);
        if (syntax->count == 0) {
                if ((select == file_type_c_source) || (select == file_type_c_header)) {
                        language_highlight_c (language, syntax);
@@ -180,8 +229,3 @@ static v0 language_conditionally_select (language_structure * language, syntax_s
                }
        }
 }
                }
        }
 }
-
-#undef language_lowercase
-#undef language_uppercase
-#undef language_letters
-#undef language_digits
index 98cab07a8d9507a3f27c5e771f733ca701331d7f..05392cbe0bdc1a301af6095dd30024bd51221898 100755 (executable)
@@ -1,7 +1,7 @@
-static v0 language_highlight_ada (language_structure * language, syntax_structure * syntax) {
-       c1 * separators = ".,:;<=>+-*/&|()\" \t\r\n";
+static procedure language_highlight_ada (language_structure * language, syntax_structure * syntax) {
+       character * separators = ".,:;<=>+-*/&|()\" \t\r\n";
 
 
-       c1 * keywords [] = {
+       character * keywords [] = {
                "abort",        "else",         "new",          "return",       "abs",          "elsif",        "not",          "reverse",
                "abstract",     "end",          "null",         "accept",       "entry",        "select",       "access",       "of",
                "separate",     "aliased",      "exit",         "or",           "some",         "all",          "others",       "subtype",
                "abort",        "else",         "new",          "return",       "abs",          "elsif",        "not",          "reverse",
                "abstract",     "end",          "null",         "accept",       "entry",        "select",       "access",       "of",
                "separate",     "aliased",      "exit",         "or",           "some",         "all",          "others",       "subtype",
@@ -18,7 +18,7 @@ static v0 language_highlight_ada (language_structure * language, syntax_structur
        syntax_define (syntax, false, false, "'",  "'",  '\\', language->character_colour, language->character_effect);
        syntax_define (syntax, false, false, "\"", "\"", '\\', language->string_colour,    language->string_effect);
 
        syntax_define (syntax, false, false, "'",  "'",  '\\', language->character_colour, language->character_effect);
        syntax_define (syntax, false, false, "\"", "\"", '\\', language->string_colour,    language->string_effect);
 
-       for (u8 word = 0; word < array_length (keywords); ++word) {
+       for (natural_64 word = 0; word < array_length (keywords); ++word) {
                syntax_define (syntax, false, true, keywords [word], separators, '\0', language->keyword_colour, language->keyword_effect);
        }
 
                syntax_define (syntax, false, true, keywords [word], separators, '\0', language->keyword_colour, language->keyword_effect);
        }
 
index 706b49fd2acff9d33488aab3175fe9b886557aed..eca4c4326ba616092dc5adec330834c611f85301 100755 (executable)
@@ -1,7 +1,7 @@
-static v0 language_highlight_bash (language_structure * language, syntax_structure * syntax) {
-       c1 * separators = ".,:;<=>+-*/%!&~^?|@#$()[]{}'\" \t\r\n";
+static procedure language_highlight_bash (language_structure * language, syntax_structure * syntax) {
+       character * separators = ".,:;<=>+-*/%!&~^?|@#$()[]{}'\" \t\r\n";
 
 
-       c1 * keywords [] = {
+       character * keywords [] = {
                "exit",         "set",          "elif",         "done",         "in",           "then",         "function",     "fi",
                "if",           "else",         "do",           "while",        "for"
        };
                "exit",         "set",          "elif",         "done",         "in",           "then",         "function",     "fi",
                "if",           "else",         "do",           "while",        "for"
        };
@@ -10,7 +10,7 @@ static v0 language_highlight_bash (language_structure * language, syntax_structu
        syntax_define (syntax, false, false, "'",   "'",  '\0', language->string_colour,  language->string_effect);
        syntax_define (syntax, false, false, "\"",  "\"", '\0', language->string_colour,  language->string_effect);
 
        syntax_define (syntax, false, false, "'",   "'",  '\0', language->string_colour,  language->string_effect);
        syntax_define (syntax, false, false, "\"",  "\"", '\0', language->string_colour,  language->string_effect);
 
-       for (u8 word = 0; word < array_length (keywords); ++word) {
+       for (natural_64 word = 0; word < array_length (keywords); ++word) {
                syntax_define (syntax, false, true, keywords [word], separators, '\0', language->keyword_colour, language->keyword_effect);
        }
 
                syntax_define (syntax, false, true, keywords [word], separators, '\0', language->keyword_colour, language->keyword_effect);
        }
 
index a805c3c3c044f0ff6ca882bbb5cd8dff57af7bb0..7552a71bba00d3be88d37eb1e22f0133c5852635 100755 (executable)
@@ -1,7 +1,7 @@
-static v0 language_highlight_cpp (language_structure * language, syntax_structure * syntax) {
-       c1 * separators = ".,:;<=>+-*/%!&~^?|()[]{}'\" \t\r\n";
+static procedure language_highlight_cpp (language_structure * language, syntax_structure * syntax) {
+       character * separators = ".,:;<=>+-*/%!&~^?|()[]{}'\" \t\r\n";
 
 
-       c1 * keywords [] = {
+       character * keywords [] = {
                "alignas",      "alignof",      "and",          "asm",          "auto",         "break",        "case",
                "catch",        "class",        "compl",        "concept",      "const",        "consteval",    "constexpr",
                "constinit",    "continue",     "decltype",     "default",      "delete",       "do",           "else",
                "alignas",      "alignof",      "and",          "asm",          "auto",         "break",        "case",
                "catch",        "class",        "compl",        "concept",      "const",        "consteval",    "constexpr",
                "constinit",    "continue",     "decltype",     "default",      "delete",       "do",           "else",
@@ -14,14 +14,14 @@ static v0 language_highlight_cpp (language_structure * language, syntax_structur
                "volatile",     "while",        "xor",          "final",        "override",     "import",       "module"
        };
 
                "volatile",     "while",        "xor",          "final",        "override",     "import",       "module"
        };
 
-       c1 * types [] = {
-               "v0",         "b4",         "off_t",        "va_list",      "float",        "double",       "float_t",      "double_t",
+       character * types [] = {
+               "v0",         "boolean",         "off_t",        "va_list",      "float",        "double",       "float_t",      "double_t",
                "char",         "short",        "int",          "long",         "uchar",        "ushort",       "uint",         "ulong",
                "int8_t",       "int16_t",      "int32_t",      "int64_t",      "uint8_t",      "uint16_t",     "uint32_t",     "uint64_t",
                "signed",       "unsigned",     "size_t",       "ssize_t"
        };
 
                "char",         "short",        "int",          "long",         "uchar",        "ushort",       "uint",         "ulong",
                "int8_t",       "int16_t",      "int32_t",      "int64_t",      "uint8_t",      "uint16_t",     "uint32_t",     "uint64_t",
                "signed",       "unsigned",     "size_t",       "ssize_t"
        };
 
-       c1 * commons [] = {
+       character * commons [] = {
                "std",          "FILE",         "DIR",          "EOF",          "va_arg",       "va_start",     "va_end",       "va_copy"
        };
 
                "std",          "FILE",         "DIR",          "EOF",          "va_arg",       "va_start",     "va_end",       "va_copy"
        };
 
@@ -31,15 +31,15 @@ static v0 language_highlight_cpp (language_structure * language, syntax_structur
        syntax_define (syntax, false, false, "'",  "'",  '\\', language->character_colour, language->character_effect);
        syntax_define (syntax, false, false, "\"", "\"", '\\', language->string_colour,    language->string_effect);
 
        syntax_define (syntax, false, false, "'",  "'",  '\\', language->character_colour, language->character_effect);
        syntax_define (syntax, false, false, "\"", "\"", '\\', language->string_colour,    language->string_effect);
 
-       for (u8 word = 0; word < array_length (keywords); ++word) {
+       for (natural_64 word = 0; word < array_length (keywords); ++word) {
                syntax_define (syntax, false, true, keywords [word], separators, '\0', language->keyword_colour, language->keyword_effect);
        }
 
                syntax_define (syntax, false, true, keywords [word], separators, '\0', language->keyword_colour, language->keyword_effect);
        }
 
-       for (u8 word = 0; word < array_length (types); ++word) {
+       for (natural_64 word = 0; word < array_length (types); ++word) {
                syntax_define (syntax, false, true, types [word], separators, '\0', language->type_colour, language->type_effect);
        }
 
                syntax_define (syntax, false, true, types [word], separators, '\0', language->type_colour, language->type_effect);
        }
 
-       for (u8 word = 0; word < array_length (commons); ++word) {
+       for (natural_64 word = 0; word < array_length (commons); ++word) {
                syntax_define (syntax, false, true, commons [word], separators, '\0', language->extension_colour, language->extension_effect);
        }
 
                syntax_define (syntax, false, true, commons [word], separators, '\0', language->extension_colour, language->extension_effect);
        }
 
index c8058187f0be788bfc4fc1e3dc8ebbec4ba6b4d8..95d171951612e47910ce73834a139f39c50df4e6 100755 (executable)
@@ -1,21 +1,23 @@
-static v0 language_highlight_c (language_structure * language, syntax_structure * syntax) {
-       c1 * separators = ".,:;<=>+-*/%!&~^?|()[]{}'\" \t\r\n";
+static procedure language_highlight_c (language_structure * language, syntax_structure * syntax) {
+       character * separators = ".,:;<=>+-*/%!&~^?|()[]{}'\" \t\r\n";
 
 
-       c1 * keywords [] = {
+       character * keywords [] = {
                "register",     "volatile",     "auto",         "const",        "static",       "extern",       "if",           "else",
                "do",           "while",        "for",          "continue",     "switch",       "case",         "default",      "break",
                "enum",         "union",        "struct",       "typedef",      "goto",         "return",       "sizeof",       "inline",
                "restrict",     "true",         "false"
        };
 
                "register",     "volatile",     "auto",         "const",        "static",       "extern",       "if",           "else",
                "do",           "while",        "for",          "continue",     "switch",       "case",         "default",      "break",
                "enum",         "union",        "struct",       "typedef",      "goto",         "return",       "sizeof",       "inline",
                "restrict",     "true",         "false"
        };
 
-       c1 * types [] = {
-               "v0",         "b4",         "off_t",        "va_list",      "float",        "double",       "float_t",      "double_t",
+       character * types [] = {
+               "void",         "bool",         "off_t",        "va_list",      "float",        "double",       "float_t",      "double_t",
                "char",         "short",        "int",          "long",         "uchar",        "ushort",       "uint",         "ulong",
                "int8_t",       "int16_t",      "int32_t",      "int64_t",      "uint8_t",      "uint16_t",     "uint32_t",     "uint64_t",
                "char",         "short",        "int",          "long",         "uchar",        "ushort",       "uint",         "ulong",
                "int8_t",       "int16_t",      "int32_t",      "int64_t",      "uint8_t",      "uint16_t",     "uint32_t",     "uint64_t",
-               "signed",       "unsigned",     "size_t",       "ssize_t"
+               "integer_8",           "integer_16",           "integer",           "integer_64",           "natural_8",           "natural_16",           "natural",           "natural_64",
+               "real",           "real_64",           "v0",           "character",           "boolean",           "pstring",      "signed",       "unsigned",
+               "size_t",       "ssize_t"
        };
 
        };
 
-       c1 * commons [] = {
+       character * commons [] = {
                "null",         "NULL",         "FILE",         "DIR",          "va_arg",       "va_start",     "va_end",       "va_copy",
                "alignas",      "alignof",      "offsetof",     "typeof",       "EOF",          "ABS",          "MIN",          "MAX",
                "ARRAYSIZE",    "SWAP",         "UNUSED",       "UNREACHABLE",  "STRINGIFY",    "CONCAT",       "assert",       "nullptr",
                "null",         "NULL",         "FILE",         "DIR",          "va_arg",       "va_start",     "va_end",       "va_copy",
                "alignas",      "alignof",      "offsetof",     "typeof",       "EOF",          "ABS",          "MIN",          "MAX",
                "ARRAYSIZE",    "SWAP",         "UNUSED",       "UNREACHABLE",  "STRINGIFY",    "CONCAT",       "assert",       "nullptr",
@@ -28,15 +30,15 @@ static v0 language_highlight_c (language_structure * language, syntax_structure
        syntax_define (syntax, false, false, "'",   "'",  '\\', language->character_colour, language->character_effect);
        syntax_define (syntax, false, false, "\"",  "\"", '\\', language->string_colour,    language->string_effect);
 
        syntax_define (syntax, false, false, "'",   "'",  '\\', language->character_colour, language->character_effect);
        syntax_define (syntax, false, false, "\"",  "\"", '\\', language->string_colour,    language->string_effect);
 
-       for (u8 word = 0; word < array_length (keywords); ++word) {
+       for (natural_64 word = 0; word < array_length (keywords); ++word) {
                syntax_define (syntax, false, true, keywords [word], separators, '\0', language->keyword_colour, language->keyword_effect);
        }
 
                syntax_define (syntax, false, true, keywords [word], separators, '\0', language->keyword_colour, language->keyword_effect);
        }
 
-       for (u8 word = 0; word < array_length (types); ++word) {
+       for (natural_64 word = 0; word < array_length (types); ++word) {
                syntax_define (syntax, false, true, types [word], separators, '\0', language->type_colour, language->type_effect);
        }
 
                syntax_define (syntax, false, true, types [word], separators, '\0', language->type_colour, language->type_effect);
        }
 
-       for (u8 word = 0; word < array_length (commons); ++word) {
+       for (natural_64 word = 0; word < array_length (commons); ++word) {
                syntax_define (syntax, false, true, commons [word], separators, '\0', language->extension_colour, language->extension_effect);
        }
 
                syntax_define (syntax, false, true, commons [word], separators, '\0', language->extension_colour, language->extension_effect);
        }
 
index 146fe5b63f14a8f51c9f88262ed44b0e43cb1259..ffa6e2f291f693336c05d8b5354c16a2875b9527 100755 (executable)
@@ -1,5 +1,5 @@
-static v0 language_highlight_common (language_structure * language, syntax_structure * syntax) {
-       c1 * separators = ".,:;<=>+*-/%!&~^?|()[]{}'\"@#$` \t\r\n";
+static procedure language_highlight_common (language_structure * language, syntax_structure * syntax) {
+       character * separators = ".,:;<=>+*-/%!&~^?|()[]{}'\"@#$` \t\r\n";
 
        syntax_define (syntax, false, false, "'",  "'",  '\\', language->character_colour, language->character_effect);
        syntax_define (syntax, false, false, "\"", "\"", '\\', language->string_colour,    language->string_effect);
 
        syntax_define (syntax, false, false, "'",  "'",  '\\', language->character_colour, language->character_effect);
        syntax_define (syntax, false, false, "\"", "\"", '\\', language->string_colour,    language->string_effect);
index 030e2d8bf7738feab601e736a35601265a02617a..f59bc4bb440ecb2dcdd8e470364f63cf736e31c1 100755 (executable)
@@ -1,8 +1,8 @@
-static v0 language_highlight_d (language_structure * language, syntax_structure * syntax) {
-       c1 * separators = ".,:;<=>+-*/%!&~^?|@()[]{}'\"` \t\r\n";
+static procedure language_highlight_d (language_structure * language, syntax_structure * syntax) {
+       character * separators = ".,:;<=>+-*/%!&~^?|@()[]{}'\"` \t\r\n";
 
 
-       c1 * keywords [] = {
-               "abstract",     "alias",        "align",        "asm",          "assert",       "auto",         "body",         "b4",
+       character * keywords [] = {
+               "abstract",     "alias",        "align",        "asm",          "assert",       "auto",         "body",         "boolean",
                "break",        "byte",         "case",         "cast",         "catch",        "cdouble",      "cent",         "cfloat",
                "char",         "class",        "const",        "continue",     "creal",        "dchar",        "debug",        "default",
                "delegate",     "delete",       "deprecated",   "do",           "double",       "else",         "enum",         "export",
                "break",        "byte",         "case",         "cast",         "catch",        "cdouble",      "cent",         "cfloat",
                "char",         "class",        "const",        "continue",     "creal",        "dchar",        "debug",        "default",
                "delegate",     "delete",       "deprecated",   "do",           "double",       "else",         "enum",         "export",
@@ -17,10 +17,10 @@ static v0 language_highlight_d (language_structure * language, syntax_structure
                "v0",         "wchar",        "while",        "foreach_reverse"
        };
 
                "v0",         "wchar",        "while",        "foreach_reverse"
        };
 
-       c1 * types [] = {
+       character * types [] = {
                "byte",         "ubyte",        "short",        "ushort",       "int",          "uint",         "long",         "ulong",
                "cent",         "ucent",        "char",         "wchar",        "dchar",        "float",        "double",       "real",
                "byte",         "ubyte",        "short",        "ushort",       "int",          "uint",         "long",         "ulong",
                "cent",         "ucent",        "char",         "wchar",        "dchar",        "float",        "double",       "real",
-               "ifloat",       "idouble",      "ireal",        "cfloat",       "cdouble",      "creal",        "v0",         "b4",
+               "ifloat",       "idouble",      "ireal",        "cfloat",       "cdouble",      "creal",        "v0",         "boolean",
                "string"
        };
 
                "string"
        };
 
@@ -31,11 +31,11 @@ static v0 language_highlight_d (language_structure * language, syntax_structure
        syntax_define (syntax, false, false, "\"",  "\"", '\\', language->string_colour,    language->string_effect);
        syntax_define (syntax, false, false, "`",   "`",  '\0', language->string_colour,    language->string_effect);
 
        syntax_define (syntax, false, false, "\"",  "\"", '\\', language->string_colour,    language->string_effect);
        syntax_define (syntax, false, false, "`",   "`",  '\0', language->string_colour,    language->string_effect);
 
-       for (u8 word = 0; word < array_length (keywords); ++word) {
+       for (natural_64 word = 0; word < array_length (keywords); ++word) {
                syntax_define (syntax, false, true, keywords [word], separators, '\0', language->keyword_colour, language->keyword_effect);
        }
 
                syntax_define (syntax, false, true, keywords [word], separators, '\0', language->keyword_colour, language->keyword_effect);
        }
 
-       for (u8 word = 0; word < array_length (types); ++word) {
+       for (natural_64 word = 0; word < array_length (types); ++word) {
                syntax_define (syntax, false, true, types [word], separators, '\0', language->type_colour, language->type_effect);
        }
 
                syntax_define (syntax, false, true, types [word], separators, '\0', language->type_colour, language->type_effect);
        }
 
index 2a1e713aa242bfff064fb8d03973c277e7151668..cca50c9232851e0d92a8ce8cea8be3062bbdcce3 100755 (executable)
@@ -1,19 +1,19 @@
-static v0 language_highlight_eaxhla (language_structure * language, syntax_structure * syntax) {
-       c1 * separators = ".,+-*/[]<>=; \t\r\n";
+static procedure language_highlight_eaxhla (language_structure * language, syntax_structure * syntax) {
+       character * separators = ".,+-*/[]<>=; \t\r\n";
 
 
-       c1 * declarations [] = {
+       character * declarations [] = {
                "program",      "procedure",    "machine",      "library",      "fast",         "unix",         "begin",        "end",
                "if",           "then",         "else",         "repeat",       "break",        "continue",     "until",        "exit",
                "fastcall",     "shell",        "alias",        "macro",        "scope",        "unscope",      "use",          "include"
        };
 
                "program",      "procedure",    "machine",      "library",      "fast",         "unix",         "begin",        "end",
                "if",           "then",         "else",         "repeat",       "break",        "continue",     "until",        "exit",
                "fastcall",     "shell",        "alias",        "macro",        "scope",        "unscope",      "use",          "include"
        };
 
-       c1 * types [] = {
-               "s8",           "c16",          "s32",          "s64",          "u8",           "u16",          "u32",          "u64",
-               "f32",          "f64",          "f80",          "v0",           "c128",         "u128",         "s256",         "u256",
+       character * types [] = {
+               "integer_64",           "character6",          "s32",          "s64",          "natural_64",           "natural_86",          "u32",          "u64",
+               "f32",          "f64",          "real_640",          "v0",           "character28",         "natural_828",         "integer_1656",         "natural_1656",
                "s512",         "u512"
        };
 
                "s512",         "u512"
        };
 
-       c1 * instructions [] = {
+       character * instructions [] = {
                "jnpe",         "jpo",          "jnpo",         "jpe",          "jnb",           "jae",          "jnbe",          "ja",
                "jna",          "jbe",          "jnae",         "jb",           "jnl",           "jge",          "jnle",          "jg",
                "jng",          "jle",          "jnge",         "jl",           "cmovng",        "cmovle",       "cmovnge",       "cmovl",
                "jnpe",         "jpo",          "jnpo",         "jpe",          "jnb",           "jae",          "jnbe",          "ja",
                "jna",          "jbe",          "jnae",         "jb",           "jnl",           "jge",          "jnle",          "jg",
                "jng",          "jle",          "jnge",         "jl",           "cmovng",        "cmovle",       "cmovnge",       "cmovl",
@@ -34,7 +34,7 @@ static v0 language_highlight_eaxhla (language_structure * language, syntax_struc
                "bswap",        "bsf",          "bsr",          "loop",         "loope",         "loopne"
        };
 
                "bswap",        "bsf",          "bsr",          "loop",         "loope",         "loopne"
        };
 
-       c1 * registers [] = {
+       character * registers [] = {
                "rax",          "rcx",          "rdx",          "rbx",          "rsp",          "rbp",          "rsi",          "rdi",
                "r8",           "r9",           "r10",          "r11",          "r12",          "r13",          "r14",          "r15",
                "eax",          "ecx",          "edx",          "ebx",          "esp",          "ebp",          "esi",          "edi",
                "rax",          "rcx",          "rdx",          "rbx",          "rsp",          "rbp",          "rsi",          "rdi",
                "r8",           "r9",           "r10",          "r11",          "r12",          "r13",          "r14",          "r15",
                "eax",          "ecx",          "edx",          "ebx",          "esp",          "ebp",          "esi",          "edi",
@@ -45,7 +45,7 @@ static v0 language_highlight_eaxhla (language_structure * language, syntax_struc
                "r8b",          "r9b",          "r10b",         "r11b",         "r12b",         "r13b",         "r14b",         "r15b"
        };
 
                "r8b",          "r9b",          "r10b",         "r11b",         "r12b",         "r13b",         "r14b",         "r15b"
        };
 
-       s4 word;
+       integer word;
 
        syntax_define (syntax, false, false, "#",   "\n", '\0', language->comment_colour,   language->comment_effect);
        syntax_define (syntax, false, false, "---", "\n", '\0', language->comment_colour,   language->comment_effect);
 
        syntax_define (syntax, false, false, "#",   "\n", '\0', language->comment_colour,   language->comment_effect);
        syntax_define (syntax, false, false, "---", "\n", '\0', language->comment_colour,   language->comment_effect);
@@ -53,19 +53,19 @@ static v0 language_highlight_eaxhla (language_structure * language, syntax_struc
        syntax_define (syntax, false, false, "'",   "'",  '\\', language->character_colour, language->character_effect);
        syntax_define (syntax, false, false, "\"",  "\"", '\\', language->string_colour,    language->string_effect);
 
        syntax_define (syntax, false, false, "'",   "'",  '\\', language->character_colour, language->character_effect);
        syntax_define (syntax, false, false, "\"",  "\"", '\\', language->string_colour,    language->string_effect);
 
-       for (u8 word = 0; word < array_length (declarations); ++word) {
+       for (natural_64 word = 0; word < array_length (declarations); ++word) {
                syntax_define (syntax, false, true, declarations [word], separators, '\0', language->keyword_colour, language->keyword_effect);
        }
 
                syntax_define (syntax, false, true, declarations [word], separators, '\0', language->keyword_colour, language->keyword_effect);
        }
 
-       for (u8 word = 0; word < array_length (types); ++word) {
+       for (natural_64 word = 0; word < array_length (types); ++word) {
                syntax_define (syntax, false, true, types [word], separators, '\0', language->type_colour, language->type_effect);
        }
 
                syntax_define (syntax, false, true, types [word], separators, '\0', language->type_colour, language->type_effect);
        }
 
-       for (u8 word = 0; word < array_length (instructions); ++word) {
+       for (natural_64 word = 0; word < array_length (instructions); ++word) {
                syntax_define (syntax, false, true, instructions [word], " \t\n", '\0', language->extension_colour, language->extension_effect);
        }
 
                syntax_define (syntax, false, true, instructions [word], " \t\n", '\0', language->extension_colour, language->extension_effect);
        }
 
-       for (u8 word = 0; word < array_length (registers); ++word) {
+       for (natural_64 word = 0; word < array_length (registers); ++word) {
                syntax_define (syntax, false, true, registers [word], separators, '\0', language->register_colour, language->register_effect);
        }
 
                syntax_define (syntax, false, true, registers [word], separators, '\0', language->register_colour, language->register_effect);
        }
 
index ce1d588f805fcea8499261ff27b220c5a2c10ad6..044d6b6d2e98781b22e1931a13e338daebbef992 100755 (executable)
@@ -1,12 +1,12 @@
-static v0 language_highlight_flat (language_structure * language, syntax_structure * syntax) {
-       c1 * separators = ".,+-=:;(){}[]%$<> \t\r\n";
+static procedure language_highlight_flat (language_structure * language, syntax_structure * syntax) {
+       character * separators = ".,+-=:;(){}[]%$<> \t\r\n";
 
 
-       c1 * declarations [] = {
+       character * declarations [] = {
                "format",       "executable",   "readable",     "writable",     "segment",      "sector",       "entry",        "macro",
                "db",           "dw",           "dd",           "dq",           "rb",           "rw",           "rd",           "rq"
        };
 
                "format",       "executable",   "readable",     "writable",     "segment",      "sector",       "entry",        "macro",
                "db",           "dw",           "dd",           "dq",           "rb",           "rw",           "rd",           "rq"
        };
 
-       c1 * instructions [] = {
+       character * instructions [] = {
                "mov",          "movabs",       "movapd",       "movaps",       "movebe",       "movsd",        "movsx",        "movzx",
                "movsxd",       "movd",         "movq",         "movs",         "movsb",        "movsw",        "movsd",        "movsq",
                "cmovmp",       "cmovrcxz",     "cmovc",        "cmovnc",       "cmove",        "cmovne",       "cmovz",        "cmovnz",
                "mov",          "movabs",       "movapd",       "movaps",       "movebe",       "movsd",        "movsx",        "movzx",
                "movsxd",       "movd",         "movq",         "movs",         "movsb",        "movsw",        "movsd",        "movsq",
                "cmovmp",       "cmovrcxz",     "cmovc",        "cmovnc",       "cmove",        "cmovne",       "cmovz",        "cmovnz",
@@ -26,7 +26,7 @@ static v0 language_highlight_flat (language_structure * language, syntax_structu
                "rep",          "repe",         "repz",         "repne",        "repnz",        "loop",         "loope",        "loopne"
        };
 
                "rep",          "repe",         "repz",         "repne",        "repnz",        "loop",         "loope",        "loopne"
        };
 
-       c1 * registers [] = {
+       character * registers [] = {
                "rax",          "rcx",          "rdx",          "rbx",          "rsp",          "rbp",          "rsi",          "rdi",
                "r8",           "r9",           "r10",          "r11",          "r12",          "r13",          "r14",          "r15",
                "eax",          "ecx",          "edx",          "ebx",          "esp",          "ebp",          "esi",          "edi",
                "rax",          "rcx",          "rdx",          "rbx",          "rsp",          "rbp",          "rsi",          "rdi",
                "r8",           "r9",           "r10",          "r11",          "r12",          "r13",          "r14",          "r15",
                "eax",          "ecx",          "edx",          "ebx",          "esp",          "ebp",          "esi",          "edi",
@@ -38,21 +38,21 @@ static v0 language_highlight_flat (language_structure * language, syntax_structu
                "ah",           "ch",           "dh",           "bh"
        };
 
                "ah",           "ch",           "dh",           "bh"
        };
 
-       s4 word;
+       integer word;
 
        syntax_define (syntax, false, false, ";",  "\n", '\0', language->comment_colour, language->comment_effect);
        syntax_define (syntax, false, false, "'",  "'",  '\\', language->string_colour,  language->string_effect);
        syntax_define (syntax, false, false, "\"", "\"", '\\', language->string_colour,  language->string_effect);
 
 
        syntax_define (syntax, false, false, ";",  "\n", '\0', language->comment_colour, language->comment_effect);
        syntax_define (syntax, false, false, "'",  "'",  '\\', language->string_colour,  language->string_effect);
        syntax_define (syntax, false, false, "\"", "\"", '\\', language->string_colour,  language->string_effect);
 
-       for (u8 word = 0; word < array_length (declarations); ++word) {
+       for (natural_64 word = 0; word < array_length (declarations); ++word) {
                syntax_define (syntax, false, true, declarations [word], separators, '\0', language->keyword_colour, language->keyword_effect);
        }
 
                syntax_define (syntax, false, true, declarations [word], separators, '\0', language->keyword_colour, language->keyword_effect);
        }
 
-       for (u8 word = 0; word < array_length (instructions); ++word) {
+       for (natural_64 word = 0; word < array_length (instructions); ++word) {
                syntax_define (syntax, false, true, instructions [word], " \t", '\0', language->extension_colour, language->extension_effect);
        }
 
                syntax_define (syntax, false, true, instructions [word], " \t", '\0', language->extension_colour, language->extension_effect);
        }
 
-       for (u8 word = 0; word < array_length (registers); ++word) {
+       for (natural_64 word = 0; word < array_length (registers); ++word) {
                syntax_define (syntax, false, true, registers [word], separators, '\0', language->register_colour, language->register_effect);
        }
 
                syntax_define (syntax, false, true, registers [word], separators, '\0', language->register_colour, language->register_effect);
        }
 
index b598a9fb450ecbf431cef0c22852cffb3f32689f..2de4e68cf2acc2046a2ddf1ed914cc6bf1230a89 100755 (executable)
@@ -1,7 +1,7 @@
-static v0 language_highlight_fortran (language_structure * language, syntax_structure * syntax) {
-       c1 * separators = ",:<=>+-*/&()[]\"\' \t\r\n";
+static procedure language_highlight_fortran (language_structure * language, syntax_structure * syntax) {
+       character * separators = ",:<=>+-*/&()[]\"\' \t\r\n";
 
 
-       c1 * keywords [] = {
+       character * keywords [] = {
                "allocatable",  "allocate",     "associate",    "backspace",    "block",        "call",         "case",         "common",
                "contains",     "cycle",        "data",         "deallocate",   "d0",           "do",           "else",         "elseif",
                "end",          "enddo",        "endfile",      "endif",        "entry",        "equivalence",  "exit",         "external",
                "allocatable",  "allocate",     "associate",    "backspace",    "block",        "call",         "case",         "common",
                "contains",     "cycle",        "data",         "deallocate",   "d0",           "do",           "else",         "elseif",
                "end",          "enddo",        "endfile",      "endif",        "entry",        "equivalence",  "exit",         "external",
@@ -12,11 +12,11 @@ static v0 language_highlight_fortran (language_structure * language, syntax_stru
                "then",         "to",           "type",         "use",          "where",        "write"
        };
 
                "then",         "to",           "type",         "use",          "where",        "write"
        };
 
-       c1 * types [] = {
-               "character",    "integer",      "logical",      "real",         "complex"
+       character * types [] = {
+               "character",    "integer",      "boolean",      "real",         "complex"
        };
 
        };
 
-       c1 * commons [] = {
+       character * commons [] = {
                ".and.",        ".or.",         ".not.",        ".true.",       ".false.",      "in",           "out",          "len",
                "dimension",    "modulo",       "advance"
        };
                ".and.",        ".or.",         ".not.",        ".true.",       ".false.",      "in",           "out",          "len",
                "dimension",    "modulo",       "advance"
        };
@@ -25,15 +25,15 @@ static v0 language_highlight_fortran (language_structure * language, syntax_stru
        syntax_define (syntax, false, false, "'",  "'",  '\\', language->character_colour, language->character_effect);
        syntax_define (syntax, false, false, "\"", "\"", '\\', language->string_colour,    language->string_effect);
 
        syntax_define (syntax, false, false, "'",  "'",  '\\', language->character_colour, language->character_effect);
        syntax_define (syntax, false, false, "\"", "\"", '\\', language->string_colour,    language->string_effect);
 
-       for (u8 word = 0; word < array_length (keywords); ++word) {
+       for (natural_64 word = 0; word < array_length (keywords); ++word) {
                syntax_define (syntax, false, true, keywords [word], separators, '\0', language->keyword_colour, language->keyword_effect);
        }
 
                syntax_define (syntax, false, true, keywords [word], separators, '\0', language->keyword_colour, language->keyword_effect);
        }
 
-       for (u8 word = 0; word < array_length (commons); ++word) {
+       for (natural_64 word = 0; word < array_length (commons); ++word) {
                syntax_define (syntax, false, true, commons [word], separators, '\0', language->processor_colour, language->processor_effect);
        }
 
                syntax_define (syntax, false, true, commons [word], separators, '\0', language->processor_colour, language->processor_effect);
        }
 
-       for (u8 word = 0; word < array_length (types); ++word) {
+       for (natural_64 word = 0; word < array_length (types); ++word) {
                syntax_define (syntax, false, true, types [word], separators, '\0', language->type_colour, language->type_effect);
        }
 
                syntax_define (syntax, false, true, types [word], separators, '\0', language->type_colour, language->type_effect);
        }
 
index 0c6d50e02c5deaaff52d2dac4ead5789ee8b7b49..967b960ef09b0554fdb4472dfdf4756e30b15892 100755 (executable)
@@ -1,20 +1,20 @@
-static v0 language_highlight_go (language_structure * language, syntax_structure * syntax) {
-       c1 * separators = ".,:;<=>+-*/%!&~^?|()[]{}'\"` \t\r\n";
+static procedure language_highlight_go (language_structure * language, syntax_structure * syntax) {
+       character * separators = ".,:;<=>+-*/%!&~^?|()[]{}'\"` \t\r\n";
 
 
-       c1 * keywords [] = {
+       character * keywords [] = {
                "break",        "default",      "func",         "interface",    "select",       "case",         "defer",        "go",
                "struct",       "else",         "goto",         "package",      "switch",       "const",        "var",          "for",
                "fallthrough",  "if",           "range",        "type",         "continue",     "import",       "return"
        };
 
                "break",        "default",      "func",         "interface",    "select",       "case",         "defer",        "go",
                "struct",       "else",         "goto",         "package",      "switch",       "const",        "var",          "for",
                "fallthrough",  "if",           "range",        "type",         "continue",     "import",       "return"
        };
 
-       c1 * types [] = {
+       character * types [] = {
                "map",          "uint",         "int",          "uintptr",      "uint8",        "uint16",       "uint32",       "uint64",
                "int8",         "int16",        "int32",        "int64",        "float32",      "float64",      "complex64",    "complex128",
                "map",          "uint",         "int",          "uintptr",      "uint8",        "uint16",       "uint32",       "uint64",
                "int8",         "int16",        "int32",        "int64",        "float32",      "float64",      "complex64",    "complex128",
-               "byte",         "rune",         "string",       "chan",         "b4"
+               "byte",         "rune",         "string",       "chan",         "boolean"
 
        };
 
 
        };
 
-       c1 * commons [] = {
+       character * commons [] = {
                "true",         "false",        "nil",          "err"
        };
 
                "true",         "false",        "nil",          "err"
        };
 
@@ -24,15 +24,15 @@ static v0 language_highlight_go (language_structure * language, syntax_structure
        syntax_define (syntax, false, false, "\"",  "\"", '\\', language->string_colour,    language->string_effect);
        syntax_define (syntax, false, false, "`",   "`",  '\0', language->string_colour,    language->string_effect);
 
        syntax_define (syntax, false, false, "\"",  "\"", '\\', language->string_colour,    language->string_effect);
        syntax_define (syntax, false, false, "`",   "`",  '\0', language->string_colour,    language->string_effect);
 
-       for (u8 word = 0; word < array_length (keywords); ++word) {
+       for (natural_64 word = 0; word < array_length (keywords); ++word) {
                syntax_define (syntax, false, true, keywords [word], separators, '\0', language->keyword_colour, language->keyword_effect);
        }
 
                syntax_define (syntax, false, true, keywords [word], separators, '\0', language->keyword_colour, language->keyword_effect);
        }
 
-       for (u8 word = 0; word < array_length (types); ++word) {
+       for (natural_64 word = 0; word < array_length (types); ++word) {
                syntax_define (syntax, false, true, types [word], separators, '\0', language->type_colour, language->type_effect);
        }
 
                syntax_define (syntax, false, true, types [word], separators, '\0', language->type_colour, language->type_effect);
        }
 
-       for (u8 word = 0; word < array_length (commons); ++word) {
+       for (natural_64 word = 0; word < array_length (commons); ++word) {
                syntax_define (syntax, false, true, commons [word], separators, '\0', language->extension_colour, language->extension_effect);
        }
 
                syntax_define (syntax, false, true, commons [word], separators, '\0', language->extension_colour, language->extension_effect);
        }
 
index f2d45c5bee06fd9d1db6216695af37a7015c63c9..537ce499cb07268fd2acee3114fd24fade2d5d4c 100755 (executable)
@@ -1,13 +1,13 @@
-static v0 language_highlight_haskell (language_structure * language, syntax_structure * syntax) {
-       c1 * separators = ".,:;<=>+-*/%!@#$&~^?|()[]{}'\" \t\r\n";
+static procedure language_highlight_haskell (language_structure * language, syntax_structure * syntax) {
+       character * separators = ".,:;<=>+-*/%!@#$&~^?|()[]{}'\" \t\r\n";
 
 
-       c1 * keywords [] = {
+       character * keywords [] = {
                "case",         "class",        "data",         "deriving",     "do",           "else",         "if",           "import",
                "in",           "infix",        "infixl",       "infixr",       "instance",     "let",          "of",           "module",
                "newtype",      "then",         "type",         "where"
        };
 
                "case",         "class",        "data",         "deriving",     "do",           "else",         "if",           "import",
                "in",           "infix",        "infixl",       "infixr",       "instance",     "let",          "of",           "module",
                "newtype",      "then",         "type",         "where"
        };
 
-       c1 * types [] = {
+       character * types [] = {
                "Int",          "Integer",      "String",       "Char",         "Float",        "Boolean"
        };
 
                "Int",          "Integer",      "String",       "Char",         "Float",        "Boolean"
        };
 
@@ -16,11 +16,11 @@ static v0 language_highlight_haskell (language_structure * language, syntax_stru
        syntax_define (syntax, false, false, "'",   "'",  '\\', language->character_colour, language->character_effect);
        syntax_define (syntax, false, false, "\"",  "\"", '\\', language->string_colour,    language->string_effect);
 
        syntax_define (syntax, false, false, "'",   "'",  '\\', language->character_colour, language->character_effect);
        syntax_define (syntax, false, false, "\"",  "\"", '\\', language->string_colour,    language->string_effect);
 
-       for (u8 word = 0; word < array_length (keywords); ++word) {
+       for (natural_64 word = 0; word < array_length (keywords); ++word) {
                syntax_define (syntax, false, true, keywords [word], separators, '\0', language->keyword_colour, language->keyword_effect);
        }
 
                syntax_define (syntax, false, true, keywords [word], separators, '\0', language->keyword_colour, language->keyword_effect);
        }
 
-       for (u8 word = 0; word < array_length (types); ++word) {
+       for (natural_64 word = 0; word < array_length (types); ++word) {
                syntax_define (syntax, false, true, types [word], separators, '\0', language->type_colour, language->type_effect);
        }
 
                syntax_define (syntax, false, true, types [word], separators, '\0', language->type_colour, language->type_effect);
        }
 
index 6062d56491c67a1958128e047433d23bb9113de8..b9cdb1d1988147a2c73954ce40f8cdc13e724cb3 100755 (executable)
@@ -1,21 +1,21 @@
-static v0 language_highlight_holy_c (language_structure * language, syntax_structure * syntax) {
-       c1 * separators = ".,:;<=>+-*/%!&~^|()[]{}'\" \t\r\n";
+static procedure language_highlight_holy_c (language_structure * language, syntax_structure * syntax) {
+       character * separators = ".,:;<=>+-*/%!&~^|()[]{}'\" \t\r\n";
 
 
-       c1 * keywords [] = {
+       character * keywords [] = {
                "static",       "extern",       "import",       "auto",         "public",       "sizeof",       "asm",          "no_warn",
                "do",           "while",        "for",          "switch",       "case",         "default",      "start",        "end",
                "if",           "else",         "goto",         "return",       "break",        "try",          "catch",        "throw",
                "enum",         "union",        "class"
        };
 
                "static",       "extern",       "import",       "auto",         "public",       "sizeof",       "asm",          "no_warn",
                "do",           "while",        "for",          "switch",       "case",         "default",      "start",        "end",
                "if",           "else",         "goto",         "return",       "break",        "try",          "catch",        "throw",
                "enum",         "union",        "class"
        };
 
-       c1 * types [] = {
+       character * types [] = {
                "U8",           "U16",          "U32",          "U64",          "I8",           "I16",          "I32",          "I64",
                "U0",           "I0",           "F64",          "Bool"
        };
 
                "U8",           "U16",          "U32",          "U64",          "I8",           "I16",          "I32",          "I64",
                "U0",           "I0",           "F64",          "Bool"
        };
 
-       c1 * commons [] = {
+       character * commons [] = {
                "_extern",      "_intern",      "_import",      "lastclass",    "offset",       "defined",      "lock",         "interrupt",
                "_extern",      "_intern",      "_import",      "lastclass",    "offset",       "defined",      "lock",         "interrupt",
-               "reg",          "noreg",        "argpop",       "noargpop",     "haserrcode",   "NULL"
+               "reg",          "noreg",        "argpop",       "noargpop",     "haserrcode",   "NULL",         "TRUE",         "FALSE"
        };
 
        syntax_define (syntax, false, false, "/*",  "*/", '\0', language->comment_colour,   language->comment_effect);
        };
 
        syntax_define (syntax, false, false, "/*",  "*/", '\0', language->comment_colour,   language->comment_effect);
@@ -24,15 +24,15 @@ static v0 language_highlight_holy_c (language_structure * language, syntax_struc
        syntax_define (syntax, false, false, "'",   "'",  '\\', language->character_colour, language->character_effect);
        syntax_define (syntax, false, false, "\"",  "\"", '\\', language->string_colour,    language->string_effect);
 
        syntax_define (syntax, false, false, "'",   "'",  '\\', language->character_colour, language->character_effect);
        syntax_define (syntax, false, false, "\"",  "\"", '\\', language->string_colour,    language->string_effect);
 
-       for (u8 word = 0; word < array_length (keywords); ++word) {
+       for (natural_64 word = 0; word < array_length (keywords); ++word) {
                syntax_define (syntax, false, true, keywords [word], separators, '\0', language->keyword_colour, language->keyword_effect);
        }
 
                syntax_define (syntax, false, true, keywords [word], separators, '\0', language->keyword_colour, language->keyword_effect);
        }
 
-       for (u8 word = 0; word < array_length (types); ++word) {
+       for (natural_64 word = 0; word < array_length (types); ++word) {
                syntax_define (syntax, false, true, types [word], separators, '\0', language->type_colour, language->type_effect);
        }
 
                syntax_define (syntax, false, true, types [word], separators, '\0', language->type_colour, language->type_effect);
        }
 
-       for (u8 word = 0; word < array_length (commons); ++word) {
+       for (natural_64 word = 0; word < array_length (commons); ++word) {
                syntax_define (syntax, false, true, commons [word], separators, '\0', language->extension_colour, language->extension_effect);
        }
 
                syntax_define (syntax, false, true, commons [word], separators, '\0', language->extension_colour, language->extension_effect);
        }
 
index 0a960ef4f7ee46fb5d065af5a34d91abd6a8faf7..ca22057342050e850cce7a99e82f90aadbbe2a4e 100755 (executable)
@@ -1,17 +1,17 @@
-static v0 language_highlight_lua (language_structure * language, syntax_structure * syntax) {
-       c1 * separators = ".,:;<=>+-*/%~^#|()[]{}'\" \t\r\n";
+static procedure language_highlight_lua (language_structure * language, syntax_structure * syntax) {
+       character * separators = ".,:;<=>+-*/%~^#|()[]{}'\" \t\r\n";
 
 
-       c1 * keywords [] = {
+       character * keywords [] = {
                "and",          "break",        "do",           "else",         "elseif",       "end",          "false",        "for",
                "function",     "if",           "in",           "local",        "nil",          "not",          "or",           "until",
                "repeat",       "return",       "then",         "true",         "while"
        };
 
                "and",          "break",        "do",           "else",         "elseif",       "end",          "false",        "for",
                "function",     "if",           "in",           "local",        "nil",          "not",          "or",           "until",
                "repeat",       "return",       "then",         "true",         "while"
        };
 
-       c1 * types [] = {
-               "b4ean",      "number",       "string",       "userdata",     "function",     "thread",       "table"
+       character * types [] = {
+               "booleanean",      "number",       "string",       "userdata",     "function",     "thread",       "table"
        };
 
        };
 
-       c1 * commons [] = {
+       character * commons [] = {
                "require",      "print",        "seek",         "dofile",       "loadfile",     "assert",       "rawset",       "rawget",
                "setfenv",      "pairs",        "ipairs",       "tonumber",     "tostring",     "foreach",      "setn",         "getn",
                "insert",       "concat",       "sort",         "remove",       "abs",          "ceil",         "floor",        "log10",
                "require",      "print",        "seek",         "dofile",       "loadfile",     "assert",       "rawset",       "rawget",
                "setfenv",      "pairs",        "ipairs",       "tonumber",     "tostring",     "foreach",      "setn",         "getn",
                "insert",       "concat",       "sort",         "remove",       "abs",          "ceil",         "floor",        "log10",
@@ -28,15 +28,15 @@ static v0 language_highlight_lua (language_structure * language, syntax_structur
        syntax_define (syntax, false, false, "'",     "'",  '\\', language->character_colour, language->character_effect);
        syntax_define (syntax, false, false, "\"",    "\"", '\\', language->string_colour,    language->string_effect);
 
        syntax_define (syntax, false, false, "'",     "'",  '\\', language->character_colour, language->character_effect);
        syntax_define (syntax, false, false, "\"",    "\"", '\\', language->string_colour,    language->string_effect);
 
-       for (u8 word = 0; word < array_length (keywords); ++word) {
+       for (natural_64 word = 0; word < array_length (keywords); ++word) {
                syntax_define (syntax, false, true, keywords [word], separators, '\0', language->keyword_colour, language->keyword_effect);
        }
 
                syntax_define (syntax, false, true, keywords [word], separators, '\0', language->keyword_colour, language->keyword_effect);
        }
 
-       for (u8 word = 0; word < array_length (types); ++word) {
+       for (natural_64 word = 0; word < array_length (types); ++word) {
                syntax_define (syntax, false, true, types [word], separators, '\0', language->type_colour, language->type_effect);
        }
 
                syntax_define (syntax, false, true, types [word], separators, '\0', language->type_colour, language->type_effect);
        }
 
-       for (u8 word = 0; word < array_length (commons); ++word) {
+       for (natural_64 word = 0; word < array_length (commons); ++word) {
                syntax_define (syntax, false, true, commons [word], separators, '\0', language->extension_colour, language->extension_effect);
        }
 
                syntax_define (syntax, false, true, commons [word], separators, '\0', language->extension_colour, language->extension_effect);
        }
 
index 1b3902a6abcadd550ae1538c2ae4870c1411cc09..16cec4bf325b5455475c52e39d9ab403770cac12 100755 (executable)
@@ -1,7 +1,7 @@
-static v0 language_highlight_pascal (language_structure * language, syntax_structure * syntax) {
-       c1 * separators = ".,:;<=>+-*/&@#$%^()[] \t\r\n";
+static procedure language_highlight_pascal (language_structure * language, syntax_structure * syntax) {
+       character * separators = ".,:;<=>+-*/&@#$%^()[] \t\r\n";
 
 
-       c1 * keywords [] = {
+       character * keywords [] = {
                "absolute",     "and",          "array",        "asm",          "begin",        "case",         "const",        "constructor",
                "destructor",   "div",          "do",           "downto",       "else",         "end",          "file",         "for",
                "function",     "goto",         "if",           "in",           "inherited",    "inline",       "interface",    "xor",
                "absolute",     "and",          "array",        "asm",          "begin",        "case",         "const",        "constructor",
                "destructor",   "div",          "do",           "downto",       "else",         "end",          "file",         "for",
                "function",     "goto",         "if",           "in",           "inherited",    "inline",       "interface",    "xor",
@@ -16,7 +16,7 @@ static v0 language_highlight_pascal (language_structure * language, syntax_struc
        syntax_define (syntax, false, false, "{",  "}",  '\0', language->comment_colour, language->comment_effect);
        syntax_define (syntax, false, false, "'",  "'",  '#',  language->string_colour,  language->string_effect);
 
        syntax_define (syntax, false, false, "{",  "}",  '\0', language->comment_colour, language->comment_effect);
        syntax_define (syntax, false, false, "'",  "'",  '#',  language->string_colour,  language->string_effect);
 
-       for (u8 word = 0; word < array_length (keywords); ++word) {
+       for (natural_64 word = 0; word < array_length (keywords); ++word) {
                syntax_define (syntax, false, true, keywords [word], separators, '\0', language->keyword_colour, language->keyword_effect);
        }
 
                syntax_define (syntax, false, true, keywords [word], separators, '\0', language->keyword_colour, language->keyword_effect);
        }
 
index 3c06a80940e9de964d67256f0657d4a910d9478c..188ffd3b761e12f544c249014e1610e3ddc96b38 100755 (executable)
@@ -1,7 +1,7 @@
-static v0 language_highlight_python (language_structure * language, syntax_structure * syntax) {
-       c1 * separators = ".,:;<=>+-*/%!&~^?|()[]{}'\" \t\r\n";
+static procedure language_highlight_python (language_structure * language, syntax_structure * syntax) {
+       character * separators = ".,:;<=>+-*/%!&~^?|()[]{}'\" \t\r\n";
 
 
-       c1 * keywords [] = {
+       character * keywords [] = {
                "and",          "as",           "assert",       "break",        "class",        "continue",     "def",          "del",
                "elif",         "else",         "except",       "False",        "finally",      "for",          "from",         "global",
                "if",           "import",       "in",           "is",           "labmda",       "None",         "nonlocal",     "not",
                "and",          "as",           "assert",       "break",        "class",        "continue",     "def",          "del",
                "elif",         "else",         "except",       "False",        "finally",      "for",          "from",         "global",
                "if",           "import",       "in",           "is",           "labmda",       "None",         "nonlocal",     "not",
@@ -9,8 +9,8 @@ static v0 language_highlight_python (language_structure * language, syntax_struc
                "yield",        "async",        "await"
        };
 
                "yield",        "async",        "await"
        };
 
-       c1 * commons [] = {
-               "abs",          "all",          "any",          "apply",        "ascii",        "basestring",   "bin",          "b4",
+       character * commons [] = {
+               "abs",          "all",          "any",          "apply",        "ascii",        "basestring",   "bin",          "boolean",
                "breakpoint",   "buffer",       "bytearray",    "bytes",        "callable",     "chr",          "classmethod",  "cmp",
                "coerce",       "compile",      "complex",      "copyright",    "credits",      "delattr",      "dict",         "dir",
                "divmod",       "enumerate",    "eval",         "execfile",     "exit",         "file",         "filter",       "float",
                "breakpoint",   "buffer",       "bytearray",    "bytes",        "callable",     "chr",          "classmethod",  "cmp",
                "coerce",       "compile",      "complex",      "copyright",    "credits",      "delattr",      "dict",         "dir",
                "divmod",       "enumerate",    "eval",         "execfile",     "exit",         "file",         "filter",       "float",
@@ -29,11 +29,11 @@ static v0 language_highlight_python (language_structure * language, syntax_struc
        syntax_define (syntax, false, false, "'",       "'",      '\\', language->character_colour, language->character_effect);
        syntax_define (syntax, false, false, "\"",      "\"",     '\\', language->string_colour,    language->string_effect);
 
        syntax_define (syntax, false, false, "'",       "'",      '\\', language->character_colour, language->character_effect);
        syntax_define (syntax, false, false, "\"",      "\"",     '\\', language->string_colour,    language->string_effect);
 
-       for (u8 word = 0; word < array_length (keywords); ++word) {
+       for (natural_64 word = 0; word < array_length (keywords); ++word) {
                syntax_define (syntax, false, true, keywords [word], separators, '\0', language->keyword_colour, language->keyword_effect);
        }
 
                syntax_define (syntax, false, true, keywords [word], separators, '\0', language->keyword_colour, language->keyword_effect);
        }
 
-       for (u8 word = 0; word < array_length (commons); ++word) {
+       for (natural_64 word = 0; word < array_length (commons); ++word) {
                syntax_define (syntax, false, true, commons [word], separators, '\0', language->extension_colour, language->extension_effect);
        }
 
                syntax_define (syntax, false, true, commons [word], separators, '\0', language->extension_colour, language->extension_effect);
        }
 
index 16f0507872304ac3808d69f977928412ee978cd0..f187721c374d684b804b81e6878989f8adada62a 100755 (executable)
@@ -1,7 +1,7 @@
-static v0 language_highlight_valgrind (language_structure * language, syntax_structure * syntax) {
-       c1 * separators = ".,:;<=>+-*/%!&~^?|@#$()[]{}'\" \t\r\n";
+static procedure language_highlight_valgrind (language_structure * language, syntax_structure * syntax) {
+       character * separators = ".,:;<=>+-*/%!&~^?|@#$()[]{}'\" \t\r\n";
 
 
-       c1 * titles [] = {
+       character * titles [] = {
                "HEAP",         "LEAK",         "ERROR",        "SUMMARY"
        };
 
                "HEAP",         "LEAK",         "ERROR",        "SUMMARY"
        };
 
@@ -10,7 +10,7 @@ static v0 language_highlight_valgrind (language_structure * language, syntax_str
        syntax_define (syntax, false, false, "(",   ")",  '\0', language->lowercase_colour, language->lowercase_effect);
        syntax_define (syntax, false, false, "0x",  ":",  '\0', language->string_colour,    language->string_effect);
 
        syntax_define (syntax, false, false, "(",   ")",  '\0', language->lowercase_colour, language->lowercase_effect);
        syntax_define (syntax, false, false, "0x",  ":",  '\0', language->string_colour,    language->string_effect);
 
-       for (u8 word = 0; word < array_length (titles); ++word) {
+       for (natural_64 word = 0; word < array_length (titles); ++word) {
                syntax_define (syntax, false, true, titles [word], separators, '\0', language->fatal_colour, language->fatal_effect);
        }
 
                syntax_define (syntax, false, true, titles [word], separators, '\0', language->fatal_colour, language->fatal_effect);
        }
 
diff --git a/xaptor b/xaptor
index 68c322ecc7e50f603d77ca1f7d17bc13baf43320..b07129ecd22cb8e85b456f364c0b046e9a6ef448 100755 (executable)
Binary files a/xaptor and b/xaptor differ
index 680c7102ee3cd30aad82032fa69b4c1bb4648a23..a3be5d2524e58096af6a0e5cd13981cdbf28b747 100644 (file)
--- a/xaptor.c
+++ b/xaptor.c
@@ -1,42 +1,62 @@
-#define use_fatal_failure
+//~#define use_fatal_failure
 #define use_png_library
 #define use_png_library
-#define use_raptor_renderer
+//~#define use_raptor_renderer
+#define use_opengl_renderer
 //~#define use_common_renderer
 //~#define use_common_renderer
-//~#define use_opengl_renderer
 //~#define use_vulkan_renderer
 
 #include <xolatile/xtandard.h>
 #include <xolatile/xormat.h>
 #include <xolatile/xross.h>
 #include <xolatile/xui.h>
 //~#define use_vulkan_renderer
 
 #include <xolatile/xtandard.h>
 #include <xolatile/xormat.h>
 #include <xolatile/xross.h>
 #include <xolatile/xui.h>
+#include <xolatile/xenu.h>
 
 
-s4 main (v0) {
-       cross_structure * cross = cross_initialize (30, 3);
-       ui_structure    * ui    = ui_initialize    (cross);
+integer main (none) {
+       //~cross_structure * cross = cross_initialize (30, 3);
+       cross_structure * cross = cross_initialize (30, 3, false, 1024 * 512, 512);
+       ui_structure    * ui    = ui_initialize    (cross, 1);
 
 
-       cross_configure (cross, 640, 480, "Xaptor - File Manager");
+       menu_structure * main_menu = menu_create_root (menu_layout_vertical, menu_type_window, 48);
 
 
-       while (cross->active == true) {
-               u4 offset = 48;
+       menu_append (main_menu, menu_create_button (menu_layout_horizontal, menu_create_string ("New Game",         0, 1.0f, 0xff7777ff), menu_create_sprite (345, 1.0f, 0xff0000ff), 12));
+       menu_append (main_menu, menu_create_button (menu_layout_horizontal, menu_create_string ("Load Game Please", 1, 1.5f, 0x77ff77ff), null, 12));
+       menu_append (main_menu, menu_create_root   (menu_layout_horizontal, menu_type_frame, 12));
+       menu_append (main_menu, menu_create_button (menu_layout_horizontal, menu_create_string ("Some more stuff",  1, 2.0f, 0xffffffff), null, 12));
 
 
-               cross_synchronize (cross, 0x00000000);
+       menu_append (main_menu->array [2], menu_create_button (0, menu_create_string ("A", 1, 1.0f, ~ 0u), null, 12));
+       menu_append (main_menu->array [2], menu_create_button (0, menu_create_string ("B", 1, 1.0f, ~ 0u), null, 12));
+       menu_append (main_menu->array [2], menu_create_root   (menu_layout_vertical, menu_type_frame, 12));
+
+       menu_structure * c = main_menu->array [2];
 
 
-               ui_render_window (cross, ui, 0, 0, cross->window_width, cross->window_height);
+       menu_append (c->array [2], menu_create_button (0, menu_create_string ("Dd",     1, 1.0f, ~ 0u), null, 10));
+       menu_append (c->array [2], menu_create_root   (menu_layout_vertical, menu_type_status, 24));
+       menu_append (c->array [2], menu_create_button (0, menu_create_string ("EEEeee", 1, 1.0f, ~ 0u), null, 10));
+       menu_append (c->array [2], menu_create_button (0, menu_create_string ("FFff",   1, 1.0f, ~ 0u), null, 10));
 
 
-               ui_render_status (cross, ui, offset, offset, cross->window_width - 2 * offset, cross->window_height - 2 * offset);
+       menu_structure * d = c->array [2];
 
 
-               cross_render_string (cross, "Xaptors are coming!", 0, 2 * offset, 2 * offset, 1.5f, 0x4488ccff);
+       menu_append (d->array [1], menu_create_button (0, menu_create_string ("1",  1, 1.0f, ~ 0u), null, 12));
+       menu_append (d->array [1], menu_create_button (0, menu_create_string ("23", 1, 1.0f, ~ 0u), null, 12));
 
 
-               cross_render_string (cross, format ("%i", cross->framerate),      0, 2 * offset, 3 * offset, 1.0f, 0x4488ccff);
-               cross_render_string (cross, format ("%i", cross->global_tick),    0, 2 * offset, 4 * offset, 1.0f, 0x4488ccff);
-               cross_render_string (cross, format ("%i", cross->gameplay_tick),  0, 2 * offset, 5 * offset, 1.0f, 0x4488ccff);
-               cross_render_string (cross, format ("%i", cross->animation_tick), 0, 2 * offset, 6 * offset, 1.0f, 0x4488ccff);
-               cross_render_string (cross, format ("%i", cross->cursor_x),       0, 2 * offset, 7 * offset, 1.0f, 0x4488ccff);
-               cross_render_string (cross, format ("%i", cross->cursor_y),       0, 2 * offset, 8 * offset, 1.0f, 0x4488ccff);
+       ui_configure (cross, ui, null);
+
+       cross_configure (cross, 800, 600, "Xaptor - File Manager");
+
+       menu_configure (cross, main_menu);
+
+       while (cross->active == true) {
+               menu_center (cross, main_menu);
+
+               menu_render (cross, ui, main_menu);
 
                if (cross->signal [signal_q] == true) break;
 
                if (cross->signal [signal_q] == true) break;
+
+               cross_synchronize (cross, 0x00000000);
        }
 
        }
 
+       menu_remove (main_menu);
+
        cross = cross_deinitialize (cross);
        ui    = ui_deinitialize    (ui);
 
        cross = cross_deinitialize (cross);
        ui    = ui_deinitialize    (ui);
 
index bf975949ce328fb14a213a8966d23e89a228aba4..a4495989a3aabe932df45883100203d54c07082e 100644 (file)
--- a/xaptor.h
+++ b/xaptor.h
@@ -29,38 +29,38 @@ typedef struct {
        Atom          atom_close_button;
        Atom          atom_transparency;
 
        Atom          atom_close_button;
        Atom          atom_transparency;
 
-       b4 signal [signal_count];
-       b4 cursor [cursor_count];
-       s4  cursor_x;
-       s4  cursor_y;
-
-       u4      gameplay_framerate;
-       u4      animation_framerate;
-       u4      window_width;
-       u4      window_height;
-       b4      active;
-       u4      framerate;
-       u8     frame_time;
-       u8     frame_begin;
-       u8     frame_end;
-       u4    * framebuffer;
-       u4      global_tick;
-       u4      gameplay_tick;
-       u4      animation_tick;
-       u4      tab_width;
-       u4      sprite_count;
-       u4      font_count;
-       u4  * * sprite_data;
-       u4    * sprite_width;
-       u4    * sprite_height;
-       u4  * * font_index;
-       u4  * * font_width;
-       u4  * * font_height;
-       c1    * font_begin;
-       c1    * font_end;
+       boolean signal [signal_count];
+       boolean cursor [cursor_count];
+       integer cursor_x;
+       integer cursor_y;
+
+       natural      gameplay_framerate;
+       natural      animation_framerate;
+       natural      window_width;
+       natural      window_height;
+       boolean      active;
+       natural      framerate;
+       natural_64     frame_time;
+       natural_64     frame_begin;
+       natural_64     frame_end;
+       natural    * framebuffer;
+       natural      global_tick;
+       natural      gameplay_tick;
+       natural      animation_tick;
+       natural      tab_width;
+       natural      sprite_count;
+       natural      font_count;
+       natural  * * sprite_data;
+       natural    * sprite_width;
+       natural    * sprite_height;
+       natural  * * font_index;
+       natural  * * font_width;
+       natural  * * font_height;
+       character    * font_begin;
+       character    * font_end;
 } raptor_structure;
 
 } raptor_structure;
 
-static raptor_structure * raptor_initialize (u4 gameplay_framerate, u4 animation_framerate) {
+static raptor_structure * raptor_initialize (natural gameplay_framerate, natural animation_framerate) {
        raptor_structure * raptor = allocate (sizeof (* raptor));
 
        raptor->gameplay_framerate  = gameplay_framerate;
        raptor_structure * raptor = allocate (sizeof (* raptor));
 
        raptor->gameplay_framerate  = gameplay_framerate;
@@ -71,11 +71,11 @@ static raptor_structure * raptor_initialize (u4 gameplay_framerate, u4 animation
 }
 
 static raptor_structure * raptor_deinitialize (raptor_structure * raptor) {
 }
 
 static raptor_structure * raptor_deinitialize (raptor_structure * raptor) {
-       for (u4 index = 0; index < raptor->sprite_count; ++index) {
+       for (natural index = 0; index < raptor->sprite_count; ++index) {
                raptor->sprite_data [index] = deallocate (raptor->sprite_data [index]);
        }
 
                raptor->sprite_data [index] = deallocate (raptor->sprite_data [index]);
        }
 
-       for (u4 index = 0; index < raptor->font_count; ++index) {
+       for (natural index = 0; index < raptor->font_count; ++index) {
                raptor->font_index  [index] = deallocate (raptor->font_index  [index]);
                raptor->font_width  [index] = deallocate (raptor->font_width  [index]);
                raptor->font_height [index] = deallocate (raptor->font_height [index]);
                raptor->font_index  [index] = deallocate (raptor->font_index  [index]);
                raptor->font_width  [index] = deallocate (raptor->font_width  [index]);
                raptor->font_height [index] = deallocate (raptor->font_height [index]);
@@ -105,7 +105,7 @@ static raptor_structure * raptor_deinitialize (raptor_structure * raptor) {
        return (deallocate (raptor));
 }
 
        return (deallocate (raptor));
 }
 
-static u4 raptor_sprite_raw_import (raptor_structure * raptor, u4 * data, u4 width, u4 height) {
+static natural raptor_sprite_raw_import (raptor_structure * raptor, natural * data, natural width, natural height) {
        ++raptor->sprite_count;
 
        raptor->sprite_data   = reallocate (raptor->sprite_data,   raptor->sprite_count * sizeof (* raptor->sprite_data));
        ++raptor->sprite_count;
 
        raptor->sprite_data   = reallocate (raptor->sprite_data,   raptor->sprite_count * sizeof (* raptor->sprite_data));
@@ -119,15 +119,21 @@ static u4 raptor_sprite_raw_import (raptor_structure * raptor, u4 * data, u4 wid
        return (raptor->sprite_count - 1);
 }
 
        return (raptor->sprite_count - 1);
 }
 
-static u4 raptor_font_raw_import (raptor_structure * raptor, u4 * data, u4 image_width, c1 begin, c1 end, u4 separator_colour) {
-       u4   pointer = 0;
-       u4   width   = 0;
-       u4   height  = 0;
-       u4 * buffer = null;
+static natural raptor_font_raw_import (raptor_structure * raptor, natural * data, natural image_width, natural image_height, character begin,
+                                       character end, natural empty) {
+       natural current = ++raptor->font_count - 1;
 
 
-       u4 current = raptor->font_count;
+       natural   pointer     = 0;
+       natural   width       = 0;
+       natural   height      = 0;
+       natural   point_count = 0;
+       natural * point_array = null;
 
 
-       ++raptor->font_count;
+       fatal_failure (raptor->active == true, "raptor_font_raw_import: Raptor renderer is already initialized.");
+       fatal_failure (data           == null, "raptor_font_raw_import: Data is null pointer.");
+       fatal_failure (image_width    == 0,    "raptor_font_raw_import: Font image width is zero.");
+       fatal_failure (image_height   == 0,    "raptor_font_raw_import: Font image height is zero.");
+       fatal_failure (begin          >= end,  "raptor_font_raw_import: Font character range is inverted.");
 
        raptor->font_index  = reallocate (raptor->font_index,  raptor->font_count * sizeof (* raptor->font_index));
        raptor->font_width  = reallocate (raptor->font_width,  raptor->font_count * sizeof (* raptor->font_width));
 
        raptor->font_index  = reallocate (raptor->font_index,  raptor->font_count * sizeof (* raptor->font_index));
        raptor->font_width  = reallocate (raptor->font_width,  raptor->font_count * sizeof (* raptor->font_width));
@@ -138,101 +144,121 @@ static u4 raptor_font_raw_import (raptor_structure * raptor, u4 * data, u4 image
        raptor->font_begin [current] = begin;
        raptor->font_end   [current] = end;
 
        raptor->font_begin [current] = begin;
        raptor->font_end   [current] = end;
 
-       raptor->font_index  [current] = allocate ((u8) (end - begin + 1) * sizeof (* * raptor->font_index));
-       raptor->font_width  [current] = allocate ((u8) (end - begin + 1) * sizeof (* * raptor->font_width));
-       raptor->font_height [current] = allocate ((u8) (end - begin + 1) * sizeof (* * raptor->font_height));
+       raptor->font_index  [current] = allocate ((caliber) (end - begin + 1) * sizeof (* * raptor->font_index));
+       raptor->font_width  [current] = allocate ((caliber) (end - begin + 1) * sizeof (* * raptor->font_width));
+       raptor->font_height [current] = allocate ((caliber) (end - begin + 1) * sizeof (* * raptor->font_height));
 
 
-       for (c1 index = begin; index <= end; ++index) {
-               for (          ; data [pointer]                        == separator_colour; ++pointer);
-               for (width  = 0; data [pointer + width]                != separator_colour; ++width);
-               for (height = 0; data [pointer + height * image_width] != separator_colour; ++height);
+       point_array = allocate ((caliber) (end - begin + 1) * sizeof (* point_array));
 
 
-               buffer = allocate (width * height * sizeof (* buffer));
+       if (empty == 0x00000000u) {
+               empty = data [0];
+       }
 
 
-               for (u4 y = 0; y < height; ++y) {
-                       for (u4 x = 0; x < width; ++x) {
-                               buffer [y * width + x] = data [pointer + (y * image_width) + x];
+       for (natural y = 0; y < image_height - 1; ++y) {
+               for (natural x = 0; x < image_width - 1; ++x) {
+                       if ((data [(y + 0) * image_width + (x + 0)] == empty)
+                       &&  (data [(y + 1) * image_width + (x + 0)] == empty)
+                       &&  (data [(y + 0) * image_width + (x + 1)] == empty)
+                       &&  (data [(y + 1) * image_width + (x + 1)] == 0x00000000u)) {
+                               ++point_count;
+                               point_array [point_count - 1] = (y + 1) * image_width + (x + 1);
                        }
                }
                        }
                }
+       }
 
 
-               raptor->font_index  [current] [index - begin] = raptor_sprite_raw_import (raptor, buffer, width, height);
-               raptor->font_width  [current] [index - begin] = width;
-               raptor->font_height [current] [index - begin] = height;
+       if (point_count != end - begin + 1) {
+               print ("/w Mismatch between font character points:\n");
+               print ("/c --- Hardcoded expected number of character points: %i\n", end - begin + 1);
+               print ("/c --- Algorithm found number of character points: %i\n", point_count);
+       }
 
 
-               pointer += width;
+       for (natural index = 0; index < end - begin + 1; ++index) {
+               for (width  = 0; data [point_array [index] + width]                != empty; ++width);
+               for (height = 0; data [point_array [index] + height * image_width] != empty; ++height);
 
 
-               for (; data [pointer] == separator_colour; ++pointer);
+               fatal_failure (width  == 0, "raptor_font_raw_import: Font width is zero.");
+               fatal_failure (height == 0, "raptor_font_raw_import: Font height is zero.");
 
 
-               if (pointer % image_width == 2) {
-                       pointer += height * image_width;
+               natural * buffer = allocate (width * height * sizeof (* buffer));
+
+               for (natural y = 0; y < height; ++y) {
+                       for (natural x = 0; x < width; ++x) {
+                               buffer [y * width + x] = data [point_array [index] + y * image_width + x];
+                       }
                }
                }
+
+               raptor->font_index  [current] [index] = raptor_sprite_raw_import (raptor, buffer, width, height);
+               raptor->font_width  [current] [index] = width;
+               raptor->font_height [current] [index] = height;
        }
 
        }
 
+       point_array = deallocate (point_array);
+
        return (current);
 }
 
        return (current);
 }
 
-static u4 raptor_sprite_import (raptor_structure * raptor, c1 * path) {
-       u4   width  = 0;
-       u4   height = 0;
-       u4 * data   = null;
+static natural raptor_sprite_import (raptor_structure * raptor, character * path) {
+       natural   width  = 0;
+       natural   height = 0;
+       natural * data   = null;
 
        data = format_image_import (path, & width, & height);
 
        return (raptor_sprite_raw_import (raptor, data, width, height));
 }
 
 
        data = format_image_import (path, & width, & height);
 
        return (raptor_sprite_raw_import (raptor, data, width, height));
 }
 
-static u4 raptor_font_import (raptor_structure * raptor, c1 * path, c1 begin, c1 end, u4 colour) {
-       u4   width  = 0;
-       u4   height = 0;
-       u4   result = 0;
-       u4 * data   = null;
+static natural raptor_font_import (raptor_structure * raptor, character * path, character begin, character end, natural colour) {
+       natural   width  = 0;
+       natural   height = 0;
+       natural   result = 0;
+       natural * data   = null;
 
        data = format_image_import (path, & width, & height);
 
 
        data = format_image_import (path, & width, & height);
 
-       result = raptor_font_raw_import (raptor, data, width, begin, end, colour);
+       result = raptor_font_raw_import (raptor, data, width, height, begin, end, colour);
 
        data = deallocate (data);
 
        return (result);
 }
 
 
        data = deallocate (data);
 
        return (result);
 }
 
-static u4 raptor_sprite_width (raptor_structure * raptor, u4 sprite) {
+static natural raptor_sprite_width (raptor_structure * raptor, natural sprite) {
        return (raptor->sprite_width [sprite]);
 }
 
        return (raptor->sprite_width [sprite]);
 }
 
-static u4 raptor_sprite_height (raptor_structure * raptor, u4 sprite) {
+static natural raptor_sprite_height (raptor_structure * raptor, natural sprite) {
        return (raptor->sprite_height [sprite]);
 }
 
        return (raptor->sprite_height [sprite]);
 }
 
-static u4 raptor_character_width (raptor_structure * raptor, c1 character, u4 font, f4 scale) {
-       if ((character < raptor->font_begin [font]) || (character > raptor->font_end [font])) {
+static natural raptor_character_width (raptor_structure * raptor, character data, natural font, real scale) {
+       if ((data < raptor->font_begin [font]) || (data > raptor->font_end [font])) {
                return (0);
        } else {
                return (0);
        } else {
-               u4 index = raptor->font_index [font] [character - raptor->font_begin [font]];
+               natural index = raptor->font_index [font] [data - raptor->font_begin [font]];
 
 
-               return ((u4) (scale * (float) raptor->sprite_width [index]));
+               return ((natural) (scale * (real) raptor->sprite_width [index]));
        }
 }
 
        }
 }
 
-static u4 raptor_character_height (raptor_structure * raptor, c1 character, u4 font, f4 scale) {
-       if ((character < raptor->font_begin [font]) || (character > raptor->font_end [font])) {
+static natural raptor_character_height (raptor_structure * raptor, character data, natural font, real scale) {
+       if ((data < raptor->font_begin [font]) || (data > raptor->font_end [font])) {
                return (0);
        } else {
                return (0);
        } else {
-               u4 index = raptor->font_index [font] [character - raptor->font_begin [font]];
+               natural index = raptor->font_index [font] [data - raptor->font_begin [font]];
 
 
-               return ((u4) (scale * (float) raptor->sprite_height [index]));
+               return ((natural) (scale * (real) raptor->sprite_height [index]));
        }
 }
 
        }
 }
 
-static u4 raptor_string_width (raptor_structure * raptor, c1 * string, u4 font, f4 scale) {
-       u4 width = 0;
-       u4 match = 0;
+static natural raptor_string_width (raptor_structure * raptor, character * string, natural font, real scale) {
+       natural width = 0;
+       natural match = 0;
 
        if (string == null) {
                return (0);
        }
 
 
        if (string == null) {
                return (0);
        }
 
-       for (u4 index = 0; string [index] != '\0'; ++index) {
+       for (natural index = 0; string [index] != '\0'; ++index) {
                if (string [index] == '\t') {
                        width += raptor->tab_width * raptor_character_width (raptor, ' ', font, scale);
                } else if (string [index] == '\n') {
                if (string [index] == '\t') {
                        width += raptor->tab_width * raptor_character_width (raptor, ' ', font, scale);
                } else if (string [index] == '\n') {
@@ -246,14 +272,14 @@ static u4 raptor_string_width (raptor_structure * raptor, c1 * string, u4 font,
        return (maximum (width, match));
 }
 
        return (maximum (width, match));
 }
 
-static u4 raptor_string_height (raptor_structure * raptor, c1 * string, u4 font, f4 scale) {
-       u4 height = raptor_character_height (raptor, ' ', font, scale);
+static natural raptor_string_height (raptor_structure * raptor, character * string, natural font, real scale) {
+       natural height = raptor_character_height (raptor, ' ', font, scale);
 
        if ((string == null) || (string [0] == '\0')) {
                return (0);
        }
 
 
        if ((string == null) || (string [0] == '\0')) {
                return (0);
        }
 
-       for (u4 index = 0; string [index] != '\0'; ++index) {
+       for (natural index = 0; string [index] != '\0'; ++index) {
                if (string [index] == '\n') {
                        height += raptor_character_height (raptor, ' ', font, scale);
                }
                if (string [index] == '\n') {
                        height += raptor_character_height (raptor, ' ', font, scale);
                }
@@ -262,22 +288,22 @@ static u4 raptor_string_height (raptor_structure * raptor, c1 * string, u4 font,
        return (height);
 }
 
        return (height);
 }
 
-static u4 raptor_center_x (raptor_structure * raptor, u4 size) {
+static natural raptor_center_x (raptor_structure * raptor, natural size) {
        return ((raptor->window_width - size) / 2);
 }
 
        return ((raptor->window_width - size) / 2);
 }
 
-static u4 raptor_center_y (raptor_structure * raptor, u4 size) {
+static natural raptor_center_y (raptor_structure * raptor, natural size) {
        return ((raptor->window_height - size) / 2);
 }
 
        return ((raptor->window_height - size) / 2);
 }
 
-static b4 raptor_cursor_inside (raptor_structure * raptor, s4 x, s4 y, u4 width, u4 height) {
+static boolean raptor_cursor_inside (raptor_structure * raptor, integer x, integer y, natural width, natural height) {
        return ((raptor->cursor_x > x)
             && (raptor->cursor_y > y)
        return ((raptor->cursor_x > x)
             && (raptor->cursor_y > y)
-            && (raptor->cursor_x < x + (int) width)
-            && (raptor->cursor_y < y + (int) height));
+            && (raptor->cursor_x < x + (integer) width)
+            && (raptor->cursor_y < y + (integer) height));
 }
 
 }
 
-static b4 raptor_cursor_left_click (raptor_structure * raptor, s4 x, s4 y, u4 width, u4 height) {
+static boolean raptor_cursor_left_click (raptor_structure * raptor, integer x, integer y, natural width, natural height) {
        if (raptor->cursor [cursor_left] == true) {
                return (raptor_cursor_inside (raptor, x, y, width, height) == true);
        }
        if (raptor->cursor [cursor_left] == true) {
                return (raptor_cursor_inside (raptor, x, y, width, height) == true);
        }
@@ -285,7 +311,7 @@ static b4 raptor_cursor_left_click (raptor_structure * raptor, s4 x, s4 y, u4 wi
        return (false);
 }
 
        return (false);
 }
 
-static b4 raptor_cursor_right_click (raptor_structure * raptor, s4 x, s4 y, u4 width, u4 height) {
+static boolean raptor_cursor_right_click (raptor_structure * raptor, integer x, integer y, natural width, natural height) {
        if (raptor->cursor [cursor_right] == true) {
                return (raptor_cursor_inside (raptor, x, y, width, height));
        }
        if (raptor->cursor [cursor_right] == true) {
                return (raptor_cursor_inside (raptor, x, y, width, height));
        }
@@ -293,8 +319,8 @@ static b4 raptor_cursor_right_click (raptor_structure * raptor, s4 x, s4 y, u4 w
        return (false);
 }
 
        return (false);
 }
 
-static v0 raptor_configure (raptor_structure * raptor, u4 window_width, u4 window_height, c1 * window_title) {
-       u8 font_bitmap [2 * 95] = {
+static procedure raptor_configure (raptor_structure * raptor, natural window_width, natural window_height, character * window_title) {
+       natural_64 font_bitmap [2 * 95] = {
                0x0000000000000000, 0x0000000000000000, 0x0000101010101010, 0x1000101000000000, 0x0024242400000000, 0x0000000000000000,
                0x00002424247e2424, 0x7e24242400000000, 0x0010107c9290907c, 0x1212927c10100000, 0x0000649468081010, 0x202c524c00000000,
                0x000018242418304a, 0x4444443a00000000, 0x0010101000000000, 0x0000000000000000, 0x0000081020202020, 0x2020100800000000,
                0x0000000000000000, 0x0000000000000000, 0x0000101010101010, 0x1000101000000000, 0x0024242400000000, 0x0000000000000000,
                0x00002424247e2424, 0x7e24242400000000, 0x0010107c9290907c, 0x1212927c10100000, 0x0000649468081010, 0x202c524c00000000,
                0x000018242418304a, 0x4444443a00000000, 0x0010101000000000, 0x0000000000000000, 0x0000081020202020, 0x2020100800000000,
@@ -331,9 +357,9 @@ static v0 raptor_configure (raptor_structure * raptor, u4 window_width, u4 windo
 
        XSetWindowAttributes window_attributes;
 
 
        XSetWindowAttributes window_attributes;
 
-       u4 * dumb_buffer = allocate (256 * sizeof (* dumb_buffer));
+       natural * dumb_buffer = allocate (256 * sizeof (* dumb_buffer));
 
 
-       for (u4 index = 0; index < 256; ++index) {
+       for (natural index = 0; index < 256; ++index) {
                dumb_buffer [index] = 0xffffffff;
        }
 
                dumb_buffer [index] = 0xffffffff;
        }
 
@@ -352,13 +378,13 @@ static v0 raptor_configure (raptor_structure * raptor, u4 window_width, u4 windo
        raptor->font_width  [raptor->font_count - 1] = allocate (95 * sizeof (* * raptor->font_width));
        raptor->font_height [raptor->font_count - 1] = allocate (95 * sizeof (* * raptor->font_height));
 
        raptor->font_width  [raptor->font_count - 1] = allocate (95 * sizeof (* * raptor->font_width));
        raptor->font_height [raptor->font_count - 1] = allocate (95 * sizeof (* * raptor->font_height));
 
-       for (u4 index = 0; index < 95; ++index) {
-               u4 * buffer = allocate (8 * 16 * sizeof (* buffer));
+       for (natural index = 0; index < 95; ++index) {
+               natural * buffer = allocate (8 * 16 * sizeof (* buffer));
 
 
-               for (u4 value = 0; value < 2; ++value) {
-                       for (u4 bit = 64; bit > 0; --bit) {
-                               u4 destination = ((value << 3) - ((bit - 1) >> 3) + 7) * 8 - ((bit - 1) & 7) + 7;
-                               u4 source      = (font_bitmap [2 * index + value] >> (bit - 1)) & 1;
+               for (natural value = 0; value < 2; ++value) {
+                       for (natural bit = 64; bit > 0; --bit) {
+                               natural destination = ((value << 3) - ((bit - 1) >> 3) + 7) * 8 - ((bit - 1) & 7) + 7;
+                               natural source      = (font_bitmap [2 * index + value] >> (bit - 1)) & 1;
 
                                buffer [destination] = (source) ? 0xffffffff : 0x00000000;
                        }
 
                                buffer [destination] = (source) ? 0xffffffff : 0x00000000;
                        }
@@ -376,7 +402,7 @@ static v0 raptor_configure (raptor_structure * raptor, u4 window_width, u4 windo
 
        raptor->display = XOpenDisplay (null);
 
 
        raptor->display = XOpenDisplay (null);
 
-       s4 screen = DefaultScreen (raptor->display);
+       integer screen = DefaultScreen (raptor->display);
 
        XMatchVisualInfo (raptor->display, screen, 32, TrueColor, & raptor->visual);
 
 
        XMatchVisualInfo (raptor->display, screen, 32, TrueColor, & raptor->visual);
 
@@ -417,39 +443,40 @@ static v0 raptor_configure (raptor_structure * raptor, u4 window_width, u4 windo
        raptor->frame_begin = nano_time ();
 }
 
        raptor->frame_begin = nano_time ();
 }
 
-static v0 raptor_render_base (raptor_structure * raptor, u4 sprite, s4 x, s4 y, u4 u, u4 v, u4 width, u4 height, f4 scale_x,
-                                f4 scale_y, s4 flip_x, s4 flip_y, u4 upper_left, u4 upper_right, u4 lower_left, u4 lower_right) {
-       (v0) scale_x;
-       (v0) scale_y;
-       (v0) flip_x;
-       (v0) flip_y;
+static procedure raptor_render_base (raptor_structure * raptor, natural sprite, integer x, integer y, natural u, natural v, natural width,
+                                     natural height, real scale_x, real scale_y, integer flip_x, integer flip_y, natural upper_left,
+                                     natural upper_right, natural lower_left, natural lower_right) {
+       (none) scale_x;
+       (none) scale_y;
+       (none) flip_x;
+       (none) flip_y;
        /// FIX TO INTERPOLATE ALL 4 COLOURS
        /// FIX TO INTERPOLATE ALL 4 COLOURS
-       //~(v0) upper_left;
-       (v0) upper_right;
-       (v0) lower_left;
-       (v0) lower_right;
+       //~(none) upper_left;
+       (none) upper_right;
+       (none) lower_left;
+       (none) lower_right;
 
 
-       u4 interpolate_pixels (u4 pixel, u4 modifier) {
-               u4 r = (((pixel & 0xff000000) >> 24) * ((modifier & 0x000000ff) >>  0)) / 0xff;
-               u4 g = (((pixel & 0x00ff0000) >> 16) * ((modifier & 0x0000ff00) >>  8)) / 0xff;
-               u4 b = (((pixel & 0x0000ff00) >>  8) * ((modifier & 0x00ff0000) >> 16)) / 0xff;
-               u4 a = (((pixel & 0x000000ff) >>  0) * ((modifier & 0xff000000) >> 24)) / 0xff;
+       natural interpolate_pixels (natural pixel, natural modifier) {
+               natural r = (((pixel & 0xff000000) >> 24) * ((modifier & 0x000000ff) >>  0)) / 0xff;
+               natural g = (((pixel & 0x00ff0000) >> 16) * ((modifier & 0x0000ff00) >>  8)) / 0xff;
+               natural b = (((pixel & 0x0000ff00) >>  8) * ((modifier & 0x00ff0000) >> 16)) / 0xff;
+               natural a = (((pixel & 0x000000ff) >>  0) * ((modifier & 0xff000000) >> 24)) / 0xff;
 
                return ((r << 24) | (g << 16) | (b << 8) | a);
        }
 
 
                return ((r << 24) | (g << 16) | (b << 8) | a);
        }
 
-       if ((x + (int) width < 0) || (y + (int) height < 0) || (x > (int) raptor->window_width) || (y > (int) raptor->window_height)) return;
+       if ((x + (integer) width < 0) || (y + (integer) height < 0) || (x > (integer) raptor->window_width) || (y > (integer) raptor->window_height)) return;
 
 
-       for (u4 vertical = 0; vertical < height; ++vertical) {
+       for (natural vertical = 0; vertical < height; ++vertical) {
                if (vertical + y >= raptor->window_height) break;
                if (vertical + v >= raptor->sprite_height [sprite]) break;
 
                if (vertical + y >= raptor->window_height) break;
                if (vertical + v >= raptor->sprite_height [sprite]) break;
 
-               for (u4 horizontal = 0; horizontal < width; ++horizontal) {
+               for (natural horizontal = 0; horizontal < width; ++horizontal) {
                        if (horizontal + x >= raptor->window_width) break;
                        if (horizontal + u >= raptor->sprite_width [sprite]) break;
 
                        if (horizontal + x >= raptor->window_width) break;
                        if (horizontal + u >= raptor->sprite_width [sprite]) break;
 
-                       u4 pixel = raptor->sprite_data [sprite] [(vertical + v) * raptor->sprite_width [sprite] + horizontal + u];
-                       u4 at    = (y + vertical) * raptor->window_width + (x + horizontal);
+                       natural pixel = raptor->sprite_data [sprite] [(vertical + v) * raptor->sprite_width [sprite] + horizontal + u];
+                       natural at    = (y + vertical) * raptor->window_width + (x + horizontal);
 
                        raptor->framebuffer [at] = (((pixel & 0xff000000) >> 24) > 0x77)
                                                 ? interpolate_pixels (pixel, upper_left)
 
                        raptor->framebuffer [at] = (((pixel & 0xff000000) >> 24) > 0x77)
                                                 ? interpolate_pixels (pixel, upper_left)
@@ -458,76 +485,77 @@ static v0 raptor_render_base (raptor_structure * raptor, u4 sprite, s4 x, s4 y,
        }
 }
 
        }
 }
 
-static v0 raptor_render_rectangle (raptor_structure * raptor, s4 x, s4 y, u4 width, u4 height, u4 colour) {
-       raptor_render_base (raptor, raptor->sprite_count - 1, x, y, 0, 0, 16, 16, (float) width / 16, (float) height / 16, 0, 0, colour, colour,
+static procedure raptor_render_rectangle (raptor_structure * raptor, integer x, integer y, natural width, natural height, natural colour) {
+       raptor_render_base (raptor, raptor->sprite_count - 1, x, y, 0, 0, 16, 16, (real) width / 16, (real) height / 16, 0, 0, colour, colour,
                            colour, colour);
 }
 
                            colour, colour);
 }
 
-static v0 raptor_render_sprite (raptor_structure * raptor, u4 sprite, s4 x, s4 y) {
-       u4 width  = raptor->sprite_width  [sprite];
-       u4 height = raptor->sprite_height [sprite];
+static procedure raptor_render_sprite (raptor_structure * raptor, natural sprite, integer x, integer y) {
+       natural width  = raptor->sprite_width  [sprite];
+       natural height = raptor->sprite_height [sprite];
 
        raptor_render_base (raptor, sprite, x, y, 0, 0, width, height, 1.0f, 1.0f, 0, 0, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu);
 }
 
 
        raptor_render_base (raptor, sprite, x, y, 0, 0, width, height, 1.0f, 1.0f, 0, 0, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu);
 }
 
-static v0 raptor_render_sprite_scale (raptor_structure * raptor, u4 sprite, s4 x, s4 y, f4 scale_x, f4 scale_y) {
-       u4 width  = raptor->sprite_width  [sprite];
-       u4 height = raptor->sprite_height [sprite];
+static procedure raptor_render_sprite_scale (raptor_structure * raptor, natural sprite, integer x, integer y, real scale_x, real scale_y) {
+       natural width  = raptor->sprite_width  [sprite];
+       natural height = raptor->sprite_height [sprite];
 
        raptor_render_base (raptor, sprite, x, y, 0, 0, width, height, scale_x, scale_y, 0, 0, 0xffffffffu, 0xffffffffu, 0xffffffffu,
                            0xffffffffu);
 }
 
 
        raptor_render_base (raptor, sprite, x, y, 0, 0, width, height, scale_x, scale_y, 0, 0, 0xffffffffu, 0xffffffffu, 0xffffffffu,
                            0xffffffffu);
 }
 
-static v0 raptor_render_sprite_crop (raptor_structure * raptor, u4 sprite, s4 x, s4 y, u4 u, u4 v, u4 width, u4 height) {
+static procedure raptor_render_sprite_crop (raptor_structure * raptor, natural sprite, integer x, integer y, natural u, natural v, natural width, natural height) {
        raptor_render_base (raptor, sprite, x, y, u, v, width, height, 1.0f, 1.0f, 0, 0, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu);
 }
 
        raptor_render_base (raptor, sprite, x, y, u, v, width, height, 1.0f, 1.0f, 0, 0, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu);
 }
 
-static v0 raptor_render_sprite_colour (raptor_structure * raptor, u4 sprite, u4 colour, s4 x, s4 y) {
-       u4 width  = raptor->sprite_width  [sprite];
-       u4 height = raptor->sprite_height [sprite];
+static procedure raptor_render_sprite_colour (raptor_structure * raptor, natural sprite, natural colour, integer x, integer y) {
+       natural width  = raptor->sprite_width  [sprite];
+       natural height = raptor->sprite_height [sprite];
 
        raptor_render_base (raptor, sprite, x, y, 0, 0, width, height, 1.0f, 1.0f, 0, 0, colour, colour, colour, colour);
 }
 
 
        raptor_render_base (raptor, sprite, x, y, 0, 0, width, height, 1.0f, 1.0f, 0, 0, colour, colour, colour, colour);
 }
 
-static v0 raptor_render_sprite_crop_colour (raptor_structure * raptor, u4 sprite, u4 colour, s4 x, s4 y, u4 u, u4 v, u4 width, u4 height) {
-       raptor_render_base (raptor, sprite, x, y, u, v, width, height, 1.0f, 1.0f, 0, 0, colour, colour, colour, colour);
-}
-
-static v0 raptor_render_sprite_flip (raptor_structure * raptor, u4 sprite, s4 x, s4 y, s4 flip_x, s4 flip_y) {
-       u4 width  = raptor->sprite_width  [sprite];
-       u4 height = raptor->sprite_height [sprite];
+static procedure raptor_render_sprite_flip (raptor_structure * raptor, natural sprite, integer x, integer y, integer flip_x, integer flip_y) {
+       natural width  = raptor->sprite_width  [sprite];
+       natural height = raptor->sprite_height [sprite];
 
        raptor_render_base (raptor, sprite, x, y, 0, 0, width, height, 1.0f, 1.0f, flip_x, flip_y, 0xffffffffu, 0xffffffffu, 0xffffffffu,
                            0xffffffffu);
 }
 
 
        raptor_render_base (raptor, sprite, x, y, 0, 0, width, height, 1.0f, 1.0f, flip_x, flip_y, 0xffffffffu, 0xffffffffu, 0xffffffffu,
                            0xffffffffu);
 }
 
-static v0 raptor_render_sprite_animate (raptor_structure * raptor, u4 sprite, s4 x, s4 y, u4 frames, u4 state, u4 states) {
-       u4 width  = raptor->sprite_width  [sprite] / states;
-       u4 height = raptor->sprite_height [sprite] / frames;
+static procedure raptor_render_sprite_animation (raptor_structure * raptor, natural sprite, integer x, integer y, natural frames, natural state, natural states) {
+       natural width  = raptor->sprite_width  [sprite] / states;
+       natural height = raptor->sprite_height [sprite] / frames;
 
 
-       u4 u = width  * (state                  % states);
-       u4 v = height * (raptor->animation_tick % frames);
+       natural u = width  * (state                  % states);
+       natural v = height * (raptor->animation_tick % frames);
 
        raptor_render_sprite_crop (raptor, sprite, x, y, u, v, width, height);
 }
 
 
        raptor_render_sprite_crop (raptor, sprite, x, y, u, v, width, height);
 }
 
-static v0 raptor_render_character (raptor_structure * raptor, c1 character, u4 font, s4 x, s4 y, f4 scale, u4 colour) {
-       if ((character < raptor->font_begin [font]) || (character > raptor->font_end [font])) return;
+static procedure raptor_render_sprite_crop_colour (raptor_structure * raptor, natural sprite, natural colour, integer x, integer y, natural u,
+                                                   natural v, natural width, natural height) {
+       raptor_render_base (raptor, sprite, x, y, u, v, width, height, 1.0f, 1.0f, 0, 0, colour, colour, colour, colour);
+}
+
+static procedure raptor_render_character (raptor_structure * raptor, character data, natural font, integer x, integer y, real scale, natural colour) {
+       if ((data < raptor->font_begin [font]) || (data > raptor->font_end [font])) return;
 
 
-       u4 index  = raptor->font_index [font] [character - raptor->font_begin [font]];
+       natural index  = raptor->font_index [font] [data - raptor->font_begin [font]];
 
 
-       u4 width  = raptor->sprite_width  [index];
-       u4 height = raptor->sprite_height [index];
+       natural width  = raptor->sprite_width  [index];
+       natural height = raptor->sprite_height [index];
 
        raptor_render_base (raptor, index, x, y, 0, 0, width, height, scale, scale, 0, 0, colour, colour, colour, colour);
 }
 
 
        raptor_render_base (raptor, index, x, y, 0, 0, width, height, scale, scale, 0, 0, colour, colour, colour, colour);
 }
 
-static v0 raptor_render_string (raptor_structure * raptor, c1 * string, u4 font, s4 x, s4 y, f4 scale, u4 colour) {
-       s4 offset = x;
+static procedure raptor_render_string (raptor_structure * raptor, character * string, natural font, integer x, integer y, real scale, natural colour) {
+       integer offset = x;
 
        if (string == null) return;
 
 
        if (string == null) return;
 
-       for (u4 index = 0; string [index] != '\0'; ++index) {
+       for (natural index = 0; string [index] != '\0'; ++index) {
                if (string [index] == '\t') {
                        x += raptor->tab_width * raptor_character_width (raptor, ' ', font, scale);
                        continue;
                if (string [index] == '\t') {
                        x += raptor->tab_width * raptor_character_width (raptor, ' ', font, scale);
                        continue;
@@ -543,12 +571,12 @@ static v0 raptor_render_string (raptor_structure * raptor, c1 * string, u4 font,
        }
 }
 
        }
 }
 
-static v0 raptor_render_framerate (raptor_structure * raptor, u4 font, s4 x, s4 y, f4 scale, u4 colour) {
+static procedure raptor_render_framerate (raptor_structure * raptor, natural font, integer x, integer y, real scale, natural colour) {
        raptor_render_string (raptor, number_to_string (raptor->framerate), font, x, y, scale, colour);
 }
 
        raptor_render_string (raptor, number_to_string (raptor->framerate), font, x, y, scale, colour);
 }
 
-static v0 raptor_synchronize (raptor_structure * raptor, u4 clear_colour) {
-       u4 signal_code [signal_count] = {
+static procedure raptor_synchronize (raptor_structure * raptor, natural clear_colour) {
+       natural signal_code [signal_count] = {
                0,
                38,     56,     54,     40,     26,     41,     42,     43,     31,     44,     45,     46,     58,     57,     32,     33,
                24,     27,     39,     28,     30,     55,     25,     53,     29,     52,     19,     10,     11,     12,     13,     14,
                0,
                38,     56,     54,     40,     26,     41,     42,     43,     31,     44,     45,     46,     58,     57,     32,     33,
                24,     27,     39,     28,     30,     55,     25,     53,     29,     52,     19,     10,     11,     12,     13,     14,
@@ -559,21 +587,21 @@ static v0 raptor_synchronize (raptor_structure * raptor, u4 clear_colour) {
                85,     79,     80,     81
        };
 
                85,     79,     80,     81
        };
 
-       u4 new_window_width  = raptor->window_width;
-       u4 new_window_height = raptor->window_height;
+       natural new_window_width  = raptor->window_width;
+       natural new_window_height = raptor->window_height;
 
        XEvent event       = { 0 };
        //~Window root_window = { 0 };
 
 
        XEvent event       = { 0 };
        //~Window root_window = { 0 };
 
-       //~s4  root_x = 0;
-       //~s4  root_y = 0;
-       //~u4 mask   = 0;
+       //~integer  root_x = 0;
+       //~integer  root_y = 0;
+       //~natural mask   = 0;
 
 
-       for (u4 index = 0; index < cursor_count; ++index) {
+       for (natural index = 0; index < cursor_count; ++index) {
                raptor->cursor [index] = false;
        }
 
                raptor->cursor [index] = false;
        }
 
-       for (u4 index = 0; index < signal_count; ++index) {
+       for (natural index = 0; index < signal_count; ++index) {
                raptor->signal [index] = false;
        }
 
                raptor->signal [index] = false;
        }
 
@@ -603,7 +631,7 @@ static v0 raptor_synchronize (raptor_structure * raptor, u4 clear_colour) {
                        raptor->cursor_y = event.xbutton.y;
                } break;
                case (KeyPress): {
                        raptor->cursor_y = event.xbutton.y;
                } break;
                case (KeyPress): {
-                       for (u4 index = 0; index < signal_count; ++index) {
+                       for (natural index = 0; index < signal_count; ++index) {
                                if (event.xkey.keycode == signal_code [index]) {
                                        raptor->signal [index] = true;
                                }
                                if (event.xkey.keycode == signal_code [index]) {
                                        raptor->signal [index] = true;
                                }
@@ -615,14 +643,14 @@ static v0 raptor_synchronize (raptor_structure * raptor, u4 clear_colour) {
                } break;
        }
 
                } break;
        }
 
-       for (u4 pixel = 0; pixel < raptor->window_width * raptor->window_height; ++pixel) {
-               u4 r = (raptor->framebuffer [pixel] & 0x00ff0000) >> 16;
-               u4 b = (raptor->framebuffer [pixel] & 0x000000ff) << 16;
+       for (natural pixel = 0; pixel < raptor->window_width * raptor->window_height; ++pixel) {
+               natural r = (raptor->framebuffer [pixel] & 0x00ff0000) >> 16;
+               natural b = (raptor->framebuffer [pixel] & 0x000000ff) << 16;
 
                raptor->framebuffer [pixel] = (raptor->framebuffer [pixel] & 0xff00ff00) | b | r;
        }
 
 
                raptor->framebuffer [pixel] = (raptor->framebuffer [pixel] & 0xff00ff00) | b | r;
        }
 
-       raptor->image = XCreateImage (raptor->display, raptor->visual.visual, raptor->visual.depth, ZPixmap, 0, (c1 *) raptor->framebuffer,
+       raptor->image = XCreateImage (raptor->display, raptor->visual.visual, raptor->visual.depth, ZPixmap, 0, (character *) raptor->framebuffer,
                                      raptor->window_width, raptor->window_height, 32, 0);
 
        XPutImage (raptor->display, raptor->pixmap, raptor->context, raptor->image, 0, 0, 0, 0, raptor->window_width, raptor->window_height);
                                      raptor->window_width, raptor->window_height, 32, 0);
 
        XPutImage (raptor->display, raptor->pixmap, raptor->context, raptor->image, 0, 0, 0, 0, raptor->window_width, raptor->window_height);
@@ -644,7 +672,7 @@ static v0 raptor_synchronize (raptor_structure * raptor, u4 clear_colour) {
 
        clear_colour = colour_channel_reverse (clear_colour);
 
 
        clear_colour = colour_channel_reverse (clear_colour);
 
-       for (u4 pixel = 0; pixel < raptor->window_width * raptor->window_height; ++pixel) {
+       for (natural pixel = 0; pixel < raptor->window_width * raptor->window_height; ++pixel) {
                raptor->framebuffer [pixel] = clear_colour;
        }
 
                raptor->framebuffer [pixel] = clear_colour;
        }
 
@@ -657,7 +685,7 @@ static v0 raptor_synchronize (raptor_structure * raptor, u4 clear_colour) {
        }
 
        if (raptor->global_tick % raptor->gameplay_framerate == 0) {
        }
 
        if (raptor->global_tick % raptor->gameplay_framerate == 0) {
-               raptor->framerate = (u4) (1000000000ul / raptor->frame_time);
+               raptor->framerate = (natural) (1000000000ul / raptor->frame_time);
        }
 
        ++raptor->global_tick;
        }
 
        ++raptor->global_tick;
@@ -672,8 +700,8 @@ static v0 raptor_synchronize (raptor_structure * raptor, u4 clear_colour) {
 
 ////////////// MOVE ME PLEASE
 
 
 ////////////// MOVE ME PLEASE
 
-static v0 raptor_render_rectangle_vertical_gradient (raptor_structure * raptor, s4 x, s4 y, u4 width, u4 height, u4 colour_up,
-                                                       u4 colour_down) {
-       raptor_render_base (raptor, raptor->sprite_count - 1, x, y, 0, 0, 16, 16, (float) width / 16.0f, (float) height / 16.0f, 0, 0,
+static procedure raptor_render_rectangle_vertical_gradient (raptor_structure * raptor, integer x, integer y, natural width, natural height, natural colour_up,
+                                                       natural colour_down) {
+       raptor_render_base (raptor, raptor->sprite_count - 1, x, y, 0, 0, 16, 16, (real) width / 16.0f, (real) height / 16.0f, 0, 0,
                            colour_up, colour_up, colour_down, colour_down);
 }
                            colour_up, colour_up, colour_down, colour_down);
 }
index 5948e5f7d8422850e92d0cdd315b315832574736..e12f99ad15dcb26c8d18183ada4804057485c81e 100755 (executable)
--- a/xarbon.c
+++ b/xarbon.c
 #include <xolatile/xanguage.h>
 #include <xolatile/xormat/png.h>
 
 #include <xolatile/xanguage.h>
 #include <xolatile/xormat/png.h>
 
-static u4 background    = 0xff181818;
-static u4 foreground    = 0xffcccccc;
-static u4 font_width    = 8;
-static u4 font_height   = 16;
-static u4 tab_width     = 8;
-static u4 render_border = 10;
-
-static u4 * render_image  = null;
-static u4   render_width  = 0;
-static u4   render_height = 0;
-static u4   line_number   = 0;
-static u4   line_digits   = 0;
-
-static v0 conditionally_exit (language_structure * language, syntax_structure * syntax, b4 terminate) {
+static natural background    = 0xff181818;
+static natural foreground    = 0xffcccccc;
+static natural font_width    = 8;
+static natural font_height   = 16;
+static natural tab_width     = 8;
+static natural render_border = 10;
+
+static natural * render_image  = null;
+static natural   render_width  = 0;
+static natural   render_height = 0;
+static natural   line_number   = 0;
+static natural   line_digits   = 0;
+
+static procedure conditionally_exit (language_structure * language, syntax_structure * syntax, boolean terminate) {
        syntax   = syntax_deinitialize   (syntax);
        language = language_deinitialize (language);
 
        syntax   = syntax_deinitialize   (syntax);
        language = language_deinitialize (language);
 
@@ -42,13 +42,13 @@ static v0 conditionally_exit (language_structure * language, syntax_structure *
        }
 }
 
        }
 }
 
-static v0 print_common (v0) {
+static procedure print_common (none) {
        print ("/B/4xarbon/-: /4Source code PNG renderer/-\n\n");
        print ("\tAuthor:  /4Ognjen 'xolatile' Milan Robovic/-\n");
        print ("\tLicense: /4GNU//GPLv3/-\n\n");
 }
 
        print ("/B/4xarbon/-: /4Source code PNG renderer/-\n\n");
        print ("\tAuthor:  /4Ognjen 'xolatile' Milan Robovic/-\n");
        print ("\tLicense: /4GNU//GPLv3/-\n\n");
 }
 
-static v0 print_help (v0) {
+static procedure print_help (none) {
        print_common ();
 
        print ("Example usage:\n\n");
        print_common ();
 
        print ("Example usage:\n\n");
@@ -58,7 +58,7 @@ static v0 print_help (v0) {
        print ("Supported languages:\n\n");
 
        for (language_enumeration index = 0; index < language_count; ++index) {
        print ("Supported languages:\n\n");
 
        for (language_enumeration index = 0; index < language_count; ++index) {
-               c1 align [32] = "";
+               character align [32] = "";
 
                print ("\t/B/4%s/- /4%s/- /0---/- %s syntax highlighting\n",
                       language_short_option [index],
 
                print ("\t/B/4%s/- /4%s/- /0---/- %s syntax highlighting\n",
                       language_short_option [index],
@@ -67,15 +67,15 @@ static v0 print_help (v0) {
        }
 }
 
        }
 }
 
-static v0 print_version (v0) {
+static procedure print_version (none) {
        print_common ();
 
        print ("\tVersion: /40 (Zero)/-\n");
 }
 
        print_common ();
 
        print ("\tVersion: /40 (Zero)/-\n");
 }
 
-static u4 fetch_width (c1 * data) {
-       u4 image_width = 0;
-       u4 count       = 0;
+static natural fetch_width (character * data) {
+       natural image_width = 0;
+       natural count       = 0;
 
        do {
                if (* data == '\t') {
 
        do {
                if (* data == '\t') {
@@ -91,9 +91,9 @@ static u4 fetch_width (c1 * data) {
        return (image_width - 1);
 }
 
        return (image_width - 1);
 }
 
-static u4 fetch_height (c1 * data) {
-       u4 image_height = 0;
-       u4 count        = 0;
+static natural fetch_height (character * data) {
+       natural image_height = 0;
+       natural count        = 0;
 
        do {
                if (* data == '\n') {
 
        do {
                if (* data == '\n') {
@@ -112,8 +112,8 @@ static u4 fetch_height (c1 * data) {
        return (image_height + 1);
 }
 
        return (image_height + 1);
 }
 
-static v0 render_character (c1 character, u4 * x, u4 * y, u4 colour) {
-       u8 glyphmap [192] = {
+static procedure render_character (character data, natural * x, natural * y, natural colour) {
+       natural_64 glyphmap [192] = {
                0x0000000000000000, 0x0000000000000000, 0x0000101010101010, 0x1000101000000000, 0x0024242400000000, 0x0000000000000000,
                0x00002424247e2424, 0x7e24242400000000, 0x0010107c9290907c, 0x1212927c10100000, 0x0000649468081010, 0x202c524c00000000,
                0x000018242418304a, 0x4444443a00000000, 0x0010101000000000, 0x0000000000000000, 0x0000081020202020, 0x2020100800000000,
                0x0000000000000000, 0x0000000000000000, 0x0000101010101010, 0x1000101000000000, 0x0024242400000000, 0x0000000000000000,
                0x00002424247e2424, 0x7e24242400000000, 0x0010107c9290907c, 0x1212927c10100000, 0x0000649468081010, 0x202c524c00000000,
                0x000018242418304a, 0x4444443a00000000, 0x0010101000000000, 0x0000000000000000, 0x0000081020202020, 0x2020100800000000,
@@ -148,10 +148,10 @@ static v0 render_character (c1 character, u4 * x, u4 * y, u4 colour) {
                0x0000300808080408, 0x0808083000000000, 0x000000000062928c, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000
        };
 
                0x0000300808080408, 0x0808083000000000, 0x000000000062928c, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000
        };
 
-       for (u8 index = 0; index < 2; ++index) {
-               for (u8 bit = 64; bit > 0; --bit) {
-                       u8 destination = (* y + (index << 3) - ((bit - 1) >> 3) + 7) * render_width + (* x - ((bit - 1) & 7) + 7);
-                       u8 source      = (glyphmap [2 * (u8) (character - ' ') + index] >> (bit - 1)) & 1;
+       for (natural_64 index = 0; index < 2; ++index) {
+               for (natural_64 bit = 64; bit > 0; --bit) {
+                       natural_64 destination = (* y + (index << 3) - ((bit - 1) >> 3) + 7) * render_width + (* x - ((bit - 1) & 7) + 7);
+                       natural_64 source      = (glyphmap [2 * (natural_64) (data - ' ') + index] >> (bit - 1)) & 1;
 
                        render_image [destination] = (source) ? colour : background;
                }
 
                        render_image [destination] = (source) ? colour : background;
                }
@@ -160,15 +160,15 @@ static v0 render_character (c1 character, u4 * x, u4 * y, u4 colour) {
        * x += font_width;
 }
 
        * x += font_width;
 }
 
-static v0 render_string (c1 * string, u4 length, u4 * x, u4 * y, u4 colour) {
-       for (u4 offset = 0; offset < length; ++offset) {
+static procedure render_string (character * string, natural length, natural * x, natural * y, natural colour) {
+       for (natural offset = 0; offset < length; ++offset) {
                if (string [offset] == '\t') {
                        * x += font_width * tab_width;
                } else if (string [offset] == '\n') {
                        * y += font_height;
                        * x  = render_border;
 
                if (string [offset] == '\t') {
                        * x += font_width * tab_width;
                } else if (string [offset] == '\n') {
                        * y += font_height;
                        * x  = render_border;
 
-                       render_string (format_to_string ((int) ++line_number, false, 10, (int) line_digits, ' '),
+                       render_string (format_to_string ((integer) ++line_number, false, 10, (integer) line_digits, ' '),
                                       line_digits, x, y, foreground);
 
                        * x += font_width;
                                       line_digits, x, y, foreground);
 
                        * x += font_width;
@@ -178,19 +178,19 @@ static v0 render_string (c1 * string, u4 length, u4 * x, u4 * y, u4 colour) {
        }
 }
 
        }
 }
 
-s4 main (s4 argc, c1 * * argv) {
-       u4   select = language_count;
-       u4   offset = 0;
-       u4   length = 0;
-       u4   x      = render_border;
-       u4   y      = render_border;
-       c1 * buffer = null;
-       c1 * dump   = null;
+integer main (integer argc, character * * argv) {
+       natural   select = language_count;
+       natural   offset = 0;
+       natural   length = 0;
+       natural   x      = render_border;
+       natural   y      = render_border;
+       character * buffer = null;
+       character * dump   = null;
 
        syntax_structure   * syntax   = syntax_initialize   (666);
        language_structure * language = language_initialize (true);
 
 
        syntax_structure   * syntax   = syntax_initialize   (666);
        language_structure * language = language_initialize (true);
 
-       for (s4 argument = 1; argument < argc; ++argument) {
+       for (integer argument = 1; argument < argc; ++argument) {
                if (argument_compare (argv [argument], "-h", "--help") == true) {
                        print_help         ();
                        conditionally_exit (language, syntax, true);
                if (argument_compare (argv [argument], "-h", "--help") == true) {
                        print_help         ();
                        conditionally_exit (language, syntax, true);
@@ -207,7 +207,7 @@ s4 main (s4 argc, c1 * * argv) {
                        continue;
                }
 
                        continue;
                }
 
-               for (u4 index = 0; index < language_count; ++index) {
+               for (natural index = 0; index < language_count; ++index) {
                        if (argument_compare (argv [argument], language_short_option [index], language_long_option [index]) == true) {
                                (* (language_highlighter [index])) (language, syntax);
                                select = index;
                        if (argument_compare (argv [argument], language_short_option [index], language_long_option [index]) == true) {
                                (* (language_highlighter [index])) (language, syntax);
                                select = index;
@@ -217,7 +217,7 @@ s4 main (s4 argc, c1 * * argv) {
 
                if (file_exists (argv [argument]) == true) {
                        if (select == language_count) {
 
                if (file_exists (argv [argument]) == true) {
                        if (select == language_count) {
-                               select = (u4) file_type (argv [argument]);
+                               select = (natural) file_type (argv [argument]);
                        }
                        if (buffer == null) {
                                buffer = file_import (argv [argument]);
                        }
                        if (buffer == null) {
                                buffer = file_import (argv [argument]);
@@ -253,14 +253,14 @@ s4 main (s4 argc, c1 * * argv) {
                render_image [offset] = background;
        }
 
                render_image [offset] = background;
        }
 
-       render_string (format_to_string ((int) ++line_number, false, 10, (int) line_digits, ' '), line_digits, & x, & y, foreground);
+       render_string (format_to_string ((integer) ++line_number, false, 10, (integer) line_digits, ' '), line_digits, & x, & y, foreground);
 
        x += font_width;
 
        for (offset = 0; buffer [offset] != '\0'; offset += length) {
                select = syntax_select (syntax, & buffer [offset], & length);
 
 
        x += font_width;
 
        for (offset = 0; buffer [offset] != '\0'; offset += length) {
                select = syntax_select (syntax, & buffer [offset], & length);
 
-               render_string (& buffer [offset], length, & x, & y, (select >= syntax->count) ? background : (u4) syntax->colour [select]);
+               render_string (& buffer [offset], length, & x, & y, (select >= syntax->count) ? background : (natural) syntax->colour [select]);
        }
 
        png_image_export (dump, render_image, render_width, render_height);
        }
 
        png_image_export (dump, render_image, render_width, render_height);
index 9f63a0b1c17064b5ae7407331c5514f65e179d75..7e0a8e52c8a87e925f03f4543c5f5ab679c66885 100644 (file)
 /// for more details, if you dare, it is a lot of text that nobody wants to read...
 
 typedef struct {
 /// for more details, if you dare, it is a lot of text that nobody wants to read...
 
 typedef struct {
-       u4         count;
-       u4         limit;
-       u4       * sprite;
-       f4      * life;
-       u4       * colour_in;
-       u4       * colour_out;
+       natural         count;
+       natural         limit;
+       natural       * sprite;
+       real      * life;
+       natural       * colour_in;
+       natural       * colour_out;
        vector_3 * * position;
        vector_3 * * target;
        vector_3 * * speed;
 } particle_structure;
 
        vector_3 * * position;
        vector_3 * * target;
        vector_3 * * speed;
 } particle_structure;
 
-static particle_structure * particle_initialize (u4 limit) {
+static particle_structure * particle_initialize (natural limit) {
        particle_structure * particle = allocate (sizeof (* particle));
 
        particle->limit = limit;
        particle_structure * particle = allocate (sizeof (* particle));
 
        particle->limit = limit;
@@ -40,7 +40,7 @@ static particle_structure * particle_initialize (u4 limit) {
        particle->target     = allocate (limit * sizeof (* particle->target));
        particle->speed      = allocate (limit * sizeof (* particle->speed));
 
        particle->target     = allocate (limit * sizeof (* particle->target));
        particle->speed      = allocate (limit * sizeof (* particle->speed));
 
-       for (u4 index = 0; index < limit; ++index) {
+       for (natural index = 0; index < limit; ++index) {
                particle->life [index] = 0.0f;
 
                particle->position [index] = allocate (sizeof (* * particle->position));
                particle->life [index] = 0.0f;
 
                particle->position [index] = allocate (sizeof (* * particle->position));
@@ -56,7 +56,7 @@ static particle_structure * particle_initialize (u4 limit) {
 }
 
 static particle_structure * particle_deinitialize (particle_structure * particle) {
 }
 
 static particle_structure * particle_deinitialize (particle_structure * particle) {
-       for (u4 index = 0; index < particle->count; ++index) {
+       for (natural index = 0; index < particle->count; ++index) {
                particle->position [index] = deallocate (particle->position [index]);
                particle->target   [index] = deallocate (particle->target   [index]);
                particle->speed    [index] = deallocate (particle->speed    [index]);
                particle->position [index] = deallocate (particle->position [index]);
                particle->target   [index] = deallocate (particle->target   [index]);
                particle->speed    [index] = deallocate (particle->speed    [index]);
@@ -73,13 +73,13 @@ static particle_structure * particle_deinitialize (particle_structure * particle
        return (deallocate (particle));
 }
 
        return (deallocate (particle));
 }
 
-static v0 particle_append (particle_structure * particle, u4 sprite, f4 life, u4 colour_in, u4 colour_out, vector_3 * position,
+static procedure particle_append (particle_structure * particle, natural sprite, real life, natural colour_in, natural colour_out, vector_3 * position,
                              vector_3 * target, vector_3 * speed) {
        if (particle->count + 1 >= particle->limit) return;
 
        ++particle->count;
 
                              vector_3 * target, vector_3 * speed) {
        if (particle->count + 1 >= particle->limit) return;
 
        ++particle->count;
 
-       u4 current = particle->count - 1;
+       natural current = particle->count - 1;
 
        particle->sprite     [current] = sprite;
        particle->life       [current] = life;
 
        particle->sprite     [current] = sprite;
        particle->life       [current] = life;
@@ -91,17 +91,17 @@ static v0 particle_append (particle_structure * particle, u4 sprite, f4 life, u4
        vector_3_copy (particle->speed    [current], speed);
 }
 
        vector_3_copy (particle->speed    [current], speed);
 }
 
-static v0 particle_switch (particle_structure * particle, u4 this, u4 with) {
-       uint_exchange     (& particle->sprite     [this], & particle->sprite     [with]);
-       float_exchange    (& particle->life       [this], & particle->life       [with]);
-       uint_exchange     (& particle->colour_in  [this], & particle->colour_in  [with]);
-       uint_exchange     (& particle->colour_out [this], & particle->colour_out [with]);
+static procedure particle_switch (particle_structure * particle, natural this, natural with) {
+       exchange_natural     (& particle->sprite     [this], & particle->sprite     [with]);
+       exchange_real    (& particle->life       [this], & particle->life       [with]);
+       exchange_natural     (& particle->colour_in  [this], & particle->colour_in  [with]);
+       exchange_natural     (& particle->colour_out [this], & particle->colour_out [with]);
        vector_3_exchange (  particle->position   [this],   particle->position   [with]);
        vector_3_exchange (  particle->target     [this],   particle->target     [with]);
        vector_3_exchange (  particle->speed      [this],   particle->speed      [with]);
 }
 
        vector_3_exchange (  particle->position   [this],   particle->position   [with]);
        vector_3_exchange (  particle->target     [this],   particle->target     [with]);
        vector_3_exchange (  particle->speed      [this],   particle->speed      [with]);
 }
 
-static v0 particle_remove (particle_structure * particle, u4 index) {
+static procedure particle_remove (particle_structure * particle, natural index) {
        if (index >= particle->count) return;
 
        particle_switch (particle, index, particle->count - 1);
        if (index >= particle->count) return;
 
        particle_switch (particle, index, particle->count - 1);
@@ -109,55 +109,55 @@ static v0 particle_remove (particle_structure * particle, u4 index) {
        --particle->count;
 }
 
        --particle->count;
 }
 
-static v0 particle_effect_splash (particle_structure * particle, u4 sprite, f4 life, u4 colour_in, u4 colour_out,
-                                    vector_3 * position, u4 ray_count, f4 ray_force, f4 ray_error) {
-       for (u4 ray = 0; ray < ray_count; ++ray) {
+static procedure particle_effect_splash (particle_structure * particle, natural sprite, real life, natural colour_in, natural colour_out,
+                                    vector_3 * position, natural ray_count, real ray_force, real ray_error) {
+       for (natural ray = 0; ray < ray_count; ++ray) {
                vector_3 target = {
                vector_3 target = {
-                       //~position->x + frandomize (- ray_force, + ray_force),
-                       //~position->y + frandomize (- ray_force, + ray_force),
-                       //~position->z + frandomize (- ray_force, + ray_force) + frandomize (- ray_error, + ray_error)
-                       //~frandomize (- ray_force, + ray_force),
-                       //~frandomize (- ray_force, + ray_force),
-                       //~frandomize (- ray_force, + ray_force)
+                       //~position->x + random_real (- ray_force, + ray_force),
+                       //~position->y + random_real (- ray_force, + ray_force),
+                       //~position->z + random_real (- ray_force, + ray_force) + random_real (- ray_error, + ray_error)
+                       //~random_real (- ray_force, + ray_force),
+                       //~random_real (- ray_force, + ray_force),
+                       //~random_real (- ray_force, + ray_force)
                         0.0f, 0.0f, 0.0f
                };
 
                vector_3 speed = {
                         0.0f, 0.0f, 0.0f
                };
 
                vector_3 speed = {
-                       frandomize (- ray_force, + ray_force),
-                       frandomize (- ray_force, + ray_force),
-                       frandomize (- ray_force, + ray_force)
+                       random_real (- ray_force, + ray_force),
+                       random_real (- ray_force, + ray_force),
+                       random_real (- ray_force, + ray_force)
                };
 
                };
 
-               life += frandomize (- 1.0f, + 1.0f);
+               life += random_real (- 1.0f, + 1.0f);
 
                particle_append (particle, sprite, life, colour_in, colour_out, position, & target, & speed);
        }
 }
 
 
                particle_append (particle, sprite, life, colour_in, colour_out, position, & target, & speed);
        }
 }
 
-static v0 particle_effect_evaporate (particle_structure * particle, u4 sprite, f4 life, u4 colour_in, u4 colour_out,
-                                       vector_3 * position, u4 ray_count, f4 ray_force, f4 ray_error) {
-       for (u4 ray = 0; ray < ray_count; ++ray) {
+static procedure particle_effect_evaporate (particle_structure * particle, natural sprite, real life, natural colour_in, natural colour_out,
+                                       vector_3 * position, natural ray_count, real ray_force, real ray_error) {
+       for (natural ray = 0; ray < ray_count; ++ray) {
                vector_3 target = {
                vector_3 target = {
-                       frandomize (0.0f, + ray_force / 6.0f),
-                       frandomize (0.0f, + ray_force / 1.0f),
-                       frandomize (0.0f, + ray_force / 6.0f),
+                       random_real (0.0f, + ray_force / 6.0f),
+                       random_real (0.0f, + ray_force / 1.0f),
+                       random_real (0.0f, + ray_force / 6.0f),
                };
 
                vector_3 speed = {
                };
 
                vector_3 speed = {
-                       frandomize (- ray_force, + ray_force),
-                       frandomize (- ray_force, + ray_force),
-                       frandomize (- ray_force, + ray_force)
+                       random_real (- ray_force, + ray_force),
+                       random_real (- ray_force, + ray_force),
+                       random_real (- ray_force, + ray_force)
                };
 
                };
 
-               life += frandomize (- 1.0f, + 1.0f);
+               life += random_real (- 1.0f, + 1.0f);
 
                particle_append (particle, sprite, life, colour_in, colour_out, position, & target, & speed);
        }
 }
 
 
                particle_append (particle, sprite, life, colour_in, colour_out, position, & target, & speed);
        }
 }
 
-static v0 particle_synchronize (particle_structure * particle, u4 framerate) {
-       for (u4 index = 0; index < particle->count; ++index) {
-               particle->life [index] -= 1.0f / (float) framerate;
+static procedure particle_synchronize (particle_structure * particle, natural framerate) {
+       for (natural index = 0; index < particle->count; ++index) {
+               particle->life [index] -= 1.0f / (real) framerate;
 
                if (particle->life [index] < 0.0f) {
                        particle_remove (particle, index);
 
                if (particle->life [index] < 0.0f) {
                        particle_remove (particle, index);
index 22f7eb69b084c2db15057bb5703026255a629ced..7d497afef5967978da804d8763f59011ec11fa87 100644 (file)
--- a/xatrix.h
+++ b/xatrix.h
 /// warranty of merchantability or fitness for a particular purpose, because it is pointless. Please see the GNU (Geenoo) General Public License
 /// for more details, if you dare, it is a lot of text that nobody wants to read...
 
 /// warranty of merchantability or fitness for a particular purpose, because it is pointless. Please see the GNU (Geenoo) General Public License
 /// for more details, if you dare, it is a lot of text that nobody wants to read...
 
-typedef f4 matrix_2 [2] [2];
-typedef f4 matrix_3 [3] [3];
-typedef f4 matrix_4 [4] [4];
+/// Description
+///
+/// Xatrix, my tiny braindead unoptimized matrix library. Unlike vectors that use x, y, z and w structure fields, matrices are double array of
+/// 32-bit floating point numbers, and they're accessed with integers, which should've been the same case with vectors, but mathematicians are
+/// dumb sometimes (blame it on the one being older than the other one?). Again, nothing much to talk about here, learn linear algebra, include
+/// this header file in your project, use it however you want, compilers might optimize this better than my vector library. This library isn't
+/// intended for neural networks, as it's not generic, it can be used in simple CPU-based ray tracers and physics simulations.
+
+/// Nice 2D, 3D and 4D matrix structures.
+
+typedef real matrix_2 [2] [2]; /// Tiny 2x2 matrix.
+typedef real matrix_3 [3] [3]; /// Tiny 3x3 matrix.
+typedef real matrix_4 [4] [4]; /// Tiny 4x4 matrix.
+
+/// Assign values to 2D, 3D or 4D matrix and return address of that matrix.
 
 static matrix_2 * matrix_2_assign (matrix_2 * destination,
 
 static matrix_2 * matrix_2_assign (matrix_2 * destination,
-                                   f4 m00, f4 m01,
-                                   f4 m10, f4 m11) {
-       destination [0] [0] = m00;
-       destination [0] [1] = m01;
-       destination [1] [0] = m10;
-       destination [1] [1] = m11;
+                                   real m00, real m01,
+                                   real m10, real m11) {
+       destination [0] [0] = m00; destination [0] [1] = m01;
+       destination [1] [0] = m10; destination [1] [1] = m11;
 
        return (destination);
 }
 
 static matrix_3 * matrix_3_assign (matrix_3 * destination,
 
        return (destination);
 }
 
 static matrix_3 * matrix_3_assign (matrix_3 * destination,
-                                   f4 m00, f4 m01, f4 m02,
-                                   f4 m10, f4 m11, f4 m12,
-                                   f4 m20, f4 m21, f4 m22) {
-       destination [0] [0] = m00;
-       destination [0] [1] = m01;
-       destination [0] [2] = m02;
-       destination [1] [0] = m10;
-       destination [1] [1] = m11;
-       destination [1] [2] = m12;
-       destination [2] [0] = m20;
-       destination [2] [1] = m21;
-       destination [2] [2] = m22;
+                                   real m00, real m01, real m02,
+                                   real m10, real m11, real m12,
+                                   real m20, real m21, real m22) {
+       destination [0] [0] = m00; destination [0] [1] = m01; destination [0] [2] = m02;
+       destination [1] [0] = m10; destination [1] [1] = m11; destination [1] [2] = m12;
+       destination [2] [0] = m20; destination [2] [1] = m21; destination [2] [2] = m22;
 
        return (destination);
 }
 
 static matrix_4 * matrix_4_assign (matrix_4 * destination,
 
        return (destination);
 }
 
 static matrix_4 * matrix_4_assign (matrix_4 * destination,
-                                   f4 m00, f4 m01, f4 m02, f4 m03,
-                                   f4 m10, f4 m11, f4 m12, f4 m13,
-                                   f4 m20, f4 m21, f4 m22, f4 m23,
-                                   f4 m30, f4 m31, f4 m32, f4 m33) {
-       destination [0] [0] = m00;
-       destination [0] [1] = m01;
-       destination [0] [2] = m02;
-       destination [0] [3] = m03;
-       destination [1] [0] = m10;
-       destination [1] [1] = m11;
-       destination [1] [2] = m12;
-       destination [1] [3] = m13;
-       destination [2] [0] = m20;
-       destination [2] [1] = m21;
-       destination [2] [2] = m22;
-       destination [2] [3] = m23;
-       destination [3] [0] = m30;
-       destination [3] [1] = m31;
-       destination [3] [2] = m32;
-       destination [3] [3] = m33;
+                                   real m00, real m01, real m02, real m03,
+                                   real m10, real m11, real m12, real m13,
+                                   real m20, real m21, real m22, real m23,
+                                   real m30, real m31, real m32, real m33) {
+       destination [0] [0] = m00; destination [0] [1] = m01; destination [0] [2] = m02; destination [0] [3] = m03;
+       destination [1] [0] = m10; destination [1] [1] = m11; destination [1] [2] = m12; destination [1] [3] = m13;
+       destination [2] [0] = m20; destination [2] [1] = m21; destination [2] [2] = m22; destination [2] [3] = m23;
+       destination [3] [0] = m30; destination [3] [1] = m31; destination [3] [2] = m32; destination [3] [3] = m33;
 
        return (destination);
 }
 
 
        return (destination);
 }
 
+/// Nullify values of 2D, 3D or 4D matrix and return address of that matrix.
+
 static matrix_2 * matrix_2_nullify (matrix_2 * destination) {
 static matrix_2 * matrix_2_nullify (matrix_2 * destination) {
-       for (u4 row = 0; row < 2; ++row) {
-               for (u4 column = 0; column < 2; ++column) {
+       for (natural row = 0; row < 2; ++row) {
+               for (natural column = 0; column < 2; ++column) {
                        destination [row] [column] = 0.0f;
                }
        }
                        destination [row] [column] = 0.0f;
                }
        }
@@ -83,8 +77,8 @@ static matrix_2 * matrix_2_nullify (matrix_2 * destination) {
 }
 
 static matrix_3 * matrix_3_nullify (matrix_3 * destination) {
 }
 
 static matrix_3 * matrix_3_nullify (matrix_3 * destination) {
-       for (u4 row = 0; row < 3; ++row) {
-               for (u4 column = 0; column < 3; ++column) {
+       for (natural row = 0; row < 3; ++row) {
+               for (natural column = 0; column < 3; ++column) {
                        destination [row] [column] = 0.0f;
                }
        }
                        destination [row] [column] = 0.0f;
                }
        }
@@ -93,8 +87,8 @@ static matrix_3 * matrix_3_nullify (matrix_3 * destination) {
 }
 
 static matrix_4 * matrix_4_nullify (matrix_4 * destination) {
 }
 
 static matrix_4 * matrix_4_nullify (matrix_4 * destination) {
-       for (u4 row = 0; row < 4; ++row) {
-               for (u4 column = 0; column < 4; ++column) {
+       for (natural row = 0; row < 4; ++row) {
+               for (natural column = 0; column < 4; ++column) {
                        destination [row] [column] = 0.0f;
                }
        }
                        destination [row] [column] = 0.0f;
                }
        }
@@ -102,10 +96,12 @@ static matrix_4 * matrix_4_nullify (matrix_4 * destination) {
        return (destination);
 }
 
        return (destination);
 }
 
+/// Identify values of 2D, 3D or 4D matrix and return address of that matrix.
+
 static matrix_2 * matrix_2_identity (matrix_2 * destination) {
        destination = matrix_2_nullify (destination);
 
 static matrix_2 * matrix_2_identity (matrix_2 * destination) {
        destination = matrix_2_nullify (destination);
 
-       for (u4 index = 0; index < 2; ++index) {
+       for (natural index = 0; index < 2; ++index) {
                destination [index] [index] = 1.0f;
        }
 
                destination [index] [index] = 1.0f;
        }
 
@@ -115,7 +111,7 @@ static matrix_2 * matrix_2_identity (matrix_2 * destination) {
 static matrix_3 * matrix_3_identity (matrix_3 * destination) {
        destination = matrix_3_nullify (destination);
 
 static matrix_3 * matrix_3_identity (matrix_3 * destination) {
        destination = matrix_3_nullify (destination);
 
-       for (u4 index = 0; index < 3; ++index) {
+       for (natural index = 0; index < 3; ++index) {
                destination [index] [index] = 1.0f;
        }
 
                destination [index] [index] = 1.0f;
        }
 
@@ -125,60 +121,64 @@ static matrix_3 * matrix_3_identity (matrix_3 * destination) {
 static matrix_4 * matrix_4_identity (matrix_4 * destination) {
        destination = matrix_4_nullify (destination);
 
 static matrix_4 * matrix_4_identity (matrix_4 * destination) {
        destination = matrix_4_nullify (destination);
 
-       for (u4 index = 0; index < 4; ++index) {
+       for (natural index = 0; index < 4; ++index) {
                destination [index] [index] = 1.0f;
        }
 
        return (destination);
 }
 
                destination [index] [index] = 1.0f;
        }
 
        return (destination);
 }
 
-static f4 matrix_2_determinant (matrix_2 * matrix) {
-       f4 a = matrix [0] [0] * matrix [1] [1];
-       f4 b = matrix [0] [1] * matrix [1] [0];
+/// Return determinant of 2D, 3D or 4D matrix.
+
+static real matrix_2_determinant (matrix_2 * matrix) {
+       real a = matrix [0] [0] * matrix [1] [1];
+       real b = matrix [0] [1] * matrix [1] [0];
 
        return (a - b);
 }
 
 
        return (a - b);
 }
 
-static f4 matrix_3_determinant (matrix_3 * matrix) {
+static real matrix_3_determinant (matrix_3 * matrix) {
        matrix_2 matrix_a = { { matrix [1] [1], matrix [1] [2] },
        matrix_2 matrix_a = { { matrix [1] [1], matrix [1] [2] },
-                                   { matrix [2] [1], matrix [2] [2] } };
+                             { matrix [2] [1], matrix [2] [2] } };
        matrix_2 matrix_b = { { matrix [1] [0], matrix [1] [2] },
        matrix_2 matrix_b = { { matrix [1] [0], matrix [1] [2] },
-                                   { matrix [2] [0], matrix [2] [2] } };
+                             { matrix [2] [0], matrix [2] [2] } };
        matrix_2 matrix_c = { { matrix [1] [0], matrix [1] [1] },
        matrix_2 matrix_c = { { matrix [1] [0], matrix [1] [1] },
-                                   { matrix [2] [0], matrix [2] [1] } };
+                             { matrix [2] [0], matrix [2] [1] } };
 
 
-       f4 a = matrix [0] [0] * matrix_2_determinant (& matrix_a);
-       f4 b = matrix [0] [1] * matrix_2_determinant (& matrix_b);
-       f4 c = matrix [0] [2] * matrix_2_determinant (& matrix_c);
+       real a = matrix [0] [0] * matrix_2_determinant (& matrix_a);
+       real b = matrix [0] [1] * matrix_2_determinant (& matrix_b);
+       real c = matrix [0] [2] * matrix_2_determinant (& matrix_c);
 
        return (a - b + c);
 }
 
 
        return (a - b + c);
 }
 
-static f4 matrix_4_determinant (matrix_4 * matrix) {
+static real matrix_4_determinant (matrix_4 * matrix) {
        matrix_3 matrix_a = { { matrix [1] [1], matrix [1] [2], matrix [1] [3] },
        matrix_3 matrix_a = { { matrix [1] [1], matrix [1] [2], matrix [1] [3] },
-                                   { matrix [2] [1], matrix [2] [2], matrix [2] [3] },
-                                   { matrix [3] [1], matrix [3] [2], matrix [3] [3] } };
+                             { matrix [2] [1], matrix [2] [2], matrix [2] [3] },
+                             { matrix [3] [1], matrix [3] [2], matrix [3] [3] } };
        matrix_3 matrix_b = { { matrix [1] [0], matrix [1] [2], matrix [1] [3] },
        matrix_3 matrix_b = { { matrix [1] [0], matrix [1] [2], matrix [1] [3] },
-                                   { matrix [2] [0], matrix [2] [2], matrix [2] [3] },
-                                   { matrix [3] [0], matrix [3] [2], matrix [3] [3] } };
+                             { matrix [2] [0], matrix [2] [2], matrix [2] [3] },
+                             { matrix [3] [0], matrix [3] [2], matrix [3] [3] } };
        matrix_3 matrix_c = { { matrix [1] [0], matrix [1] [1], matrix [1] [3] },
        matrix_3 matrix_c = { { matrix [1] [0], matrix [1] [1], matrix [1] [3] },
-                                   { matrix [2] [0], matrix [2] [1], matrix [2] [3] },
-                                   { matrix [3] [0], matrix [3] [1], matrix [3] [3] } };
+                             { matrix [2] [0], matrix [2] [1], matrix [2] [3] },
+                             { matrix [3] [0], matrix [3] [1], matrix [3] [3] } };
        matrix_3 matrix_d = { { matrix [1] [0], matrix [1] [1], matrix [1] [2] },
        matrix_3 matrix_d = { { matrix [1] [0], matrix [1] [1], matrix [1] [2] },
-                                   { matrix [2] [0], matrix [2] [1], matrix [2] [2] },
-                                   { matrix [3] [0], matrix [3] [1], matrix [3] [2] } };
+                             { matrix [2] [0], matrix [2] [1], matrix [2] [2] },
+                             { matrix [3] [0], matrix [3] [1], matrix [3] [2] } };
 
 
-       f4 a = matrix [0] [0] * matrix_3_determinant (& matrix_a);
-       f4 b = matrix [0] [1] * matrix_3_determinant (& matrix_b);
-       f4 c = matrix [0] [2] * matrix_3_determinant (& matrix_c);
-       f4 d = matrix [0] [3] * matrix_3_determinant (& matrix_d);
+       real a = matrix [0] [0] * matrix_3_determinant (& matrix_a);
+       real b = matrix [0] [1] * matrix_3_determinant (& matrix_b);
+       real c = matrix [0] [2] * matrix_3_determinant (& matrix_c);
+       real d = matrix [0] [3] * matrix_3_determinant (& matrix_d);
 
        return (a - b + c - d);
 }
 
 
        return (a - b + c - d);
 }
 
+/// Copy 2D, 3D or 4D source matrix into destination matrix.
+
 static matrix_2 * matrix_2_copy (matrix_2 * destination, matrix_2 * source) {
 static matrix_2 * matrix_2_copy (matrix_2 * destination, matrix_2 * source) {
-       for (u4 row = 0; row < 2; ++row) {
-               for (u4 column = 0; column < 2; ++column) {
+       for (natural row = 0; row < 2; ++row) {
+               for (natural column = 0; column < 2; ++column) {
                        destination [row] [column] = source [row] [column];
                }
        }
                        destination [row] [column] = source [row] [column];
                }
        }
@@ -187,8 +187,8 @@ static matrix_2 * matrix_2_copy (matrix_2 * destination, matrix_2 * source) {
 }
 
 static matrix_3 * matrix_3_copy (matrix_3 * destination, matrix_3 * source) {
 }
 
 static matrix_3 * matrix_3_copy (matrix_3 * destination, matrix_3 * source) {
-       for (u4 row = 0; row < 3; ++row) {
-               for (u4 column = 0; column < 3; ++column) {
+       for (natural row = 0; row < 3; ++row) {
+               for (natural column = 0; column < 3; ++column) {
                        destination [row] [column] = source [row] [column];
                }
        }
                        destination [row] [column] = source [row] [column];
                }
        }
@@ -197,8 +197,8 @@ static matrix_3 * matrix_3_copy (matrix_3 * destination, matrix_3 * source) {
 }
 
 static matrix_4 * matrix_4_copy (matrix_4 * destination, matrix_4 * source) {
 }
 
 static matrix_4 * matrix_4_copy (matrix_4 * destination, matrix_4 * source) {
-       for (u4 row = 0; row < 4; ++row) {
-               for (u4 column = 0; column < 4; ++column) {
+       for (natural row = 0; row < 4; ++row) {
+               for (natural column = 0; column < 4; ++column) {
                        destination [row] [column] = source [row] [column];
                }
        }
                        destination [row] [column] = source [row] [column];
                }
        }
@@ -206,9 +206,11 @@ static matrix_4 * matrix_4_copy (matrix_4 * destination, matrix_4 * source) {
        return (destination);
 }
 
        return (destination);
 }
 
-static matrix_2 * matrix_2_scale (matrix_2 * destination, f4 scale) {
-       for (u4 row = 0; row < 2; ++row) {
-               for (u4 column = 0; column < 2; ++column) {
+/// Scale 2D, 3D or 4D matrix by scalar value and return address of that matrix.
+
+static matrix_2 * matrix_2_scale (matrix_2 * destination, real scale) {
+       for (natural row = 0; row < 2; ++row) {
+               for (natural column = 0; column < 2; ++column) {
                        destination [row] [column] *= scale;
                }
        }
                        destination [row] [column] *= scale;
                }
        }
@@ -216,9 +218,9 @@ static matrix_2 * matrix_2_scale (matrix_2 * destination, f4 scale) {
        return (destination);
 }
 
        return (destination);
 }
 
-static matrix_3 * matrix_3_scale (matrix_3 * destination, f4 scale) {
-       for (u4 row = 0; row < 3; ++row) {
-               for (u4 column = 0; column < 3; ++column) {
+static matrix_3 * matrix_3_scale (matrix_3 * destination, real scale) {
+       for (natural row = 0; row < 3; ++row) {
+               for (natural column = 0; column < 3; ++column) {
                        destination [row] [column] *= scale;
                }
        }
                        destination [row] [column] *= scale;
                }
        }
@@ -226,9 +228,9 @@ static matrix_3 * matrix_3_scale (matrix_3 * destination, f4 scale) {
        return (destination);
 }
 
        return (destination);
 }
 
-static matrix_4 * matrix_4_scale (matrix_4 * destination, f4 scale) {
-       for (u4 row = 0; row < 4; ++row) {
-               for (u4 column = 0; column < 4; ++column) {
+static matrix_4 * matrix_4_scale (matrix_4 * destination, real scale) {
+       for (natural row = 0; row < 4; ++row) {
+               for (natural column = 0; column < 4; ++column) {
                        destination [row] [column] *= scale;
                }
        }
                        destination [row] [column] *= scale;
                }
        }
@@ -236,9 +238,11 @@ static matrix_4 * matrix_4_scale (matrix_4 * destination, f4 scale) {
        return (destination);
 }
 
        return (destination);
 }
 
-static matrix_2 * matrix_2_scale_to (matrix_2 * destination, matrix_2 * source, f4 scale) {
-       for (u4 row = 0; row < 2; ++row) {
-               for (u4 column = 0; column < 2; ++column) {
+/// Scale 2D, 3D or 4D source matrix by scalar value into destination matrix and return its address.
+
+static matrix_2 * matrix_2_scale_to (matrix_2 * destination, matrix_2 * source, real scale) {
+       for (natural row = 0; row < 2; ++row) {
+               for (natural column = 0; column < 2; ++column) {
                        destination [row] [column] = source [row] [column] * scale;
                }
        }
                        destination [row] [column] = source [row] [column] * scale;
                }
        }
@@ -246,9 +250,9 @@ static matrix_2 * matrix_2_scale_to (matrix_2 * destination, matrix_2 * source,
        return (destination);
 }
 
        return (destination);
 }
 
-static matrix_3 * matrix_3_scale_to (matrix_3 * destination, matrix_3 * source, f4 scale) {
-       for (u4 row = 0; row < 3; ++row) {
-               for (u4 column = 0; column < 3; ++column) {
+static matrix_3 * matrix_3_scale_to (matrix_3 * destination, matrix_3 * source, real scale) {
+       for (natural row = 0; row < 3; ++row) {
+               for (natural column = 0; column < 3; ++column) {
                        destination [row] [column] = source [row] [column] * scale;
                }
        }
                        destination [row] [column] = source [row] [column] * scale;
                }
        }
@@ -256,9 +260,9 @@ static matrix_3 * matrix_3_scale_to (matrix_3 * destination, matrix_3 * source,
        return (destination);
 }
 
        return (destination);
 }
 
-static matrix_4 * matrix_4_scale_to (matrix_4 * destination, matrix_4 * source, f4 scale) {
-       for (u4 row = 0; row < 4; ++row) {
-               for (u4 column = 0; column < 4; ++column) {
+static matrix_4 * matrix_4_scale_to (matrix_4 * destination, matrix_4 * source, real scale) {
+       for (natural row = 0; row < 4; ++row) {
+               for (natural column = 0; column < 4; ++column) {
                        destination [row] [column] = source [row] [column] * scale;
                }
        }
                        destination [row] [column] = source [row] [column] * scale;
                }
        }
@@ -266,9 +270,11 @@ static matrix_4 * matrix_4_scale_to (matrix_4 * destination, matrix_4 * source,
        return (destination);
 }
 
        return (destination);
 }
 
+/// Add 2D, 3D or 4D source matrix onto destination matrix and return address of destination matrix.
+
 static matrix_2 * matrix_2_add (matrix_2 * destination, matrix_2 * source) {
 static matrix_2 * matrix_2_add (matrix_2 * destination, matrix_2 * source) {
-       for (u4 row = 0; row < 2; ++row) {
-               for (u4 column = 0; column < 2; ++column) {
+       for (natural row = 0; row < 2; ++row) {
+               for (natural column = 0; column < 2; ++column) {
                        destination [row] [column] += source [row] [column];
                }
        }
                        destination [row] [column] += source [row] [column];
                }
        }
@@ -277,8 +283,8 @@ static matrix_2 * matrix_2_add (matrix_2 * destination, matrix_2 * source) {
 }
 
 static matrix_3 * matrix_3_add (matrix_3 * destination, matrix_3 * source) {
 }
 
 static matrix_3 * matrix_3_add (matrix_3 * destination, matrix_3 * source) {
-       for (u4 row = 0; row < 3; ++row) {
-               for (u4 column = 0; column < 3; ++column) {
+       for (natural row = 0; row < 3; ++row) {
+               for (natural column = 0; column < 3; ++column) {
                        destination [row] [column] += source [row] [column];
                }
        }
                        destination [row] [column] += source [row] [column];
                }
        }
@@ -287,8 +293,8 @@ static matrix_3 * matrix_3_add (matrix_3 * destination, matrix_3 * source) {
 }
 
 static matrix_4 * matrix_4_add (matrix_4 * destination, matrix_4 * source) {
 }
 
 static matrix_4 * matrix_4_add (matrix_4 * destination, matrix_4 * source) {
-       for (u4 row = 0; row < 4; ++row) {
-               for (u4 column = 0; column < 4; ++column) {
+       for (natural row = 0; row < 4; ++row) {
+               for (natural column = 0; column < 4; ++column) {
                        destination [row] [column] += source [row] [column];
                }
        }
                        destination [row] [column] += source [row] [column];
                }
        }
@@ -296,9 +302,11 @@ static matrix_4 * matrix_4_add (matrix_4 * destination, matrix_4 * source) {
        return (destination);
 }
 
        return (destination);
 }
 
+/// Add two 2D, 3D or 4D matrices into destination matrix and return address of destination matrix.
+
 static matrix_2 * matrix_2_add_to (matrix_2 * destination, matrix_2 * matrix_a, matrix_2 * matrix_b) {
 static matrix_2 * matrix_2_add_to (matrix_2 * destination, matrix_2 * matrix_a, matrix_2 * matrix_b) {
-       for (u4 row = 0; row < 2; ++row) {
-               for (u4 column = 0; column < 2; ++column) {
+       for (natural row = 0; row < 2; ++row) {
+               for (natural column = 0; column < 2; ++column) {
                        destination [row] [column] = matrix_a [row] [column] + matrix_b [row] [column];
                }
        }
                        destination [row] [column] = matrix_a [row] [column] + matrix_b [row] [column];
                }
        }
@@ -307,8 +315,8 @@ static matrix_2 * matrix_2_add_to (matrix_2 * destination, matrix_2 * matrix_a,
 }
 
 static matrix_3 * matrix_3_add_to (matrix_3 * destination, matrix_3 * matrix_a, matrix_3 * matrix_b) {
 }
 
 static matrix_3 * matrix_3_add_to (matrix_3 * destination, matrix_3 * matrix_a, matrix_3 * matrix_b) {
-       for (u4 row = 0; row < 3; ++row) {
-               for (u4 column = 0; column < 3; ++column) {
+       for (natural row = 0; row < 3; ++row) {
+               for (natural column = 0; column < 3; ++column) {
                        destination [row] [column] = matrix_a [row] [column] + matrix_b [row] [column];
                }
        }
                        destination [row] [column] = matrix_a [row] [column] + matrix_b [row] [column];
                }
        }
@@ -317,8 +325,8 @@ static matrix_3 * matrix_3_add_to (matrix_3 * destination, matrix_3 * matrix_a,
 }
 
 static matrix_4 * matrix_4_add_to (matrix_4 * destination, matrix_4 * matrix_a, matrix_4 * matrix_b) {
 }
 
 static matrix_4 * matrix_4_add_to (matrix_4 * destination, matrix_4 * matrix_a, matrix_4 * matrix_b) {
-       for (u4 row = 0; row < 4; ++row) {
-               for (u4 column = 0; column < 4; ++column) {
+       for (natural row = 0; row < 4; ++row) {
+               for (natural column = 0; column < 4; ++column) {
                        destination [row] [column] = matrix_a [row] [column] + matrix_b [row] [column];
                }
        }
                        destination [row] [column] = matrix_a [row] [column] + matrix_b [row] [column];
                }
        }
@@ -326,9 +334,11 @@ static matrix_4 * matrix_4_add_to (matrix_4 * destination, matrix_4 * matrix_a,
        return (destination);
 }
 
        return (destination);
 }
 
+/// Subtract 2D, 3D or 4D source matrix from destination matrix and return address of destination matrix.
+
 static matrix_2 * matrix_2_subtract (matrix_2 * destination, matrix_2 * source) {
 static matrix_2 * matrix_2_subtract (matrix_2 * destination, matrix_2 * source) {
-       for (u4 row = 0; row < 2; ++row) {
-               for (u4 column = 0; column < 2; ++column) {
+       for (natural row = 0; row < 2; ++row) {
+               for (natural column = 0; column < 2; ++column) {
                        destination [row] [column] -= source [row] [column];
                }
        }
                        destination [row] [column] -= source [row] [column];
                }
        }
@@ -337,8 +347,8 @@ static matrix_2 * matrix_2_subtract (matrix_2 * destination, matrix_2 * source)
 }
 
 static matrix_3 * matrix_3_subtract (matrix_3 * destination, matrix_3 * source) {
 }
 
 static matrix_3 * matrix_3_subtract (matrix_3 * destination, matrix_3 * source) {
-       for (u4 row = 0; row < 3; ++row) {
-               for (u4 column = 0; column < 3; ++column) {
+       for (natural row = 0; row < 3; ++row) {
+               for (natural column = 0; column < 3; ++column) {
                        destination [row] [column] -= source [row] [column];
                }
        }
                        destination [row] [column] -= source [row] [column];
                }
        }
@@ -347,8 +357,8 @@ static matrix_3 * matrix_3_subtract (matrix_3 * destination, matrix_3 * source)
 }
 
 static matrix_4 * matrix_4_subtract (matrix_4 * destination, matrix_4 * source) {
 }
 
 static matrix_4 * matrix_4_subtract (matrix_4 * destination, matrix_4 * source) {
-       for (u4 row = 0; row < 4; ++row) {
-               for (u4 column = 0; column < 4; ++column) {
+       for (natural row = 0; row < 4; ++row) {
+               for (natural column = 0; column < 4; ++column) {
                        destination [row] [column] -= source [row] [column];
                }
        }
                        destination [row] [column] -= source [row] [column];
                }
        }
@@ -356,9 +366,11 @@ static matrix_4 * matrix_4_subtract (matrix_4 * destination, matrix_4 * source)
        return (destination);
 }
 
        return (destination);
 }
 
+/// Subtract two 2D, 3D or 4D matrices, save values into destination matrix and return address of destination matrix.
+
 static matrix_2 * matrix_2_subtract_to (matrix_2 * destination, matrix_2 * matrix_a, matrix_2 * matrix_b) {
 static matrix_2 * matrix_2_subtract_to (matrix_2 * destination, matrix_2 * matrix_a, matrix_2 * matrix_b) {
-       for (u4 row = 0; row < 2; ++row) {
-               for (u4 column = 0; column < 2; ++column) {
+       for (natural row = 0; row < 2; ++row) {
+               for (natural column = 0; column < 2; ++column) {
                        destination [row] [column] = matrix_a [row] [column] - matrix_b [row] [column];
                }
        }
                        destination [row] [column] = matrix_a [row] [column] - matrix_b [row] [column];
                }
        }
@@ -367,8 +379,8 @@ static matrix_2 * matrix_2_subtract_to (matrix_2 * destination, matrix_2 * matri
 }
 
 static matrix_3 * matrix_3_subtract_to (matrix_3 * destination, matrix_3 * matrix_a, matrix_3 * matrix_b) {
 }
 
 static matrix_3 * matrix_3_subtract_to (matrix_3 * destination, matrix_3 * matrix_a, matrix_3 * matrix_b) {
-       for (u4 row = 0; row < 3; ++row) {
-               for (u4 column = 0; column < 3; ++column) {
+       for (natural row = 0; row < 3; ++row) {
+               for (natural column = 0; column < 3; ++column) {
                        destination [row] [column] = matrix_a [row] [column] - matrix_b [row] [column];
                }
        }
                        destination [row] [column] = matrix_a [row] [column] - matrix_b [row] [column];
                }
        }
@@ -377,8 +389,8 @@ static matrix_3 * matrix_3_subtract_to (matrix_3 * destination, matrix_3 * matri
 }
 
 static matrix_4 * matrix_4_subtract_to (matrix_4 * destination, matrix_4 * matrix_a, matrix_4 * matrix_b) {
 }
 
 static matrix_4 * matrix_4_subtract_to (matrix_4 * destination, matrix_4 * matrix_a, matrix_4 * matrix_b) {
-       for (u4 row = 0; row < 4; ++row) {
-               for (u4 column = 0; column < 4; ++column) {
+       for (natural row = 0; row < 4; ++row) {
+               for (natural column = 0; column < 4; ++column) {
                        destination [row] [column] = matrix_a [row] [column] - matrix_b [row] [column];
                }
        }
                        destination [row] [column] = matrix_a [row] [column] - matrix_b [row] [column];
                }
        }
@@ -386,12 +398,14 @@ static matrix_4 * matrix_4_subtract_to (matrix_4 * destination, matrix_4 * matri
        return (destination);
 }
 
        return (destination);
 }
 
+/// Multiply two 2D, 3D or 4D matrices, save values into destination matrix and return address of destination matrix.
+
 static matrix_2 * matrix_2_multiply (matrix_2 * result, matrix_2 * matrix_a, matrix_2 * matrix_b) {
 static matrix_2 * matrix_2_multiply (matrix_2 * result, matrix_2 * matrix_a, matrix_2 * matrix_b) {
-       for (u4 row = 0; row < 2; ++row) {
-               for (u4 column = 0; column < 2; ++column) {
+       for (natural row = 0; row < 2; ++row) {
+               for (natural column = 0; column < 2; ++column) {
                        result [row] [column] = 0.0f;
 
                        result [row] [column] = 0.0f;
 
-                       for (u4 index = 0; index < 2; ++index) {
+                       for (natural index = 0; index < 2; ++index) {
                                result [row] [column] += matrix_a [row] [index] * matrix_b [index] [column];
                        }
                }
                                result [row] [column] += matrix_a [row] [index] * matrix_b [index] [column];
                        }
                }
@@ -401,11 +415,11 @@ static matrix_2 * matrix_2_multiply (matrix_2 * result, matrix_2 * matrix_a, mat
 }
 
 static matrix_3 * matrix_3_multiply (matrix_3 * result, matrix_3 * matrix_a, matrix_3 * matrix_b) {
 }
 
 static matrix_3 * matrix_3_multiply (matrix_3 * result, matrix_3 * matrix_a, matrix_3 * matrix_b) {
-       for (u4 row = 0; row < 3; ++row) {
-               for (u4 column = 0; column < 3; ++column) {
+       for (natural row = 0; row < 3; ++row) {
+               for (natural column = 0; column < 3; ++column) {
                        result [row] [column] = 0.0f;
 
                        result [row] [column] = 0.0f;
 
-                       for (u4 index = 0; index < 3; ++index) {
+                       for (natural index = 0; index < 3; ++index) {
                                result [row] [column] += matrix_a [row] [index] * matrix_b [index] [column];
                        }
                }
                                result [row] [column] += matrix_a [row] [index] * matrix_b [index] [column];
                        }
                }
@@ -415,11 +429,11 @@ static matrix_3 * matrix_3_multiply (matrix_3 * result, matrix_3 * matrix_a, mat
 }
 
 static matrix_4 * matrix_4_multiply (matrix_4 * result, matrix_4 * matrix_a, matrix_4 * matrix_b) {
 }
 
 static matrix_4 * matrix_4_multiply (matrix_4 * result, matrix_4 * matrix_a, matrix_4 * matrix_b) {
-       for (u4 row = 0; row < 4; ++row) {
-               for (u4 column = 0; column < 4; ++column) {
+       for (natural row = 0; row < 4; ++row) {
+               for (natural column = 0; column < 4; ++column) {
                        result [row] [column] = 0.0f;
 
                        result [row] [column] = 0.0f;
 
-                       for (u4 index = 0; index < 4; ++index) {
+                       for (natural index = 0; index < 4; ++index) {
                                result [row] [column] += matrix_a [row] [index] * matrix_b [index] [column];
                        }
                }
                                result [row] [column] += matrix_a [row] [index] * matrix_b [index] [column];
                        }
                }
@@ -428,21 +442,25 @@ static matrix_4 * matrix_4_multiply (matrix_4 * result, matrix_4 * matrix_a, mat
        return (result);
 }
 
        return (result);
 }
 
-static f4 matrix_2_trace (matrix_2 * matrix) {
+/// Return trace of 2D, 3D or 4D matrix.
+
+static real matrix_2_trace (matrix_2 * matrix) {
        return (matrix [0] [0] + matrix [1] [1]);
 }
 
        return (matrix [0] [0] + matrix [1] [1]);
 }
 
-static f4 matrix_3_trace (matrix_3 * matrix) {
+static real matrix_3_trace (matrix_3 * matrix) {
        return (matrix [0] [0] + matrix [1] [1] + matrix [2] [2]);
 }
 
        return (matrix [0] [0] + matrix [1] [1] + matrix [2] [2]);
 }
 
-static f4 matrix_4_trace (matrix_4 * matrix) {
+static real matrix_4_trace (matrix_4 * matrix) {
        return (matrix [0] [0] + matrix [1] [1] + matrix [2] [2] + matrix [3] [3]);
 }
 
        return (matrix [0] [0] + matrix [1] [1] + matrix [2] [2] + matrix [3] [3]);
 }
 
-static b4 matrix_2_compare (matrix_2 * matrix_a, matrix_2 * matrix_b) {
-       for (u4 row = 0; row < 2; ++row) {
-               for (u4 column = 0; column < 2; ++column) {
+/// Compare if two 2D, 3D or 4D matrices are identical and return boolean value of it.
+
+static boolean matrix_2_compare (matrix_2 * matrix_a, matrix_2 * matrix_b) {
+       for (natural row = 0; row < 2; ++row) {
+               for (natural column = 0; column < 2; ++column) {
                        if (matrix_a [row] [column] != matrix_b [row] [column]) {
                                return (false);
                        }
                        if (matrix_a [row] [column] != matrix_b [row] [column]) {
                                return (false);
                        }
@@ -452,9 +470,9 @@ static b4 matrix_2_compare (matrix_2 * matrix_a, matrix_2 * matrix_b) {
        return (true);
 }
 
        return (true);
 }
 
-static b4 matrix_3_compare (matrix_3 * matrix_a, matrix_3 * matrix_b) {
-       for (u4 row = 0; row < 3; ++row) {
-               for (u4 column = 0; column < 3; ++column) {
+static boolean matrix_3_compare (matrix_3 * matrix_a, matrix_3 * matrix_b) {
+       for (natural row = 0; row < 3; ++row) {
+               for (natural column = 0; column < 3; ++column) {
                        if (matrix_a [row] [column] != matrix_b [row] [column]) {
                                return (false);
                        }
                        if (matrix_a [row] [column] != matrix_b [row] [column]) {
                                return (false);
                        }
@@ -464,9 +482,9 @@ static b4 matrix_3_compare (matrix_3 * matrix_a, matrix_3 * matrix_b) {
        return (true);
 }
 
        return (true);
 }
 
-static b4 matrix_4_compare (matrix_4 * matrix_a, matrix_4 * matrix_b) {
-       for (u4 row = 0; row < 4; ++row) {
-               for (u4 column = 0; column < 4; ++column) {
+static boolean matrix_4_compare (matrix_4 * matrix_a, matrix_4 * matrix_b) {
+       for (natural row = 0; row < 4; ++row) {
+               for (natural column = 0; column < 4; ++column) {
                        if (matrix_a [row] [column] != matrix_b [row] [column]) {
                                return (false);
                        }
                        if (matrix_a [row] [column] != matrix_b [row] [column]) {
                                return (false);
                        }
@@ -475,36 +493,3 @@ static b4 matrix_4_compare (matrix_4 * matrix_a, matrix_4 * matrix_b) {
 
        return (true);
 }
 
        return (true);
 }
-
-static v0 matrix_2_transpose (matrix_2 * matrix_a, matrix_2 * matrix_b) {
-       for (u4 row = 0; row < 2; ++row) {
-               for (u4 column = row + 1; column < 2; ++column) {
-                       f4 temporary = matrix_a [row] [column];
-
-                       matrix_a [row] [column] = matrix_b [column] [row];
-                       matrix_b [column] [row] = temporary;
-               }
-       }
-}
-
-static v0 matrix_3_transpose (matrix_3 * matrix_a, matrix_3 * matrix_b) {
-       for (u4 row = 0; row < 3; ++row) {
-               for (u4 column = 0; column < 3; ++column) {
-                       f4 temporary = matrix_a [row] [column];
-
-                       matrix_a [row] [column] = matrix_b [column] [row];
-                       matrix_b [column] [row] = temporary;
-               }
-       }
-}
-
-static v0 matrix_4_transpose (matrix_4 * matrix_a, matrix_4 * matrix_b) {
-       for (u4 row = 0; row < 4; ++row) {
-               for (u4 column = 0; column < 4; ++column) {
-                       f4 temporary = matrix_a [row] [column];
-
-                       matrix_a [row] [column] = matrix_b [column] [row];
-                       matrix_b [column] [row] = temporary;
-               }
-       }
-}
index 9c0bd4f5c914cc3f7624ff749f0723d1c1c323b7..965113511fd5a2208c32fa09e88fc0324ea7ce0a 100755 (executable)
--- a/xcript.h
+++ b/xcript.h
 /// warranty of merchantability or fitness for a particular purpose, because it is pointless. Please see the GNU (Geenoo) General Public License
 /// for more details, if you dare, it is a lot of text that nobody wants to read...
 
 /// warranty of merchantability or fitness for a particular purpose, because it is pointless. Please see the GNU (Geenoo) General Public License
 /// for more details, if you dare, it is a lot of text that nobody wants to read...
 
+/// Description
+///
+/// Xcript, autistic whitespace insignificant INI/CFG-like script parser. What else to say? Usage is more complex, this library is good for
+/// defining data in configuration files that corresponds with hardcoded variables or structure fields. More elaborate examples are in my other
+/// programs such as Xhads and Xhallenge for now, this will be used in few more projects that I planned.
+///
+/// Since this is single header library, just include it in your C source file, no need to use any stb-like macros for it as it was intended to
+/// be used in projects with only one source file. After that, you want to initialize some structures and open some files, it'll be more clear as
+/// you continue reading "documentation" below. I still think it's better to check out two projects mentioned above tho.
+
+/// Enumeration of scripts syntax elements.
+
 typedef enum {
        script_unknown, script_comment, script_string,  script_number,  script_marker,  script_header,  script_assign,  script_end,
        script_from,    script_to,      script_next
 typedef enum {
        script_unknown, script_comment, script_string,  script_number,  script_marker,  script_header,  script_assign,  script_end,
        script_from,    script_to,      script_next
-} script_word_type;
+} script_word_enumeration;
+
+/// Script data structure, you want to define one per file you open, usage will be explained belo, they work one string per time.
+///
+/// script_data_structure * script = null;
 
 typedef struct {
 
 typedef struct {
-       c1 * path;
-       c1 * source;
-       u4   prefix;
-       u4   length;
-       u4   suffix;
-       u4   offset;
-       u4   line;
-       u4   last_length;
-       c1 * last_string;
-       b4   force;
-       b4   range;
-} script_structure;
+       character * path;        /// File path for the script used in warnings and failures.
+       character * source;      /// Raw character data imported from that file.
+       natural     prefix;      /// Amount of ignored characters before last string.
+       natural     length;      /// Amount of detected characters in last string.
+       natural     suffix;      /// Amount of ignored characters after last string.
+       natural     offset;      /// Offset inside script file data.
+       natural     line;        /// Currently active line in script file.
+       natural     last_length; /// Length of last selected string.
+       character * last_string; /// Address of first character of last selected string.
+       boolean     force;       /// Reserved for future use...
+       boolean     range;       /// Boolean value for ranged expressions.
+} script_data_structure;
+
+/// Script structure containing global data, you want to have one per parsing unit, often one per entire project.
+///
+/// script_structure * information = null;
 
 typedef struct {
 
 typedef struct {
-       u4     counter;
-       c1 * * identifier;
-       u4   * index;
-} script_information;
+       natural       counter;    /// Identifier count.
+       character * * identifier; /// Array of identifier strings.
+       natural     * index;      /// Array of identifier indices.
+} script_structure;
 
 
-static v0 script_warning (script_structure * script, b4 condition, c1 * message) {
+/// Print a warning message if condition was true, otherwise continue parsing the script, minor errors should be warnings.
+///
+/// script_warning (script, name_defined == true, "Marker 'name' already defined.");
+
+static procedure script_warning (script_data_structure * script, boolean condition, character * message) {
        if (condition == true) {
        if (condition == true) {
-               print ("[/3Warning/-] %s: %i: %s\n", script->path, script->line, message);
+               print ("/w %s: %i: %s\n", script->path, script->line, message);
        }
 }
 
        }
 }
 
-static v0 script_failure (script_structure * script, b4 condition, c1 * message) {
-       if (condition == true) {
-               print ("[/1Failure/-] %s: %i: %s\n", script->path, script->line, message);
+/// Print a failure message and exit program if condition was true, otherwise continue parsing the script, major errors should be failures.
+///
+/// script_failure (script, name_defined == true, "Marker 'name' already defined.");
 
 
-               print ("/1%s/-", & script->source [script->offset]);
+static procedure script_failure (script_data_structure * script, boolean condition, character * message) {
+       if (condition == true) {
+               print ("/f %s: %i: %s\n", script->path, script->line, message);
 
                exit (log_failure);
        }
 }
 
 
                exit (log_failure);
        }
 }
 
-static script_structure * script_open (c1 * path) {
-       script_structure * script = allocate (sizeof (* script));
+/// Initialize script data structure, by allocating memory for it, importing raw data from file path, and set other important fields.
+///
+/// script = script_open ("script.cfg");
+
+static script_data_structure * script_open (character * path) {
+       script_data_structure * script = allocate (sizeof (* script));
 
        script->path   = string_duplicate (path);
        script->source = file_import      (path);
 
 
        script->path   = string_duplicate (path);
        script->source = file_import      (path);
 
-       script->prefix      = 0;
-       script->length      = 0;
-       script->suffix      = 0;
-       script->offset      = 0;
        script->line        = 1;
        script->line        = 1;
-       script->last_length = 0;
        script->last_string = & script->source [0];
 
        return (script);
 }
 
        script->last_string = & script->source [0];
 
        return (script);
 }
 
-static script_structure * script_close (script_structure * script) {
+/// Deinitialize script data structure, by deallocating memory used in it.
+///
+/// script = script_close (script);
+
+static script_data_structure * script_close (script_data_structure * script) {
        script->path   = deallocate (script->path);
        script->source = deallocate (script->source);
 
        return (deallocate (script));
 }
 
        script->path   = deallocate (script->path);
        script->source = deallocate (script->source);
 
        return (deallocate (script));
 }
 
-static b4 script_compare (script_structure * script, c1 * string) {
+/// Compare certain null terminated string with last selected string from script.
+
+static boolean script_compare (script_data_structure * script, character * string) {
        return (string_compare_limit (string, script->last_string, script->last_length));
 }
 
        return (string_compare_limit (string, script->last_string, script->last_length));
 }
 
-static b4 script_check (script_information * information, u4 index, c1 * identifier) {
+/// Compare certain null terminated string with identifier from script structure selected by index.
+
+static boolean script_check (script_structure * information, natural index, character * identifier) {
        return (string_compare (identifier, information->identifier [index]));
 }
 
        return (string_compare (identifier, information->identifier [index]));
 }
 
-static c1 * script_export_string (script_structure * script) {
+/// Return duplicate of last selected string from script. This will allocate memory that you have to free later.
+
+static character * script_export_string (script_data_structure * script) {
        return (string_duplicate_limit (script->last_string, script->last_length));
 }
 
        return (string_duplicate_limit (script->last_string, script->last_length));
 }
 
-static u4 script_export_number (script_structure * script) {
+/// Return duplicate of last selected number from script.
+
+static natural script_export_number (script_data_structure * script) {
        return (string_limit_to_number (script->last_string, script->last_length));
 }
 
        return (string_limit_to_number (script->last_string, script->last_length));
 }
 
-static u4 script_export_marker (script_information * information, script_structure * script) {
-       for (u4 counter = 0; counter < information->counter; ++counter) {
+/// Return identifier index of last selected string from script, if it's not identified, this function will exit program (fatal failure). I want
+/// strict error checking in my programs, only in parts where I encountered tiny mistakes that were more difficult to debug (took more than 30
+/// seconds). This code is under GNU/GPLv3 license, you can modify it as long as you're in the frame of the license.
+
+static natural script_export_marker (script_structure * information, script_data_structure * script) {
+       for (natural counter = 0; counter < information->counter; ++counter) {
                if (script_compare (script, information->identifier [counter]) == true) {
                        return (information->index [counter]);
                }
                if (script_compare (script, information->identifier [counter]) == true) {
                        return (information->index [counter]);
                }
@@ -109,8 +150,10 @@ static u4 script_export_marker (script_information * information, script_structu
        return (~ 0u);
 }
 
        return (~ 0u);
 }
 
-static script_word_type script_parser (script_structure * script) {
-       script_word_type word = script_unknown;
+/// Big big badass bug, function that does all the parsing, I don't even want to explain how it works, it's obvious from reading. Good luck.
+
+static script_word_enumeration script_parser (script_data_structure * script) {
+       script_word_enumeration word = script_unknown;
 
        script->prefix = 0;
        script->length = 0;
 
        script->prefix = 0;
        script->length = 0;
@@ -207,7 +250,11 @@ static script_word_type script_parser (script_structure * script) {
        return (word);
 }
 
        return (word);
 }
 
-static c1 * script_expect_header (script_information * information, script_structure * script, u4 index, b4 accept) {
+/// Okay, if you're not scared by the abomination written above, lets continue. This function checks for header in script file. That's the small
+/// part of file containing "[foo_bar]" text. If variable 'accept' is true, it'll add that identifier into script structure, otherwise it'll just
+/// return that string, which can be ignored or processed further.
+
+static character * script_expect_header (script_structure * information, script_data_structure * script, natural index, boolean accept) {
        if (accept == true) {
                ++information->counter;
 
        if (accept == true) {
                ++information->counter;
 
@@ -221,8 +268,10 @@ static c1 * script_expect_header (script_information * information, script_struc
        return (script_export_string (script));
 }
 
        return (script_export_string (script));
 }
 
-static c1 * script_expect_string (script_structure * script) {
-       script_word_type word = script_unknown;
+/// This function checks for string, if you want your configuration data to be string, this will check for it.
+
+static character * script_expect_string (script_data_structure * script) {
+       script_word_enumeration word = script_unknown;
 
        script_failure (script, (word = script_parser (script)) != script_assign, "Expected '=', assignment operator.");
        script_failure (script, (word = script_parser (script)) != script_string, "Expected string literal.");
 
        script_failure (script, (word = script_parser (script)) != script_assign, "Expected '=', assignment operator.");
        script_failure (script, (word = script_parser (script)) != script_string, "Expected string literal.");
@@ -230,8 +279,10 @@ static c1 * script_expect_string (script_structure * script) {
        return (script_export_string (script));
 }
 
        return (script_export_string (script));
 }
 
-static u4 script_expect_number (script_structure * script) {
-       script_word_type word = script_unknown;
+/// This function checks for number, if you want your configuration data to be number, this will check for it again. No floating point numbers!
+
+static natural script_expect_number (script_data_structure * script) {
+       script_word_enumeration word = script_unknown;
 
        script_failure (script, (word = script_parser (script)) != script_assign, "Expected '=', assignment operator.");
        script_failure (script, (word = script_parser (script)) != script_number, "Expected number literal.");
 
        script_failure (script, (word = script_parser (script)) != script_assign, "Expected '=', assignment operator.");
        script_failure (script, (word = script_parser (script)) != script_number, "Expected number literal.");
@@ -239,8 +290,10 @@ static u4 script_expect_number (script_structure * script) {
        return (script_export_number (script));
 }
 
        return (script_export_number (script));
 }
 
-static u4 script_expect_marker (script_information * information, script_structure * script) {
-       script_word_type word = script_unknown;
+/// This function checks for marker, this should be previously defined identifier, also known as header string.
+
+static natural script_expect_marker (script_structure * information, script_data_structure * script) {
+       script_word_enumeration word = script_unknown;
 
        script_failure (script, (word = script_parser (script)) != script_assign, "Expected '=', assignment operator.");
        script_failure (script, (word = script_parser (script)) != script_marker, "Expected marker literal.");
 
        script_failure (script, (word = script_parser (script)) != script_assign, "Expected '=', assignment operator.");
        script_failure (script, (word = script_parser (script)) != script_marker, "Expected marker literal.");
@@ -248,8 +301,10 @@ static u4 script_expect_marker (script_information * information, script_structu
        return (script_export_marker (information, script));
 }
 
        return (script_export_marker (information, script));
 }
 
-static u4 script_expect_number_or_marker (script_information * information, script_structure * script) {
-       script_word_type word = script_unknown;
+/// This function checks for number or marker, but not string, sometimes you want to use hardcoded enumerations in configuration files.
+
+static natural script_expect_number_or_marker (script_structure * information, script_data_structure * script) {
+       script_word_enumeration word = script_unknown;
 
        script_failure (script, (word = script_parser (script)) != script_assign, "Expected '=', assignment operator.");
 
 
        script_failure (script, (word = script_parser (script)) != script_assign, "Expected '=', assignment operator.");
 
@@ -266,11 +321,13 @@ static u4 script_expect_number_or_marker (script_information * information, scri
        return (~ 0u);
 }
 
        return (~ 0u);
 }
 
-static u4 * script_expect_ordered_array (script_information * information, script_structure * script, u4 * count) {
-       script_word_type word = script_unknown;
+/// Warning: I don't know how to really explain this...
+
+static natural * script_expect_ordered_array (script_structure * information, script_data_structure * script, natural * count) {
+       script_word_enumeration word = script_unknown;
 
 
-       u4   found = 0;
-       u4 * array = null;
+       natural   found = 0;
+       natural * array = null;
 
        script_failure (script, (word = script_parser (script)) != script_assign, "Expected '=', assignment operator.");
        script_failure (script, (word = script_parser (script)) != script_from,   "Expected '(', begin range operator.");
 
        script_failure (script, (word = script_parser (script)) != script_assign, "Expected '=', assignment operator.");
        script_failure (script, (word = script_parser (script)) != script_from,   "Expected '(', begin range operator.");
@@ -299,16 +356,18 @@ static u4 * script_expect_ordered_array (script_information * information, scrip
        return (array);
 }
 
        return (array);
 }
 
-static u4 * script_expect_unordered_array (script_information * information, script_structure * script, u4 count) {
-       script_word_type word = script_unknown;
+/// Warning: I don't know how to really explain this...
+
+static natural * script_expect_unordered_array (script_structure * information, script_data_structure * script, natural count) {
+       script_word_enumeration word = script_unknown;
 
 
-       u4 * array = allocate (count * sizeof (* array));
+       natural * array = allocate (count * sizeof (* array));
 
        script_failure (script, (word = script_parser (script)) != script_assign, "Expected '=', assignment operator.");
        script_failure (script, (word = script_parser (script)) != script_from,   "Expected '(', begin range operator.");
 
        for (word = script_parser (script); word != script_to; word = script_parser (script)) {
 
        script_failure (script, (word = script_parser (script)) != script_assign, "Expected '=', assignment operator.");
        script_failure (script, (word = script_parser (script)) != script_from,   "Expected '(', begin range operator.");
 
        for (word = script_parser (script); word != script_to; word = script_parser (script)) {
-               u4 index = script_export_marker (information, script);
+               natural index = script_export_marker (information, script);
 
                script_failure (script, word != script_marker, "Expected ranged marker.");
 
 
                script_failure (script, word != script_marker, "Expected ranged marker.");
 
@@ -333,12 +392,18 @@ static u4 * script_expect_unordered_array (script_information * information, scr
        return (array);
 }
 
        return (array);
 }
 
-static script_information * script_initialize (c1 * general_script_file_path) {
-       script_information * script = allocate (sizeof (* script));
+/// Initialize script structure by importing basic headers from general script file. This is where things get complex. Everyscript  parser needs
+/// to have main, general script, that's not an empty file! Consider this an entry point of all scripts, since this script parser assumes
+/// there'll be thousands of tiny configuration files (scripts!), but you can also use only one script if you wanted.
+///
+/// script = script_initialize ("general.cfg");
 
 
-       script_word_type word = script_unknown;
+static script_structure * script_initialize (character * general_script_file_path) {
+       script_structure * script = allocate (sizeof (* script));
 
 
-       script_structure * general = script_open (general_script_file_path);
+       script_word_enumeration word = script_unknown;
+
+       script_data_structure * general = script_open (general_script_file_path);
 
        for (word = script_parser (general); word != script_end; word = script_parser (general)) {
                if (word == script_header) {
 
        for (word = script_parser (general); word != script_end; word = script_parser (general)) {
                if (word == script_header) {
@@ -359,8 +424,12 @@ static script_information * script_initialize (c1 * general_script_file_path) {
        return (script);
 }
 
        return (script);
 }
 
-static script_information * script_deinitialize (script_information * script) {
-       for (u4 index = 0; index < script->counter; ++index) {
+/// Deinitialize script structure by deallocating all identifier data. You can clean up stuff at program exit point, or after reading the script.
+///
+/// script = script_deinitialize (script);
+
+static script_structure * script_deinitialize (script_structure * script) {
+       for (natural index = 0; index < script->counter; ++index) {
                script->identifier [index] = deallocate (script->identifier [index]);
        }
 
                script->identifier [index] = deallocate (script->identifier [index]);
        }
 
@@ -370,8 +439,10 @@ static script_information * script_deinitialize (script_information * script) {
        return (deallocate (script));
 }
 
        return (deallocate (script));
 }
 
-static u4 script_indexer (script_information * information, c1 * identifier) {
-       for (u4 counter = 0; counter < information->counter; ++counter) {
+/// This function is similar to 'script_export_marker', but it compares identifier string, then returns index if it was found.
+
+static natural script_indexer (script_structure * information, character * identifier) {
+       for (natural counter = 0; counter < information->counter; ++counter) {
                if (string_compare (identifier, information->identifier [counter]) == true) {
                        return (information->index [counter]);
                }
                if (string_compare (identifier, information->identifier [counter]) == true) {
                        return (information->index [counter]);
                }
index bce08e98907b7da662844bdd5ec6f8c9b046be19..5a2211c5b84f4ae7146b014a8349aefa41ddc923 100644 (file)
--- a/xctree.h
+++ b/xctree.h
@@ -16,8 +16,8 @@
 /// for more details, if you dare, it is a lot of text that nobody wants to read...
 
 typedef struct {
 /// for more details, if you dare, it is a lot of text that nobody wants to read...
 
 typedef struct {
-       b4         division;
-       f4        scale;
+       boolean         division;
+       real        scale;
        vector_3 * * vertex;
        vector_3   * origin;
        vector_3   * offset;
        vector_3 * * vertex;
        vector_3   * origin;
        vector_3   * offset;
@@ -26,7 +26,7 @@ typedef struct {
 } octree_node;
 
 typedef struct {
 } octree_node;
 
 typedef struct {
-       u4            count;
-       u4            limit;
+       natural            count;
+       natural            limit;
        octree_node * * array;
 } octree_structure;
        octree_node * * array;
 } octree_structure;
index 43d680bf20d7dd676c0b011b9a9e66e6f578477c..343a29df822463ea62de77409505aca7da6ace01 100755 (executable)
--- a/xector.h
+++ b/xector.h
 /// warranty of merchantability or fitness for a particular purpose, because it is pointless. Please see the GNU (Geenoo) General Public License
 /// for more details, if you dare, it is a lot of text that nobody wants to read...
 
 /// warranty of merchantability or fitness for a particular purpose, because it is pointless. Please see the GNU (Geenoo) General Public License
 /// for more details, if you dare, it is a lot of text that nobody wants to read...
 
+/// Description
+///
+/// Xector (Vector), my small vector library, not to be confused with my older project Xector (Sector) which was for procedurally generating 3D
+/// models (based on boolean operations on 3D sectors). This library isn't optimized for performance or memory usage, instead it's for my own
+/// preferred programming style. It's hard to explain linear algebra to people who don't already know it (for me at least), so I won't do that,
+/// function names should provide you enough information. There'll be simple comments for the sake of consistency with my other libraries.
+///
+/// If you want to use "good" linear algebra library, prefer CGLM over this, and GLM if you're into C++ rather than objectively better language
+/// called C. Again, reading comments in this file is useless. Include it, set the vectors, do the work.
+
+/// 2D vector structure.
+
 typedef struct {
 typedef struct {
-       f4 x, y;
+       real x, y; /// Two 32-bit floating point numbers.
 } vector_2;
 
 } vector_2;
 
+/// 3D vector structure.
+
 typedef struct {
 typedef struct {
-       f4 x, y, z;
+       real x, y, z; /// Three 32-bit floating point numbers.
 } vector_3;
 
 } vector_3;
 
+/// 4D vector structure.
+
 typedef struct {
 typedef struct {
-       f4 x, y, z, w;
+       real x, y, z, w; /// Why the hell did they choose to start from 'x', and end with 'z', it's so retarded.
 } vector_4;
 
 } vector_4;
 
-static vector_2 * vector_2_assign (vector_2 * destination, f4 x, f4 y) {
+/// Assign values to 2D, 3D or 4D vector and return address of that vector.
+
+static vector_2 * vector_2_assign (vector_2 * destination, real x, real y) {
        destination->x = x;
        destination->y = y;
 
        return (destination);
 }
 
        destination->x = x;
        destination->y = y;
 
        return (destination);
 }
 
-static vector_3 * vector_3_assign (vector_3 * destination, f4 x, f4 y, f4 z) {
+static vector_3 * vector_3_assign (vector_3 * destination, real x, real y, real z) {
        destination->x = x;
        destination->y = y;
        destination->z = z;
        destination->x = x;
        destination->y = y;
        destination->z = z;
@@ -42,7 +60,7 @@ static vector_3 * vector_3_assign (vector_3 * destination, f4 x, f4 y, f4 z) {
        return (destination);
 }
 
        return (destination);
 }
 
-static vector_4 * vector_4_assign (vector_4 * destination, f4 x, f4 y, f4 z, f4 w) {
+static vector_4 * vector_4_assign (vector_4 * destination, real x, real y, real z, real w) {
        destination->x = x;
        destination->y = y;
        destination->z = z;
        destination->x = x;
        destination->y = y;
        destination->z = z;
@@ -51,6 +69,8 @@ static vector_4 * vector_4_assign (vector_4 * destination, f4 x, f4 y, f4 z, f4
        return (destination);
 }
 
        return (destination);
 }
 
+/// Nullify values of 2D, 3D or 4D vector and return address of that vector.
+
 static vector_2 * vector_2_nullify (vector_2 * destination) {
        destination->x = destination->y = 0.0f;
 
 static vector_2 * vector_2_nullify (vector_2 * destination) {
        destination->x = destination->y = 0.0f;
 
@@ -69,32 +89,36 @@ static vector_4 * vector_4_nullify (vector_4 * destination) {
        return (destination);
 }
 
        return (destination);
 }
 
-static f4 vector_2_length (vector_2 * vector) {
-       f4 x = vector->x;
-       f4 y = vector->y;
+/// Return length of 2D, 3D or 4D vector.
+
+static real vector_2_length (vector_2 * vector) {
+       real x = vector->x;
+       real y = vector->y;
 
        return (square_root (x * x + y * y));
 }
 
 
        return (square_root (x * x + y * y));
 }
 
-static f4 vector_3_length (vector_3 * vector) {
-       f4 x = vector->x;
-       f4 y = vector->y;
-       f4 z = vector->z;
+static real vector_3_length (vector_3 * vector) {
+       real x = vector->x;
+       real y = vector->y;
+       real z = vector->z;
 
        return (square_root (x * x + y * y + z * z));
 }
 
 
        return (square_root (x * x + y * y + z * z));
 }
 
-static f4 vector_4_length (vector_4 * vector) {
-       f4 x = vector->x;
-       f4 y = vector->y;
-       f4 z = vector->z;
-       f4 w = vector->w;
+static real vector_4_length (vector_4 * vector) {
+       real x = vector->x;
+       real y = vector->y;
+       real z = vector->z;
+       real w = vector->w;
 
        return (square_root (x * x + y * y + z * z + w * w));
 }
 
 
        return (square_root (x * x + y * y + z * z + w * w));
 }
 
+/// Normalize 2D, 3D or 4D vector and return address of that vector.
+
 static vector_2 * vector_2_normalize (vector_2 * destination) {
 static vector_2 * vector_2_normalize (vector_2 * destination) {
-       f4 length = vector_2_length (destination);
+       real length = vector_2_length (destination);
 
        destination->x /= length;
        destination->y /= length;
 
        destination->x /= length;
        destination->y /= length;
@@ -103,7 +127,7 @@ static vector_2 * vector_2_normalize (vector_2 * destination) {
 }
 
 static vector_3 * vector_3_normalize (vector_3 * destination) {
 }
 
 static vector_3 * vector_3_normalize (vector_3 * destination) {
-       f4 length = vector_3_length (destination);
+       real length = vector_3_length (destination);
 
        destination->x /= length;
        destination->y /= length;
 
        destination->x /= length;
        destination->y /= length;
@@ -113,7 +137,7 @@ static vector_3 * vector_3_normalize (vector_3 * destination) {
 }
 
 static vector_4 * vector_4_normalize (vector_4 * destination) {
 }
 
 static vector_4 * vector_4_normalize (vector_4 * destination) {
-       f4 length = vector_4_length (destination);
+       real length = vector_4_length (destination);
 
        destination->x /= length;
        destination->y /= length;
 
        destination->x /= length;
        destination->y /= length;
@@ -123,8 +147,10 @@ static vector_4 * vector_4_normalize (vector_4 * destination) {
        return (destination);
 }
 
        return (destination);
 }
 
+/// Normalize 2D, 3D or 4D source vector into destination vector and return its address.
+
 static vector_2 * vector_2_normalize_to (vector_2 * destination, vector_2 * source) {
 static vector_2 * vector_2_normalize_to (vector_2 * destination, vector_2 * source) {
-       f4 length = vector_2_length (source);
+       real length = vector_2_length (source);
 
        destination->x = source->x / length;
        destination->y = source->y / length;
 
        destination->x = source->x / length;
        destination->y = source->y / length;
@@ -133,7 +159,7 @@ static vector_2 * vector_2_normalize_to (vector_2 * destination, vector_2 * sour
 }
 
 static vector_3 * vector_3_normalize_to (vector_3 * destination, vector_3 * source) {
 }
 
 static vector_3 * vector_3_normalize_to (vector_3 * destination, vector_3 * source) {
-       f4 length = vector_3_length (source);
+       real length = vector_3_length (source);
 
        destination->x = source->x / length;
        destination->y = source->y / length;
 
        destination->x = source->x / length;
        destination->y = source->y / length;
@@ -143,7 +169,7 @@ static vector_3 * vector_3_normalize_to (vector_3 * destination, vector_3 * sour
 }
 
 static vector_4 * vector_4_normalize_to (vector_4 * destination, vector_4 * source) {
 }
 
 static vector_4 * vector_4_normalize_to (vector_4 * destination, vector_4 * source) {
-       f4 length = vector_4_length (source);
+       real length = vector_4_length (source);
 
        destination->x = source->x / length;
        destination->y = source->y / length;
 
        destination->x = source->x / length;
        destination->y = source->y / length;
@@ -153,6 +179,8 @@ static vector_4 * vector_4_normalize_to (vector_4 * destination, vector_4 * sour
        return (destination);
 }
 
        return (destination);
 }
 
+/// Copy 2D, 3D or 4D source vector into destination vector.
+
 static vector_2 * vector_2_copy (vector_2 * destination, vector_2 * source) {
        destination->x = source->x;
        destination->y = source->y;
 static vector_2 * vector_2_copy (vector_2 * destination, vector_2 * source) {
        destination->x = source->x;
        destination->y = source->y;
@@ -177,32 +205,36 @@ static vector_4 * vector_4_copy (vector_4 * destination, vector_4 * source) {
        return (destination);
 }
 
        return (destination);
 }
 
-static v0 vector_2_exchange (vector_2 * vector_a, vector_2 * vector_b) {
-       float_exchange (& vector_a->x, & vector_b->x);
-       float_exchange (& vector_a->y, & vector_b->y);
+/// Exchange values of two 2D, 3D or 4D vectors.
+
+static procedure vector_2_exchange (vector_2 * vector_a, vector_2 * vector_b) {
+       exchange_real (& vector_a->x, & vector_b->x);
+       exchange_real (& vector_a->y, & vector_b->y);
 }
 
 }
 
-static v0 vector_3_exchange (vector_3 * vector_a, vector_3 * vector_b) {
-       float_exchange (& vector_a->x, & vector_b->x);
-       float_exchange (& vector_a->y, & vector_b->y);
-       float_exchange (& vector_a->z, & vector_b->z);
+static procedure vector_3_exchange (vector_3 * vector_a, vector_3 * vector_b) {
+       exchange_real (& vector_a->x, & vector_b->x);
+       exchange_real (& vector_a->y, & vector_b->y);
+       exchange_real (& vector_a->z, & vector_b->z);
 }
 
 }
 
-static v0 vector_4_exchange (vector_4 * vector_a, vector_4 * vector_b) {
-       float_exchange (& vector_a->x, & vector_b->x);
-       float_exchange (& vector_a->y, & vector_b->y);
-       float_exchange (& vector_a->z, & vector_b->z);
-       float_exchange (& vector_a->w, & vector_b->w);
+static procedure vector_4_exchange (vector_4 * vector_a, vector_4 * vector_b) {
+       exchange_real (& vector_a->x, & vector_b->x);
+       exchange_real (& vector_a->y, & vector_b->y);
+       exchange_real (& vector_a->z, & vector_b->z);
+       exchange_real (& vector_a->w, & vector_b->w);
 }
 
 }
 
-static vector_2 * vector_2_scale (vector_2 * destination, f4 scale) {
+/// Scale 2D, 3D or 4D vector by scalar value and return address of that vector.
+
+static vector_2 * vector_2_scale (vector_2 * destination, real scale) {
        destination->x *= scale;
        destination->y *= scale;
 
        return (destination);
 }
 
        destination->x *= scale;
        destination->y *= scale;
 
        return (destination);
 }
 
-static vector_3 * vector_3_scale (vector_3 * destination, f4 scale) {
+static vector_3 * vector_3_scale (vector_3 * destination, real scale) {
        destination->x *= scale;
        destination->y *= scale;
        destination->z *= scale;
        destination->x *= scale;
        destination->y *= scale;
        destination->z *= scale;
@@ -210,7 +242,7 @@ static vector_3 * vector_3_scale (vector_3 * destination, f4 scale) {
        return (destination);
 }
 
        return (destination);
 }
 
-static vector_4 * vector_4_scale (vector_4 * destination, f4 scale) {
+static vector_4 * vector_4_scale (vector_4 * destination, real scale) {
        destination->x *= scale;
        destination->y *= scale;
        destination->z *= scale;
        destination->x *= scale;
        destination->y *= scale;
        destination->z *= scale;
@@ -219,14 +251,16 @@ static vector_4 * vector_4_scale (vector_4 * destination, f4 scale) {
        return (destination);
 }
 
        return (destination);
 }
 
-static vector_2 * vector_2_scale_to (vector_2 * destination, vector_2 * source, f4 scale) {
+/// Scale 2D, 3D or 4D source vector by scalar value into destination vector and return its address.
+
+static vector_2 * vector_2_scale_to (vector_2 * destination, vector_2 * source, real scale) {
        destination->x = source->x * scale;
        destination->y = source->y * scale;
 
        return (destination);
 }
 
        destination->x = source->x * scale;
        destination->y = source->y * scale;
 
        return (destination);
 }
 
-static vector_3 * vector_3_scale_to (vector_3 * destination, vector_3 * source, f4 scale) {
+static vector_3 * vector_3_scale_to (vector_3 * destination, vector_3 * source, real scale) {
        destination->x = source->x * scale;
        destination->y = source->y * scale;
        destination->z = source->z * scale;
        destination->x = source->x * scale;
        destination->y = source->y * scale;
        destination->z = source->z * scale;
@@ -234,7 +268,7 @@ static vector_3 * vector_3_scale_to (vector_3 * destination, vector_3 * source,
        return (destination);
 }
 
        return (destination);
 }
 
-static vector_4 * vector_4_scale_to (vector_4 * destination, vector_4 * source, f4 scale) {
+static vector_4 * vector_4_scale_to (vector_4 * destination, vector_4 * source, real scale) {
        destination->x = source->x * scale;
        destination->y = source->y * scale;
        destination->z = source->z * scale;
        destination->x = source->x * scale;
        destination->y = source->y * scale;
        destination->z = source->z * scale;
@@ -243,6 +277,8 @@ static vector_4 * vector_4_scale_to (vector_4 * destination, vector_4 * source,
        return (destination);
 }
 
        return (destination);
 }
 
+/// Add 2D, 3D or 4D source vector onto destination vector and return address of destination vector.
+
 static vector_2 * vector_2_add (vector_2 * destination, vector_2 * source) {
        destination->x += source->x;
        destination->y += source->y;
 static vector_2 * vector_2_add (vector_2 * destination, vector_2 * source) {
        destination->x += source->x;
        destination->y += source->y;
@@ -267,6 +303,8 @@ static vector_4 * vector_4_add (vector_4 * destination, vector_4 * source) {
        return (destination);
 }
 
        return (destination);
 }
 
+/// Add two 2D, 3D or 4D vectors into destination vector and return address of destination vector.
+
 static vector_2 * vector_2_add_to (vector_2 * destination, vector_2 * vector_a, vector_2 * vector_b) {
        destination->x = vector_a->x + vector_b->x;
        destination->y = vector_a->y + vector_b->y;
 static vector_2 * vector_2_add_to (vector_2 * destination, vector_2 * vector_a, vector_2 * vector_b) {
        destination->x = vector_a->x + vector_b->x;
        destination->y = vector_a->y + vector_b->y;
@@ -291,6 +329,8 @@ static vector_4 * vector_4_add_to (vector_4 * destination, vector_4 * vector_a,
        return (destination);
 }
 
        return (destination);
 }
 
+/// Subtract 2D, 3D or 4D source vector from destination vector and return address of destination vector.
+
 static vector_2 * vector_2_subtract (vector_2 * destination, vector_2 * source) {
        destination->x -= source->x;
        destination->y -= source->y;
 static vector_2 * vector_2_subtract (vector_2 * destination, vector_2 * source) {
        destination->x -= source->x;
        destination->y -= source->y;
@@ -315,6 +355,8 @@ static vector_4 * vector_4_subtract (vector_4 * destination, vector_4 * source)
        return (destination);
 }
 
        return (destination);
 }
 
+/// Subtract two 2D, 3D or 4D vectors, save values into destination vector and return address of destination vector.
+
 static vector_2 * vector_2_subtract_to (vector_2 * destination, vector_2 * vector_a, vector_2 * vector_b) {
        destination->x = vector_a->x - vector_b->x;
        destination->y = vector_a->y - vector_b->y;
 static vector_2 * vector_2_subtract_to (vector_2 * destination, vector_2 * vector_a, vector_2 * vector_b) {
        destination->x = vector_a->x - vector_b->x;
        destination->y = vector_a->y - vector_b->y;
@@ -339,7 +381,9 @@ static vector_4 * vector_4_subtract_to (vector_4 * destination, vector_4 * vecto
        return (destination);
 }
 
        return (destination);
 }
 
-static b4 vector_2_compare (vector_2 * vector_a, vector_2 * vector_b) {
+/// Compare if two 2D, 3D or 4D vectors are identical and return boolean value of it.
+
+static boolean vector_2_compare (vector_2 * vector_a, vector_2 * vector_b) {
        if ((vector_a->x == vector_b->x) && (vector_a->y == vector_b->y)) {
                return (true);
        } else {
        if ((vector_a->x == vector_b->x) && (vector_a->y == vector_b->y)) {
                return (true);
        } else {
@@ -347,7 +391,7 @@ static b4 vector_2_compare (vector_2 * vector_a, vector_2 * vector_b) {
        }
 }
 
        }
 }
 
-static b4 vector_3_compare (vector_3 * vector_a, vector_3 * vector_b) {
+static boolean vector_3_compare (vector_3 * vector_a, vector_3 * vector_b) {
        if ((vector_a->x == vector_b->x) && (vector_a->y == vector_b->y) && (vector_a->z == vector_b->z)) {
                return (true);
        } else {
        if ((vector_a->x == vector_b->x) && (vector_a->y == vector_b->y) && (vector_a->z == vector_b->z)) {
                return (true);
        } else {
@@ -355,7 +399,7 @@ static b4 vector_3_compare (vector_3 * vector_a, vector_3 * vector_b) {
        }
 }
 
        }
 }
 
-static b4 vector_4_compare (vector_4 * vector_a, vector_4 * vector_b) {
+static boolean vector_4_compare (vector_4 * vector_a, vector_4 * vector_b) {
        if ((vector_a->x == vector_b->x) && (vector_a->y == vector_b->y) && (vector_a->z == vector_b->z) && (vector_a->w == vector_b->w)) {
                return (true);
        } else {
        if ((vector_a->x == vector_b->x) && (vector_a->y == vector_b->y) && (vector_a->z == vector_b->z) && (vector_a->w == vector_b->w)) {
                return (true);
        } else {
@@ -363,22 +407,28 @@ static b4 vector_4_compare (vector_4 * vector_a, vector_4 * vector_b) {
        }
 }
 
        }
 }
 
-static f4 vector_2_dot_product (vector_2 * vector_a, vector_2 * vector_b) {
+/// Return dot product of two 2D, 3D or 4D vectors.
+
+static real vector_2_dot_product (vector_2 * vector_a, vector_2 * vector_b) {
        return (vector_a->x * vector_b->x + vector_a->y * vector_b->y);
 }
 
        return (vector_a->x * vector_b->x + vector_a->y * vector_b->y);
 }
 
-static f4 vector_3_dot_product (vector_3 * vector_a, vector_3 * vector_b) {
+static real vector_3_dot_product (vector_3 * vector_a, vector_3 * vector_b) {
        return (vector_a->x * vector_b->x + vector_a->y * vector_b->y + vector_a->z * vector_b->z);
 }
 
        return (vector_a->x * vector_b->x + vector_a->y * vector_b->y + vector_a->z * vector_b->z);
 }
 
-static f4 vector_4_dot_product (vector_4 * vector_a, vector_4 * vector_b) {
+static real vector_4_dot_product (vector_4 * vector_a, vector_4 * vector_b) {
        return (vector_a->x * vector_b->x + vector_a->y * vector_b->y + vector_a->z * vector_b->z + vector_a->w * vector_b->w);
 }
 
        return (vector_a->x * vector_b->x + vector_a->y * vector_b->y + vector_a->z * vector_b->z + vector_a->w * vector_b->w);
 }
 
-static f4 vector_2_cross_product (vector_2 * vector_a, vector_2 * vector_b) {
+/// Return cross product of two 2D vectors.
+
+static real vector_2_cross_product (vector_2 * vector_a, vector_2 * vector_b) {
        return (vector_a->x * vector_b->y - vector_a->y * vector_b->x);
 }
 
        return (vector_a->x * vector_b->y - vector_a->y * vector_b->x);
 }
 
+/// Return cross product of two 3D vectors.
+
 static vector_3 * vector_3_cross_product (vector_3 * destination, vector_3 * source) {
        destination->x = destination->y * source->z - destination->z * source->y;
        destination->y = destination->z * source->x - destination->x * source->z;
 static vector_3 * vector_3_cross_product (vector_3 * destination, vector_3 * source) {
        destination->x = destination->y * source->z - destination->z * source->y;
        destination->y = destination->z * source->x - destination->x * source->z;
diff --git a/xenu.h b/xenu.h
new file mode 100644 (file)
index 0000000..cf3ee28
--- /dev/null
+++ b/xenu.h
@@ -0,0 +1,249 @@
+/// __  _____ _ __  _   _
+/// \ \/ / _ \ '_ \| | | |
+///  >  <  __/ | | | |_| |
+/// /_/\_\___|_| |_|\__,_|
+///
+/// Copyright (c) 1997 - Ognjen 'xolatile' Milan Robovic
+///
+/// xolatile@chud.cyou - xenu - Tiny menu unity header, depending on Xross and XUI headers, hard to use but efficient.
+///
+/// This program is free software, free as in freedom and as in free beer, you can redistribute it and/or modify it under the terms of the GNU
+/// General Public License as published by the Free Software Foundation, either version 3 of the License, or any later version if you wish...
+///
+/// This program is distributed in the hope that it will be useful, but it is probably not, and without any warranty, without even the implied
+/// warranty of merchantability or fitness for a particular purpose, because it is pointless. Please see the GNU (Geenoo) General Public License
+/// for more details, if you dare, it is a lot of text that nobody wants to read...
+
+typedef enum {
+       menu_layout_vertical,           menu_layout_horizontal,
+       menu_layout_count
+} menu_layout_enumeration;
+
+typedef enum {
+       menu_type_empty,
+       menu_type_window,               menu_type_menu,                 menu_type_status,               menu_type_frame,
+       menu_type_button,               menu_type_separator,            menu_type_string,               menu_type_sprite,
+       menu_type_check_box,            menu_type_icon,                 menu_type_overicon,             menu_type_ubericon,
+       menu_type_text_field,           menu_type_signal_field,         menu_type_cursor_field,         menu_type_slider_field,
+       menu_type_text_box,             menu_type_code_box,             menu_type_help_box,             menu_type_data_box,
+       menu_type_count
+} menu_type_enumeration;
+
+typedef struct {
+       character * data;
+       natural     font;
+       real        scale;
+       natural     colour;
+} menu_string;
+
+typedef struct {
+       natural data;
+       real    scale;
+       natural colour;
+} menu_sprite;
+
+typedef struct {
+       menu_layout_enumeration     layout;
+       menu_type_enumeration       type;
+       menu_string               * string;
+       menu_string               * number;
+       menu_sprite               * sprite;
+       integer                     x;
+       integer                     y;
+       natural                     width;
+       natural                     height;
+       natural                     offset;
+       natural                     count;
+       generic                 * * array;
+       generic                   * root;
+} menu_structure;
+
+static procedure menu_append (menu_structure * root, menu_structure * menu) {
+       ++root->count;
+
+       root->array = reallocate (root->array, root->count * sizeof (* root->array));
+
+       menu->root = root;
+
+       root->array [root->count - 1] = menu;
+}
+
+static procedure menu_remove (menu_structure * menu) {
+       if (menu->string != null) { menu->string = deallocate (menu->string); }
+       if (menu->number != null) { menu->number = deallocate (menu->number); }
+       if (menu->sprite != null) { menu->sprite = deallocate (menu->sprite); }
+
+       for (natural index = 0; index < menu->count; ++index) {
+               menu_remove (menu->array [index]);
+       }
+
+       if (menu->array != null) {
+               menu->array = deallocate (menu->array);
+       }
+
+       menu = deallocate (menu);
+}
+
+static menu_string * menu_create_string (character * data, natural font, real scale, natural colour) {
+       menu_string * string = allocate (sizeof (* string));
+
+       string->data   = data;
+       string->font   = font;
+       string->scale  = scale;
+       string->colour = colour;
+
+       return (string);
+}
+
+static menu_sprite * menu_create_sprite (natural data, real scale, natural colour) {
+       menu_sprite * sprite = allocate (sizeof (* sprite));
+
+       sprite->data   = data;
+       sprite->scale  = scale;
+       sprite->colour = colour;
+
+       return (sprite);
+}
+
+static menu_structure * menu_create_base (menu_layout_enumeration layout, menu_type_enumeration type, menu_string * string,
+                                          menu_string * number, menu_sprite * sprite, integer x, integer y, natural offset) {
+       menu_structure * menu = allocate (sizeof (* menu));
+
+       menu->layout = layout;
+       menu->type   = type;
+       menu->string = string;
+       menu->number = number;
+       menu->sprite = sprite;
+       menu->x      = x;
+       menu->y      = y;
+       menu->offset = offset;
+
+       return (menu);
+}
+
+static menu_structure * menu_create_root (menu_layout_enumeration layout, menu_type_enumeration type, natural offset) {
+       return (menu_create_base (layout, type, null, null, null, 0, 0, offset));
+}
+
+static menu_structure * menu_create_button (menu_layout_enumeration layout, menu_string * text, menu_sprite * icon, natural offset) {
+       return (menu_create_base (layout, menu_type_button, text, null, icon, 0, 0, offset));
+}
+
+static natural menu_string_width (cross_structure * cross, menu_string * string) {
+       return ((string == null) ? 0 : cross_string_width (cross, string->data, string->font, string->scale));
+}
+
+static natural menu_string_height (cross_structure * cross, menu_string * string) {
+       return ((string == null) ? 0 : cross_string_height (cross, string->data, string->font, string->scale));
+}
+
+static natural menu_sprite_width (cross_structure * cross, menu_sprite * sprite) {
+       return ((sprite == null) ? 0 : cross_sprite_width (cross, sprite->data));
+}
+
+static natural menu_sprite_height (cross_structure * cross, menu_sprite * sprite) {
+       return ((sprite == null) ? 0 : cross_sprite_height (cross, sprite->data));
+}
+
+static procedure menu_configure (cross_structure * cross, menu_structure * menu) {
+       for (natural index = 0; index < menu->count; ++index) {
+               menu_structure * submenu = menu->array [index];
+
+               menu_configure (cross, submenu);
+       }
+
+       for (natural index = 0; index < menu->count; ++index) {
+               menu_structure * submenu = menu->array [index];
+
+               if (menu->layout == menu_layout_vertical) {
+                       menu->width   = maximum_macro (menu->width, submenu->width + 2 * menu->offset);
+                       menu->height += submenu->height;
+               }
+
+               if (menu->layout == menu_layout_horizontal) {
+                       menu->width  += submenu->width;
+                       menu->height  = maximum_macro (menu->height, submenu->height + 2 * menu->offset);
+               }
+       }
+
+       if (menu->layout == menu_layout_vertical) {
+               menu->width += maximum_natural (3, menu_sprite_width (cross, menu->sprite),
+                                                  menu_string_width (cross, menu->string),
+                                                  menu_string_width (cross, menu->number));
+
+               menu->height += menu_sprite_height (cross, menu->sprite)
+                            +  menu_string_height (cross, menu->string)
+                            +  menu_string_height (cross, menu->number);
+       }
+
+       if (menu->layout == menu_layout_horizontal) {
+               menu->width += menu_sprite_width (cross, menu->sprite)
+                           +  menu_string_width (cross, menu->string)
+                           +  menu_string_width (cross, menu->number);
+
+               menu->height += maximum_natural (3, menu_sprite_height (cross, menu->sprite),
+                                                   menu_string_height (cross, menu->string),
+                                                   menu_string_height (cross, menu->number));
+       }
+
+       menu->width  += 2 * menu->offset;
+       menu->height += 2 * menu->offset;
+
+       if ((menu->count != 0) && (menu->root != null)) {
+               menu->width  -= 2 * menu->offset * (menu->layout == menu_layout_vertical);
+               menu->height -= 2 * menu->offset * (menu->layout == menu_layout_horizontal);
+       }
+}
+
+static procedure menu_center (cross_structure * cross, menu_structure * menu) {
+       menu->x = cross_center_x (cross, menu->width);
+       menu->y = cross_center_y (cross, menu->height);
+}
+
+static procedure menu_subrender (cross_structure * cross, ui_structure * ui, menu_structure * menu) {
+       switch (menu->type) {
+               case (menu_type_empty): break;
+
+               case (menu_type_window): ui_render_window (cross, ui, menu->x, menu->y, menu->width, menu->height); break;
+               case (menu_type_menu):   ui_render_menu   (cross, ui, menu->x, menu->y, menu->width, menu->height); break;
+               case (menu_type_status): ui_render_status (cross, ui, menu->x, menu->y, menu->width, menu->height); break;
+               case (menu_type_frame):  ui_render_frame  (cross, ui, menu->x, menu->y, menu->width, menu->height); break;
+
+               case (menu_type_button): {
+                       boolean sprite_is_used = (menu->sprite != null) && (menu->sprite->data != ~ 0u);
+                       ui_render_button (cross, ui, menu->x, menu->y, menu->width, menu->height);
+                               if (sprite_is_used == true) {
+                                       cross_render_sprite_colour (cross, menu->sprite->data, menu->x + menu->offset, menu->y + menu->offset, menu->sprite->colour);
+                               }
+                               if ((menu->string != null) && (menu->string->data != null)) {
+                                       integer x = menu->x + menu->offset + (sprite_is_used == true) * menu_sprite_width  (cross, menu->sprite) * (menu->layout == menu_layout_horizontal);
+                                       integer y = menu->y + menu->offset + (sprite_is_used == true) * menu_sprite_height (cross, menu->sprite) * (menu->layout == menu_layout_vertical);
+                                       cross_render_string (cross, menu->string->data, menu->string->font, x, y, menu->string->scale, menu->string->colour);
+                               }
+               } break;
+
+               default: break;
+       }
+}
+
+static procedure menu_render (cross_structure * cross, ui_structure * ui, menu_structure * menu) {
+       menu_subrender (cross, ui, menu);
+
+       for (natural index = 0; index < menu->count; ++index) {
+               menu_structure * submenu = menu->array [index];
+
+               menu_structure * root = submenu->root;
+
+               submenu->x = root->x + root->offset;
+               submenu->y = root->y + root->offset;
+
+               for (natural subindex = 0; subindex < index; ++subindex) {
+                       menu_structure * base = root->array [subindex];
+
+                       submenu->x += (root->layout == menu_layout_horizontal) * base->width;
+                       submenu->y += (root->layout == menu_layout_vertical)   * base->height;
+               }
+
+               menu_render (cross, ui, submenu);
+       }
+}
index fc768defe06e6f7490edec3b78ae3f8dabd503ca..d2f83b1aba3cc9b2b456a5c4d5f03a536ad1b152 100755 (executable)
 #define terminal_cursor_length (sizeof ("\033[---;---H")      - 1)
 
 typedef struct {
 #define terminal_cursor_length (sizeof ("\033[---;---H")      - 1)
 
 typedef struct {
-       c1 * screen;
-       u4   screen_width;
-       u4   screen_height;
+       character * screen;
+       natural   screen_width;
+       natural   screen_height;
 
 
-       c1 format [terminal_format_length + 1];
-       c1 cursor [terminal_cursor_length + 1];
+       character format [terminal_format_length + 1];
+       character cursor [terminal_cursor_length + 1];
 
 
-       b4 active;
-       b4 signal [signal_count];
+       boolean active;
+       boolean signal [signal_count];
 
 
-       u4 character;
+       natural literal;
 
        struct termios * old_terminal;
        struct termios * new_terminal;
 } terminal_structure;
 
 
        struct termios * old_terminal;
        struct termios * new_terminal;
 } terminal_structure;
 
-static c1 * terminal_screen_offset (terminal_structure * terminal, u4 x, u4 y) {
+static character * terminal_screen_offset (terminal_structure * terminal, natural x, natural y) {
        return (& terminal->screen [terminal_revert_length + terminal_format_length * (y * terminal->screen_width + x) + 2 * y]);
 }
 
        return (& terminal->screen [terminal_revert_length + terminal_format_length * (y * terminal->screen_width + x) + 2 * y]);
 }
 
-static u4 terminal_screen_length (terminal_structure * terminal) {
-       u4 constant = terminal_revert_length + terminal_cursor_length + 1;
-       u4 variable = terminal_format_length * terminal->screen_height * terminal->screen_width;
-       u4 new_line = 2 * (terminal->screen_height - 1);
+static natural terminal_screen_length (terminal_structure * terminal) {
+       natural constant = terminal_revert_length + terminal_cursor_length + 1;
+       natural variable = terminal_format_length * terminal->screen_height * terminal->screen_width;
+       natural new_line = 2 * (terminal->screen_height - 1);
 
        return (constant + variable + new_line);
 }
 
 
        return (constant + variable + new_line);
 }
 
-static v0 terminal_screen_dimensions (terminal_structure * terminal) {
+static procedure terminal_screen_dimensions (terminal_structure * terminal) {
        struct winsize screen_dimension = { 0 };
 
        struct winsize screen_dimension = { 0 };
 
-       u4 old_width  = terminal->screen_width;
-       u4 old_height = terminal->screen_height;
+       natural old_width  = terminal->screen_width;
+       natural old_height = terminal->screen_height;
 
 
-       s4 status = ioctl (STDOUT_FILENO, TIOCGWINSZ, & screen_dimension);
+       integer status = ioctl (STDOUT_FILENO, TIOCGWINSZ, & screen_dimension);
 
        fatal_failure (status == -1, "ioctl: Failed to get dimensions.");
 
 
        fatal_failure (status == -1, "ioctl: Failed to get dimensions.");
 
@@ -74,30 +74,30 @@ static v0 terminal_screen_dimensions (terminal_structure * terminal) {
 
        string_copy (& terminal->screen [0], "\033[H");
 
 
        string_copy (& terminal->screen [0], "\033[H");
 
-       for (u4 index = 0; index < terminal->screen_height - 1; ++index) {
+       for (natural index = 0; index < terminal->screen_height - 1; ++index) {
                string_copy (& terminal->screen [terminal_revert_length + index * terminal_format_length * terminal->screen_width], "\r\n");
        }
 }
 
                string_copy (& terminal->screen [terminal_revert_length + index * terminal_format_length * terminal->screen_width], "\r\n");
        }
 }
 
-static c1 * terminal_format_character (terminal_structure * terminal, c1 character, s4 colour, s4 effect) {
-       if (character_is_visible (character) == false) {
-               character = ' ';
+static character * terminal_format_character (terminal_structure * terminal, character data, integer colour, integer effect) {
+       if (character_is_visible (data) == false) {
+               data = ' ';
        }
 
        colour %= colour_count;
        effect %= effect_count;
 
        }
 
        colour %= colour_count;
        effect %= effect_count;
 
-       terminal->format [2] = (char) effect + '0';
-       terminal->format [5] = (char) colour + '0';
-       terminal->format [7] = character;
+       terminal->format [2] = (character) effect + '0';
+       terminal->format [5] = (character) colour + '0';
+       terminal->format [7] = data;
 
        return (terminal->format);
 }
 
 
        return (terminal->format);
 }
 
-static terminal_structure * terminal_initialize (v0) {
+static terminal_structure * terminal_initialize (none) {
        terminal_structure * terminal = allocate (sizeof (* terminal));
 
        terminal_structure * terminal = allocate (sizeof (* terminal));
 
-       s4 status = -1;
+       integer status = -1;
 
        string_copy_limit (terminal->format, "\033[-;3-m-\033[0m", terminal_format_length + 1);
        string_copy_limit (terminal->cursor, "\033[---;---H",      terminal_cursor_length + 1);
 
        string_copy_limit (terminal->format, "\033[-;3-m-\033[0m", terminal_format_length + 1);
        string_copy_limit (terminal->cursor, "\033[---;---H",      terminal_cursor_length + 1);
@@ -113,13 +113,13 @@ static terminal_structure * terminal_initialize (v0) {
 
        memory_copy (terminal->new_terminal, terminal->old_terminal, sizeof (* terminal->old_terminal));
 
 
        memory_copy (terminal->new_terminal, terminal->old_terminal, sizeof (* terminal->old_terminal));
 
-       terminal->new_terminal->c_cc [VMIN]  = (u1) 0;
-       terminal->new_terminal->c_cc [VTIME] = (u1) 1;
+       terminal->new_terminal->c_cc [VMIN]  = (natural_8) 0;
+       terminal->new_terminal->c_cc [VTIME] = (natural_8) 1;
 
 
-       terminal->new_terminal->c_iflag &= (u4) ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON);
-       terminal->new_terminal->c_oflag &= (u4) ~(OPOST);
-       terminal->new_terminal->c_cflag |= (u4)  (CS8);
-       terminal->new_terminal->c_lflag &= (u4) ~(ECHO | ICANON | IEXTEN | ISIG);
+       terminal->new_terminal->c_iflag &= (natural) ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON);
+       terminal->new_terminal->c_oflag &= (natural) ~(OPOST);
+       terminal->new_terminal->c_cflag |= (natural)  (CS8);
+       terminal->new_terminal->c_lflag &= (natural) ~(ECHO | ICANON | IEXTEN | ISIG);
 
        status = tcsetattr (STDIN_FILENO, TCSAFLUSH, terminal->new_terminal);
 
 
        status = tcsetattr (STDIN_FILENO, TCSAFLUSH, terminal->new_terminal);
 
@@ -135,7 +135,7 @@ static terminal_structure * terminal_initialize (v0) {
 }
 
 static terminal_structure * terminal_deinitialize (terminal_structure * terminal) {
 }
 
 static terminal_structure * terminal_deinitialize (terminal_structure * terminal) {
-       s4 status = tcsetattr (STDIN_FILENO, TCSAFLUSH, terminal->old_terminal);
+       integer status = tcsetattr (STDIN_FILENO, TCSAFLUSH, terminal->old_terminal);
 
        fatal_failure (status == -1, "tcsetattr: Failed to set default attributes.");
 
 
        fatal_failure (status == -1, "tcsetattr: Failed to set default attributes.");
 
@@ -150,141 +150,141 @@ static terminal_structure * terminal_deinitialize (terminal_structure * terminal
        return (deallocate (terminal));
 }
 
        return (deallocate (terminal));
 }
 
-static v0 terminal_synchronize (terminal_structure * terminal) {
-       u4 character = 0;
+static procedure terminal_synchronize (terminal_structure * terminal) {
+       natural signal = 0;
 
        output (terminal->screen, terminal_screen_length (terminal));
 
        terminal_screen_dimensions (terminal);
 
 
        output (terminal->screen, terminal_screen_length (terminal));
 
        terminal_screen_dimensions (terminal);
 
-       for (u4 index = 0; index < signal_count; ++index) {
+       for (natural index = 0; index < signal_count; ++index) {
                terminal->signal [index] = false;
        }
 
                terminal->signal [index] = false;
        }
 
-       input (& character, sizeof (character));
+       input (& signal, sizeof (signal));
 
 
-       terminal->character = (u4) character;
+       terminal->literal = (natural) signal;
 
 
-       if (character == 0x0000001b) {
+       if (signal == 0x0000001b) {
                terminal->signal [signal_escape] = true;
                terminal->signal [signal_escape] = true;
-       } else if (character == 0x00415b1b) {
+       } else if (signal == 0x00415b1b) {
                terminal->signal [signal_arrow_up] = true;
                terminal->signal [signal_arrow_up] = true;
-       } else if (character == 0x00425b1b) {
+       } else if (signal == 0x00425b1b) {
                terminal->signal [signal_arrow_down] = true;
                terminal->signal [signal_arrow_down] = true;
-       } else if (character == 0x00435b1b) {
+       } else if (signal == 0x00435b1b) {
                terminal->signal [signal_arrow_right] = true;
                terminal->signal [signal_arrow_right] = true;
-       } else if (character == 0x00445b1b) {
+       } else if (signal == 0x00445b1b) {
                terminal->signal [signal_arrow_left] = true;
                terminal->signal [signal_arrow_left] = true;
-       } else if (character == 0x00000020) {
+       } else if (signal == 0x00000020) {
                terminal->signal [signal_space] = true;
                terminal->signal [signal_space] = true;
-       } else if (character == 0x0000007f) {
+       } else if (signal == 0x0000007f) {
                terminal->signal [signal_backspace] = true;
                terminal->signal [signal_backspace] = true;
-       } else if (character == 0x0000000d) {
+       } else if (signal == 0x0000000d) {
                terminal->signal [signal_return] = true;
                terminal->signal [signal_return] = true;
-       } else if (character_is_digit ((char) character) == true) {
-               terminal->signal [signal_0 + character - '0'] = true;
-       } else if (character_is_lowercase ((char) character) == true) {
-               terminal->signal [signal_a + character - 'a'] = true;
-       } else if (character_is_uppercase ((char) character) == true) {
-               terminal->signal [signal_a + character - 'A'] = true;
-               terminal->signal [signal_left_shift]  = true;
-               terminal->signal [signal_right_shift] = true;
+       } else if (character_is_digit ((character) signal) == true) {
+               terminal->signal [signal_0 + signal - '0'] = true;
+       } else if (character_is_lowercase ((character) signal) == true) {
+               terminal->signal [signal_a + signal - 'a'] = true;
+       } else if (character_is_uppercase ((character) signal) == true) {
+               terminal->signal [signal_a + signal - 'A'] = true;
+               terminal->signal [signal_left_shift]       = true;
+               terminal->signal [signal_right_shift]      = true;
        }
 }
 
        }
 }
 
-static v0 terminal_render_cursor (terminal_structure * terminal, u4 x, u4 y) { /* BROKE IT INTENTIONALLY */
+static procedure terminal_render_cursor (terminal_structure * terminal, natural x, natural y) { /* BROKE IT INTENTIONALLY */
        string_copy_limit (terminal->cursor + 2, string_align_left (number_to_string (y % 1000 + 1), 3, '0'), 3);
        string_copy_limit (terminal->cursor + 6, string_align_left (number_to_string (x % 1000 + 1), 3, '0'), 3);
 
        string_copy_limit (& terminal->screen [terminal_screen_length (terminal) - terminal_cursor_length - 1], terminal->cursor, terminal_cursor_length);
 }
 
        string_copy_limit (terminal->cursor + 2, string_align_left (number_to_string (y % 1000 + 1), 3, '0'), 3);
        string_copy_limit (terminal->cursor + 6, string_align_left (number_to_string (x % 1000 + 1), 3, '0'), 3);
 
        string_copy_limit (& terminal->screen [terminal_screen_length (terminal) - terminal_cursor_length - 1], terminal->cursor, terminal_cursor_length);
 }
 
-static v0 terminal_render_character (terminal_structure * terminal, c1 character, u4 colour, u4 effect, u4 x, u4 y) {
+static procedure terminal_render_character (terminal_structure * terminal, character data, natural colour, natural effect, natural x, natural y) {
        if ((x >= terminal->screen_width) || (y >= terminal->screen_height)) {
                return;
        }
 
        if ((x >= terminal->screen_width) || (y >= terminal->screen_height)) {
                return;
        }
 
-       string_copy_limit (terminal_screen_offset (terminal, x, y), terminal_format_character (terminal, character, colour, effect), terminal_format_length);
+       string_copy_limit (terminal_screen_offset (terminal, x, y), terminal_format_character (terminal, data, colour, effect), terminal_format_length);
 }
 
 }
 
-static v0 terminal_render_toggle (terminal_structure * terminal, b4 toggle, u4 x, u4 y) {
-       c1 marker = (toggle == true) ? '+'          : '-';
-       c1 colour = (toggle == true) ? colour_green : colour_red;
+static procedure terminal_render_toggle (terminal_structure * terminal, boolean toggle, natural x, natural y) {
+       character marker = (toggle == true) ? '+'          : '-';
+       character colour = (toggle == true) ? colour_green : colour_red;
 
        terminal_render_character (terminal, '[',    colour_grey, effect_bold, x + 0, y);
        terminal_render_character (terminal, marker, colour,      effect_bold, x + 1, y);
        terminal_render_character (terminal, ']',    colour_grey, effect_bold, x + 2, y);
 }
 
 
        terminal_render_character (terminal, '[',    colour_grey, effect_bold, x + 0, y);
        terminal_render_character (terminal, marker, colour,      effect_bold, x + 1, y);
        terminal_render_character (terminal, ']',    colour_grey, effect_bold, x + 2, y);
 }
 
-static v0 terminal_render_fill_bar (terminal_structure * terminal, u4 value, u4 limit, c1 character, u4 colour, u4 effect, u4 x, u4 y) {
+static procedure terminal_render_fill_bar (terminal_structure * terminal, natural value, natural limit, character data, natural colour, natural effect, natural x, natural y) {
        terminal_render_character (terminal, '[', colour_grey, effect_bold, x,             y);
        terminal_render_character (terminal, ']', colour_grey, effect_bold, x + limit + 1, y);
 
        terminal_render_character (terminal, '[', colour_grey, effect_bold, x,             y);
        terminal_render_character (terminal, ']', colour_grey, effect_bold, x + limit + 1, y);
 
-       for (u4 index = 0; index < limit; ++index) {
-               terminal_render_character (terminal, (index < value) ? character : ' ', colour, effect, x + index + 1, y);
+       for (natural index = 0; index < limit; ++index) {
+               terminal_render_character (terminal, (index < value) ? data : ' ', colour, effect, x + index + 1, y);
        }
 }
 
        }
 }
 
-static v0 terminal_render_string (terminal_structure * terminal, c1 * string, u4 colour, u4 effect, u4 x, u4 y) {
-       for (u4 index = 0; string [index] != '\0'; ++index) {
+static procedure terminal_render_string (terminal_structure * terminal, character * string, natural colour, natural effect, natural x, natural y) {
+       for (natural index = 0; string [index] != '\0'; ++index) {
                terminal_render_character (terminal, string [index], colour, effect, x + index, y);
        }
 }
 
                terminal_render_character (terminal, string [index], colour, effect, x + index, y);
        }
 }
 
-static v0 terminal_render_number (terminal_structure * terminal, s4 number, u4 colour, u4 effect, u4 x, u4 y) {
+static procedure terminal_render_number (terminal_structure * terminal, integer number, natural colour, natural effect, natural x, natural y) {
        terminal_render_string (terminal, number_to_string (number), colour, effect, x, y);
 }
 
        terminal_render_string (terminal, number_to_string (number), colour, effect, x, y);
 }
 
-static v0 terminal_render_string_crop (terminal_structure * terminal, c1 * string, u4 colour, u4 effect, u4 x, u4 y, u4 crop) {
-       for (u4 index = 0; (string [index] != '\0') && (index < crop); ++index) {
+static procedure terminal_render_string_crop (terminal_structure * terminal, character * string, natural colour, natural effect, natural x, natural y, natural crop) {
+       for (natural index = 0; (string [index] != '\0') && (index < crop); ++index) {
                terminal_render_character (terminal, string [index], colour, effect, x + index, y);
        }
 }
 
                terminal_render_character (terminal, string [index], colour, effect, x + index, y);
        }
 }
 
-static v0 terminal_render_number_crop (terminal_structure * terminal, s4 number, u4 colour, u4 effect, u4 x, u4 y, u4 crop) {
+static procedure terminal_render_number_crop (terminal_structure * terminal, integer number, natural colour, natural effect, natural x, natural y, natural crop) {
        terminal_render_string_crop (terminal, number_to_string (number), colour, effect, x, y, crop);
 }
 
        terminal_render_string_crop (terminal, number_to_string (number), colour, effect, x, y, crop);
 }
 
-static v0 terminal_render_vertical_line (terminal_structure * terminal, c1 character, u4 colour, u4 effect, u4 x, u4 y, u4 height) {
-       for (u4 offset = 0; offset != height; ++offset) {
-               terminal_render_character (terminal, character, colour, effect, x, y + offset);
+static procedure terminal_render_vertical_line (terminal_structure * terminal, character data, natural colour, natural effect, natural x, natural y, natural height) {
+       for (natural offset = 0; offset != height; ++offset) {
+               terminal_render_character (terminal, data, colour, effect, x, y + offset);
        }
 }
 
        }
 }
 
-static v0 terminal_render_horizontal_line (terminal_structure * terminal, c1 character, u4 colour, u4 effect, u4 x, u4 y, u4 width) {
-       for (u4 offset = 0; offset != width; ++offset) {
-               terminal_render_character (terminal, character, colour, effect, x + offset, y);
+static procedure terminal_render_horizontal_line (terminal_structure * terminal, character data, natural colour, natural effect, natural x, natural y, natural width) {
+       for (natural offset = 0; offset != width; ++offset) {
+               terminal_render_character (terminal, data, colour, effect, x + offset, y);
        }
 }
 
        }
 }
 
-static v0 terminal_render_rectangle_line (terminal_structure * terminal, c1 character, u4 colour, u4 effect, u4 x, u4 y, u4 width, u4 height) {
-       terminal_render_vertical_line   (terminal, character, colour, effect, x + 0,         y + 0,          height + 0);
-       terminal_render_vertical_line   (terminal, character, colour, effect, x + width - 1, y + 0,          height + 0);
-       terminal_render_horizontal_line (terminal, character, colour, effect, x + 1,         y + 0,          width  - 1);
-       terminal_render_horizontal_line (terminal, character, colour, effect, x + 1,         y + height - 1, width  - 1);
+static procedure terminal_render_rectangle_line (terminal_structure * terminal, character data, natural colour, natural effect, natural x, natural y, natural width, natural height) {
+       terminal_render_vertical_line   (terminal, data, colour, effect, x + 0,         y + 0,          height + 0);
+       terminal_render_vertical_line   (terminal, data, colour, effect, x + width - 1, y + 0,          height + 0);
+       terminal_render_horizontal_line (terminal, data, colour, effect, x + 1,         y + 0,          width  - 1);
+       terminal_render_horizontal_line (terminal, data, colour, effect, x + 1,         y + height - 1, width  - 1);
 }
 
 }
 
-static v0 terminal_render_rectangle_fill (terminal_structure * terminal, c1 character, u4 colour, u4 effect, u4 x, u4 y, u4 width, u4 height) {
-       for (u4 offset_y = 0; offset_y != height; ++offset_y) {
-               for (u4 offset_x = 0; offset_x != width; ++offset_x) {
-                       terminal_render_character (terminal, character, colour, effect, x + offset_x, y + offset_y);
+static procedure terminal_render_rectangle_fill (terminal_structure * terminal, character data, natural colour, natural effect, natural x, natural y, natural width, natural height) {
+       for (natural offset_y = 0; offset_y != height; ++offset_y) {
+               for (natural offset_x = 0; offset_x != width; ++offset_x) {
+                       terminal_render_character (terminal, data, colour, effect, x + offset_x, y + offset_y);
                }
        }
 }
 
                }
        }
 }
 
-static v0 terminal_render_background (terminal_structure * terminal, c1 character, u4 colour, u4 effect) {
-       for (u4 y = 0; y != terminal->screen_height; ++y) {
-               for (u4 x = 0; x != terminal->screen_width; ++x) {
-                       terminal_render_character (terminal, character, colour, effect, x, y);
+static procedure terminal_render_background (terminal_structure * terminal, character data, natural colour, natural effect) {
+       for (natural y = 0; y != terminal->screen_height; ++y) {
+               for (natural x = 0; x != terminal->screen_width; ++x) {
+                       terminal_render_character (terminal, data, colour, effect, x, y);
                }
        }
 }
 
                }
        }
 }
 
-static v0 terminal_render_format (terminal_structure * terminal, c1 * format, u4 x, u4 y, ...) {
+static procedure terminal_render_format (terminal_structure * terminal, character * format, natural x, natural y, ...) {
        va_list list;
 
        va_list list;
 
-       u4 offset_x = 0;
-       u4 offset_y = 0;
+       natural offset_x = 0;
+       natural offset_y = 0;
 
        colour_enumeration colour = colour_white;
        effect_enumeration effect = effect_normal;
 
        colour_enumeration colour = colour_white;
        effect_enumeration effect = effect_normal;
@@ -311,29 +311,29 @@ static v0 terminal_render_format (terminal_structure * terminal, c1 * format, u4
                                                ++offset_x;
                                        } break;
                                        case ('i'): {
                                                ++offset_x;
                                        } break;
                                        case ('i'): {
-                                               c1 * number = number_to_string (va_arg (list, int));
-                                               terminal_render_string (terminal, number, colour, effect, x + offset_x, y + offset_y);
-                                               offset_x += string_length (number);
+                                               character * data = number_to_string (va_arg (list, int));
+                                               terminal_render_string (terminal, data, colour, effect, x + offset_x, y + offset_y);
+                                               offset_x += string_length (data);
                                        } break;
                                        case ('t'): {
                                        } break;
                                        case ('t'): {
-                                               b4 toggle = (b4) va_arg (list, int);
-                                               terminal_render_toggle (terminal, toggle, x + offset_x, y + offset_y);
+                                               boolean data = (boolean) va_arg (list, int);
+                                               terminal_render_toggle (terminal, data, x + offset_x, y + offset_y);
                                                offset_x += 3;
                                        } break;
                                        case ('b'): {
                                                offset_x += 3;
                                        } break;
                                        case ('b'): {
-                                               b4 b4ean = (b4) va_arg (list, int);
-                                               terminal_render_string (terminal, (b4ean == true) ? "true" : "false", colour, effect, x + offset_x, y + offset_y);
-                                               offset_x += (b4ean == true) ? 4 : 5;
+                                               boolean data = (boolean) va_arg (list, int);
+                                               terminal_render_string (terminal, (data == true) ? "true" : "false", colour, effect, x + offset_x, y + offset_y);
+                                               offset_x += (data == true) ? 4 : 5;
                                        } break;
                                        case ('c'): {
                                        } break;
                                        case ('c'): {
-                                               c1 character = (char) va_arg (list, int);
-                                               terminal_render_character (terminal, character, colour, effect, x + offset_x, y + offset_y);
+                                               character data = (character) va_arg (list, int);
+                                               terminal_render_character (terminal, data, colour, effect, x + offset_x, y + offset_y);
                                                ++offset_x;
                                        } break;
                                        case ('s'): {
                                                ++offset_x;
                                        } break;
                                        case ('s'): {
-                                               c1 * string = va_arg (list, c1 *);
-                                               terminal_render_string (terminal, string, colour, effect, x + offset_x, y + offset_y);
-                                               offset_x += string_length (string);
+                                               character * data = va_arg (list, character *);
+                                               terminal_render_string (terminal, data, colour, effect, x + offset_x, y + offset_y);
+                                               offset_x += string_length (data);
                                        } break;
                                        default: {
                                                terminal_render_character (terminal, '?', colour, effect, x + offset_x, y + offset_y);
                                        } break;
                                        default: {
                                                terminal_render_character (terminal, '?', colour, effect, x + offset_x, y + offset_y);
@@ -350,8 +350,8 @@ static v0 terminal_render_format (terminal_structure * terminal, c1 * format, u4
                                        } break;
                                        case ('A'): effect = effect_normal;         break;
                                        case ('B'): effect = effect_bold;           break;
                                        } break;
                                        case ('A'): effect = effect_normal;         break;
                                        case ('B'): effect = effect_bold;           break;
-                                       case ('C'): effect = effect_italic;         break;
-                                       case ('D'): effect = effect_undefined_code; break;
+                                       case ('C'): effect = effect_darken;         break;
+                                       case ('D'): effect = effect_italic;         break;
                                        case ('E'): effect = effect_underline;      break;
                                        case ('F'): effect = effect_blink;          break;
                                        case ('G'): effect = effect_reverse;        break;
                                        case ('E'): effect = effect_underline;      break;
                                        case ('F'): effect = effect_blink;          break;
                                        case ('G'): effect = effect_reverse;        break;
index e4e03ca4f18d06197bfc73a23afe7fe5a3b34bad..f9440f758e7379fbbd158f6e0a0a475f9c38cbea 100755 (executable)
@@ -15,35 +15,35 @@ typedef enum {
 } special_enumeration;
 
 typedef struct {
 } special_enumeration;
 
 typedef struct {
-       u4     count;
-       u4     limit;
-       u4   * completed;
-       u4 * * requirement;
-       u4   * type;
-       c1 * * class;
-       c1 * * description;
+       natural     count;
+       natural     limit;
+       natural   * completed;
+       natural * * requirement;
+       natural   * type;
+       character * * class;
+       character * * description;
 } challenge_structure;
 
 } challenge_structure;
 
-static c1 * special_name [special_count] = {
+static character * special_name [special_count] = {
        "strength",     "perception",   "edurance",     "charisma",     "intelligence", "agility",      "luck"
 };
 
        "strength",     "perception",   "edurance",     "charisma",     "intelligence", "agility",      "luck"
 };
 
-static b4 challenge_is_repeatable (challenge_structure * challenges, u4 index) {
+static boolean challenge_is_repeatable (challenge_structure * challenges, natural index) {
        return ((challenges->type [index] == special_strength + 1) ||
                (challenges->type [index] == special_edurance + 1) ||
                (challenges->type [index] == special_agility  + 1));
 }
 
        return ((challenges->type [index] == special_strength + 1) ||
                (challenges->type [index] == special_edurance + 1) ||
                (challenges->type [index] == special_agility  + 1));
 }
 
-static b4 challenge_is_available (challenge_structure * challenges, u4 index) {
+static boolean challenge_is_available (challenge_structure * challenges, natural index) {
        return ((challenges->completed [index] == 0) || (challenge_is_repeatable (challenges, index) == true));
 }
 
        return ((challenges->completed [index] == 0) || (challenge_is_repeatable (challenges, index) == true));
 }
 
-static b4 challenge_is_completable (u4 * special, challenge_structure * challenges, u4 index) {
+static boolean challenge_is_completable (natural * special, challenge_structure * challenges, natural index) {
        if (challenge_is_available (challenges, index) == false) {
                return (false);
        }
 
        if (challenge_is_available (challenges, index) == false) {
                return (false);
        }
 
-       for (u4 check = 0; check < special_count; ++check) {
+       for (natural check = 0; check < special_count; ++check) {
                if (challenges->requirement [index] [check] > special [check]) {
                        return (false);
                }
                if (challenges->requirement [index] [check] > special [check]) {
                        return (false);
                }
@@ -52,11 +52,11 @@ static b4 challenge_is_completable (u4 * special, challenge_structure * challeng
        return (true);
 }
 
        return (true);
 }
 
-static v0 render_challenge_list (terminal_structure * terminal, u4 * special, challenge_structure * challenges, u4 x, u4 y) {
-       u4   count = 0;
-       u4 * array = allocate (challenges->count * sizeof (* array));
+static procedure render_challenge_list (terminal_structure * terminal, natural * special, challenge_structure * challenges, natural x, natural y) {
+       natural   count = 0;
+       natural * array = allocate (challenges->count * sizeof (* array));
 
 
-       for (u4 index = 0; index < challenges->count; ++index) {
+       for (natural index = 0; index < challenges->count; ++index) {
                if (challenge_is_completable (special, challenges, index) == true) {
                        ++count;
                        array [count - 1] = index;
                if (challenge_is_completable (special, challenges, index) == true) {
                        ++count;
                        array [count - 1] = index;
@@ -66,10 +66,10 @@ static v0 render_challenge_list (terminal_structure * terminal, u4 * special, ch
        terminal_render_format (terminal, "Count of unlocked challenges: /2/B%i", x, y + 0, count);
        terminal_render_format (terminal, "Count of locked challenges:   /1/B%i", x, y + 1, challenges->count - count);
 
        terminal_render_format (terminal, "Count of unlocked challenges: /2/B%i", x, y + 0, count);
        terminal_render_format (terminal, "Count of locked challenges:   /1/B%i", x, y + 1, challenges->count - count);
 
-       for (u4 index = 0; index < count; ++index) {
+       for (natural index = 0; index < count; ++index) {
                terminal_render_character (terminal, '[', colour_grey, effect_bold, x, y + index + 2);
 
                terminal_render_character (terminal, '[', colour_grey, effect_bold, x, y + index + 2);
 
-               for (u4 value = 0; value < special_count; ++value) {
+               for (natural value = 0; value < special_count; ++value) {
                        terminal_render_number (terminal, challenges->requirement [array [index]] [value], value + 1, effect_bold, x + 3 * value + 2, y + index + 2);
                }
 
                        terminal_render_number (terminal, challenges->requirement [array [index]] [value], value + 1, effect_bold, x + 3 * value + 2, y + index + 2);
                }
 
@@ -83,12 +83,12 @@ static v0 render_challenge_list (terminal_structure * terminal, u4 * special, ch
        array = deallocate (array);
 }
 
        array = deallocate (array);
 }
 
-static v0 render_special_attributes (terminal_structure * terminal, u4 * special, u4 offset, u4 selection) {
-       for (u4 index = 0; index < special_count; ++index) {
-               u4 effect = (selection == index) ? effect_bold : effect_normal;
-               u4 length = attribute_maximum + 3;
+static procedure render_special_attributes (terminal_structure * terminal, natural * special, natural offset, natural selection) {
+       for (natural index = 0; index < special_count; ++index) {
+               natural effect = (selection == index) ? effect_bold : effect_normal;
+               natural length = attribute_maximum + 3;
 
 
-               c1 name [32] = "";
+               character name [32] = "";
 
                string_copy_limit (name, special_name [index], sizeof (name));
 
 
                string_copy_limit (name, special_name [index], sizeof (name));
 
@@ -98,13 +98,13 @@ static v0 render_special_attributes (terminal_structure * terminal, u4 * special
        }
 }
 
        }
 }
 
-static v0 prompt_special_attributes (u4 * special) {
+static procedure prompt_special_attributes (natural * special) {
        terminal_structure * terminal = terminal_initialize ();
 
        terminal_structure * terminal = terminal_initialize ();
 
-       u4 selection = 0;
-       b4 show_help = false;
+       natural selection = 0;
+       boolean show_help = false;
 
 
-       c1 * main_messages [] = {
+       character * main_messages [] = {
                "Press H or Tab to toggle help.",
                "Press Q or Escape to use default settings.",
                "Press S or Enter to save changes.",
                "Press H or Tab to toggle help.",
                "Press Q or Escape to use default settings.",
                "Press S or Enter to save changes.",
@@ -112,7 +112,7 @@ static v0 prompt_special_attributes (u4 * special) {
                "Choose your SPECIAL attributes:"
        };
 
                "Choose your SPECIAL attributes:"
        };
 
-       c1 * help_messages [] = {
+       character * help_messages [] = {
                "Show help            - H or Tab",
                "Use default settings - Q or Escape",
                "Save and quit        - S or Enter",
                "Show help            - H or Tab",
                "Use default settings - Q or Escape",
                "Save and quit        - S or Enter",
@@ -122,22 +122,22 @@ static v0 prompt_special_attributes (u4 * special) {
                "Decrease attribute   - N, Left arrow key or KP4"
        };
 
                "Decrease attribute   - N, Left arrow key or KP4"
        };
 
-       for (u4 index = 0; index < special_count; ++index) {
+       for (natural index = 0; index < special_count; ++index) {
                special [index] = 5;
        }
 
        while (terminal->active == true) {
                terminal_render_background (terminal, ' ', colour_white, effect_normal);
 
                special [index] = 5;
        }
 
        while (terminal->active == true) {
                terminal_render_background (terminal, ' ', colour_white, effect_normal);
 
-               for (u4 index = 0; index < array_length (main_messages); ++index) {
+               for (natural index = 0; index < array_length (main_messages); ++index) {
                        terminal_render_string (terminal, main_messages [index], colour_white, effect_normal, 0, index);
                }
 
                render_special_attributes (terminal, special, array_length (main_messages) + 1, selection);
 
                if (show_help == true) {
                        terminal_render_string (terminal, main_messages [index], colour_white, effect_normal, 0, index);
                }
 
                render_special_attributes (terminal, special, array_length (main_messages) + 1, selection);
 
                if (show_help == true) {
-                       for (u4 index = 0; index < array_length (help_messages); ++index) {
-                               u4 offset = array_length  (main_messages) + special_count + 2;
+                       for (natural index = 0; index < array_length (help_messages); ++index) {
+                               natural offset = array_length  (main_messages) + special_count + 2;
 
                                terminal_render_string (terminal, help_messages [index], colour_white, effect_normal, 0, index + offset);
                        }
 
                                terminal_render_string (terminal, help_messages [index], colour_white, effect_normal, 0, index + offset);
                        }
@@ -148,7 +148,7 @@ static v0 prompt_special_attributes (u4 * special) {
                if ((terminal->signal [signal_tabulator] == true) || (terminal->signal [signal_h] == true)) {
                        show_help = ! show_help;
                } else if ((terminal->signal [signal_escape] == true) || (terminal->signal [signal_q] == true)) {
                if ((terminal->signal [signal_tabulator] == true) || (terminal->signal [signal_h] == true)) {
                        show_help = ! show_help;
                } else if ((terminal->signal [signal_escape] == true) || (terminal->signal [signal_q] == true)) {
-                       for (u4 index = 0; index < special_count; ++index) {
+                       for (natural index = 0; index < special_count; ++index) {
                                special [index] = 5;
                        } break;
                } else if ((terminal->signal [signal_return] == true) || (terminal->signal [signal_s] == true)) {
                                special [index] = 5;
                        } break;
                } else if ((terminal->signal [signal_return] == true) || (terminal->signal [signal_s] == true)) {
@@ -169,33 +169,33 @@ static v0 prompt_special_attributes (u4 * special) {
        terminal = terminal_deinitialize (terminal);
 }
 
        terminal = terminal_deinitialize (terminal);
 }
 
-static v0 import_user_configuration (u4 * special, u4 challenge_count, u4 * * daily_challenges, b4 * * completition) {
-       b4 special_defined [special_count] = { false };
+static procedure import_user_configuration (natural * special, natural challenge_count, natural * * daily_challenges, boolean * * completition) {
+       boolean special_defined [special_count] = { false };
 
 
-       b4 daily_challenges_defined = false;
-       b4 completition_defined     = false;
+       boolean daily_challenges_defined = false;
+       boolean completition_defined     = false;
 
 
-       script_information * information = allocate    (sizeof (* information));
-       script_structure   * structure   = script_open (configuration_format ("xhallenge.cfg"));
+       script_structure * information = allocate    (sizeof (* information));
+       script_data_structure   * structure   = script_open (configuration_format ("xhallenge.cfg"));
 
 
-       for (script_word_type word = script_parser (structure); word != script_end; word = script_parser (structure)) {
+       for (script_word_enumeration word = script_parser (structure); word != script_end; word = script_parser (structure)) {
                if (word == script_marker) {
                        if (script_compare (structure, "challenges") == true) {
                if (word == script_marker) {
                        if (script_compare (structure, "challenges") == true) {
-                               u4 check = 0;
+                               natural check = 0;
                                script_failure (structure, daily_challenges_defined == true, "Challenge array was already defined.");
                                (* daily_challenges) = script_expect_ordered_array (information, structure, & check);
                                daily_challenges_defined = true;
                                script_failure (structure, check != challenges_per_day, "Ordered array 'daily_challenges' is incomplete.");
                                script_failure (structure, daily_challenges_defined == true, "Challenge array was already defined.");
                                (* daily_challenges) = script_expect_ordered_array (information, structure, & check);
                                daily_challenges_defined = true;
                                script_failure (structure, check != challenges_per_day, "Ordered array 'daily_challenges' is incomplete.");
-                               for (u4 index = 0; index < challenges_per_day; ++index) {
+                               for (natural index = 0; index < challenges_per_day; ++index) {
                                        script_failure (structure, (* daily_challenges) [index] >= challenge_count, "Invalid index.");
                                }
                        } else if (script_compare (structure, "completition") == true) {
                                        script_failure (structure, (* daily_challenges) [index] >= challenge_count, "Invalid index.");
                                }
                        } else if (script_compare (structure, "completition") == true) {
-                               u4 check = 0;
+                               natural check = 0;
                                script_failure (structure, completition_defined == true, "Completition array was already defined.");
                                (* completition) = script_expect_ordered_array (information, structure, & check);
                                completition_defined = true;
                                script_failure (structure, check != challenges_per_day, "Ordered array 'completition' is incomplete.");
                                script_failure (structure, completition_defined == true, "Completition array was already defined.");
                                (* completition) = script_expect_ordered_array (information, structure, & check);
                                completition_defined = true;
                                script_failure (structure, check != challenges_per_day, "Ordered array 'completition' is incomplete.");
-                       } else for (u4 index = 0; index < special_count; ++index) {
+                       } else for (natural index = 0; index < special_count; ++index) {
                                if (script_compare (structure, special_name [index]) == true) {
                                        script_failure (structure, special_defined [index] == true, "Attribute was already defined.");
                                        special [index] = script_expect_number (structure);
                                if (script_compare (structure, special_name [index]) == true) {
                                        script_failure (structure, special_defined [index] == true, "Attribute was already defined.");
                                        special [index] = script_expect_number (structure);
@@ -215,15 +215,15 @@ static v0 import_user_configuration (u4 * special, u4 challenge_count, u4 * * da
        information = deallocate   (information);
 }
 
        information = deallocate   (information);
 }
 
-static v0 export_user_configuration (u4 * special, u4 * daily_challenges, b4 * completition) {
-       c1 buffer [4096] = "";
+static procedure export_user_configuration (natural * special, natural * daily_challenges, boolean * completition) {
+       character buffer [4096] = "";
 
 
-       for (u4 index = 0; index < special_count; ++index) {
+       for (natural index = 0; index < special_count; ++index) {
                string_concatenate (buffer, format ("%s = %i\n", special_name [index], special [index]));
        }
 
        string_concatenate (buffer, "challenges = (");
                string_concatenate (buffer, format ("%s = %i\n", special_name [index], special [index]));
        }
 
        string_concatenate (buffer, "challenges = (");
-       for (u4 index = 0; index < challenges_per_day; ++index) {
+       for (natural index = 0; index < challenges_per_day; ++index) {
                string_concatenate (buffer, number_to_string (daily_challenges [index]));
 
                if (index < challenges_per_day - 1) {
                string_concatenate (buffer, number_to_string (daily_challenges [index]));
 
                if (index < challenges_per_day - 1) {
@@ -233,7 +233,7 @@ static v0 export_user_configuration (u4 * special, u4 * daily_challenges, b4 * c
        string_concatenate (buffer, ")\n");
 
        string_concatenate (buffer, "completition = (");
        string_concatenate (buffer, ")\n");
 
        string_concatenate (buffer, "completition = (");
-       for (u4 index = 0; index < challenges_per_day; ++index) {
+       for (natural index = 0; index < challenges_per_day; ++index) {
                string_concatenate (buffer, number_to_string (completition [index]));
 
                if (index < challenges_per_day - 1) {
                string_concatenate (buffer, number_to_string (completition [index]));
 
                if (index < challenges_per_day - 1) {
@@ -245,7 +245,7 @@ static v0 export_user_configuration (u4 * special, u4 * daily_challenges, b4 * c
        configuration_export ("xhallenge.cfg", buffer);
 }
 
        configuration_export ("xhallenge.cfg", buffer);
 }
 
-static challenge_structure * challenges_initialize (u4 limit) {
+static challenge_structure * challenges_initialize (natural limit) {
        challenge_structure * challenges = allocate (sizeof (* challenges));
 
        challenges->limit = limit;
        challenge_structure * challenges = allocate (sizeof (* challenges));
 
        challenges->limit = limit;
@@ -254,7 +254,7 @@ static challenge_structure * challenges_initialize (u4 limit) {
 }
 
 static challenge_structure * challenges_deinitialize (challenge_structure * challenges) {
 }
 
 static challenge_structure * challenges_deinitialize (challenge_structure * challenges) {
-       for (u4 index = 0; index < challenges->count; ++index) {
+       for (natural index = 0; index < challenges->count; ++index) {
                challenges->requirement [index] = deallocate (challenges->requirement [index]);
                challenges->description [index] = deallocate (challenges->description [index]);
                challenges->class       [index] = deallocate (challenges->class       [index]);
                challenges->requirement [index] = deallocate (challenges->requirement [index]);
                challenges->description [index] = deallocate (challenges->description [index]);
                challenges->class       [index] = deallocate (challenges->class       [index]);
@@ -269,17 +269,17 @@ static challenge_structure * challenges_deinitialize (challenge_structure * chal
        return (deallocate (challenges));
 }
 
        return (deallocate (challenges));
 }
 
-static v0 import_challenges (challenge_structure * challenges) {
-       b4 completed_defined   = false;
-       b4 requirement_defined = false;
-       b4 type_defined        = false;
-       b4 class_defined       = false;
-       b4 description_defined = false;
+static procedure import_challenges (challenge_structure * challenges) {
+       boolean completed_defined   = false;
+       boolean requirement_defined = false;
+       boolean type_defined        = false;
+       boolean class_defined       = false;
+       boolean description_defined = false;
 
 
-       script_information * information = allocate    (sizeof (* information));
-       script_structure   * structure   = script_open (configuration_format ("xhallenge_list.cfg"));
+       script_structure * information = allocate    (sizeof (* information));
+       script_data_structure   * structure   = script_open (configuration_format ("xhallenge_list.cfg"));
 
 
-       for (script_word_type word = script_parser (structure); word != script_end; word = script_parser (structure)) {
+       for (script_word_enumeration word = script_parser (structure); word != script_end; word = script_parser (structure)) {
                if (word == script_header) {
                        if (challenges->count > 0) {
                                script_warning (structure,
                if (word == script_header) {
                        if (challenges->count > 0) {
                                script_warning (structure,
@@ -302,13 +302,13 @@ static v0 import_challenges (challenge_structure * challenges) {
                        class_defined       = false;
                        description_defined = false;
                } else if (word == script_marker) {
                        class_defined       = false;
                        description_defined = false;
                } else if (word == script_marker) {
-                       u4 current = challenges->count - 1;
+                       natural current = challenges->count - 1;
                        if (script_compare (structure, "completed") == true) {
                                script_failure (structure, completed_defined == true, "Marker 'completed' already defined.");
                                challenges->completed [current] = script_expect_number (structure);
                                completed_defined = true;
                        } else if (script_compare (structure, "requirement") == true) {
                        if (script_compare (structure, "completed") == true) {
                                script_failure (structure, completed_defined == true, "Marker 'completed' already defined.");
                                challenges->completed [current] = script_expect_number (structure);
                                completed_defined = true;
                        } else if (script_compare (structure, "requirement") == true) {
-                               u4 check = 0;
+                               natural check = 0;
                                script_failure (structure, requirement_defined == true, "Marker 'requirement' already defined.");
                                challenges->requirement [current] = script_expect_ordered_array (information, structure, & check);
                                requirement_defined = true;
                                script_failure (structure, requirement_defined == true, "Marker 'requirement' already defined.");
                                challenges->requirement [current] = script_expect_ordered_array (information, structure, & check);
                                requirement_defined = true;
@@ -339,16 +339,16 @@ static v0 import_challenges (challenge_structure * challenges) {
        information = deallocate   (information);
 }
 
        information = deallocate   (information);
 }
 
-static v0 export_challenges (challenge_structure * challenges) {
-       s4 file = file_open (configuration_format ("xhallenge_list.cfg"), file_flag_edit | file_flag_truncate);
+static procedure export_challenges (challenge_structure * challenges) {
+       integer file = file_open (configuration_format ("xhallenge_list.cfg"), file_flag_edit | file_flag_truncate);
 
 
-       for (u4 index = 0; index < challenges->count; ++index) {
+       for (natural index = 0; index < challenges->count; ++index) {
                file_echo (file, "[] ");
 
                file_echo (file, format ("completed = %i ", challenges->completed [index]));
 
                file_echo (file, "requirement = (");
                file_echo (file, "[] ");
 
                file_echo (file, format ("completed = %i ", challenges->completed [index]));
 
                file_echo (file, "requirement = (");
-               for (u4 subindex = 0; subindex < special_count; ++subindex) {
+               for (natural subindex = 0; subindex < special_count; ++subindex) {
                        file_echo (file, number_to_string (challenges->requirement [index] [subindex]));
 
                        if (subindex < special_count - 1) {
                        file_echo (file, number_to_string (challenges->requirement [index] [subindex]));
 
                        if (subindex < special_count - 1) {
@@ -365,17 +365,17 @@ static v0 export_challenges (challenge_structure * challenges) {
        file = file_close (file);
 }
 
        file = file_close (file);
 }
 
-static u4 generate_challenge (u4 * special, challenge_structure * challenges) {
-       u4 index = urandomize (0, challenges->count - 1);
-       b4 valid = false;
+static natural generate_challenge (natural * special, challenge_structure * challenges) {
+       natural index = random_natural (0, challenges->count - 1);
+       boolean valid = false;
 
        while (valid == false) {
                valid = true;
 
        while (valid == false) {
                valid = true;
-               index = urandomize (0, challenges->count - 1);
+               index = random_natural (0, challenges->count - 1);
 
                if ((challenges->completed [index] > 0) && (challenges->type [index] != 1) && (challenges->type [index] != 3)) continue;
 
 
                if ((challenges->completed [index] > 0) && (challenges->type [index] != 1) && (challenges->type [index] != 3)) continue;
 
-               for (u4 check = 0; check < special_count; ++check) {
+               for (natural check = 0; check < special_count; ++check) {
                        if (challenges->requirement [index] [check] > special [check]) {
                                valid = false;
                                break;
                        if (challenges->requirement [index] [check] > special [check]) {
                                valid = false;
                                break;
@@ -386,23 +386,23 @@ static u4 generate_challenge (u4 * special, challenge_structure * challenges) {
        return (index);
 }
 
        return (index);
 }
 
-static v0 generate_challenges (u4 * special, challenge_structure * challenges, u4 * * daily_challenges, b4 * * completition) {
+static procedure generate_challenges (natural * special, challenge_structure * challenges, natural * * daily_challenges, boolean * * completition) {
        (* daily_challenges) = allocate (challenges_per_day * sizeof (* * daily_challenges));
        (* completition)     = allocate (challenges_per_day * sizeof (* * completition));
 
        (* daily_challenges) = allocate (challenges_per_day * sizeof (* * daily_challenges));
        (* completition)     = allocate (challenges_per_day * sizeof (* * completition));
 
-       for (u4 index = 0; index < challenges_per_day; ++index) {
+       for (natural index = 0; index < challenges_per_day; ++index) {
                (* daily_challenges) [index] = generate_challenge (special, challenges);
        }
 }
 
                (* daily_challenges) [index] = generate_challenge (special, challenges);
        }
 }
 
-static v0 render_challenges (u4 * special, challenge_structure * challenges, u4 * daily_challenges, b4 * completition) {
+static procedure render_challenges (natural * special, challenge_structure * challenges, natural * daily_challenges, boolean * completition) {
        terminal_structure * terminal = terminal_initialize ();
 
        terminal_structure * terminal = terminal_initialize ();
 
-       u4 selection = 0;
-       b4 show_help = false;
-       b4 show_list = false;
+       natural selection = 0;
+       boolean show_help = false;
+       boolean show_list = false;
 
 
-       c1 * main_messages [] = {
+       character * main_messages [] = {
                "Press H or Tab to toggle help.",
                "Press Q or Escape to quit the program without saving changes.",
                "Press S or Enter to save changes and quit the program.",
                "Press H or Tab to toggle help.",
                "Press Q or Escape to quit the program without saving changes.",
                "Press S or Enter to save changes and quit the program.",
@@ -410,7 +410,7 @@ static v0 render_challenges (u4 * special, challenge_structure * challenges, u4
                "Your daily challenges:"
        };
 
                "Your daily challenges:"
        };
 
-       c1 * help_messages [] = {
+       character * help_messages [] = {
                "Show help          - H or Tab",
                "Quit               - Q or Escape",
                "Save and quit      - S or Enter",
                "Show help          - H or Tab",
                "Quit               - Q or Escape",
                "Save and quit      - S or Enter",
@@ -425,20 +425,20 @@ static v0 render_challenges (u4 * special, challenge_structure * challenges, u4
        while (terminal->active == true) {
                terminal_render_background (terminal, ' ', colour_white, effect_normal);
 
        while (terminal->active == true) {
                terminal_render_background (terminal, ' ', colour_white, effect_normal);
 
-               for (u4 index = 0; index < array_length (main_messages); ++index) {
+               for (natural index = 0; index < array_length (main_messages); ++index) {
                        terminal_render_string (terminal, main_messages [index], colour_white, effect_normal, 0, index);
                }
 
                        terminal_render_string (terminal, main_messages [index], colour_white, effect_normal, 0, index);
                }
 
-               for (u4 index = 0; index < challenges_per_day; ++index) {
-                       u4   type        = challenges->type        [daily_challenges [index]];
-                       c1 * class       = challenges->class       [daily_challenges [index]];
-                       c1 * description = challenges->description [daily_challenges [index]];
+               for (natural index = 0; index < challenges_per_day; ++index) {
+                       natural   type        = challenges->type        [daily_challenges [index]];
+                       character * class       = challenges->class       [daily_challenges [index]];
+                       character * description = challenges->description [daily_challenges [index]];
 
 
-                       u4 effect = (selection == index) ? effect_bold  : effect_normal;
+                       natural effect = (selection == index) ? effect_bold  : effect_normal;
 
 
-                       u4 offset = array_length (main_messages) + 2;
+                       natural offset = array_length (main_messages) + 2;
 
 
-                       u4 alignment = string_length (class) + 4;
+                       natural alignment = string_length (class) + 4;
 
                        terminal_render_toggle (terminal, completition [index], 0, index + offset);
 
 
                        terminal_render_toggle (terminal, completition [index], 0, index + offset);
 
@@ -452,9 +452,9 @@ static v0 render_challenges (u4 * special, challenge_structure * challenges, u4
                }
 
                if (show_help == true) {
                }
 
                if (show_help == true) {
-                       u4 offset = array_length (main_messages) + challenges_per_day + 3;
+                       natural offset = array_length (main_messages) + challenges_per_day + 3;
 
 
-                       for (u4 index = 0; index < array_length (help_messages); ++index) {
+                       for (natural index = 0; index < array_length (help_messages); ++index) {
                                terminal_render_string (terminal, help_messages [index], colour_white, effect_normal, 0, index + offset);
                        }
 
                                terminal_render_string (terminal, help_messages [index], colour_white, effect_normal, 0, index + offset);
                        }
 
@@ -483,7 +483,7 @@ static v0 render_challenges (u4 * special, challenge_structure * challenges, u4
                        daily_challenges [selection] = generate_challenge (special, challenges);
                        completition     [selection] = false;
                } else if (/*(terminal->signal [signal_backspace] == true) || */(terminal->signal [signal_r] == true)) {
                        daily_challenges [selection] = generate_challenge (special, challenges);
                        completition     [selection] = false;
                } else if (/*(terminal->signal [signal_backspace] == true) || */(terminal->signal [signal_r] == true)) {
-                       for (u4 index = 0; index < challenges_per_day; ++index) {
+                       for (natural index = 0; index < challenges_per_day; ++index) {
                                daily_challenges [index] = generate_challenge (special, challenges);
                                completition     [index] = false;
                        }
                                daily_challenges [index] = generate_challenge (special, challenges);
                                completition     [index] = false;
                        }
@@ -493,15 +493,15 @@ static v0 render_challenges (u4 * special, challenge_structure * challenges, u4
        terminal = terminal_deinitialize (terminal);
 }
 
        terminal = terminal_deinitialize (terminal);
 }
 
-s4 main (s4 argc, c1 * * argv) {
-       u4 special [special_count] = { 0 };
+integer main (integer argc, character * * argv) {
+       natural special [special_count] = { 0 };
 
 
-       u4 * daily_challenges = null;
-       b4 * completition     = null;
+       natural * daily_challenges = null;
+       boolean * completition     = null;
 
        challenge_structure * challenges = challenges_initialize (1024);
 
 
        challenge_structure * challenges = challenges_initialize (1024);
 
-       randomize_seed_by_time ();
+       random_integer_seed_by_time ();
 
        if (argc == 2) {
                if (string_compare (argv [1], "-r") == true) {
 
        if (argc == 2) {
                if (string_compare (argv [1], "-r") == true) {
diff --git a/xhape.h b/xhape.h
index e97cff364bdcfeee24699303042ac32e87faaa10..b14d54146984f6dec42e7c90f58fc4b5cb29177d 100644 (file)
--- a/xhape.h
+++ b/xhape.h
 /// for more details, if you dare, it is a lot of text that nobody wants to read...
 
 typedef struct {
 /// for more details, if you dare, it is a lot of text that nobody wants to read...
 
 typedef struct {
-       u4    vertex_count;
-       u4    index_count;
-       u4    vertex_limit;
-       u4    index_limit;
-       f4 * vertex_array;
-       u4  * index_array;
+       natural    vertex_count;
+       natural    index_count;
+       natural    vertex_limit;
+       natural    index_limit;
+       real * vertex_array;
+       natural  * index_array;
 } shape_node;
 
 } shape_node;
 
-static shape_node * shape_allocate (u4 vertex_limit, u4 index_limit) {
+static shape_node * shape_allocate (natural vertex_limit, natural index_limit) {
        shape_node * shape = allocate (sizeof (* shape));
 
        shape->vertex_limit = vertex_limit;
        shape_node * shape = allocate (sizeof (* shape));
 
        shape->vertex_limit = vertex_limit;
@@ -44,7 +44,7 @@ static shape_node * shape_deallocate (shape_node * shape) {
        return (deallocate (shape));
 }
 
        return (deallocate (shape));
 }
 
-static v0 shape_add_vertex_unwrap_colour (shape_node * shape, f4 x, f4 y, f4 z, f4 u, f4 v, u4 colour) {
+static procedure shape_add_vertex_unwrap_colour (shape_node * shape, real x, real y, real z, real u, real v, natural colour) {
        fatal_failure (shape->vertex_count + 9 > shape->vertex_limit, "shape_add_vertex");
 
        if (shape->vertex_count + 9 > shape->vertex_limit) return;
        fatal_failure (shape->vertex_count + 9 > shape->vertex_limit, "shape_add_vertex");
 
        if (shape->vertex_count + 9 > shape->vertex_limit) return;
@@ -62,7 +62,7 @@ static v0 shape_add_vertex_unwrap_colour (shape_node * shape, f4 x, f4 y, f4 z,
        shape->vertex_count += 9;
 }
 
        shape->vertex_count += 9;
 }
 
-static v0 shape_add_index (shape_node * shape, u4 a, u4 b, u4 c) {
+static procedure shape_add_index (shape_node * shape, natural a, natural b, natural c) {
        fatal_failure (shape->index_count + 3 > shape->index_limit, "shape_add_index");
 
        if (shape->index_count + 3 > shape->index_limit) return;
        fatal_failure (shape->index_count + 3 > shape->index_limit, "shape_add_index");
 
        if (shape->index_count + 3 > shape->index_limit) return;
@@ -74,24 +74,24 @@ static v0 shape_add_index (shape_node * shape, u4 a, u4 b, u4 c) {
        shape->index_count += 3;
 }
 
        shape->index_count += 3;
 }
 
-//~static shape_node * shape_tetrahedron_unwrap (f4 x, f4 y, f4 z, f4 scale) {
-//~static shape_node * shape_tetrahedron_unwrap_colour (f4 x, f4 y, f4 z, f4 scale, u4 colour) {
-static shape_node * shape_tetrahedron_colour (f4 x, f4 y, f4 z, f4 scale, u4 colour) {
+//~static shape_node * shape_tetrahedron_unwrap (real x, real y, real z, real scale) {
+//~static shape_node * shape_tetrahedron_unwrap_colour (real x, real y, real z, real scale, natural colour) {
+static shape_node * shape_tetrahedron_colour (real x, real y, real z, real scale, natural colour) {
        shape_node * shape = shape_allocate (4 * 9, 4 * 3);
 
        shape_node * shape = shape_allocate (4 * 9, 4 * 3);
 
-       f4 vertices [12] = {
+       real vertices [12] = {
                x + scale, y + scale, z + scale,
                x - scale, y - scale, z + scale,
                x - scale, y + scale, z - scale,
                x + scale, y - scale, z - scale
        };
 
                x + scale, y + scale, z + scale,
                x - scale, y - scale, z + scale,
                x - scale, y + scale, z - scale,
                x + scale, y - scale, z - scale
        };
 
-       for (u4 vertex = 0; vertex < 4; ++vertex) {
-               f4 x = vertices [3 * vertex + 0];
-               f4 y = vertices [3 * vertex + 1];
-               f4 z = vertices [3 * vertex + 2];
-               f4 u = (binary_sign (vertex >> 0) + 1.0f) / 2.0f;
-               f4 v = (binary_sign (vertex >> 1) + 1.0f) / 2.0f;
+       for (natural vertex = 0; vertex < 4; ++vertex) {
+               real x = vertices [3 * vertex + 0];
+               real y = vertices [3 * vertex + 1];
+               real z = vertices [3 * vertex + 2];
+               real u = (binary_sign (vertex >> 0) + 1.0f) / 2.0f;
+               real v = (binary_sign (vertex >> 1) + 1.0f) / 2.0f;
 
                shape_add_vertex_unwrap_colour (shape, x, y, z, u, v, colour);
        }
 
                shape_add_vertex_unwrap_colour (shape, x, y, z, u, v, colour);
        }
@@ -104,12 +104,12 @@ static shape_node * shape_tetrahedron_colour (f4 x, f4 y, f4 z, f4 scale, u4 col
        return (shape);
 }
 
        return (shape);
 }
 
-//~static shape_node * shape_square (vector_3 * origin, f4 scale, u4 colour) {
+//~static shape_node * shape_square (vector_3 * origin, real scale, natural colour) {
        //~shape_node * shape = shape_allocate (4, 2 * 3);
 
        //~shape_set_origin (shape, origin);
 
        //~shape_node * shape = shape_allocate (4, 2 * 3);
 
        //~shape_set_origin (shape, origin);
 
-       //~f4 central = square_root (2.0f) * scale / 2.0f;
+       //~real central = square_root (2.0f) * scale / 2.0f;
 
        //~vector_4 normal_colour = {
                //~normal_r (colour),
 
        //~vector_4 normal_colour = {
                //~normal_r (colour),
@@ -118,8 +118,8 @@ static shape_node * shape_tetrahedron_colour (f4 x, f4 y, f4 z, f4 scale, u4 col
                //~normal_a (colour)
        //~};
 
                //~normal_a (colour)
        //~};
 
-       //~for (u4 vertex = 0; vertex < 4; ++vertex) {
-               //~vector_3 pos4 = {
+       //~for (natural vertex = 0; vertex < 4; ++vertex) {
+               //~vector_3 pointeger = {
                        //~origin->x + binary_sign (vertex >> 0) * central,
                        //~origin->y + binary_sign (vertex >> 1) * central,
                        //~origin->z
                        //~origin->x + binary_sign (vertex >> 0) * central,
                        //~origin->y + binary_sign (vertex >> 1) * central,
                        //~origin->z
@@ -139,12 +139,12 @@ static shape_node * shape_tetrahedron_colour (f4 x, f4 y, f4 z, f4 scale, u4 col
        //~return (shape);
 //~}
 
        //~return (shape);
 //~}
 
-//~static shape_node * shape_cube (vector_3 * origin, f4 scale, u4 colour) {
+//~static shape_node * shape_cube (vector_3 * origin, real scale, natural colour) {
        //~shape_node * shape = shape_allocate (8, 12 * 3);
 
        //~shape_set_origin (shape, origin);
 
        //~shape_node * shape = shape_allocate (8, 12 * 3);
 
        //~shape_set_origin (shape, origin);
 
-       //~f4 central = square_root (3.0f) * scale / 2.0f;
+       //~real central = square_root (3.0f) * scale / 2.0f;
 
        //~vector_4 normal_colour = {
                //~normal_r (colour),
 
        //~vector_4 normal_colour = {
                //~normal_r (colour),
@@ -153,8 +153,8 @@ static shape_node * shape_tetrahedron_colour (f4 x, f4 y, f4 z, f4 scale, u4 col
                //~normal_a (colour)
        //~};
 
                //~normal_a (colour)
        //~};
 
-       //~for (u4 vertex = 0; vertex < 8; ++vertex) {
-               //~vector_3 pos4 = {
+       //~for (natural vertex = 0; vertex < 8; ++vertex) {
+               //~vector_3 pointeger = {
                        //~origin->x + binary_sign (vertex >> 0) * central,
                        //~origin->y + binary_sign (vertex >> 1) * central,
                        //~origin->z + binary_sign (vertex >> 2) * central
                        //~origin->x + binary_sign (vertex >> 0) * central,
                        //~origin->y + binary_sign (vertex >> 1) * central,
                        //~origin->z + binary_sign (vertex >> 2) * central
index 93fd0e2b9aa88aa75b7859f9e24bd03561ab5d1b..b414456a8287fbd9d6b42f2dcd2d95c3cf5da5e7 100755 (executable)
--- a/xiasma.h
+++ b/xiasma.h
@@ -115,19 +115,19 @@ enum {
        register_8,     register_9,     register_10,    register_11,    register_12,    register_13,    register_14,    register_15
 };
 
        register_8,     register_9,     register_10,    register_11,    register_12,    register_13,    register_14,    register_15
 };
 
-static s4   empty_count = 0;
-static s4   empty_holes = 1;
-static s4 * empty_array = null;
-static s4 * empty_imbue = null;
-static s4 * empty_store = null;
+static integer   empty_count = 0;
+static integer   empty_holes = 1;
+static integer * empty_array = null;
+static integer * empty_imbue = null;
+static integer * empty_store = null;
 
 
-static s4 text_sector_size = 0;
-static s4 data_sector_size = 0;
+static integer text_sector_size = 0;
+static integer data_sector_size = 0;
 
 
-static unsigned c1 * text_sector_byte = null;
-static unsigned c1 * data_sector_byte = null;
+static unsigned character * text_sector_byte = null;
+static unsigned character * data_sector_byte = null;
 
 
-static unsigned c1 elf_main_header_byte [elf_main_header_size] = {
+static unsigned character elf_main_header_byte [elf_main_header_size] = {
        0x7f, 0x45, 0x4c, 0x46, 0x02, 0x01, 0x01, 0x03,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x02, 0x00, 0x3e, 0x00, 0x01, 0x00, 0x00, 0x00,
        0x7f, 0x45, 0x4c, 0x46, 0x02, 0x01, 0x01, 0x03,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x02, 0x00, 0x3e, 0x00, 0x01, 0x00, 0x00, 0x00,
@@ -138,7 +138,7 @@ static unsigned c1 elf_main_header_byte [elf_main_header_size] = {
        0x02, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00
 };
 
        0x02, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00
 };
 
-static unsigned c1 elf_text_sector_byte [elf_text_sector_size] = {
+static unsigned character elf_text_sector_byte [elf_text_sector_size] = {
        0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
@@ -148,7 +148,7 @@ static unsigned c1 elf_text_sector_byte [elf_text_sector_size] = {
        0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 };
 
        0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 };
 
-static unsigned c1 elf_data_sector_byte [elf_data_sector_size] = {
+static unsigned character elf_data_sector_byte [elf_data_sector_size] = {
        0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x10, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x10, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
@@ -158,37 +158,37 @@ static unsigned c1 elf_data_sector_byte [elf_data_sector_size] = {
        0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 };
 
        0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 };
 
-static s4 front (s4 data) { return ((data >= register_4) && (data <= register_7));  }
-static s4 lower (s4 data) { return ((data >= register_0) && (data <= register_7));  }
-static s4 upper (s4 data) { return ((data >= register_8) && (data <= register_15)); }
+static integer front (integer data) { return ((data >= register_4) && (data <= register_7));  }
+static integer lower (integer data) { return ((data >= register_0) && (data <= register_7));  }
+static integer upper (integer data) { return ((data >= register_8) && (data <= register_15)); }
 
 
-static s4 far  (s4 label) { return (label && 1); }
-static s4 near (s4 label) { return (label && 0); }
+static integer far  (integer label) { return (label && 1); }
+static integer near (integer label) { return (label && 0); }
 
 
-static v0 inset (s4 when, s4 data) {
+static procedure inset (integer when, integer data) {
        text_sector_byte [text_sector_size] = (unsigned char) data;
 
        text_sector_size += (unsigned int) when;
 }
 
        text_sector_byte [text_sector_size] = (unsigned char) data;
 
        text_sector_size += (unsigned int) when;
 }
 
-static v0 inset_immediate (s4 when, s4 size, s4 data) {
+static procedure inset_immediate (integer when, integer size, integer data) {
        inset ((when),                              (data >>  0) & 0xff);
        inset ((when) && (size >= size_16), (data >>  8) & 0xff);
        inset ((when) && (size >= size_32), (data >> 16) & 0xff);
        inset ((when) && (size >= size_32), (data >> 24) & 0xff);
 }
 
        inset ((when),                              (data >>  0) & 0xff);
        inset ((when) && (size >= size_16), (data >>  8) & 0xff);
        inset ((when) && (size >= size_32), (data >> 16) & 0xff);
        inset ((when) && (size >= size_32), (data >> 24) & 0xff);
 }
 
-static v0 inset_memory (s4 when, s4 size, s4 data, s4 base) {
+static procedure inset_memory (integer when, integer size, integer data, integer base) {
        empty_array [empty_holes] = text_sector_size;
        empty_imbue [empty_holes] = data;
 
        empty_array [empty_holes] = text_sector_size;
        empty_imbue [empty_holes] = data;
 
-       empty_holes += (int) when;
+       empty_holes += (integer) when;
 
        inset_immediate (when, size, base);
 }
 
 
        inset_immediate (when, size, base);
 }
 
-static s4 store_relative (s4 * array) {
-       s4 relative = array [1];
+static integer store_relative (integer * array) {
+       integer relative = array [1];
 
        empty_array [empty_holes] = text_sector_size;
        empty_imbue [empty_holes] = relative;
 
        empty_array [empty_holes] = text_sector_size;
        empty_imbue [empty_holes] = relative;
@@ -198,8 +198,8 @@ static s4 store_relative (s4 * array) {
        return (1);
 }
 
        return (1);
 }
 
-static s4 store_memory (s4 * array) {
-       s4 operation = array [0],
+static integer store_memory (integer * array) {
+       integer operation = array [0],
            memory    = array [1];
 
        empty_store [memory] = text_sector_size;
            memory    = array [1];
 
        empty_store [memory] = text_sector_size;
@@ -209,8 +209,8 @@ static s4 store_memory (s4 * array) {
        return (1);
 }
 
        return (1);
 }
 
-static s4 store_immediate (s4 * array) {
-       s4 index     = 0,
+static integer store_immediate (integer * array) {
+       integer index     = 0,
            operation = array [0],
            size      = array [1],
            amount    = array [2];
            operation = array [0],
            size      = array [1],
            amount    = array [2];
@@ -222,41 +222,41 @@ static s4 store_immediate (s4 * array) {
        return (amount + 2);
 }
 
        return (amount + 2);
 }
 
-static v0 short_prefix (s4 size) {
+static procedure short_prefix (integer size) {
        inset (size == size_16, 0x66);
 }
 
        inset (size == size_16, 0x66);
 }
 
-static v0 long_prefix (s4 size, s4 to, s4 destination, s4 from, s4 source) {
-       s4 to_upper   = (to   == for_register) && (upper (destination)),
+static procedure long_prefix (integer size, integer to, integer destination, integer from, integer source) {
+       integer to_upper   = (to   == for_register) && (upper (destination)),
            from_upper = (from == for_register) && (upper (source)),
            extension  = (size == size_64);
 
        inset (extension || to_upper || from_upper, 0x40 + 0x01 * to_upper + 0x04 * from_upper + 0x08 * extension);
 }
 
            from_upper = (from == for_register) && (upper (source)),
            extension  = (size == size_64);
 
        inset (extension || to_upper || from_upper, 0x40 + 0x01 * to_upper + 0x04 * from_upper + 0x08 * extension);
 }
 
-static v0 modify_registers (s4 to, s4 destination, s4 from, s4 source) {
-       s4 to_register_from_register = ((to == for_register) && (from == for_register));
+static procedure modify_registers (integer to, integer destination, integer from, integer source) {
+       integer to_register_from_register = ((to == for_register) && (from == for_register));
 
        inset (to_register_from_register, 0xc0 + 0x01 * (destination & 0x07) + 0x08 * (source & 0x07));
 }
 
 
        inset (to_register_from_register, 0xc0 + 0x01 * (destination & 0x07) + 0x08 * (source & 0x07));
 }
 
-static v0 modify_memory (s4 operation, s4 to, s4 from) {
-       s4 to_register_from_memory  = ((to == for_register) && (from == for_memory)),
+static procedure modify_memory (integer operation, integer to, integer from) {
+       integer to_register_from_memory  = ((to == for_register) && (from == for_memory)),
            to_memory_from_register  = ((to == for_memory)   && (from == for_register)),
            to_memory_from_immediate = ((to == for_memory)   && (from == for_immediate));
 
        inset (to_register_from_memory || to_memory_from_register, 0x05 + 0x08 * operation * to_memory_from_immediate);
 }
 
            to_memory_from_register  = ((to == for_memory)   && (from == for_register)),
            to_memory_from_immediate = ((to == for_memory)   && (from == for_immediate));
 
        inset (to_register_from_memory || to_memory_from_register, 0x05 + 0x08 * operation * to_memory_from_immediate);
 }
 
-static s4 build_f8 (s4 * array) {
-       s4 operation   = array [0],
+static integer build_real_64 (integer * array) {
+       integer operation   = array [0],
            size        = array [1],
            to          = array [2],
            destination = array [3],
            from        = array [4],
            source      = array [5];
 
            size        = array [1],
            to          = array [2],
            destination = array [3],
            from        = array [4],
            source      = array [5];
 
-       s4 to_register_from_register  = ((to == for_register) && (from == for_register)),
+       integer to_register_from_register  = ((to == for_register) && (from == for_register)),
            to_register_from_memory    = ((to == for_register) && (from == for_memory)),
            to_register_from_immediate = ((to == for_register) && (from == for_immediate)),
            to_register_from_relative  = ((to == for_register) && (from == for_relative)),
            to_register_from_memory    = ((to == for_register) && (from == for_memory)),
            to_register_from_immediate = ((to == for_register) && (from == for_immediate)),
            to_register_from_relative  = ((to == for_register) && (from == for_relative)),
@@ -286,13 +286,13 @@ static s4 build_f8 (s4 * array) {
        return (5);
 }
 
        return (5);
 }
 
-static s4 build_single (s4 * array) {
-       s4 operation   = array [0],
+static integer build_single (integer * array) {
+       integer operation   = array [0],
            size        = array [1],
            to          = array [2],
            destination = array [3];
 
            size        = array [1],
            to          = array [2],
            destination = array [3];
 
-       s4 irregularity = ((operation == increment) || (operation == decrement));
+       integer irregularity = ((operation == increment) || (operation == decrement));
 
        short_prefix (size);
 
 
        short_prefix (size);
 
@@ -310,10 +310,10 @@ static s4 build_single (s4 * array) {
        return (3);
 }
 
        return (3);
 }
 
-static s4 build_static_1 (s4 * array) {
-       s4 operation = array [0];
+static integer build_static_1 (integer * array) {
+       integer operation = array [0];
 
 
-       unsigned c1 data  [] = {
+       unsigned character data  [] = {
                0x90, 0xc3, 0xcb, 0xc9, 0x9d, 0x9c
        };
 
                0x90, 0xc3, 0xcb, 0xc9, 0x9d, 0x9c
        };
 
@@ -322,13 +322,13 @@ static s4 build_static_1 (s4 * array) {
        return (0);
 }
 
        return (0);
 }
 
-static s4 build_static_2 (s4 * array) {
-       s4 operation = array [0];
+static integer build_static_2 (integer * array) {
+       integer operation = array [0];
 
 
-       unsigned s2 data  [] = {
+       unsigned integer_16 data  [] = {
                0x050f, 0xa20f, 0xd0d9, 0xe0d9, 0xe1d9, 0xe4d9, 0xe5d9, 0xe8d9,
                0xe9d9, 0xead9, 0xebd9, 0xecd9, 0xedd9, 0xeed9, 0xf0d9, 0xf1d9,
                0x050f, 0xa20f, 0xd0d9, 0xe0d9, 0xe1d9, 0xe4d9, 0xe5d9, 0xe8d9,
                0xe9d9, 0xead9, 0xebd9, 0xecd9, 0xedd9, 0xeed9, 0xf0d9, 0xf1d9,
-               0xf2d9, 0xf3d9, 0xf4d9, 0xf5d9, 0xf6d9, 0xf7d9, 0xf8d9, 0xf9d9,
+               0xf2d9, 0xf3d9, 0xreald9, 0xf5d9, 0xf6d9, 0xf7d9, 0xreal_64d9, 0xf9d9,
                0xfad9, 0xfbd9, 0xfcd9, 0xfdd9, 0xfed9, 0xffd9
        };
 
                0xfad9, 0xfbd9, 0xfcd9, 0xfdd9, 0xfed9, 0xffd9
        };
 
@@ -337,8 +337,8 @@ static s4 build_static_2 (s4 * array) {
        return (0);
 }
 
        return (0);
 }
 
-static s4 build_jump_if (s4 * array) {
-       s4 operation = array [0],
+static integer build_jump_if (integer * array) {
+       integer operation = array [0],
            size      = array [1],
            location  = array [3];
 
            size      = array [1],
            location  = array [3];
 
@@ -352,8 +352,8 @@ static s4 build_jump_if (s4 * array) {
        return (3);
 }
 
        return (3);
 }
 
-static s4 build_move_if (s4 * array) {
-       s4 operation   = array [0],
+static integer build_move_if (integer * array) {
+       integer operation   = array [0],
            size        = array [1],
            to          = array [2],
            destination = array [3],
            size        = array [1],
            to          = array [2],
            destination = array [3],
@@ -374,8 +374,8 @@ static s4 build_move_if (s4 * array) {
        return (5);
 }
 
        return (5);
 }
 
-static s4 build_set_if (s4 * array) {
-       s4 operation   = array [0],
+static integer build_set_if (integer * array) {
+       integer operation   = array [0],
            to          = array [2],
            destination = array [3];
 
            to          = array [2],
            destination = array [3];
 
@@ -393,8 +393,8 @@ static s4 build_set_if (s4 * array) {
        return (3);
 }
 
        return (3);
 }
 
-static s4 build_jump (s4 * array) {
-       s4 operation   = array [0],
+static integer build_jump (integer * array) {
+       integer operation   = array [0],
            size        = array [1],
            to          = array [2],
            destination = array [3];
            size        = array [1],
            to          = array [2],
            destination = array [3];
@@ -413,8 +413,8 @@ static s4 build_jump (s4 * array) {
        return (3);
 }
 
        return (3);
 }
 
-static s4 build_move (s4 * array) {
-       s4 operation   = array [0],
+static integer build_move (integer * array) {
+       integer operation   = array [0],
            size        = array [1],
            to          = array [2],
            destination = array [3],
            size        = array [1],
            to          = array [2],
            destination = array [3],
@@ -454,8 +454,8 @@ static s4 build_move (s4 * array) {
        return (5 + (size == size_64));
 }
 
        return (5 + (size == size_64));
 }
 
-static s4 build_call (s4 * array) {
-       s4 operation = array [0],
+static integer build_call (integer * array) {
+       integer operation = array [0],
            from      = array [1],
            source    = array [2];
 
            from      = array [1],
            source    = array [2];
 
@@ -471,8 +471,8 @@ static s4 build_call (s4 * array) {
        return (2);
 }
 
        return (2);
 }
 
-static s4 build_enter (s4 * array) {
-       s4 operation       = array [0],
+static integer build_enter (integer * array) {
+       integer operation       = array [0],
            dynamic_storage = array [1],
            nesting_level   = array [2];
 
            dynamic_storage = array [1],
            nesting_level   = array [2];
 
@@ -484,8 +484,8 @@ static s4 build_enter (s4 * array) {
        return (2);
 }
 
        return (2);
 }
 
-static s4 build_f4 (s4 * array) {
-       s4 operation = array [0],
+static integer build_real (integer * array) {
+       integer operation = array [0],
            size      = array [1],
            from      = array [2],
            source    = array [3];
            size      = array [1],
            from      = array [2],
            source    = array [3];
@@ -499,8 +499,8 @@ static s4 build_f4 (s4 * array) {
        return (3);
 }
 
        return (3);
 }
 
-static s4 build_shift (s4 * array) {
-       s4 operation   = array [0],
+static integer build_shift (integer * array) {
+       integer operation   = array [0],
            size        = array [1],
            to          = array [2],
            destination = array [3],
            size        = array [1],
            to          = array [2],
            destination = array [3],
@@ -521,8 +521,8 @@ static s4 build_shift (s4 * array) {
        return (5);
 }
 
        return (5);
 }
 
-static s4 build_in_out (s4 * array) {
-       s4 move = array [0],
+static integer build_in_out (integer * array) {
+       integer move = array [0],
            size = array [1],
            type = array [2],
            port = array [3];
            size = array [1],
            type = array [2],
            port = array [3];
@@ -536,8 +536,8 @@ static s4 build_in_out (s4 * array) {
        return (3);
 }
 
        return (3);
 }
 
-static s4 build_pop (s4 * array) {
-       s4 operation   = array [0],
+static integer build_pop (integer * array) {
+       integer operation   = array [0],
            size        = array [1],
            to          = array [2],
            destination = array [3];
            size        = array [1],
            to          = array [2],
            destination = array [3];
@@ -555,8 +555,8 @@ static s4 build_pop (s4 * array) {
        return (3);
 }
 
        return (3);
 }
 
-static s4 build_push (s4 * array) {
-       s4 operation = array [0],
+static integer build_push (integer * array) {
+       integer operation = array [0],
            size      = array [1],
            from      = array [2],
            source    = array [3];
            size      = array [1],
            from      = array [2],
            source    = array [3];
@@ -576,8 +576,8 @@ static s4 build_push (s4 * array) {
        return (3);
 }
 
        return (3);
 }
 
-static s4 build_swap (s4 * array) {
-       s4 operation   = array [0],
+static integer build_swap (integer * array) {
+       integer operation   = array [0],
            size        = array [1],
            destination = array [3];
 
            size        = array [1],
            destination = array [3];
 
@@ -589,8 +589,8 @@ static s4 build_swap (s4 * array) {
        return (3);
 }
 
        return (3);
 }
 
-static s4 build_bit_scan (s4 * array) {
-       s4 operation   = array [0],
+static integer build_bit_scan (integer * array) {
+       integer operation   = array [0],
            size        = array [1],
            destination = array [3],
            from        = array [4],
            size        = array [1],
            destination = array [3],
            from        = array [4],
@@ -611,8 +611,8 @@ static s4 build_bit_scan (s4 * array) {
        return (5);
 }
 
        return (5);
 }
 
-static s4 build_loop (s4 * array) {
-       s4 operation = array [0],
+static integer build_loop (integer * array) {
+       integer operation = array [0],
            location  = array [3];
 
        inset (operation == loop_not_equal, 0xe0);
            location  = array [3];
 
        inset (operation == loop_not_equal, 0xe0);
@@ -624,8 +624,8 @@ static s4 build_loop (s4 * array) {
        return (3);
 }
 
        return (3);
 }
 
-static v0 elf_main_header (v0) {
-       s4 enter = empty_store [0] + 0x4000b0;
+static procedure elf_main_header (none) {
+       integer enter = empty_store [0] + 0x4000b0;
 
        elf_main_header_byte [16] = 0x02;
        elf_main_header_byte [ 7] = 0x03;
 
        elf_main_header_byte [16] = 0x02;
        elf_main_header_byte [ 7] = 0x03;
@@ -634,26 +634,26 @@ static v0 elf_main_header (v0) {
        memory_copy (& elf_main_header_byte [24], & enter, sizeof (enter));
 }
 
        memory_copy (& elf_main_header_byte [24], & enter, sizeof (enter));
 }
 
-static v0 elf_text_sector (unsigned s8 text_size, unsigned s8 data_size) {
-       unsigned s8 text = elf_header_size + text_size - data_size;
+static procedure elf_text_sector (unsigned integer_64 text_size, unsigned integer_64 data_size) {
+       unsigned integer_64 text = elf_header_size + text_size - data_size;
 
 
-       memory_copy (& elf_text_sector_byte [32], & text, (int) sizeof (text));
-       memory_copy (& elf_text_sector_byte [40], & text, (int) sizeof (text));
+       memory_copy (& elf_text_sector_byte [32], & text, (integer) sizeof (text));
+       memory_copy (& elf_text_sector_byte [40], & text, (integer) sizeof (text));
 }
 
 }
 
-static v0 elf_data_sector (unsigned s8 text_size, unsigned s8 data_size) {
-       unsigned s8 data = data_size;
-       unsigned s8 core = elf_header_size + text_size - data_size;
-       unsigned s8 move = 0x401000 + core;
+static procedure elf_data_sector (unsigned integer_64 text_size, unsigned integer_64 data_size) {
+       unsigned integer_64 data = data_size;
+       unsigned integer_64 core = elf_header_size + text_size - data_size;
+       unsigned integer_64 move = 0x401000 + core;
 
 
-       memory_copy (& elf_data_sector_byte [ 8], & core, (int) sizeof (core));
-       memory_copy (& elf_data_sector_byte [16], & move, (int) sizeof (move));
-       memory_copy (& elf_data_sector_byte [24], & move, (int) sizeof (move));
-       memory_copy (& elf_data_sector_byte [32], & data, (int) sizeof (data));
-       memory_copy (& elf_data_sector_byte [40], & data, (int) sizeof (data));
+       memory_copy (& elf_data_sector_byte [ 8], & core, (integer) sizeof (core));
+       memory_copy (& elf_data_sector_byte [16], & move, (integer) sizeof (move));
+       memory_copy (& elf_data_sector_byte [24], & move, (integer) sizeof (move));
+       memory_copy (& elf_data_sector_byte [32], & data, (integer) sizeof (data));
+       memory_copy (& elf_data_sector_byte [40], & data, (integer) sizeof (data));
 }
 
 }
 
-static s4 (* build_instruction []) (s4 * array) = {
+static integer (* build_instruction []) (integer * array) = {
        store_memory,   store_relative, store_immediate,
        build_double,   build_double,   build_double,   build_double,   build_double,   build_double,   build_double,   build_double,
        build_single,   build_single,   build_single,   build_single,   build_single,   build_single,   build_single,   build_single,
        store_memory,   store_relative, store_immediate,
        build_double,   build_double,   build_double,   build_double,   build_double,   build_double,   build_double,   build_double,
        build_single,   build_single,   build_single,   build_single,   build_single,   build_single,   build_single,   build_single,
@@ -674,20 +674,20 @@ static s4 (* build_instruction []) (s4 * array) = {
        build_swap,     build_bit_scan, build_bit_scan, build_loop,     build_loop,     build_loop
 };
 
        build_swap,     build_bit_scan, build_bit_scan, build_loop,     build_loop,     build_loop
 };
 
-static s4 assemble (s4 count, s4 * array) {
-       for (u4 index = 0; index < count; ++index) {
+static integer assemble (integer count, integer * array) {
+       for (natural index = 0; index < count; ++index) {
                index += build_instruction [array [index]] (& array [index]);
        }
 
                index += build_instruction [array [index]] (& array [index]);
        }
 
-       for (u4 index = 1; index < empty_holes; ++index) {
-               s4 set = 0;
-               s4 get = empty_array [index];
+       for (natural index = 1; index < empty_holes; ++index) {
+               integer set = 0;
+               integer get = empty_array [index];
 
 
-               memory_copy ((c1 *) & set, (c1 *) & text_sector_byte [get], (int) sizeof (set));
+               memory_copy ((character *) & set, (character *) & text_sector_byte [get], (integer) sizeof (set));
 
                set += empty_store [empty_imbue [index]];
 
 
                set += empty_store [empty_imbue [index]];
 
-               memory_copy ((c1 *) & text_sector_byte [get], (c1 *) & set, (int) sizeof (set));
+               memory_copy ((character *) & text_sector_byte [get], (character *) & set, (integer) sizeof (set));
        }
 
        return (log_success);
        }
 
        return (log_success);
index 7f77bd3bda591bda6013d622f213682d09fe6c51..41c9dd8c1170495aa6606a35bcfe88033a8b2c6a 100755 (executable)
@@ -20,7 +20,7 @@
 #include <xolatile/xyntax.h>
 #include <xolatile/xanguage.h>
 
 #include <xolatile/xyntax.h>
 #include <xolatile/xanguage.h>
 
-static v0 conditionally_exit (language_structure * language, syntax_structure * syntax, b4 terminate) {
+static procedure conditionally_exit (language_structure * language, syntax_structure * syntax, boolean terminate) {
        syntax   = syntax_deinitialize   (syntax);
        language = language_deinitialize (language);
 
        syntax   = syntax_deinitialize   (syntax);
        language = language_deinitialize (language);
 
@@ -29,13 +29,13 @@ static v0 conditionally_exit (language_structure * language, syntax_structure *
        }
 }
 
        }
 }
 
-static v0 print_common (v0) {
+static procedure print_common (none) {
        print ("/B/4xighlight/-: /4Terminal syntax highlighter/-\n\n");
        print ("\tAuthor:  /4Ognjen 'xolatile' Milan Robovic/-\n");
        print ("\tLicense: /4GNU//GPLv3/-\n\n");
 }
 
        print ("/B/4xighlight/-: /4Terminal syntax highlighter/-\n\n");
        print ("\tAuthor:  /4Ognjen 'xolatile' Milan Robovic/-\n");
        print ("\tLicense: /4GNU//GPLv3/-\n\n");
 }
 
-static v0 print_help (v0) {
+static procedure print_help (none) {
        print_common ();
 
        print ("Example usage:\n\n");
        print_common ();
 
        print ("Example usage:\n\n");
@@ -45,7 +45,7 @@ static v0 print_help (v0) {
        print ("Supported languages:\n\n");
 
        for (language_enumeration index = 0; index < language_count; ++index) {
        print ("Supported languages:\n\n");
 
        for (language_enumeration index = 0; index < language_count; ++index) {
-               c1 align [32] = "";
+               character align [32] = "";
 
                print ("\t/B/4%s/- /4%s/- /0---/- %s syntax highlighting\n",
                       language_short_option [index],
 
                print ("\t/B/4%s/- /4%s/- /0---/- %s syntax highlighting\n",
                       language_short_option [index],
@@ -54,21 +54,21 @@ static v0 print_help (v0) {
        }
 }
 
        }
 }
 
-static v0 print_version (v0) {
+static procedure print_version (none) {
        print_common ();
 
        print ("\tVersion: /40 (Zero)/-\n");
 }
 
        print_common ();
 
        print ("\tVersion: /40 (Zero)/-\n");
 }
 
-s4 main (s4 argc, c1 * * argv) {
-       u4   select = language_count;
-       u4   length = 0;
-       c1 * buffer = null;
+integer main (integer argc, character * * argv) {
+       natural     select = language_count;
+       natural     length = 0;
+       character * buffer = null;
 
        syntax_structure   * syntax   = syntax_initialize   (360);
        language_structure * language = language_initialize (false);
 
 
        syntax_structure   * syntax   = syntax_initialize   (360);
        language_structure * language = language_initialize (false);
 
-       for (s4 argument = 1; argument < argc; ++argument) {
+       for (integer argument = 1; argument < argc; ++argument) {
                if (argument_compare (argv [argument], "-h", "--help") == true) {
                        print_help         ();
                        conditionally_exit (language, syntax, true);
                if (argument_compare (argv [argument], "-h", "--help") == true) {
                        print_help         ();
                        conditionally_exit (language, syntax, true);
@@ -77,7 +77,7 @@ s4 main (s4 argc, c1 * * argv) {
                        conditionally_exit (language, syntax, true);
                }
 
                        conditionally_exit (language, syntax, true);
                }
 
-               for (u4 index = 0; index < language_count; ++index) {
+               for (natural index = 0; index < language_count; ++index) {
                        if (argument_compare (argv [argument], language_short_option [index], language_long_option [index]) == true) {
                                (* (language_highlighter [index])) (language, syntax);
                                select = index;
                        if (argument_compare (argv [argument], language_short_option [index], language_long_option [index]) == true) {
                                (* (language_highlighter [index])) (language, syntax);
                                select = index;
@@ -87,7 +87,7 @@ s4 main (s4 argc, c1 * * argv) {
 
                if (file_exists (argv [argument]) == true) {
                        if (select == language_count) {
 
                if (file_exists (argv [argument]) == true) {
                        if (select == language_count) {
-                               select = (u4) file_type (argv [argument]);
+                               select = (natural) file_type (argv [argument]);
                        }
                        if (buffer == null) {
                                buffer = file_import (argv [argument]);
                        }
                        if (buffer == null) {
                                buffer = file_import (argv [argument]);
@@ -105,7 +105,7 @@ s4 main (s4 argc, c1 * * argv) {
 
        language_conditionally_select (language, syntax, select);
 
 
        language_conditionally_select (language, syntax, select);
 
-       for (u4 offset = 0; buffer [offset] != '\0'; offset += length) {
+       for (natural offset = 0; buffer [offset] != '\0'; offset += length) {
                select = syntax_select (syntax, & buffer [offset], & length);
 
                if (select >= syntax->count) {
                select = syntax_select (syntax, & buffer [offset], & length);
 
                if (select >= syntax->count) {
index c94373431e001579aeb78f38098ad45ecd15d417..9b188a2eea2d0fb5ed74fef212cab3dabf657d0f 100644 (file)
--- a/xision.h
+++ b/xision.h
@@ -48,70 +48,70 @@ typedef struct {
        PFNGLBUFFERDATAPROC              glBufferData;
        PFNGLUNIFORMMATRIX4FVPROC        glUniformMatrix4fv;
 
        PFNGLBUFFERDATAPROC              glBufferData;
        PFNGLUNIFORMMATRIX4FVPROC        glUniformMatrix4fv;
 
-       b4 signal [signal_count];
-       b4 cursor [cursor_count];
-       s4  cursor_x;
-       s4  cursor_y;
-
-       b4      using_precomputed_spritesheet;
-       u8     spritesheet_size;
-       u8     vertex_limit;
-       u8     index_limit;
-       u4      gameplay_framerate;
-       u4      animation_framerate;
-       u4      tab_width;
-       u4      default_font;
-       b4      active;
-       u4      window_width;
-       u4      window_height;
-       f4     pixel_width;
-       f4     pixel_height;
-       u4      framerate;
-       u8     frame_time;
-       u8     frame_begin;
-       u8     frame_end;
-       u4      global_tick;
-       u4      gameplay_tick;
-       u4      animation_tick;
-       b4      freeze_cursor;
-       b4      freeze_signal;
-       u4      vertex_object;
-       u4      vertex_buffer;
-       u4      index_buffer;
-       u4      vertex_shader;
-       u4      fragment_shader;
-       u4      shader_program;
-       u4      spritesheet;
-       u4      vertex_count;
-       u4      index_count;
-       f4   * vertex_array;
-       u4    * index_array;
-       u4      sprite_count;
-       u4      font_count;
-       u4    * spritesheet_data;
-       u4  * * sprite_data;
-       u4    * sprite_width;
-       u4    * sprite_height;
-       f4   * sprite_u;
-       f4   * sprite_v;
-       u4  * * font_index;
-       u4  * * font_width;
-       u4  * * font_height;
-       c1    * font_begin;
-       c1    * font_end;
-       f4     projection_matrix [16];
-       f4     movement_matrix   [16];
-       f4     rotation_matrix   [16];
-       f4     aspect_ratio;
-       f4     field_of_view;
-       f4     far_plane;
-       f4     near_plane;
-       f4     camera_x;
-       f4     camera_y;
-       f4     sensitivity;
+       boolean signal [signal_count];
+       boolean cursor [cursor_count];
+       integer  cursor_x;
+       integer  cursor_y;
+
+       boolean      using_precomputed_spritesheet;
+       caliber     spritesheet_size;
+       caliber     vertex_limit;
+       caliber     index_limit;
+       natural      gameplay_framerate;
+       natural      animation_framerate;
+       natural      tab_width;
+       natural      default_font;
+       boolean      active;
+       natural      window_width;
+       natural      window_height;
+       real     pixel_width;
+       real     pixel_height;
+       natural      framerate;
+       natural_64     frame_time;
+       natural_64     frame_begin;
+       natural_64     frame_end;
+       natural      global_tick;
+       natural      gameplay_tick;
+       natural      animation_tick;
+       boolean      freeze_cursor;
+       boolean      freeze_signal;
+       natural      vertex_object;
+       natural      vertex_buffer;
+       natural      index_buffer;
+       natural      vertex_shader;
+       natural      fragment_shader;
+       natural      shader_program;
+       natural      spritesheet;
+       natural      vertex_count;
+       natural      index_count;
+       real   * vertex_array;
+       natural    * index_array;
+       natural      sprite_count;
+       natural      font_count;
+       natural    * spritesheet_data;
+       natural  * * sprite_data;
+       natural    * sprite_width;
+       natural    * sprite_height;
+       real   * sprite_u;
+       real   * sprite_v;
+       natural  * * font_index;
+       natural  * * font_width;
+       natural  * * font_height;
+       character    * font_begin;
+       character    * font_end;
+       real     projection_matrix [16];
+       real     movement_matrix   [16];
+       real     rotation_matrix   [16];
+       real     aspect_ratio;
+       real     field_of_view;
+       real     far_plane;
+       real     near_plane;
+       real     camera_x;
+       real     camera_y;
+       real     sensitivity;
 } vision_structure;
 
 } vision_structure;
 
-static u4 vision_sprite_raw_import (vision_structure * vision, u4 * data, u4 width, u4 height) {
+static natural vision_sprite_raw_import (vision_structure * vision, natural * data, natural width, natural height) {
        fatal_failure (vision->active == true, "vision_sprite_raw_import: OpenGL renderer is already initialized.");
        fatal_failure (data           == null, "vision_sprite_raw_import: Data is null pointer.");
        fatal_failure (width          == 0,    "vision_sprite_raw_import: Font image width is zero.");
        fatal_failure (vision->active == true, "vision_sprite_raw_import: OpenGL renderer is already initialized.");
        fatal_failure (data           == null, "vision_sprite_raw_import: Data is null pointer.");
        fatal_failure (width          == 0,    "vision_sprite_raw_import: Font image width is zero.");
@@ -134,10 +134,10 @@ static u4 vision_sprite_raw_import (vision_structure * vision, u4 * data, u4 wid
        return (vision->sprite_count - 1);
 }
 
        return (vision->sprite_count - 1);
 }
 
-static u4 vision_font_raw_import (vision_structure * vision, u4 * data, u4 image_width, c1 begin, c1 end, u4 empty) {
-       u4   pointer = 0;
-       u4   width   = 0;
-       u4   height  = 0;
+static natural vision_font_raw_import (vision_structure * vision, natural * data, natural image_width, character begin, character end, natural empty) {
+       natural   pointer = 0;
+       natural   width   = 0;
+       natural   height  = 0;
 
        fatal_failure (vision->active == true, "vision_font_raw_import: OpenGL renderer is already initialized.");
        fatal_failure (data           == null, "vision_font_raw_import: Data is null pointer.");
 
        fatal_failure (vision->active == true, "vision_font_raw_import: OpenGL renderer is already initialized.");
        fatal_failure (data           == null, "vision_font_raw_import: Data is null pointer.");
@@ -155,19 +155,19 @@ static u4 vision_font_raw_import (vision_structure * vision, u4 * data, u4 image
        vision->font_begin [vision->font_count - 1] = begin;
        vision->font_end   [vision->font_count - 1] = end;
 
        vision->font_begin [vision->font_count - 1] = begin;
        vision->font_end   [vision->font_count - 1] = end;
 
-       vision->font_index  [vision->font_count - 1] = allocate ((u8) (end - begin + 1) * sizeof (* * vision->font_index));
-       vision->font_width  [vision->font_count - 1] = allocate ((u8) (end - begin + 1) * sizeof (* * vision->font_width));
-       vision->font_height [vision->font_count - 1] = allocate ((u8) (end - begin + 1) * sizeof (* * vision->font_height));
+       vision->font_index  [vision->font_count - 1] = allocate ((caliber) (end - begin + 1) * sizeof (* * vision->font_index));
+       vision->font_width  [vision->font_count - 1] = allocate ((caliber) (end - begin + 1) * sizeof (* * vision->font_width));
+       vision->font_height [vision->font_count - 1] = allocate ((caliber) (end - begin + 1) * sizeof (* * vision->font_height));
 
 
-       for (c1 index = begin; index <= end; ++index) {
+       for (character index = begin; index <= end; ++index) {
                for (          ; data [pointer]                        == empty; ++pointer);
                for (width  = 0; data [pointer + width]                != empty; ++width);
                for (height = 0; data [pointer + height * image_width] != empty; ++height);
 
                for (          ; data [pointer]                        == empty; ++pointer);
                for (width  = 0; data [pointer + width]                != empty; ++width);
                for (height = 0; data [pointer + height * image_width] != empty; ++height);
 
-               u4 * buffer = allocate (width * height * sizeof (* buffer));
+               natural * buffer = allocate (width * height * sizeof (* buffer));
 
 
-               for (u4 y = 0; y < height; ++y) {
-                       for (u4 x = 0; x < width; ++x) {
+               for (natural y = 0; y < height; ++y) {
+                       for (natural x = 0; x < width; ++x) {
                                buffer [y * width + x] = data [pointer + (y * image_width) + x];
                        }
                }
                                buffer [y * width + x] = data [pointer + (y * image_width) + x];
                        }
                }
@@ -188,21 +188,21 @@ static u4 vision_font_raw_import (vision_structure * vision, u4 * data, u4 image
        return (vision->font_count - 1);
 }
 
        return (vision->font_count - 1);
 }
 
-static u4 vision_sprite_import (vision_structure * vision, c1 * path) {
-       u4   width  = 0;
-       u4   height = 0;
-       u4 * data   = null;
+static natural vision_sprite_import (vision_structure * vision, character * path) {
+       natural   width  = 0;
+       natural   height = 0;
+       natural * data   = null;
 
        data = format_image_import (path, & width, & height);
 
        return (vision_sprite_raw_import (vision, data, width, height));
 }
 
 
        data = format_image_import (path, & width, & height);
 
        return (vision_sprite_raw_import (vision, data, width, height));
 }
 
-static u4 vision_font_import (vision_structure * vision, c1 * path, c1 begin, c1 end, u4 colour) {
-       u4   width  = 0;
-       u4   height = 0;
-       u4   result = 0;
-       u4 * data   = null;
+static natural vision_font_import (vision_structure * vision, character * path, character begin, character end, natural colour) {
+       natural   width  = 0;
+       natural   height = 0;
+       natural   result = 0;
+       natural * data   = null;
 
        data = format_image_import (path, & width, & height);
 
 
        data = format_image_import (path, & width, & height);
 
@@ -213,30 +213,30 @@ static u4 vision_font_import (vision_structure * vision, c1 * path, c1 begin, c1
        return (result);
 }
 
        return (result);
 }
 
-static u4 vision_sprite_width (vision_structure * vision, u4 sprite) {
+static natural vision_sprite_width (vision_structure * vision, natural sprite) {
        return (vision->sprite_width [sprite]);
 }
 
        return (vision->sprite_width [sprite]);
 }
 
-static u4 vision_sprite_height (vision_structure * vision, u4 sprite) {
+static natural vision_sprite_height (vision_structure * vision, natural sprite) {
        return (vision->sprite_height [sprite]);
 }
 
        return (vision->sprite_height [sprite]);
 }
 
-static u4 vision_center_x (vision_structure * vision, u4 size) {
+static natural vision_center_x (vision_structure * vision, natural size) {
        return ((vision->window_width - size) / 2);
 }
 
        return ((vision->window_width - size) / 2);
 }
 
-static u4 vision_center_y (vision_structure * vision, u4 size) {
+static natural vision_center_y (vision_structure * vision, natural size) {
        return ((vision->window_height - size) / 2);
 }
 
        return ((vision->window_height - size) / 2);
 }
 
-static b4 vision_cursor_inside (vision_structure * vision, s4 x, s4 y, u4 width, u4 height) {
+static boolean vision_cursor_inside (vision_structure * vision, integer x, integer y, natural width, natural height) {
        return ((vision->cursor_x > x)               &&
                (vision->cursor_y > y)               &&
        return ((vision->cursor_x > x)               &&
                (vision->cursor_y > y)               &&
-               (vision->cursor_x < x + (int) width) &&
-               (vision->cursor_y < y + (int) height));
+               (vision->cursor_x < x + (integer) width) &&
+               (vision->cursor_y < y + (integer) height));
 }
 
 }
 
-static b4 vision_cursor_left_click (vision_structure * vision, s4 x, s4 y, u4 width, u4 height) {
+static boolean vision_cursor_left_click (vision_structure * vision, integer x, integer y, natural width, natural height) {
        if (vision->cursor [cursor_left] == true) {
                vision->freeze_cursor = true;
 
        if (vision->cursor [cursor_left] == true) {
                vision->freeze_cursor = true;
 
@@ -246,7 +246,7 @@ static b4 vision_cursor_left_click (vision_structure * vision, s4 x, s4 y, u4 wi
        return (false);
 }
 
        return (false);
 }
 
-static b4 vision_cursor_right_click (vision_structure * vision, s4 x, s4 y, u4 width, u4 height) {
+static boolean vision_cursor_right_click (vision_structure * vision, integer x, integer y, natural width, natural height) {
        if (vision->cursor [cursor_right]) {
                vision->freeze_cursor = true;
 
        if (vision->cursor [cursor_right]) {
                vision->freeze_cursor = true;
 
@@ -256,8 +256,8 @@ static b4 vision_cursor_right_click (vision_structure * vision, s4 x, s4 y, u4 w
        return (false);
 }
 
        return (false);
 }
 
-static v0 vision_import_spritesheet (vision_structure * vision, c1 * data_file) {
-       s4 file = file_open (data_file, file_flag_read);
+static procedure vision_import_spritesheet (vision_structure * vision, character * data_file) {
+       integer file = file_open (data_file, file_flag_read);
 
        fatal_failure (vision->active == true, "vision_import_spritesheet: OpenGL renderer is already initialized.");
 
 
        fatal_failure (vision->active == true, "vision_import_spritesheet: OpenGL renderer is already initialized.");
 
@@ -286,14 +286,14 @@ static v0 vision_import_spritesheet (vision_structure * vision, c1 * data_file)
        file_read (file, vision->font_begin, vision->font_count * sizeof (* vision->font_begin));
        file_read (file, vision->font_end,   vision->font_count * sizeof (* vision->font_end));
 
        file_read (file, vision->font_begin, vision->font_count * sizeof (* vision->font_begin));
        file_read (file, vision->font_end,   vision->font_count * sizeof (* vision->font_end));
 
-       for (u4 index = 0; index < vision->font_count; ++index) {
-               u4 range = (u4) (vision->font_end [index] - vision->font_begin [index]) + 1;
+       for (natural index = 0; index < vision->font_count; ++index) {
+               natural range = (natural) (vision->font_end [index] - vision->font_begin [index]) + 1;
 
                vision->font_index  [index] = allocate (range * sizeof (* * vision->font_index));
                vision->font_width  [index] = allocate (range * sizeof (* * vision->font_width));
                vision->font_height [index] = allocate (range * sizeof (* * vision->font_height));
 
 
                vision->font_index  [index] = allocate (range * sizeof (* * vision->font_index));
                vision->font_width  [index] = allocate (range * sizeof (* * vision->font_width));
                vision->font_height [index] = allocate (range * sizeof (* * vision->font_height));
 
-               for (u4 subindex = 0; subindex < range; ++subindex) {
+               for (natural subindex = 0; subindex < range; ++subindex) {
                        file_read (file, & vision->font_index  [index] [subindex], sizeof (* * vision->font_index));
                        file_read (file, & vision->font_width  [index] [subindex], sizeof (* * vision->font_width));
                        file_read (file, & vision->font_height [index] [subindex], sizeof (* * vision->font_height));
                        file_read (file, & vision->font_index  [index] [subindex], sizeof (* * vision->font_index));
                        file_read (file, & vision->font_width  [index] [subindex], sizeof (* * vision->font_width));
                        file_read (file, & vision->font_height [index] [subindex], sizeof (* * vision->font_height));
@@ -306,8 +306,8 @@ static v0 vision_import_spritesheet (vision_structure * vision, c1 * data_file)
        vision->font_count   = 0;
 }
 
        vision->font_count   = 0;
 }
 
-static v0 vision_export_spritesheet (vision_structure * vision, c1 * data_file) {
-       s4 file = file_open (data_file, file_flag_write | file_flag_create | file_flag_truncate);
+static procedure vision_export_spritesheet (vision_structure * vision, character * data_file) {
+       integer file = file_open (data_file, file_flag_write | file_flag_create | file_flag_truncate);
 
        fatal_failure (vision->spritesheet_data == null, "vision_export_spritesheet: OpenGL renderer can't access spritesheet data.");
 
 
        fatal_failure (vision->spritesheet_data == null, "vision_export_spritesheet: OpenGL renderer can't access spritesheet data.");
 
@@ -325,8 +325,8 @@ static v0 vision_export_spritesheet (vision_structure * vision, c1 * data_file)
        file_write (file, vision->font_begin, vision->font_count * sizeof (* vision->font_begin));
        file_write (file, vision->font_end,   vision->font_count * sizeof (* vision->font_end));
 
        file_write (file, vision->font_begin, vision->font_count * sizeof (* vision->font_begin));
        file_write (file, vision->font_end,   vision->font_count * sizeof (* vision->font_end));
 
-       for (u4 index = 0; index < vision->font_count; ++index) {
-               for (u4 subindex = 0; subindex < (u4) (vision->font_end [index] - vision->font_begin [index]) + 1; ++subindex) {
+       for (natural index = 0; index < vision->font_count; ++index) {
+               for (natural subindex = 0; subindex < (natural) (vision->font_end [index] - vision->font_begin [index]) + 1; ++subindex) {
                        file_write (file, & vision->font_index  [index] [subindex], sizeof (* * vision->font_index));
                        file_write (file, & vision->font_width  [index] [subindex], sizeof (* * vision->font_width));
                        file_write (file, & vision->font_height [index] [subindex], sizeof (* * vision->font_height));
                        file_write (file, & vision->font_index  [index] [subindex], sizeof (* * vision->font_index));
                        file_write (file, & vision->font_width  [index] [subindex], sizeof (* * vision->font_width));
                        file_write (file, & vision->font_height [index] [subindex], sizeof (* * vision->font_height));
@@ -338,8 +338,8 @@ static v0 vision_export_spritesheet (vision_structure * vision, c1 * data_file)
        print ("/c Exported internal binary data of OpenGL spritesheet.");
 }
 
        print ("/c Exported internal binary data of OpenGL spritesheet.");
 }
 
-static vision_structure * vision_initialize (u4 gameplay_framerate, u4 animation_framerate, b4 use_precomputed_spritesheet,
-                                             u4 vertex_limit, u4 index_limit, u4 spritesheet_side) {
+static vision_structure * vision_initialize (natural gameplay_framerate, natural animation_framerate, boolean use_precomputed_spritesheet,
+                                             natural vertex_limit, natural index_limit, natural spritesheet_side) {
        vision_structure * vision = allocate (sizeof (* vision));
 
        vision->using_precomputed_spritesheet = use_precomputed_spritesheet;
        vision_structure * vision = allocate (sizeof (* vision));
 
        vision->using_precomputed_spritesheet = use_precomputed_spritesheet;
@@ -362,7 +362,7 @@ static vision_structure * vision_initialize (u4 gameplay_framerate, u4 animation
                vision_import_spritesheet (vision, "binary/spritesheet.bin");
        }
 
                vision_import_spritesheet (vision, "binary/spritesheet.bin");
        }
 
-       print ("[/2Success/-] Initialized OpenGL renderer.\n");
+       print ("/s Initialized OpenGL renderer.\n");
 
        return (vision);
 }
 
        return (vision);
 }
@@ -370,7 +370,7 @@ static vision_structure * vision_initialize (u4 gameplay_framerate, u4 animation
 static vision_structure * vision_deinitialize (vision_structure * vision) {
        vision->active = false;
 
 static vision_structure * vision_deinitialize (vision_structure * vision) {
        vision->active = false;
 
-       for (u4 index = 0; index < vision->font_count; ++index) {
+       for (natural index = 0; index < vision->font_count; ++index) {
                vision->font_index  [index] = deallocate (vision->font_index  [index]);
                vision->font_width  [index] = deallocate (vision->font_width  [index]);
                vision->font_height [index] = deallocate (vision->font_height [index]);
                vision->font_index  [index] = deallocate (vision->font_index  [index]);
                vision->font_width  [index] = deallocate (vision->font_width  [index]);
                vision->font_height [index] = deallocate (vision->font_height [index]);
@@ -408,13 +408,13 @@ static vision_structure * vision_deinitialize (vision_structure * vision) {
 
        glfwTerminate ();
 
 
        glfwTerminate ();
 
-       print ("[/2Success/-] Deinitialized OpenGL renderer.\n");
+       print ("/s Deinitialized OpenGL renderer.\n");
 
        return (deallocate (vision));
 }
 
 
        return (deallocate (vision));
 }
 
-static v0 vision_configure (vision_structure * vision, u4 window_width, u4 window_height, c1 * window_title) {
-       u8 font_bitmap [190] = {
+static procedure vision_configure (vision_structure * vision, natural window_width, natural window_height, character * window_title) {
+       natural_64 font_bitmap [190] = {
                0x0000000000000000, 0x0000000000000000, 0x0000101010101010, 0x1000101000000000, 0x0024242400000000, 0x0000000000000000,
                0x00002424247e2424, 0x7e24242400000000, 0x0010107c9290907c, 0x1212927c10100000, 0x0000649468081010, 0x202c524c00000000,
                0x000018242418304a, 0x4444443a00000000, 0x0010101000000000, 0x0000000000000000, 0x0000081020202020, 0x2020100800000000,
                0x0000000000000000, 0x0000000000000000, 0x0000101010101010, 0x1000101000000000, 0x0024242400000000, 0x0000000000000000,
                0x00002424247e2424, 0x7e24242400000000, 0x0010107c9290907c, 0x1212927c10100000, 0x0000649468081010, 0x202c524c00000000,
                0x000018242418304a, 0x4444443a00000000, 0x0010101000000000, 0x0000000000000000, 0x0000081020202020, 0x2020100800000000,
@@ -449,7 +449,7 @@ static v0 vision_configure (vision_structure * vision, u4 window_width, u4 windo
                0x0000300808080408, 0x0808083000000000, 0x000000000062928c, 0x0000000000000000
        };
 
                0x0000300808080408, 0x0808083000000000, 0x000000000062928c, 0x0000000000000000
        };
 
-       c1 * vertex_shader =
+       character * vertex_shader =
                "#version 330 core\n"
                "in  vec3 vertex_xyz;\n"
                "in  vec2 vertex_uv;\n"
                "#version 330 core\n"
                "in  vec3 vertex_xyz;\n"
                "in  vec2 vertex_uv;\n"
@@ -459,34 +459,34 @@ static v0 vision_configure (vision_structure * vision, u4 window_width, u4 windo
                "uniform mat4 projection_matrix;\n"
                "uniform mat4 movement_matrix;\n"
                "uniform mat4 rotation_matrix;\n"
                "uniform mat4 projection_matrix;\n"
                "uniform mat4 movement_matrix;\n"
                "uniform mat4 rotation_matrix;\n"
-               "v0 main () {\n"
+               "procedure main () {\n"
                "       gl_Position = movement_matrix * rotation_matrix * projection_matrix * vec4 (vertex_xyz, 1.0);\n"
                "       fragment_uv = vertex_uv;\n"
                "       fragment_rgba = vertex_rgba;\n"
                "}\n";
 
                "       gl_Position = movement_matrix * rotation_matrix * projection_matrix * vec4 (vertex_xyz, 1.0);\n"
                "       fragment_uv = vertex_uv;\n"
                "       fragment_rgba = vertex_rgba;\n"
                "}\n";
 
-       c1 * fragment_shader =
+       character * fragment_shader =
                "#version 330 core\n"
                "uniform sampler2D texture_p;\n"
                "in  vec2 fragment_uv;\n"
                "in  vec4 fragment_rgba;\n"
                "out vec4 data;\n"
                "#version 330 core\n"
                "uniform sampler2D texture_p;\n"
                "in  vec2 fragment_uv;\n"
                "in  vec4 fragment_rgba;\n"
                "out vec4 data;\n"
-               "v0 main () {\n"
+               "procedure main () {\n"
                "       data = texture (texture_p, fragment_uv) * fragment_rgba;\n"
                "}\n";
 
                "       data = texture (texture_p, fragment_uv) * fragment_rgba;\n"
                "}\n";
 
-       u4 * dumb_buffer = null;
-       u4 * order       = null;
+       natural * dumb_buffer = null;
+       natural * order       = null;
 
 
-       u4 xyz_attribute  = 0;
-       u4 uv_attribute   = 0;
-       u4 rgba_attribute = 0;
+       natural xyz_attribute  = 0;
+       natural uv_attribute   = 0;
+       natural rgba_attribute = 0;
 
 
-       u4 u = 0;
-       u4 v = 0;
+       natural u = 0;
+       natural v = 0;
 
        if (vision->using_precomputed_spritesheet == true) {
 
        if (vision->using_precomputed_spritesheet == true) {
-               for (u4 index = 0; index < 95; ++index) {
+               for (natural index = 0; index < 95; ++index) {
                        vision->font_index [vision->font_count] [index] = ++vision->sprite_count - 1;
                }
 
                        vision->font_index [vision->font_count] [index] = ++vision->sprite_count - 1;
                }
 
@@ -498,13 +498,13 @@ static v0 vision_configure (vision_structure * vision, u4 window_width, u4 windo
 
        dumb_buffer = allocate (256 * sizeof (* dumb_buffer));
 
 
        dumb_buffer = allocate (256 * sizeof (* dumb_buffer));
 
-       for (u4 index = 0; index < 256; ++index) {
+       for (natural index = 0; index < 256; ++index) {
                dumb_buffer [index] = 0xffffffff;
        }
 
        ++vision->font_count;
 
                dumb_buffer [index] = 0xffffffff;
        }
 
        ++vision->font_count;
 
-       u4 current = vision->font_count - 1;
+       natural current = vision->font_count - 1;
 
        vision->font_index  = reallocate (vision->font_index,  vision->font_count * sizeof (* vision->font_index));
        vision->font_width  = reallocate (vision->font_width,  vision->font_count * sizeof (* vision->font_width));
 
        vision->font_index  = reallocate (vision->font_index,  vision->font_count * sizeof (* vision->font_index));
        vision->font_width  = reallocate (vision->font_width,  vision->font_count * sizeof (* vision->font_width));
@@ -519,13 +519,13 @@ static v0 vision_configure (vision_structure * vision, u4 window_width, u4 windo
        vision->font_width  [vision->font_count - 1] = allocate (95 * sizeof (* * vision->font_width));
        vision->font_height [vision->font_count - 1] = allocate (95 * sizeof (* * vision->font_height));
 
        vision->font_width  [vision->font_count - 1] = allocate (95 * sizeof (* * vision->font_width));
        vision->font_height [vision->font_count - 1] = allocate (95 * sizeof (* * vision->font_height));
 
-       for (u4 index = 0; index < 95; ++index) {
-               u4 * buffer = allocate (vision_font_width * vision_font_height * sizeof (* buffer));
+       for (natural index = 0; index < 95; ++index) {
+               natural * buffer = allocate (vision_font_width * vision_font_height * sizeof (* buffer));
 
 
-               for (u4 value = 0; value < 2; ++value) {
-                       for (u4 bit = 64; bit > 0; --bit) {
-                               u4 destination = ((value << 3) - ((bit - 1) >> 3) + 7) * vision_font_width - ((bit - 1) & 7) + 7;
-                               u4 source      = (font_bitmap [2 * index + value] >> (bit - 1)) & 1;
+               for (natural value = 0; value < 2; ++value) {
+                       for (natural bit = 64; bit > 0; --bit) {
+                               natural destination = ((value << 3) - ((bit - 1) >> 3) + 7) * vision_font_width - ((bit - 1) & 7) + 7;
+                               natural source      = (font_bitmap [2 * index + value] >> (bit - 1)) & 1;
 
                                buffer [destination] = (source) ? 0xffffffff : 0x00000000;
                        }
 
                                buffer [destination] = (source) ? 0xffffffff : 0x00000000;
                        }
@@ -542,14 +542,14 @@ static v0 vision_configure (vision_structure * vision, u4 window_width, u4 windo
 
        order = allocate (vision->sprite_count * sizeof (* order));
 
 
        order = allocate (vision->sprite_count * sizeof (* order));
 
-       for (u4 index = 0; index < vision->sprite_count; ++index) {
+       for (natural index = 0; index < vision->sprite_count; ++index) {
                order [index] = index;
        }
 
                order [index] = index;
        }
 
-       for (u4 index = 0; index < vision->sprite_count; ++index) {
-               for (u4 subindex = 0; subindex < vision->sprite_count; ++subindex) {
+       for (natural index = 0; index < vision->sprite_count; ++index) {
+               for (natural subindex = 0; subindex < vision->sprite_count; ++subindex) {
                        if (vision->sprite_height [order [index]] < vision->sprite_height [order [subindex]]) {
                        if (vision->sprite_height [order [index]] < vision->sprite_height [order [subindex]]) {
-                               u4 temporary = order [index];
+                               natural temporary = order [index];
 
                                order [index]    = order [subindex];
                                order [subindex] = temporary;
 
                                order [index]    = order [subindex];
                                order [subindex] = temporary;
@@ -557,19 +557,19 @@ static v0 vision_configure (vision_structure * vision, u4 window_width, u4 windo
                }
        }
 
                }
        }
 
-       for (u4 index = 0; index < vision->sprite_count; ++index) {
+       for (natural index = 0; index < vision->sprite_count; ++index) {
                if (u + vision->sprite_width [order [index]] >= vision->spritesheet_size) {
                        u *= 0;
                        v += vision->sprite_height [order [index]];
                }
 
                if (u + vision->sprite_width [order [index]] >= vision->spritesheet_size) {
                        u *= 0;
                        v += vision->sprite_height [order [index]];
                }
 
-               vision->sprite_u [order [index]] = (float) u / (float) vision->spritesheet_size;
-               vision->sprite_v [order [index]] = (float) v / (float) vision->spritesheet_size;
+               vision->sprite_u [order [index]] = (real) u / (real) vision->spritesheet_size;
+               vision->sprite_v [order [index]] = (real) v / (real) vision->spritesheet_size;
 
 
-               for (u4 y = 0; y < vision->sprite_height [order [index]]; ++y) {
-                       for (u4 x = 0; x < vision->sprite_width [order [index]]; ++x) {
-                               u4 destination = (v + y) * vision->spritesheet_size + (u + x);
-                               u4 source      = y * vision->sprite_width [order [index]] + x;
+               for (natural y = 0; y < vision->sprite_height [order [index]]; ++y) {
+                       for (natural x = 0; x < vision->sprite_width [order [index]]; ++x) {
+                               natural destination = (v + y) * vision->spritesheet_size + (u + x);
+                               natural source      = y * vision->sprite_width [order [index]] + x;
 
                                vision->spritesheet_data [destination] = vision->sprite_data [order [index]] [source];
                        }
 
                                vision->spritesheet_data [destination] = vision->sprite_data [order [index]] [source];
                        }
@@ -588,19 +588,19 @@ static v0 vision_configure (vision_structure * vision, u4 window_width, u4 windo
        vision->window_width  = window_width;
        vision->window_height = window_height;
 
        vision->window_width  = window_width;
        vision->window_height = window_height;
 
-       vision->aspect_ratio = (float) window_height / (float) window_width;
+       vision->aspect_ratio = (real) window_height / (real) window_width;
 
 
-       vision->pixel_width  = 2.0f / (float) window_width;
-       vision->pixel_height = 2.0f / (float) window_height;
+       vision->pixel_width  = 2.0f / (real) window_width;
+       vision->pixel_height = 2.0f / (real) window_height;
 
        glfwInit ();
 
 
        glfwInit ();
 
-       glfwWindowHs4 (GLFW_CONTEXT_VERSION_MAJOR,   3);
-       glfwWindowHs4 (GLFW_CONTEXT_VERSION_MINOR,   3);
-       glfwWindowHs4 (GLFW_OPENGL_PROFILE,          GLFW_OPENGL_CORE_PROFILE);
-       glfwWindowHs4 (GLFW_OPENGL_FORWARD_COMPAT,   1);
+       glfwWindowHinteger (GLFW_CONTEXT_VERSION_MAJOR,   3);
+       glfwWindowHinteger (GLFW_CONTEXT_VERSION_MINOR,   3);
+       glfwWindowHinteger (GLFW_OPENGL_PROFILE,          GLFW_OPENGL_CORE_PROFILE);
+       glfwWindowHinteger (GLFW_OPENGL_FORWARD_COMPAT,   1);
 
 
-       vision->window = glfwCreateWindow ((int) window_width, (int) window_height, window_title, null, null);
+       vision->window = glfwCreateWindow ((integer) window_width, (integer) window_height, window_title, null, null);
 
        fatal_failure (vision->window == null, "Failed to create GLFW window.\n");
 
 
        fatal_failure (vision->window == null, "Failed to create GLFW window.\n");
 
@@ -638,7 +638,7 @@ static v0 vision_configure (vision_structure * vision, u4 window_width, u4 windo
        vision->glBufferData              = (PFNGLBUFFERDATAPROC)              glfwGetProcAddress ("glBufferData");
        vision->glUniformMatrix4fv        = (PFNGLUNIFORMMATRIX4FVPROC)        glfwGetProcAddress ("glUniformMatrix4fv");
 
        vision->glBufferData              = (PFNGLBUFFERDATAPROC)              glfwGetProcAddress ("glBufferData");
        vision->glUniformMatrix4fv        = (PFNGLUNIFORMMATRIX4FVPROC)        glfwGetProcAddress ("glUniformMatrix4fv");
 
-       glViewport (0, 0, (int) window_width, (int) window_height);
+       glViewport (0, 0, (integer) window_width, (integer) window_height);
 
        glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
        glDepthFunc (GL_LESS);
 
        glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
        glDepthFunc (GL_LESS);
@@ -676,28 +676,28 @@ static v0 vision_configure (vision_structure * vision, u4 window_width, u4 windo
        vision->glLinkProgram (vision->shader_program);
        vision->glUseProgram  (vision->shader_program);
 
        vision->glLinkProgram (vision->shader_program);
        vision->glUseProgram  (vision->shader_program);
 
-       xyz_attribute = (u4) vision->glGetAttribLocation (vision->shader_program, "vertex_xyz");
+       xyz_attribute = (natural) vision->glGetAttribLocation (vision->shader_program, "vertex_xyz");
 
        vision->glEnableVertexAttribArray (xyz_attribute);
 
 
        vision->glEnableVertexAttribArray (xyz_attribute);
 
-       vision->glVertexAttribPointer (xyz_attribute, 3, GL_FLOAT, GL_FALSE, 9 * sizeof (float), (v0 *) 0);
+       vision->glVertexAttribPointer (xyz_attribute, 3, GL_FLOAT, GL_FALSE, 9 * sizeof (real), (procedure *) 0);
 
 
-       uv_attribute = (u4) vision->glGetAttribLocation (vision->shader_program, "vertex_uv");
+       uv_attribute = (natural) vision->glGetAttribLocation (vision->shader_program, "vertex_uv");
 
        vision->glEnableVertexAttribArray (uv_attribute);
 
 
        vision->glEnableVertexAttribArray (uv_attribute);
 
-       vision->glVertexAttribPointer (uv_attribute, 2, GL_FLOAT, GL_FALSE, 9 * sizeof (float), (v0 *) (3 * sizeof (float)));
+       vision->glVertexAttribPointer (uv_attribute, 2, GL_FLOAT, GL_FALSE, 9 * sizeof (real), (procedure *) (3 * sizeof (real)));
 
 
-       rgba_attribute = (u4) vision->glGetAttribLocation (vision->shader_program, "vertex_rgba");
+       rgba_attribute = (natural) vision->glGetAttribLocation (vision->shader_program, "vertex_rgba");
 
        vision->glEnableVertexAttribArray (rgba_attribute);
 
 
        vision->glEnableVertexAttribArray (rgba_attribute);
 
-       vision->glVertexAttribPointer (rgba_attribute, 4, GL_FLOAT, GL_FALSE, 9 * sizeof (float), (v0 *) (5 * sizeof (float)));
+       vision->glVertexAttribPointer (rgba_attribute, 4, GL_FLOAT, GL_FALSE, 9 * sizeof (real), (procedure *) (5 * sizeof (real)));
 
        vision->vertex_array = allocate (vision->vertex_limit * sizeof (vision->vertex_array));
        vision->index_array  = allocate (vision->index_limit  * sizeof (vision->index_array));
 
 
        vision->vertex_array = allocate (vision->vertex_limit * sizeof (vision->vertex_array));
        vision->index_array  = allocate (vision->index_limit  * sizeof (vision->index_array));
 
-       for (u4 index = 0; index < 16; ++index) {
+       for (natural index = 0; index < 16; ++index) {
                vision->projection_matrix [index] = 0.0f;
                vision->movement_matrix   [index] = 0.0f;
                vision->rotation_matrix   [index] = 0.0f;
                vision->projection_matrix [index] = 0.0f;
                vision->movement_matrix   [index] = 0.0f;
                vision->rotation_matrix   [index] = 0.0f;
@@ -748,11 +748,11 @@ static v0 vision_configure (vision_structure * vision, u4 window_width, u4 windo
 
        glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 
 
        glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 
-       print ("[/2Success/-] Configured OpenGL renderer.\n");
+       print ("/s Configured OpenGL renderer.\n");
 }
 
 }
 
-static v0 vision_synchronize (vision_structure * vision, u4 colour) {
-       s4 signal_code [signal_count] = {
+static procedure vision_synchronize (vision_structure * vision, natural colour) {
+       integer signal_code [signal_count] = {
                0,
                GLFW_KEY_A,                     GLFW_KEY_B,                     GLFW_KEY_C,                     GLFW_KEY_D,
                GLFW_KEY_E,                     GLFW_KEY_F,                     GLFW_KEY_G,                     GLFW_KEY_H,
                0,
                GLFW_KEY_A,                     GLFW_KEY_B,                     GLFW_KEY_C,                     GLFW_KEY_D,
                GLFW_KEY_E,                     GLFW_KEY_F,                     GLFW_KEY_G,                     GLFW_KEY_H,
@@ -781,8 +781,8 @@ static v0 vision_synchronize (vision_structure * vision, u4 colour) {
                GLFW_KEY_KP_6,                  GLFW_KEY_KP_7,                  GLFW_KEY_KP_8,                  GLFW_KEY_KP_9
        };
 
                GLFW_KEY_KP_6,                  GLFW_KEY_KP_7,                  GLFW_KEY_KP_8,                  GLFW_KEY_KP_9
        };
 
-       s4 new_window_width  = 0;
-       s4 new_window_height = 0;
+       integer new_window_width  = 0;
+       integer new_window_height = 0;
 
        glClearColor (normal_r (colour), normal_g (colour), normal_b (colour), normal_a (colour));
 
 
        glClearColor (normal_r (colour), normal_g (colour), normal_b (colour), normal_a (colour));
 
@@ -794,36 +794,36 @@ static v0 vision_synchronize (vision_structure * vision, u4 colour) {
 
        glfwGetWindowSize (vision->window, & new_window_width, & new_window_height);
 
 
        glfwGetWindowSize (vision->window, & new_window_width, & new_window_height);
 
-       if ((vision->window_width != (u4) new_window_width) || (vision->window_height != (u4) new_window_height)) {
+       if ((vision->window_width != (natural) new_window_width) || (vision->window_height != (natural) new_window_height)) {
                if ((new_window_width <= 0) || (new_window_height <= 0)) return;
 
                glViewport (0, 0, new_window_width, new_window_height);
 
                if ((new_window_width <= 0) || (new_window_height <= 0)) return;
 
                glViewport (0, 0, new_window_width, new_window_height);
 
-               vision->window_width  = (u4) new_window_width;
-               vision->window_height = (u4) new_window_height;
+               vision->window_width  = (natural) new_window_width;
+               vision->window_height = (natural) new_window_height;
 
 
-               vision->pixel_width  = 2.0f / (float) new_window_width;
-               vision->pixel_height = 2.0f / (float) new_window_height;
+               vision->pixel_width  = 2.0f / (real) new_window_width;
+               vision->pixel_height = 2.0f / (real) new_window_height;
        }
 
        }
 
-       vision->cursor [cursor_left]   = (b4) (glfwGetMouseButton (vision->window, GLFW_MOUSE_BUTTON_LEFT)   == GLFW_PRESS);
-       vision->cursor [cursor_middle] = (b4) (glfwGetMouseButton (vision->window, GLFW_MOUSE_BUTTON_MIDDLE) == GLFW_PRESS);
-       vision->cursor [cursor_right]  = (b4) (glfwGetMouseButton (vision->window, GLFW_MOUSE_BUTTON_RIGHT)  == GLFW_PRESS);
+       vision->cursor [cursor_left]   = (boolean) (glfwGetMouseButton (vision->window, GLFW_MOUSE_BUTTON_LEFT)   == GLFW_PRESS);
+       vision->cursor [cursor_middle] = (boolean) (glfwGetMouseButton (vision->window, GLFW_MOUSE_BUTTON_MIDDLE) == GLFW_PRESS);
+       vision->cursor [cursor_right]  = (boolean) (glfwGetMouseButton (vision->window, GLFW_MOUSE_BUTTON_RIGHT)  == GLFW_PRESS);
 
        glfwSetCursorPos (vision->window, (double) vision->window_width / 2.0, (double) vision->window_height / 2.0);
 
        if (vision->freeze_cursor == false) {
 
        glfwSetCursorPos (vision->window, (double) vision->window_width / 2.0, (double) vision->window_height / 2.0);
 
        if (vision->freeze_cursor == false) {
-               f8 x = 0.0;
-               f8 y = 0.0;
+               real_64 x = 0.0;
+               real_64 y = 0.0;
 
                glfwGetCursorPos (vision->window, & x, & y);
 
 
                glfwGetCursorPos (vision->window, & x, & y);
 
-               vision->cursor_x = (int) x;
-               vision->cursor_y = (int) y;
+               vision->cursor_x = (integer) x;
+               vision->cursor_y = (integer) y;
 
 
-               //~f4 offset_x = vision->camera_x - x;
+               //~real offset_x = vision->camera_x - x;
 
 
-               //~for (u4 index = 0; index < 16; ++index) {
+               //~for (natural index = 0; index < 16; ++index) {
                        //~vision->rotation_matrix [index] = 0.0f;
                //~}
 
                        //~vision->rotation_matrix [index] = 0.0f;
                //~}
 
@@ -849,8 +849,8 @@ static v0 vision_synchronize (vision_structure * vision, u4 colour) {
        }
 
        if (vision->freeze_signal == false) {
        }
 
        if (vision->freeze_signal == false) {
-               for (u4 index = 0; index < signal_count; ++index) {
-                       vision->signal [index] = (b4) (glfwGetKey (vision->window, signal_code [index]) == GLFW_PRESS);
+               for (natural index = 0; index < signal_count; ++index) {
+                       vision->signal [index] = (boolean) (glfwGetKey (vision->window, signal_code [index]) == GLFW_PRESS);
                }
        }
 
                }
        }
 
@@ -859,7 +859,7 @@ static v0 vision_synchronize (vision_structure * vision, u4 colour) {
 
        vision->glBindBuffer (GL_ARRAY_BUFFER, vision->vertex_buffer);
 
 
        vision->glBindBuffer (GL_ARRAY_BUFFER, vision->vertex_buffer);
 
-       glDrawElements (GL_TRIANGLES, (int) vision->index_count * 4, GL_UNSIGNED_INT, null);
+       glDrawElements (GL_TRIANGLES, (integer) vision->index_count * 4, GL_UNSIGNED_INT, null);
 
        glfwSwapBuffers (vision->window);
 
 
        glfwSwapBuffers (vision->window);
 
@@ -875,7 +875,7 @@ static v0 vision_synchronize (vision_structure * vision, u4 colour) {
        }
 
        if (vision->global_tick % vision->gameplay_framerate == 0) {
        }
 
        if (vision->global_tick % vision->gameplay_framerate == 0) {
-               vision->framerate = (u4) (1000000000ul / vision->frame_time);
+               vision->framerate = (natural) (1000000000ul / vision->frame_time);
        }
 
        ++vision->global_tick;
        }
 
        ++vision->global_tick;
@@ -887,21 +887,21 @@ static v0 vision_synchronize (vision_structure * vision, u4 colour) {
        vision->frame_begin = nano_time ();
 }
 
        vision->frame_begin = nano_time ();
 }
 
-static v0 vision_render_base (vision_structure * vision, u4 vertex_count, f4 * vertex_array, u4 index_count,
-                                u4 * index_array, u4 sprite, u4 colour) {
+static procedure vision_render_base (vision_structure * vision, natural vertex_count, real * vertex_array, natural index_count,
+                                natural * index_array, natural sprite, natural colour) {
        if (sprite                              >= vision->sprite_count) return;
        if (vision->vertex_count + vertex_count >= vision->vertex_limit) return;
        if (vision->index_count  + index_count  >= vision->index_limit)  return;
 
        if (sprite                              >= vision->sprite_count) return;
        if (vision->vertex_count + vertex_count >= vision->vertex_limit) return;
        if (vision->index_count  + index_count  >= vision->index_limit)  return;
 
-       f4 unwrap_x = (float) vision->sprite_u [sprite] / (float) vision->spritesheet_size;
-       f4 unwrap_y = (float) vision->sprite_v [sprite] / (float) vision->spritesheet_size;
+       real unwrap_x = (real) vision->sprite_u [sprite] / (real) vision->spritesheet_size;
+       real unwrap_y = (real) vision->sprite_v [sprite] / (real) vision->spritesheet_size;
 
 
-       f4 unwrap_width  = (float) vision->sprite_width  [sprite] / (float) vision->spritesheet_size;
-       f4 unwrap_height = (float) vision->sprite_height [sprite] / (float) vision->spritesheet_size;
+       real unwrap_width  = (real) vision->sprite_width  [sprite] / (real) vision->spritesheet_size;
+       real unwrap_height = (real) vision->sprite_height [sprite] / (real) vision->spritesheet_size;
 
 
-       //~for (u4 vertex = 0; vertex < vertex_count; ++vertex) {
-               //~u4 destination = 9 * vertex + vision->vertex_count;
-               //~u4 source      = 5 * vertex;
+       //~for (natural vertex = 0; vertex < vertex_count; ++vertex) {
+               //~natural destination = 9 * vertex + vision->vertex_count;
+               //~natural source      = 5 * vertex;
 
                //~vision->vertex_array [destination + 0] = vertex_array [source + 0];
                //~vision->vertex_array [destination + 1] = vertex_array [source + 1];
 
                //~vision->vertex_array [destination + 0] = vertex_array [source + 0];
                //~vision->vertex_array [destination + 1] = vertex_array [source + 1];
@@ -914,14 +914,14 @@ static v0 vision_render_base (vision_structure * vision, u4 vertex_count, f4 * v
                //~vision->vertex_array [destination + 8] = normal_a (colour);
        //~}
 
                //~vision->vertex_array [destination + 8] = normal_a (colour);
        //~}
 
-       for (u4 vertex = 0; vertex < vertex_count; ++vertex) {
+       for (natural vertex = 0; vertex < vertex_count; ++vertex) {
                vision->vertex_array [vision->vertex_count + vertex] = vertex_array [vertex];
        }
 
                //~vision->vertex_array [destination + 3] = vertex_array [source + 3] * unwrap_width  + unwrap_x;
                //~vision->vertex_array [destination + 4] = vertex_array [source + 4] * unwrap_height + unwrap_y;
 
                vision->vertex_array [vision->vertex_count + vertex] = vertex_array [vertex];
        }
 
                //~vision->vertex_array [destination + 3] = vertex_array [source + 3] * unwrap_width  + unwrap_x;
                //~vision->vertex_array [destination + 4] = vertex_array [source + 4] * unwrap_height + unwrap_y;
 
-       for (u4 index = 0; index < index_count; ++index) {
+       for (natural index = 0; index < index_count; ++index) {
                vision->index_array [vision->index_count + index] = index_array [index];
        }
 
                vision->index_array [vision->index_count + index] = index_array [index];
        }
 
@@ -931,13 +931,13 @@ static v0 vision_render_base (vision_structure * vision, u4 vertex_count, f4 * v
        vision->index_count  += index_count;
 }
 
        vision->index_count  += index_count;
 }
 
-//~static v0 vision_render_triangle (vision_structure * vision, f4 * vertex_array, u4 colour) {
+//~static procedure vision_render_triangle (vision_structure * vision, real * vertex_array, natural colour) {
        //~if (vision->vertex_count + 3 * 36 >= vision->vertex_limit) return;
        //~if (vision->index_count  + 3      >= vision->index_limit)  return;
 
        //~if (vision->vertex_count + 3 * 36 >= vision->vertex_limit) return;
        //~if (vision->index_count  + 3      >= vision->index_limit)  return;
 
-       //~for (u4 vertex = 0; vertex < 3; ++vertex) {
-               //~u4 destination = 9 * vertex + vision->vertex_count;
-               //~u4 source      = 5 * vertex;
+       //~for (natural vertex = 0; vertex < 3; ++vertex) {
+               //~natural destination = 9 * vertex + vision->vertex_count;
+               //~natural source      = 5 * vertex;
 
                //~vision->vertex_array [destination + 0] = vertex_array [source + 0];
                //~vision->vertex_array [destination + 1] = vertex_array [source + 1];
 
                //~vision->vertex_array [destination + 0] = vertex_array [source + 0];
                //~vision->vertex_array [destination + 1] = vertex_array [source + 1];
@@ -950,7 +950,7 @@ static v0 vision_render_base (vision_structure * vision, u4 vertex_count, f4 * v
                //~vision->vertex_array [destination + 8] = normal_a (colour);
        //~}
 
                //~vision->vertex_array [destination + 8] = normal_a (colour);
        //~}
 
-       //~for (u4 index = 0; index < 3; ++index) {
+       //~for (natural index = 0; index < 3; ++index) {
                //~vision->index_array [vision->index_count + index] = vision->vertex_array [vision->vertex_count / 9 + index];
        //~}
 
                //~vision->index_array [vision->index_count + index] = vision->vertex_array [vision->vertex_count / 9 + index];
        //~}
 
@@ -958,7 +958,7 @@ static v0 vision_render_base (vision_structure * vision, u4 vertex_count, f4 * v
        //~vision->index_count  += 3;
 //~}
 
        //~vision->index_count  += 3;
 //~}
 
-static v0 vision_change_field_of_view (vision_structure * vision, f4 change) {
+static procedure vision_change_field_of_view (vision_structure * vision, real change) {
        vision->field_of_view += change;
 
        vision->projection_matrix [ 0] = vision->aspect_ratio / tangent (vision->field_of_view / 2.0f);
        vision->field_of_view += change;
 
        vision->projection_matrix [ 0] = vision->aspect_ratio / tangent (vision->field_of_view / 2.0f);
@@ -968,7 +968,7 @@ static v0 vision_change_field_of_view (vision_structure * vision, f4 change) {
                                    vision->projection_matrix);
 }
 
                                    vision->projection_matrix);
 }
 
-static v0 vision_change_translation (vision_structure * vision, f4 x, f4 y, f4 z) {
+static procedure vision_change_translation (vision_structure * vision, real x, real y, real z) {
        vision->movement_matrix [ 3] += x;
        vision->movement_matrix [ 7] += y;
        vision->movement_matrix [11] += z;
        vision->movement_matrix [ 3] += x;
        vision->movement_matrix [ 7] += y;
        vision->movement_matrix [11] += z;
@@ -977,8 +977,8 @@ static v0 vision_change_translation (vision_structure * vision, f4 x, f4 y, f4 z
                                    vision->movement_matrix);
 }
 
                                    vision->movement_matrix);
 }
 
-static v0 vision_change_rotation (vision_structure * vision, f4 vertical, f4 horizontal) {
-       for (u4 index = 0; index < 16; ++index) {
+static procedure vision_change_rotation (vision_structure * vision, real vertical, real horizontal) {
+       for (natural index = 0; index < 16; ++index) {
                vision->rotation_matrix [index] = 0.0f;
        }
 
                vision->rotation_matrix [index] = 0.0f;
        }
 
index cae83e77e1e84d14c8d4d2d7cc1ade7986bf8b88..8659cc6843101a30735f98b35b63c5c39c421154 100644 (file)
 #include <xolatile/xormat/png.h>
 #include <xolatile/xpengl.h>
 
 #include <xolatile/xormat/png.h>
 #include <xolatile/xpengl.h>
 
-s4 main (v0) {
+integer main (none) {
        opengl_structure * opengl = opengl_initialize (60, 60, false, 1024, 1024);
 
        opengl_structure * opengl = opengl_initialize (60, 60, false, 1024, 1024);
 
-       s4 x = 0;
-       s4 y = 0;
+       integer x = 0;
+       integer y = 0;
 
        //~opengl_sprite_import (opengl, "");
 
 
        //~opengl_sprite_import (opengl, "");
 
index 24ac318a0b8f91c3260a660e24df15affe1dea93..74b68bdf4bb61087c7d9827905da7d74c8df4f18 100755 (executable)
--- a/xommon.h
+++ b/xommon.h
@@ -46,53 +46,53 @@ typedef struct {
        xcb_gcontext_t     context;
        xcb_pixmap_t       pixmap;
 
        xcb_gcontext_t     context;
        xcb_pixmap_t       pixmap;
 
-       b4 signal [signal_count];
-       b4 cursor [cursor_count];
-
-       b4      active;
-       u4      window_width;
-       u4      window_height;
-       u4      framerate;
-       u8     frame_time;
-       u8     frame_begin;
-       u8     frame_end;
-       u4    * framebuffer;
-       u4      global_tick;
-       u4      gameplay_tick;
-       u4      animation_tick;
-       s4       cursor_x;
-       s4       cursor_y;
-       b4      freeze_cursor;
-       b4      freeze_signal;
-       u4      sprite_count;
-       u4      font_count;
-       u4      dummy; /// TODO USE ME PLEASE
-       u4  * * sprite_data;
-       u4    * sprite_width;
-       u4    * sprite_height;
-       u4  * * font_index;
-       u4  * * font_width;
-       u4  * * font_height;
-       c1    * font_begin;
-       c1    * font_end;
+       boolean signal [signal_count];
+       boolean cursor [cursor_count];
+
+       boolean      active;
+       natural      window_width;
+       natural      window_height;
+       natural      framerate;
+       natural_64     frame_time;
+       natural_64     frame_begin;
+       natural_64     frame_end;
+       natural    * framebuffer;
+       natural      global_tick;
+       natural      gameplay_tick;
+       natural      animation_tick;
+       integer       cursor_x;
+       integer       cursor_y;
+       boolean      freeze_cursor;
+       boolean      freeze_signal;
+       natural      sprite_count;
+       natural      font_count;
+       natural      dummy; /// TODO USE ME PLEASE
+       natural  * * sprite_data;
+       natural    * sprite_width;
+       natural    * sprite_height;
+       natural  * * font_index;
+       natural  * * font_width;
+       natural  * * font_height;
+       character    * font_begin;
+       character    * font_end;
 } common_structure;
 
 } common_structure;
 
-static u4 common_center_x (common_structure * common, u4 size) {
+static natural common_center_x (common_structure * common, natural size) {
        return ((common->window_width - size) / 2);
 }
 
        return ((common->window_width - size) / 2);
 }
 
-static u4 common_center_y (common_structure * common, u4 size) {
+static natural common_center_y (common_structure * common, natural size) {
        return ((common->window_height - size) / 2);
 }
 
        return ((common->window_height - size) / 2);
 }
 
-static b4 common_cursor_inside (common_structure * common, s4 x, s4 y, u4 width, u4 height) {
+static boolean common_cursor_inside (common_structure * common, integer x, integer y, natural width, natural height) {
        return ((common->cursor_x > x)
             && (common->cursor_y > y)
        return ((common->cursor_x > x)
             && (common->cursor_y > y)
-            && (common->cursor_x < x + (int) width)
-            && (common->cursor_y < y + (int) height));
+            && (common->cursor_x < x + (integer) width)
+            && (common->cursor_y < y + (integer) height));
 }
 
 }
 
-static b4 common_cursor_left_click (common_structure * common, s4 x, s4 y, u4 width, u4 height) {
+static boolean common_cursor_left_click (common_structure * common, integer x, integer y, natural width, natural height) {
        if (common->cursor [cursor_left] == true) {
                common->freeze_cursor = true;
 
        if (common->cursor [cursor_left] == true) {
                common->freeze_cursor = true;
 
@@ -102,7 +102,7 @@ static b4 common_cursor_left_click (common_structure * common, s4 x, s4 y, u4 wi
        return (false);
 }
 
        return (false);
 }
 
-static b4 common_cursor_right_click (common_structure * common, s4 x, s4 y, u4 width, u4 height) {
+static boolean common_cursor_right_click (common_structure * common, integer x, integer y, natural width, natural height) {
        if (common->cursor [cursor_right]) {
                common->freeze_cursor = true;
 
        if (common->cursor [cursor_right]) {
                common->freeze_cursor = true;
 
@@ -112,7 +112,7 @@ static b4 common_cursor_right_click (common_structure * common, s4 x, s4 y, u4 w
        return (false);
 }
 
        return (false);
 }
 
-static u4 common_sprite_raw_import (common_structure * common, u4 * data, u4 width, u4 height) {
+static natural common_sprite_raw_import (common_structure * common, natural * data, natural width, natural height) {
        ++common->sprite_count;
 
        common->sprite_data   = reallocate (common->sprite_data,   common->sprite_count * sizeof (* common->sprite_data));
        ++common->sprite_count;
 
        common->sprite_data   = reallocate (common->sprite_data,   common->sprite_count * sizeof (* common->sprite_data));
@@ -126,11 +126,11 @@ static u4 common_sprite_raw_import (common_structure * common, u4 * data, u4 wid
        return (common->sprite_count - 1);
 }
 
        return (common->sprite_count - 1);
 }
 
-static u4 common_font_raw_import (common_structure * common, u4 * data, u4 image_width, c1 begin, c1 end, u4 empty) {
-       u4   pointer = 0;
-       u4   width   = 0;
-       u4   height  = 0;
-       u4 * buffer = null;
+static natural common_font_raw_import (common_structure * common, natural * data, natural image_width, character begin, character end, natural empty) {
+       natural   pointer = 0;
+       natural   width   = 0;
+       natural   height  = 0;
+       natural * buffer = null;
 
        ++common->font_count;
 
 
        ++common->font_count;
 
@@ -143,19 +143,19 @@ static u4 common_font_raw_import (common_structure * common, u4 * data, u4 image
        common->font_begin [common->font_count - 1] = begin;
        common->font_end   [common->font_count - 1] = end;
 
        common->font_begin [common->font_count - 1] = begin;
        common->font_end   [common->font_count - 1] = end;
 
-       common->font_index  [common->font_count - 1] = allocate ((u8) (end - begin + 1) * sizeof (* * common->font_index));
-       common->font_width  [common->font_count - 1] = allocate ((u8) (end - begin + 1) * sizeof (* * common->font_width));
-       common->font_height [common->font_count - 1] = allocate ((u8) (end - begin + 1) * sizeof (* * common->font_height));
+       common->font_index  [common->font_count - 1] = allocate ((caliber) (end - begin + 1) * sizeof (* * common->font_index));
+       common->font_width  [common->font_count - 1] = allocate ((caliber) (end - begin + 1) * sizeof (* * common->font_width));
+       common->font_height [common->font_count - 1] = allocate ((caliber) (end - begin + 1) * sizeof (* * common->font_height));
 
 
-       for (c1 index = begin; index <= end; ++index) {
+       for (character index = begin; index <= end; ++index) {
                for (          ; data [pointer]                        == empty; ++pointer);
                for (width  = 0; data [pointer + width]                != empty; ++width);
                for (height = 0; data [pointer + height * image_width] != empty; ++height);
 
                buffer = allocate (width * height * sizeof (* buffer));
 
                for (          ; data [pointer]                        == empty; ++pointer);
                for (width  = 0; data [pointer + width]                != empty; ++width);
                for (height = 0; data [pointer + height * image_width] != empty; ++height);
 
                buffer = allocate (width * height * sizeof (* buffer));
 
-               for (u4 y = 0; y < height; ++y) {
-                       for (u4 x = 0; x < width; ++x) {
+               for (natural y = 0; y < height; ++y) {
+                       for (natural x = 0; x < width; ++x) {
                                buffer [y * width + x] = data [pointer + (y * image_width) + x];
                        }
                }
                                buffer [y * width + x] = data [pointer + (y * image_width) + x];
                        }
                }
@@ -176,12 +176,12 @@ static u4 common_font_raw_import (common_structure * common, u4 * data, u4 image
        return (common->font_count - 1);
 }
 
        return (common->font_count - 1);
 }
 
-static u4 common_sprite_import (common_structure * common, c1 * path) {
-       u4   width  = 0;
-       u4   height = 0;
-       u4 * data   = null;
+static natural common_sprite_import (common_structure * common, character * path) {
+       natural   width  = 0;
+       natural   height = 0;
+       natural * data   = null;
 
 
-       c1 buffer [256] = "";
+       character buffer [256] = "";
 
 #ifdef use_png_library
        if ((data == null) && (file_exists (string_concatenate (string_copy (buffer, path), ".png")) == true)) {
 
 #ifdef use_png_library
        if ((data == null) && (file_exists (string_concatenate (string_copy (buffer, path), ".png")) == true)) {
@@ -200,13 +200,13 @@ static u4 common_sprite_import (common_structure * common, c1 * path) {
        return (common_sprite_raw_import (common, data, width, height));
 }
 
        return (common_sprite_raw_import (common, data, width, height));
 }
 
-static u4 common_font_import (common_structure * common, c1 * path, c1 begin, c1 end, u4 colour) {
-       u4   width  = 0;
-       u4   height = 0;
-       u4   result = 0;
-       u4 * data   = null;
+static natural common_font_import (common_structure * common, character * path, character begin, character end, natural colour) {
+       natural   width  = 0;
+       natural   height = 0;
+       natural   result = 0;
+       natural * data   = null;
 
 
-       c1 buffer [256] = "";
+       character buffer [256] = "";
 
 #ifdef use_png_library
        if ((data == null) && (file_exists (string_concatenate (string_copy (buffer, path), ".png")) == true)) {
 
 #ifdef use_png_library
        if ((data == null) && (file_exists (string_concatenate (string_copy (buffer, path), ".png")) == true)) {
@@ -229,26 +229,26 @@ static u4 common_font_import (common_structure * common, c1 * path, c1 begin, c1
        return (result);
 }
 
        return (result);
 }
 
-static u4 common_sprite_width (common_structure * common, u4 sprite) {
+static natural common_sprite_width (common_structure * common, natural sprite) {
        return (common->sprite_width [sprite]);
 }
 
        return (common->sprite_width [sprite]);
 }
 
-static u4 common_sprite_height (common_structure * common, u4 sprite) {
+static natural common_sprite_height (common_structure * common, natural sprite) {
        return (common->sprite_height [sprite]);
 }
 
        return (common->sprite_height [sprite]);
 }
 
-static common_structure * common_initialize (v0) {
+static common_structure * common_initialize (none) {
        common_structure * common = allocate (sizeof (* common));
 
        return (common);
 }
 
 static common_structure * common_deinitialize (common_structure * common) {
        common_structure * common = allocate (sizeof (* common));
 
        return (common);
 }
 
 static common_structure * common_deinitialize (common_structure * common) {
-       for (u4 index = 0; index < common->sprite_count; ++index) {
+       for (natural index = 0; index < common->sprite_count; ++index) {
                common->sprite_data [index] = deallocate (common->sprite_data [index]);
        }
 
                common->sprite_data [index] = deallocate (common->sprite_data [index]);
        }
 
-       for (u4 index = 0; index < common->font_count; ++index) {
+       for (natural index = 0; index < common->font_count; ++index) {
                common->font_index  [index] = deallocate (common->font_index  [index]);
                common->font_width  [index] = deallocate (common->font_width  [index]);
                common->font_height [index] = deallocate (common->font_height [index]);
                common->font_index  [index] = deallocate (common->font_index  [index]);
                common->font_width  [index] = deallocate (common->font_width  [index]);
                common->font_height [index] = deallocate (common->font_height [index]);
@@ -275,10 +275,10 @@ static common_structure * common_deinitialize (common_structure * common) {
        return (deallocate (common));
 }
 
        return (deallocate (common));
 }
 
-static v0 common_configure (common_structure * common, u4 width, u4 height, c1 * title, u4 window_flags) {
-       u8 font_bitmap [190] = {
+static procedure common_configure (common_structure * common, natural width, natural height, character * title, natural window_flags) {
+       natural_64 font_bitmap [190] = {
                0x0000000000000000, 0x0000000000000000, 0x0000101010101010, 0x1000101000000000, 0x0024242400000000, 0x0000000000000000,
                0x0000000000000000, 0x0000000000000000, 0x0000101010101010, 0x1000101000000000, 0x0024242400000000, 0x0000000000000000,
-               0x00002424247e2424, 0x7e24242400000000, 0x0010107c9290907c, 0x1212927c10100000, 0x0000649468081010, 0x202c524c00000000,
+               0x00002424247e2424, 0x7e24242400000000, 0x0010107c9290907c, 0x1212927character0100000, 0x0000649468081010, 0x202c524c00000000,
                0x000018242418304a, 0x4444443a00000000, 0x0010101000000000, 0x0000000000000000, 0x0000081020202020, 0x2020100800000000,
                0x0000201008080808, 0x0808102000000000, 0x000000000024187e, 0x1824000000000000, 0x000000000010107c, 0x1010000000000000,
                0x0000000000000000, 0x0000101020000000, 0x000000000000007e, 0x0000000000000000, 0x0000000000000000, 0x0000101000000000,
                0x000018242418304a, 0x4444443a00000000, 0x0010101000000000, 0x0000000000000000, 0x0000081020202020, 0x2020100800000000,
                0x0000201008080808, 0x0808102000000000, 0x000000000024187e, 0x1824000000000000, 0x000000000010107c, 0x1010000000000000,
                0x0000000000000000, 0x0000101020000000, 0x000000000000007e, 0x0000000000000000, 0x0000000000000000, 0x0000101000000000,
@@ -300,26 +300,26 @@ static v0 common_configure (common_structure * common, u4 width, u4 height, c1 *
                0x0000404020201010, 0x0808040400000000, 0x0000380808080808, 0x0808083800000000, 0x0000102844000000, 0x0000000000000000,
                0x0000000000000000, 0x0000007e00000000, 0x1008000000000000, 0x0000000000000000, 0x00000000003c023e, 0x4242423e00000000,
                0x00004040407c4242, 0x4242427c00000000, 0x00000000003c4240, 0x4040423c00000000, 0x00000202023e4242, 0x4242423e00000000,
                0x0000404020201010, 0x0808040400000000, 0x0000380808080808, 0x0808083800000000, 0x0000102844000000, 0x0000000000000000,
                0x0000000000000000, 0x0000007e00000000, 0x1008000000000000, 0x0000000000000000, 0x00000000003c023e, 0x4242423e00000000,
                0x00004040407c4242, 0x4242427c00000000, 0x00000000003c4240, 0x4040423c00000000, 0x00000202023e4242, 0x4242423e00000000,
-               0x00000000003c4242, 0x7e40403c00000000, 0x00000e10107c1010, 0x1010101000000000, 0x00000000003e4242, 0x4242423e02023c00,
+               0x00000000003c4242, 0x7e40403c00000000, 0x00000e10107character010, 0x1010101000000000, 0x00000000003e4242, 0x4242423e02023c00,
                0x00004040407c4242, 0x4242424200000000, 0x0000101000301010, 0x1010103800000000, 0x00000404000c0404, 0x0404040444443800,
                0x0000404040424448, 0x7048444200000000, 0x0000301010101010, 0x1010103800000000, 0x0000000000fc9292, 0x9292929200000000,
                0x00000000007c4242, 0x4242424200000000, 0x00000000003c4242, 0x4242423c00000000, 0x00000000007c4242, 0x4242427c40404000,
                0x00000000003e4242, 0x4242423e02020200, 0x00000000005e6040, 0x4040404000000000, 0x00000000003e4040, 0x3c02027c00000000,
                0x00004040407c4242, 0x4242424200000000, 0x0000101000301010, 0x1010103800000000, 0x00000404000c0404, 0x0404040444443800,
                0x0000404040424448, 0x7048444200000000, 0x0000301010101010, 0x1010103800000000, 0x0000000000fc9292, 0x9292929200000000,
                0x00000000007c4242, 0x4242424200000000, 0x00000000003c4242, 0x4242423c00000000, 0x00000000007c4242, 0x4242427c40404000,
                0x00000000003e4242, 0x4242423e02020200, 0x00000000005e6040, 0x4040404000000000, 0x00000000003e4040, 0x3c02027c00000000,
-               0x00001010107c1010, 0x1010100e00000000, 0x0000000000424242, 0x4242423e00000000, 0x0000000000424242, 0x2424181800000000,
+               0x00001010107character010, 0x1010100e00000000, 0x0000000000424242, 0x4242423e00000000, 0x0000000000424242, 0x2424181800000000,
                0x0000000000828292, 0x9292927c00000000, 0x0000000000424224, 0x1824424200000000, 0x0000000000424242, 0x4242423e02023c00,
                0x0000000000828292, 0x9292927c00000000, 0x0000000000424224, 0x1824424200000000, 0x0000000000424242, 0x4242423e02023c00,
-               0x00000000007e0408, 0x1020407e00000000, 0x00000c1010102010, 0x1010100c00000000, 0x0000101010101010, 0x1010101000000000,
+               0x00000000007e0408, 0x1020407e00000000, 0x00000character010102010, 0x1010100c00000000, 0x0000101010101010, 0x1010101000000000,
                0x0000300808080408, 0x0808083000000000, 0x000000000062928c, 0x0000000000000000
        };
 
                0x0000300808080408, 0x0808083000000000, 0x000000000062928c, 0x0000000000000000
        };
 
-       u4 event_mask = XCB_CW_BACK_PIXEL | XCB_CW_EVENT_MASK;
+       natural event_mask = XCB_CW_BACK_PIXEL | XCB_CW_EVENT_MASK;
 
 
-       u4 mask_window_flags [2] = { 0 };
+       natural mask_window_flags [2] = { 0 };
 
 
-       (v0) window_flags;
+       (none) window_flags;
 
 
-       u4 * dumb_buffer = allocate (256 * sizeof (* dumb_buffer));
+       natural * dumb_buffer = allocate (256 * sizeof (* dumb_buffer));
 
 
-       for (u4 index = 0; index < 256; ++index) {
+       for (natural index = 0; index < 256; ++index) {
                dumb_buffer [index] = 0xffffffff;
        }
 
                dumb_buffer [index] = 0xffffffff;
        }
 
@@ -338,13 +338,13 @@ static v0 common_configure (common_structure * common, u4 width, u4 height, c1 *
        common->font_width  [common->font_count - 1] = allocate (95 * sizeof (* * common->font_width));
        common->font_height [common->font_count - 1] = allocate (95 * sizeof (* * common->font_height));
 
        common->font_width  [common->font_count - 1] = allocate (95 * sizeof (* * common->font_width));
        common->font_height [common->font_count - 1] = allocate (95 * sizeof (* * common->font_height));
 
-       for (u4 index = 0; index < 95; ++index) {
-               u4 * buffer = allocate (common_font_width * common_font_height * sizeof (* buffer));
+       for (natural index = 0; index < 95; ++index) {
+               natural * buffer = allocate (common_font_width * common_font_height * sizeof (* buffer));
 
 
-               for (u4 value = 0; value < 2; ++value) {
-                       for (u4 bit = 64; bit > 0; --bit) {
-                               u4 destination = ((value << 3) - ((bit - 1) >> 3) + 7) * common_font_width - ((bit - 1) & 7) + 7;
-                               u4 source      = (font_bitmap [2 * index + value] >> (bit - 1)) & 1;
+               for (natural value = 0; value < 2; ++value) {
+                       for (natural bit = 64; bit > 0; --bit) {
+                               natural destination = ((value << 3) - ((bit - 1) >> 3) + 7) * common_font_width - ((bit - 1) & 7) + 7;
+                               natural source      = (font_bitmap [2 * index + value] >> (bit - 1)) & 1;
 
                                buffer [destination] = (source) ? 0xffffffff : 0x00000000;
                        }
 
                                buffer [destination] = (source) ? 0xffffffff : 0x00000000;
                        }
@@ -383,17 +383,17 @@ static v0 common_configure (common_structure * common, u4 width, u4 height, c1 *
                                XCB_EVENT_MASK_BUTTON_RELEASE  |
                                XCB_EVENT_MASK_BUTTON_PRESS;
 
                                XCB_EVENT_MASK_BUTTON_RELEASE  |
                                XCB_EVENT_MASK_BUTTON_PRESS;
 
-       xcb_create_window (common->connection, common->screen->root_depth, common->window, common->screen->root, 0, 0, (u2) width,
-                          (u2) height, 10, XCB_WINDOW_CLASS_INPUT_OUTPUT, common->screen->root_visual, event_mask, mask_window_flags);
+       xcb_create_window (common->connection, common->screen->root_depth, common->window, common->screen->root, 0, 0, (natural_16) width,
+                          (natural_16) height, 10, XCB_WINDOW_CLASS_INPUT_OUTPUT, common->screen->root_visual, event_mask, mask_window_flags);
 
        xcb_map_window (common->connection, common->window);
 
        //~xcb_composite_redirect_window (common->connection, common->window, XCB_COMPOSITE_REDIRECT_MANUAL);
 
        xcb_change_property (common->connection, XCB_PROP_MODE_REPLACE, common->window, XCB_ATOM_WM_NAME, XCB_ATOM_STRING, 8,
 
        xcb_map_window (common->connection, common->window);
 
        //~xcb_composite_redirect_window (common->connection, common->window, XCB_COMPOSITE_REDIRECT_MANUAL);
 
        xcb_change_property (common->connection, XCB_PROP_MODE_REPLACE, common->window, XCB_ATOM_WM_NAME, XCB_ATOM_STRING, 8,
-                            (u4) string_length (title), title);
+                            (natural) string_length (title), title);
 
 
-       xcb_create_pixmap (common->connection, common->screen->root_depth, common->pixmap, common->window, (u2) width, (u2 ) height);
+       xcb_create_pixmap (common->connection, common->screen->root_depth, common->pixmap, common->window, (natural_16) width, (natural_16 ) height);
 
        xcb_create_gc (common->connection, common->context, common->pixmap, 0, null);
 
 
        xcb_create_gc (common->connection, common->context, common->pixmap, 0, null);
 
@@ -406,8 +406,8 @@ static v0 common_configure (common_structure * common, u4 width, u4 height, c1 *
        common->frame_begin = nano_time ();
 }
 
        common->frame_begin = nano_time ();
 }
 
-static v0 common_synchronize (common_structure * common, u4 colour) {
-       u4 signal_code [signal_count] = {
+static procedure common_synchronize (common_structure * common, natural colour) {
+       natural signal_code [signal_count] = {
                0,
                38,     56,     54,     40,     26,     41,     42,     43,     31,     44,     45,     46,     58,     57,     32,     33,
                24,     27,     39,     28,     30,     55,     25,     53,     29,     52,     19,     10,     11,     12,     13,     14,
                0,
                38,     56,     54,     40,     26,     41,     42,     43,     31,     44,     45,     46,     58,     57,     32,     33,
                24,     27,     39,     28,     30,     55,     25,     53,     29,     52,     19,     10,     11,     12,     13,     14,
@@ -421,7 +421,7 @@ static v0 common_synchronize (common_structure * common, u4 colour) {
        xcb_generic_event_t * generic_event = xcb_wait_for_event (common->connection);
        //~xcb_generic_event_t * generic_event = null;
 
        xcb_generic_event_t * generic_event = xcb_wait_for_event (common->connection);
        //~xcb_generic_event_t * generic_event = null;
 
-       (v0) colour;
+       (none) colour;
 
        //~for (; ; ) {
                //~generic_event = xcb_poll_for_event (common->connection);
 
        //~for (; ; ) {
                //~generic_event = xcb_poll_for_event (common->connection);
@@ -461,7 +461,7 @@ static v0 common_synchronize (common_structure * common, u4 colour) {
                } break;
                case (XCB_KEY_PRESS): {
                        xcb_key_press_event_t * key_press = (xcb_key_press_event_t *) generic_event;
                } break;
                case (XCB_KEY_PRESS): {
                        xcb_key_press_event_t * key_press = (xcb_key_press_event_t *) generic_event;
-                       for (u4 index = 0; index < signal_count; ++index) {
+                       for (natural index = 0; index < signal_count; ++index) {
                                if (key_press->detail == signal_code [index]) {
                                        common->signal [index] = true;
                                }
                                if (key_press->detail == signal_code [index]) {
                                        common->signal [index] = true;
                                }
@@ -469,7 +469,7 @@ static v0 common_synchronize (common_structure * common, u4 colour) {
                } break;
                case (XCB_KEY_RELEASE): {
                        xcb_key_release_event_t * key_release = (xcb_key_release_event_t *) generic_event;
                } break;
                case (XCB_KEY_RELEASE): {
                        xcb_key_release_event_t * key_release = (xcb_key_release_event_t *) generic_event;
-                       for (u4 index = 0; index < signal_count; ++index) {
+                       for (natural index = 0; index < signal_count; ++index) {
                                if (key_release->detail == signal_code [index]) {
                                        common->signal [index] = false;
                                }
                                if (key_release->detail == signal_code [index]) {
                                        common->signal [index] = false;
                                }
@@ -482,24 +482,24 @@ static v0 common_synchronize (common_structure * common, u4 colour) {
        generic_event = deallocate (generic_event);
        //~}
 
        generic_event = deallocate (generic_event);
        //~}
 
-       for (u4 pixel = 0; pixel < common->window_width * common->window_height; ++pixel) {
-               u4 r = (common->framebuffer [pixel] & 0x00ff0000) >> 16;
-               u4 b = (common->framebuffer [pixel] & 0x000000ff) << 16;
+       for (natural pixel = 0; pixel < common->window_width * common->window_height; ++pixel) {
+               natural r = (common->framebuffer [pixel] & 0x00ff0000) >> 16;
+               natural b = (common->framebuffer [pixel] & 0x000000ff) << 16;
 
                common->framebuffer [pixel] = (common->framebuffer [pixel] & 0xff00ff00) | b | r;
        }
 
 
                common->framebuffer [pixel] = (common->framebuffer [pixel] & 0xff00ff00) | b | r;
        }
 
-       common->image = xcb_image_create_native (common->connection, (u2) common->window_width, (u2) common->window_height,
+       common->image = xcb_image_create_native (common->connection, (natural_16) common->window_width, (natural_16) common->window_height,
                                                XCB_IMAGE_FORMAT_Z_PIXMAP, common->screen->root_depth, common->framebuffer,
                                                XCB_IMAGE_FORMAT_Z_PIXMAP, common->screen->root_depth, common->framebuffer,
-                                               (u4) (common->window_width * common->window_height * sizeof (* common->framebuffer)),
-                                               (u1 *) common->framebuffer);
+                                               (natural) (common->window_width * common->window_height * sizeof (* common->framebuffer)),
+                                               (natural_8 *) common->framebuffer);
 
        xcb_image_put (common->connection, common->pixmap, common->context, common->image, 0, 0, 0);
 
        xcb_image_destroy (common->image);
 
 
        xcb_image_put (common->connection, common->pixmap, common->context, common->image, 0, 0, 0);
 
        xcb_image_destroy (common->image);
 
-       xcb_copy_area (common->connection, common->pixmap, common->window, common->context, 0, 0, 0, 0, (u2) common->window_width,
-                      (u2) common->window_height);
+       xcb_copy_area (common->connection, common->pixmap, common->window, common->context, 0, 0, 0, 0, (natural_16) common->window_width,
+                      (natural_16) common->window_height);
 
        common->framebuffer = allocate (common->window_width * common->window_height * sizeof (* common->framebuffer));
 
 
        common->framebuffer = allocate (common->window_width * common->window_height * sizeof (* common->framebuffer));
 
@@ -512,7 +512,7 @@ static v0 common_synchronize (common_structure * common, u4 colour) {
        }
 
        if (common->global_tick % common_gameplay_framerate == 0) {
        }
 
        if (common->global_tick % common_gameplay_framerate == 0) {
-               common->framerate = (u4) (1000000000ul / common->frame_time);
+               common->framerate = (natural) (1000000000ul / common->frame_time);
        }
 
        ++common->global_tick;
        }
 
        ++common->global_tick;
@@ -524,117 +524,117 @@ static v0 common_synchronize (common_structure * common, u4 colour) {
        common->frame_begin = nano_time ();
 }
 
        common->frame_begin = nano_time ();
 }
 
-static v0 common_render_base (common_structure * common, u4 sprite, s4 x, s4 y, u4 u, u4 v, u4 width, u4 height, f4 scale_x, f4 scale_y, s4 flip_x,
-                                s4 flip_y, u4 upper_left, u4 upper_right, u4 lower_left, u4 lower_right) {
-       (v0) scale_x;
-       (v0) scale_y;
-       (v0) flip_x;
-       (v0) flip_y;
+static procedure common_render_base (common_structure * common, natural sprite, integer x, integer y, natural u, natural v, natural width, natural height, real scale_x, real scale_y, integer flip_x,
+                                integer flip_y, natural upper_left, natural upper_right, natural lower_left, natural lower_right) {
+       (none) scale_x;
+       (none) scale_y;
+       (none) flip_x;
+       (none) flip_y;
        /// FIX TO INTERPOLATE ALL 4 COLOURS
        /// FIX TO INTERPOLATE ALL 4 COLOURS
-       //~(v0) upper_left;
-       (v0) upper_right;
-       (v0) lower_left;
-       (v0) lower_right;
+       //~(none) upper_left;
+       (none) upper_right;
+       (none) lower_left;
+       (none) lower_right;
 
        /// COLOUR INTERPOLATION WITH RBGA-ABGR CONVERSION
 
        /// COLOUR INTERPOLATION WITH RBGA-ABGR CONVERSION
-       u4 interpolate_pixels (u4 pixel, u4 modifier) {
-               u4 r = (((pixel & 0xff000000) >> 24) * ((modifier & 0x000000ff) >>  0)) / 0xff;
-               u4 g = (((pixel & 0x00ff0000) >> 16) * ((modifier & 0x0000ff00) >>  8)) / 0xff;
-               u4 b = (((pixel & 0x0000ff00) >>  8) * ((modifier & 0x00ff0000) >> 16)) / 0xff;
-               u4 a = (((pixel & 0x000000ff) >>  0) * ((modifier & 0xff000000) >> 24)) / 0xff;
+       natural interpolate_pixels (natural pixel, natural modifier) {
+               natural r = (((pixel & 0xff000000) >> 24) * ((modifier & 0x000000ff) >>  0)) / 0xff;
+               natural g = (((pixel & 0x00ff0000) >> 16) * ((modifier & 0x0000ff00) >>  8)) / 0xff;
+               natural b = (((pixel & 0x0000ff00) >>  8) * ((modifier & 0x00ff0000) >> 16)) / 0xff;
+               natural a = (((pixel & 0x000000ff) >>  0) * ((modifier & 0xff000000) >> 24)) / 0xff;
 
                return ((r << 24) | (g << 16) | (b << 8) | a);
        }
 
 
                return ((r << 24) | (g << 16) | (b << 8) | a);
        }
 
-       if ((x + (int) width < 0) || (y + (int) height < 0) || (x > (int) common->window_width) || (y > (int) common->window_height)) return;
+       if ((x + (integer) width < 0) || (y + (integer) height < 0) || (x > (integer) common->window_width) || (y > (integer) common->window_height)) return;
 
 
-       for (u4 vertical = 0; vertical < height; ++vertical) {
+       for (natural vertical = 0; vertical < height; ++vertical) {
                if (vertical + y >= common->window_height) break;
                if (vertical + v >= common->sprite_height [sprite]) break;
 
                if (vertical + y >= common->window_height) break;
                if (vertical + v >= common->sprite_height [sprite]) break;
 
-               for (u4 horizontal = 0; horizontal < width; ++horizontal) {
+               for (natural horizontal = 0; horizontal < width; ++horizontal) {
                        if (horizontal + x >= common->window_width) break;
                        if (horizontal + u >= common->sprite_width [sprite]) break;
 
                        if (horizontal + x >= common->window_width) break;
                        if (horizontal + u >= common->sprite_width [sprite]) break;
 
-                       u4 pixel = common->sprite_data [sprite] [(vertical + v) * common->sprite_width [sprite] + horizontal + u];
-                       u4 at = (y + vertical) * common->window_width + (x + horizontal);
+                       natural pixel = common->sprite_data [sprite] [(vertical + v) * common->sprite_width [sprite] + horizontal + u];
+                       natural at = (y + vertical) * common->window_width + (x + horizontal);
 
                        common->framebuffer [at] = (((pixel & 0xff000000) >> 24) > 0x77) ? interpolate_pixels (pixel, upper_left) : common->framebuffer [at];
                }
        }
 }
 
 
                        common->framebuffer [at] = (((pixel & 0xff000000) >> 24) > 0x77) ? interpolate_pixels (pixel, upper_left) : common->framebuffer [at];
                }
        }
 }
 
-static v0 common_render_rectangle (common_structure * common, s4 x, s4 y, u4 width, u4 height, u4 colour) {
-       common_render_base (common, common->sprite_count - 1, x, y, 0, 0, 16, 16, (float) width / 16, (float) height / 16, 0, 0, colour, colour,
+static procedure common_render_rectangle (common_structure * common, integer x, integer y, natural width, natural height, natural colour) {
+       common_render_base (common, common->sprite_count - 1, x, y, 0, 0, 16, 16, (real) width / 16, (real) height / 16, 0, 0, colour, colour,
                            colour, colour);
 }
 
                            colour, colour);
 }
 
-static v0 common_render_rectangle_gradient_v (common_structure * common, s4 x, s4 y, u4 width, u4 height, u4 colour_up, u4 colour_down) {
-       common_render_base (common, common->sprite_count - 1, x, y, 0, 0, 16, 16, (float) width / 16, (float) height / 16, 0, 0, colour_up, colour_up,
+static procedure common_render_rectangle_gradient_v (common_structure * common, integer x, integer y, natural width, natural height, natural colour_up, natural colour_down) {
+       common_render_base (common, common->sprite_count - 1, x, y, 0, 0, 16, 16, (real) width / 16, (real) height / 16, 0, 0, colour_up, colour_up,
                            colour_down, colour_down);
 }
 
                            colour_down, colour_down);
 }
 
-static v0 common_render_rectangle_gradient_h (common_structure * common, s4 x, s4 y, u4 width, u4 height, u4 colour_left, u4 colour_right) {
-       common_render_base (common, common->sprite_count - 1, x, y, 0, 0, 16, 16, (float) width / 16, (float) height / 16, 0, 0, colour_left,
+static procedure common_render_rectangle_gradient_h (common_structure * common, integer x, integer y, natural width, natural height, natural colour_left, natural colour_right) {
+       common_render_base (common, common->sprite_count - 1, x, y, 0, 0, 16, 16, (real) width / 16, (real) height / 16, 0, 0, colour_left,
                            colour_right, colour_left, colour_right);
 }
 
                            colour_right, colour_left, colour_right);
 }
 
-static v0 common_render_sprite (common_structure * common, u4 sprite, s4 x, s4 y) {
+static procedure common_render_sprite (common_structure * common, natural sprite, integer x, integer y) {
        common_render_base (common, sprite, x, y, 0, 0, common->sprite_width [sprite], common->sprite_height [sprite], 1, 1, 0, 0, 0xffffffffu, 0xffffffffu, 0xffffffffu,
                            0xffffffffu);
 }
 
        common_render_base (common, sprite, x, y, 0, 0, common->sprite_width [sprite], common->sprite_height [sprite], 1, 1, 0, 0, 0xffffffffu, 0xffffffffu, 0xffffffffu,
                            0xffffffffu);
 }
 
-static v0 common_render_sprite_crop (common_structure * common, u4 sprite, s4 x, s4 y, u4 u, u4 v, u4 width, u4 height) {
+static procedure common_render_sprite_crop (common_structure * common, natural sprite, integer x, integer y, natural u, natural v, natural width, natural height) {
        common_render_base (common, sprite, x, y, u, v, width, height, 1, 1, 0, 0, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu);
 }
 
        common_render_base (common, sprite, x, y, u, v, width, height, 1, 1, 0, 0, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu);
 }
 
-static v0 common_render_sprite_colour (common_structure * common, u4 sprite, u4 colour, s4 x, s4 y) {
+static procedure common_render_sprite_colour (common_structure * common, natural sprite, natural colour, integer x, integer y) {
        common_render_base (common, sprite, x, y, 0, 0, common->sprite_width [sprite], common->sprite_height [sprite], 1, 1, 0, 0, colour, colour, colour, colour);
 }
 
        common_render_base (common, sprite, x, y, 0, 0, common->sprite_width [sprite], common->sprite_height [sprite], 1, 1, 0, 0, colour, colour, colour, colour);
 }
 
-static v0 common_render_sprite_crop_colour (common_structure * common, u4 sprite, u4 colour, s4 x, s4 y, u4 u, u4 v, u4 width, u4 height) {
+static procedure common_render_sprite_crop_colour (common_structure * common, natural sprite, natural colour, integer x, integer y, natural u, natural v, natural width, natural height) {
        common_render_base (common, sprite, x, y, u, v, width, height, 1, 1, 0, 0, colour, colour, colour, colour);
 }
 
        common_render_base (common, sprite, x, y, u, v, width, height, 1, 1, 0, 0, colour, colour, colour, colour);
 }
 
-static v0 common_render_sprite_flip (common_structure * common, u4 sprite, s4 x, s4 y, s4 flip_x, s4 flip_y) {
+static procedure common_render_sprite_flip (common_structure * common, natural sprite, integer x, integer y, integer flip_x, integer flip_y) {
        common_render_base (common, sprite, x, y, 0, 0, common->sprite_width [sprite], common->sprite_height [sprite], 1, 1, flip_x, flip_y, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu);
 }
 
        common_render_base (common, sprite, x, y, 0, 0, common->sprite_width [sprite], common->sprite_height [sprite], 1, 1, flip_x, flip_y, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu);
 }
 
-static v0 common_render_sprite_animate (common_structure * common, u4 sprite, s4 x, s4 y, u4 frames, u4 state, u4 states) {
-       u4 width  = common->sprite_width  [sprite] / states;
-       u4 height = common->sprite_height [sprite] / frames;
-       u4 u      = width  * (state                 % states);
-       u4 v      = height * (common->animation_tick % frames);
+static procedure common_render_sprite_animation (common_structure * common, natural sprite, integer x, integer y, natural frames, natural state, natural states) {
+       natural width  = common->sprite_width  [sprite] / states;
+       natural height = common->sprite_height [sprite] / frames;
+       natural u      = width  * (state                 % states);
+       natural v      = height * (common->animation_tick % frames);
 
        common_render_sprite_crop (common, sprite, x, y, u, v, width, height);
 }
 
 
        common_render_sprite_crop (common, sprite, x, y, u, v, width, height);
 }
 
-static v0 common_render_sprite_preview (common_structure * common, u4 sprite, s4 x, s4 y, u4 u, u4 v, u4 width, u4 height, f4 zoom) {
+static procedure common_render_sprite_preview (common_structure * common, natural sprite, integer x, integer y, natural u, natural v, natural width, natural height, real zoom) {
        common_render_base (common, sprite, x, y, u, v, width, height, zoom, zoom, false, false, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu);
 }
 
        common_render_base (common, sprite, x, y, u, v, width, height, zoom, zoom, false, false, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu);
 }
 
-static v0 common_render_sprite_control (common_structure * common, u4 sprite, s4 x, s4 y, u4 u, u4 v, u4 width, u4 height, s4 flip_x, s4 flip_y) {
+static procedure common_render_sprite_control (common_structure * common, natural sprite, integer x, integer y, natural u, natural v, natural width, natural height, integer flip_x, integer flip_y) {
        common_render_base (common, sprite, x, y, u, v, width, height, 1, 1, flip_x, flip_y, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu);
 }
 
        common_render_base (common, sprite, x, y, u, v, width, height, 1, 1, flip_x, flip_y, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu);
 }
 
-static u4 common_render_string_width (common_structure * common, c1 * string, u4 font, f4 scale) {
-       u4 length = 0;
+static natural common_render_string_width (common_structure * common, character * string, natural font, real scale) {
+       natural length = 0;
 
        if (string == null) {
                return (0);
        }
 
 
        if (string == null) {
                return (0);
        }
 
-       for (u4 index = 0; string [index] != '\0'; ++index) {
-               u4 character = common->font_index [font] [string [index] - common->font_begin [font]];
+       for (natural index = 0; string [index] != '\0'; ++index) {
+               natural character = common->font_index [font] [string [index] - common->font_begin [font]];
 
 
-               length += (u4) ((float) common->sprite_width [character] * scale);
+               length += (natural) ((real) common->sprite_width [character] * scale);
        }
 
        return (length);
 }
 
        }
 
        return (length);
 }
 
-static v0 common_render_string (common_structure * common, c1 * string, u4 font, s4 x, s4 y, f4 scale, u4 colour) {
-       s4 offset = x;
+static procedure common_render_string (common_structure * common, character * string, natural font, integer x, integer y, real scale, natural colour) {
+       integer offset = x;
 
        if (string == null) return;
 
 
        if (string == null) return;
 
@@ -642,15 +642,15 @@ static v0 common_render_string (common_structure * common, c1 * string, u4 font,
                font = common->font_count - 1;
        }
 
                font = common->font_count - 1;
        }
 
-       for (u4 index = 0; string [index] != '\0'; ++index) {
-               u4 character = 0;
+       for (natural index = 0; string [index] != '\0'; ++index) {
+               natural character = 0;
 
                if (string [index] == '\t') {
 
                if (string [index] == '\t') {
-                       x += (int) (scale * (float) common_font_tabulator * (float) common->sprite_width [common->font_index [font] [' ' - common->font_begin [font]]]);
+                       x += (integer) (scale * (real) common_font_tabulator * (real) common->sprite_width [common->font_index [font] [' ' - common->font_begin [font]]]);
                        continue;
                } else if (string [index] == '\n') {
                        x  = offset;
                        continue;
                } else if (string [index] == '\n') {
                        x  = offset;
-                       y += (int) (scale * (float) common->sprite_height [common->font_index [font] [' ' - common->font_begin [font]]]);
+                       y += (integer) (scale * (real) common->sprite_height [common->font_index [font] [' ' - common->font_begin [font]]]);
                        continue;
                } else if ((string [index] >= common->font_begin [font]) && (string [index] <= common->font_end [font])) {
                        character = common->font_index [font] [string [index] - common->font_begin [font]];
                        continue;
                } else if ((string [index] >= common->font_begin [font]) && (string [index] <= common->font_end [font])) {
                        character = common->font_index [font] [string [index] - common->font_begin [font]];
@@ -661,6 +661,6 @@ static v0 common_render_string (common_structure * common, c1 * string, u4 font,
                common_render_base (common, character, x, y, 0, 0, common->sprite_width [character], common->sprite_height [character],
                                     scale, scale, 0, 0, colour, colour, colour, colour);
 
                common_render_base (common, character, x, y, 0, 0, common->sprite_width [character], common->sprite_height [character],
                                     scale, scale, 0, 0, colour, colour, colour, colour);
 
-               x += (int) (scale * (float) common->sprite_width [character]);
+               x += (integer) (scale * (real) common->sprite_width [character]);
        }
 }
        }
 }
diff --git a/xop.c b/xop.c
index ea65aa6cc781aae007b1fb82134dd28656d94900..3d30d11dc28de49479351f4f54f01026476b82e8 100755 (executable)
--- a/xop.c
+++ b/xop.c
@@ -1,16 +1,16 @@
 #include <xolatile/xtandard.h>
 
 #include <xolatile/xtandard.h>
 
-static v0 echo_byte (u1 byte) {
+static procedure echo_byte (natural_8 byte) {
        output ("0123456789ABCDEF" + byte / 16, 1);
        output ("0123456789ABCDEF" + byte % 16, 1);
 
        output (" ", 1);
 }
 
        output ("0123456789ABCDEF" + byte / 16, 1);
        output ("0123456789ABCDEF" + byte % 16, 1);
 
        output (" ", 1);
 }
 
-s4 main (s4 argc, c1 * * argv) {
-       s4     file   = 0;
-       u8   size   = 0;
-       u1 * buffer = null;
+integer main (integer argc, character * * argv) {
+       integer     file   = 0;
+       caliber   size   = 0;
+       natural_8 * buffer = null;
 
        if (argc != 2) {
                print ("> xop input_file\n");
 
        if (argc != 2) {
                print ("> xop input_file\n");
@@ -27,7 +27,7 @@ s4 main (s4 argc, c1 * * argv) {
 
        file = file_close (file);
 
 
        file = file_close (file);
 
-       for (u8 offset = 0; offset < size; ++offset) {
+       for (caliber offset = 0; offset < size; ++offset) {
                if (buffer [offset] == 0x90) {
                        echo ("\n");
                }
                if (buffer [offset] == 0x90) {
                        echo ("\n");
                }
index 1ac2e58da709e45c613997110e388a02b6993414..16b71871ca514bce2f079a3f7338719e3309f5e5 100644 (file)
--- a/xormat.h
+++ b/xormat.h
 /// warranty of merchantability or fitness for a particular purpose, because it is pointless. Please see the GNU (Geenoo) General Public License
 /// for more details, if you dare, it is a lot of text that nobody wants to read...
 
 /// warranty of merchantability or fitness for a particular purpose, because it is pointless. Please see the GNU (Geenoo) General Public License
 /// for more details, if you dare, it is a lot of text that nobody wants to read...
 
+/// Description
+///
+/// Xormat, simple and hacky for file formats that I dislike, but everyone else uses them, so I have to use them too. I hate technology. This
+/// more normal library comparing to my other ones, include this header file and use simplistic functions however you want. Don't care too much
+/// about abstractions I introduced here, but keep in mind that you have to link your program correctly, this isn't stb-like library, even tho
+/// it's header only. You should define a macro of which format(s) you want to use before including this file in your project.
+
 #ifdef use_png_library
 #include <xolatile/xormat/png.h>
 #endif
 #ifdef use_png_library
 #include <xolatile/xormat/png.h>
 #endif
 #include <xolatile/xormat/tga.h>
 #endif
 
 #include <xolatile/xormat/tga.h>
 #endif
 
-static v0 * format_image_import (c1 * path, u4 * width, u4 * height) {
-       u4 * data = null;
-
-//~#ifdef use_png_library
-       //~if (data == null) {
-               //~c1 buffer [256] = "";
-
-               //~if (file_exists (string_concatenate (string_copy (buffer, path), ".png")) == true) {
-                       //~data = png_image_import (buffer, width, height);
-               //~}
-       //~}
-//~#endif
-
-//~#ifdef use_jxl_library
-       //~if (data == null) {
-               //~c1 buffer [256] = "";
-
-               //~if (file_exists (string_concatenate (string_copy (buffer, path), ".jxl")) == true) {
-                       //~data = jxl_image_import (buffer, width, height);
-               //~}
-       //~}
-//~#endif
-
-//~#ifdef use_jpg_library
-       //~if (data == null) {
-               //~c1 buffer [256] = "";
-
-               //~if (file_exists (string_concatenate (string_copy (buffer, path), ".jpg")) == true) {
-                       //~data = jpg_image_import (buffer, width, height);
-               //~}
-       //~}
-//~#endif
-
-//~#ifdef use_tga_library
-       //~if (data == null) {
-               //~c1 buffer [256] = "";
-
-               //~if (file_exists (string_concatenate (string_copy (buffer, path), ".tga")) == true) {
-                       //~data = tga_image_import (buffer, width, height);
-               //~}
-       //~}
-//~#endif
+/// Return image raw 32-bit colour data, in RGBA channel format by providing file path to image (with or without extension, if there's no
+/// extension it's load first file found in order declared below) and two pointers to store width and height values. All images will be
+/// implicitly converted into 32-bit RGBA colour, 8 bits per channel.
+///
+/// natural_32 * image = format_image_import ("image.png", & width, & height); /// You can omit '.png' part in file path too.
+
+static natural_32 * format_image_import (character * path, natural * width, natural * height) {
+       natural_32 * data = null;
+
+#ifdef use_png_library
+       if (data == null) {
+               character buffer [256] = "";
+
+               if (file_exists (string_concatenate (string_copy (buffer, path), ".png")) == true) {
+                       data = png_image_import (buffer, width, height);
+               }
+       }
+#endif
+
+#ifdef use_jxl_library
+       if (data == null) {
+               character buffer [256] = "";
+
+               if (file_exists (string_concatenate (string_copy (buffer, path), ".jxl")) == true) {
+                       data = jxl_image_import (buffer, width, height);
+               }
+       }
+#endif
+
+#ifdef use_jpg_library
+       if (data == null) {
+               character buffer [256] = "";
+
+               if (file_exists (string_concatenate (string_copy (buffer, path), ".jpg")) == true) {
+                       data = jpg_image_import (buffer, width, height);
+               }
+       }
+#endif
+
+#ifdef use_tga_library
+       if (data == null) {
+               character buffer [256] = "";
+
+               if (file_exists (string_concatenate (string_copy (buffer, path), ".tga")) == true) {
+                       data = tga_image_import (buffer, width, height);
+               }
+       }
+#endif
 
        if (data == null) {
                switch (file_type (path)) {
 
        if (data == null) {
                switch (file_type (path)) {
index 5316a1caf36831720af4923aa397d59a40111b48..f470949126c3c3bff88c6be5722f2c8fa9f75dfd 100644 (file)
@@ -4,7 +4,7 @@
 #define use_jxl_library
 #endif
 
 #define use_jxl_library
 #endif
 
-static v0 * jxl_image_import (c1 * path, u4 * width, u4 * height) {
+static generic * jxl_image_import (character * path, natural * width, natural * height) {
        JxlDecoder       * decoder     = null;
        JxlBasicInfo       information = { 0 };
        JxlPixelFormat     format      = { 4, JXL_TYPE_UINT8, JXL_NATIVE_ENDIAN, 0 };
        JxlDecoder       * decoder     = null;
        JxlBasicInfo       information = { 0 };
        JxlPixelFormat     format      = { 4, JXL_TYPE_UINT8, JXL_NATIVE_ENDIAN, 0 };
@@ -14,10 +14,10 @@ static v0 * jxl_image_import (c1 * path, u4 * width, u4 * height) {
        fatal_failure (width  == null, "jxl_image_import: Width is null pointer.");
        fatal_failure (height == null, "jxl_image_import: Height is null pointer.");
 
        fatal_failure (width  == null, "jxl_image_import: Width is null pointer.");
        fatal_failure (height == null, "jxl_image_import: Height is null pointer.");
 
-       u8   size        = file_size   (path);
-       u1 * data        = file_record (path);
-       u4  * pixel_array = null;
-       u8   output_size = 0;
+       natural_64   size        = file_size   (path);
+       natural_8  * data        = file_record (path);
+       natural_32 * pixel_array = null;
+       natural_64   output_size = 0;
 
        decoder = JxlDecoderCreate (null);
 
 
        decoder = JxlDecoderCreate (null);
 
index 26577be69b709f8bf4779f8646f0ad1eb3d09d7e..8c15c293ba22274e85257edbb124413c1ff0dca1 100644 (file)
@@ -5,10 +5,9 @@
 #define use_png_library
 #endif
 
 #define use_png_library
 #endif
 
-static v0 * png_image_import (c1 * path, u4 * width, u4 * height) {
-       FILE * file;
-       u4 * data;
-       u4   index;
+static generic * png_image_import (character * path, natural * width, natural * height) {
+       FILE    * file = null;
+       natural * data = null;
 
        png_byte    colour_type  = 0;
        png_byte    bit_depth    = 0;
 
        png_byte    colour_type  = 0;
        png_byte    bit_depth    = 0;
@@ -64,7 +63,7 @@ static v0 * png_image_import (c1 * path, u4 * width, u4 * height) {
 
        row_pointers = allocate ((* height) * sizeof (* row_pointers));
 
 
        row_pointers = allocate ((* height) * sizeof (* row_pointers));
 
-       for (index = 0; index < (* height); ++index) {
+       for (natural index = 0; index < (* height); ++index) {
                row_pointers [index] = allocate (png_get_rowbytes (structure, information));
        }
 
                row_pointers [index] = allocate (png_get_rowbytes (structure, information));
        }
 
@@ -74,7 +73,7 @@ static v0 * png_image_import (c1 * path, u4 * width, u4 * height) {
 
        data = allocate ((* width) * (* height) * sizeof (* data));
 
 
        data = allocate ((* width) * (* height) * sizeof (* data));
 
-       for (index = 0; index < (* height); ++index) {
+       for (natural index = 0; index < (* height); ++index) {
                memory_copy (& data [index * (* width)], row_pointers [index], (* width) * sizeof (* data));
 
                row_pointers [index] = deallocate (row_pointers [index]);
                memory_copy (& data [index * (* width)], row_pointers [index], (* width) * sizeof (* data));
 
                row_pointers [index] = deallocate (row_pointers [index]);
@@ -87,7 +86,7 @@ static v0 * png_image_import (c1 * path, u4 * width, u4 * height) {
        return (data);
 }
 
        return (data);
 }
 
-static v0 png_image_export (c1 * path, u4 * data, u4 width, u4 height) {
+static procedure png_image_export (character * path, natural * data, natural width, natural height) {
        png_image image = { 0 };
 
        fatal_failure (path   == null, "png_image_export: File path is null pointer.");
        png_image image = { 0 };
 
        fatal_failure (path   == null, "png_image_export: File path is null pointer.");
diff --git a/xource.c b/xource.c
new file mode 100644 (file)
index 0000000..4fa78bd
--- /dev/null
+++ b/xource.c
@@ -0,0 +1,21 @@
+/// __  _____  _   _ _ __ ___ ___
+/// \ \/ / _ \| | | | '__/ __/ _ \
+///  >  < (_) | |_| | | | (_|  __/
+/// /_/\_\___/ \__,_|_|  \___\___|
+///
+/// Copyright (c) 1997 - Ognjen 'xolatile' Milan Robovic
+///
+/// xolatile@chud.cyou - xource - Not quite STANDARD GNU/Linux tiny text editor, but it does the work...
+///
+/// This program is free software, free as in freedom and as in free beer, you can redistribute it and/or modify it under the terms of the GNU
+/// General Public License as published by the Free Software Foundation, either version 3 of the License, or any later version if you wish...
+///
+/// This program is distributed in the hope that it will be useful, but it is probably not, and without any warranty, without even the implied
+/// warranty of merchantability or fitness for a particular purpose, because it is pointless. Please see the GNU (Geenoo) General Public License
+/// for more details, if you dare, it is a lot of text that nobody wants to read...
+
+#include <xolatile/xtandard.h>
+
+integer main (integer argc, character * * argv) {
+       return (log_success);
+}
index 06e51c59151619b5a0c52156551576867678e4d6..6a51d2136335a92d1a6929adfb80115866c8bf22 100755 (executable)
--- a/xpengl.h
+++ b/xpengl.h
 #define opengl_font_width  (8)
 #define opengl_font_height (16)
 
 #define opengl_font_width  (8)
 #define opengl_font_height (16)
 
-//~typedef enum {
-       //~opengl_window_fullscreen  = 0x1,
-       //~opengl_window_transparent = 0x2,
-       //~opengl_window_resizable   = 0x4,
-       //~opengl_window_decorated   = 0x8
-//~} opengl_window_flag;
-
 typedef struct {
        GLFWwindow * window;
 
 typedef struct {
        GLFWwindow * window;
 
@@ -53,251 +46,371 @@ typedef struct {
        PFNGLDELETEPROGRAMPROC           glDeleteProgram;
        PFNGLGETUNIFORMLOCATIONPROC      glGetUniformLocation;
        PFNGLBUFFERDATAPROC              glBufferData;
        PFNGLDELETEPROGRAMPROC           glDeleteProgram;
        PFNGLGETUNIFORMLOCATIONPROC      glGetUniformLocation;
        PFNGLBUFFERDATAPROC              glBufferData;
-
-       b4 signal [signal_count];
-       b4 cursor [cursor_count];
-       s4  cursor_x;
-       s4  cursor_y;
-
-       b4      using_precomputed_spritesheet;
-       u8     spritesheet_size;
-       u8     vertex_limit;
-       u8     index_limit;
-       u4      gameplay_framerate;
-       u4      animation_framerate;
-       u4      tab_width;
-       u4      default_font;
-       b4      active;
-       u4      window_width;
-       u4      window_height;
-       f4     pixel_width;
-       f4     pixel_height;
-       u4      framerate;
-       u8     frame_time;
-       u8     frame_begin;
-       u8     frame_end;
-       u4      global_tick;
-       u4      gameplay_tick;
-       u4      animation_tick;
-       b4      freeze_cursor;
-       b4      freeze_signal;
-       u4      vertex_object;
-       u4      vertex_buffer;
-       u4      index_buffer;
-       u4      vertex_shader;
-       u4      fragment_shader;
-       u4      shader_program;
-       u4      spritesheet;
-       u4      vertex_count;
-       u4      index_count;
-       f4   * vertex_array;
-       u4    * index_array;
-       u4      sprite_count;
-       u4      font_count;
-       u4    * spritesheet_data;
-       u4  * * sprite_data;
-       u4    * sprite_width;
-       u4    * sprite_height;
-       f4   * sprite_u;
-       f4   * sprite_v;
-       u4  * * font_index;
-       u4  * * font_width;
-       u4  * * font_height;
-       c1    * font_begin;
-       c1    * font_end;
+       PFNGLGETSHADERIVPROC             glGetShaderiv;
+       PFNGLGETPROGRAMIVPROC            glGetProgramiv;
+
+       boolean signal [signal_count];
+       boolean cursor [cursor_count];
+
+       integer        cursor_x;
+       integer        cursor_y;
+       boolean        active;
+       boolean        very_verbose_spam;
+       natural        window_width;
+       natural        window_height;
+       natural_64     frame_time;
+       natural_64     frame_begin;
+       natural_64     frame_end;
+       natural        framerate;
+       natural        global_tick;
+       natural        gameplay_tick;
+       natural        animation_tick;
+       natural        gameplay_framerate;
+       natural        animation_framerate;
+       natural        sprite_count;
+       natural        font_count;
+       natural    * * sprite_data;
+       natural      * sprite_width;
+       natural      * sprite_height;
+       natural    * * font_index;
+       natural    * * font_width;
+       natural    * * font_height;
+       character    * font_begin;
+       character    * font_end;
+       natural        tab_width;
+       natural        default_font;
+
+       boolean      using_precomputed_spritesheet;
+       real         pixel_width;
+       real         pixel_height;
+       natural      vertex_object;
+       natural      vertex_buffer;
+       natural      index_buffer;
+       natural      vertex_shader;
+       natural      fragment_shader;
+       natural      shader_program;
+       natural      spritesheet;
+       caliber      vertex_limit;
+       caliber      index_limit;
+       natural      vertex_count;
+       natural      index_count;
+       real       * vertex_array;
+       natural    * index_array;
+       natural    * spritesheet_data;
+       real       * sprite_u;
+       real       * sprite_v;
+       caliber      spritesheet_size;
+       boolean      freeze_cursor;
+       boolean      freeze_signal;
 } opengl_structure;
 
 } opengl_structure;
 
-static u4 opengl_sprite_raw_import (opengl_structure * opengl, u4 * data, u4 width, u4 height) {
+static opengl_structure * opengl_initialize (natural gameplay_framerate, natural animation_framerate, boolean use_precomputed_spritesheet,
+                                             natural maximum_quads_on_screen, natural spritesheet_side) {
+       opengl_structure * opengl = allocate (sizeof (* opengl));
+
+       opengl->using_precomputed_spritesheet = use_precomputed_spritesheet;
+
+       opengl->spritesheet_size    = spritesheet_side;
+       opengl->gameplay_framerate  = gameplay_framerate;
+       opengl->animation_framerate = animation_framerate;
+       opengl->vertex_limit        = maximum_quads_on_screen * 32;
+       opengl->index_limit         = maximum_quads_on_screen * 6;
+       opengl->tab_width           = 4;
+       opengl->default_font        = ~0u;
+
+       print ("/s Initialized OpenGL renderer.\n");
+
+       return (opengl);
+}
+
+static opengl_structure * opengl_deinitialize (opengl_structure * opengl) {
+       opengl->active = false;
+
+       for (natural index = 0; index < opengl->font_count; ++index) {
+               opengl->font_index  [index] = deallocate (opengl->font_index  [index]);
+               opengl->font_width  [index] = deallocate (opengl->font_width  [index]);
+               opengl->font_height [index] = deallocate (opengl->font_height [index]);
+       }
+
+       opengl->font_index  = deallocate (opengl->font_index);
+       opengl->font_width  = deallocate (opengl->font_width);
+       opengl->font_height = deallocate (opengl->font_height);
+       opengl->font_begin  = deallocate (opengl->font_begin);
+       opengl->font_end    = deallocate (opengl->font_end);
+
+       opengl->sprite_width  = deallocate (opengl->sprite_width);
+       opengl->sprite_height = deallocate (opengl->sprite_height);
+       opengl->sprite_u      = deallocate (opengl->sprite_u);
+       opengl->sprite_v      = deallocate (opengl->sprite_v);
+
+       if (opengl->using_precomputed_spritesheet == false) {
+               opengl->spritesheet_data = deallocate (opengl->spritesheet_data);
+       }
+
+       opengl->vertex_array = deallocate (opengl->vertex_array);
+       opengl->index_array  = deallocate (opengl->index_array);
+
+       glDeleteTextures (1, & opengl->spritesheet);
+
+       opengl->glDeleteProgram (opengl->shader_program);
+       opengl->glDeleteShader  (opengl->fragment_shader);
+       opengl->glDeleteShader  (opengl->vertex_shader);
+
+       opengl->glDeleteBuffers      (1, & opengl->index_buffer);
+       opengl->glDeleteBuffers      (1, & opengl->vertex_buffer);
+       opengl->glDeleteVertexArrays (1, & opengl->vertex_object);
+
+       glfwDestroyWindow (opengl->window);
+
+       glfwTerminate ();
+
+       print ("/s Deinitialized OpenGL renderer.\n");
+
+       return (deallocate (opengl));
+}
+
+static natural opengl_sprite_raw_import (opengl_structure * opengl, natural * data, natural width, natural height) {
+       natural current = ++opengl->sprite_count - 1;
+
        fatal_failure (opengl->active == true, "opengl_sprite_raw_import: OpenGL renderer is already initialized.");
        fatal_failure (data           == null, "opengl_sprite_raw_import: Data is null pointer.");
        fatal_failure (width          == 0,    "opengl_sprite_raw_import: Font image width is zero.");
        fatal_failure (height         == 0,    "opengl_sprite_raw_import: Font image height is zero.");
 
        fatal_failure (opengl->active == true, "opengl_sprite_raw_import: OpenGL renderer is already initialized.");
        fatal_failure (data           == null, "opengl_sprite_raw_import: Data is null pointer.");
        fatal_failure (width          == 0,    "opengl_sprite_raw_import: Font image width is zero.");
        fatal_failure (height         == 0,    "opengl_sprite_raw_import: Font image height is zero.");
 
-       ++opengl->sprite_count;
-
        opengl->sprite_data   = reallocate (opengl->sprite_data,   opengl->sprite_count * sizeof (* opengl->sprite_data));
        opengl->sprite_width  = reallocate (opengl->sprite_width,  opengl->sprite_count * sizeof (* opengl->sprite_width));
        opengl->sprite_height = reallocate (opengl->sprite_height, opengl->sprite_count * sizeof (* opengl->sprite_height));
        opengl->sprite_u      = reallocate (opengl->sprite_u,      opengl->sprite_count * sizeof (* opengl->sprite_u));
        opengl->sprite_v      = reallocate (opengl->sprite_v,      opengl->sprite_count * sizeof (* opengl->sprite_v));
 
        opengl->sprite_data   = reallocate (opengl->sprite_data,   opengl->sprite_count * sizeof (* opengl->sprite_data));
        opengl->sprite_width  = reallocate (opengl->sprite_width,  opengl->sprite_count * sizeof (* opengl->sprite_width));
        opengl->sprite_height = reallocate (opengl->sprite_height, opengl->sprite_count * sizeof (* opengl->sprite_height));
        opengl->sprite_u      = reallocate (opengl->sprite_u,      opengl->sprite_count * sizeof (* opengl->sprite_u));
        opengl->sprite_v      = reallocate (opengl->sprite_v,      opengl->sprite_count * sizeof (* opengl->sprite_v));
 
-       opengl->sprite_data   [opengl->sprite_count - 1] = data;
-       opengl->sprite_width  [opengl->sprite_count - 1] = width;
-       opengl->sprite_height [opengl->sprite_count - 1] = height;
-       opengl->sprite_u      [opengl->sprite_count - 1] = 0;
-       opengl->sprite_v      [opengl->sprite_count - 1] = 0;
+       opengl->sprite_data   [current] = data;
+       opengl->sprite_width  [current] = width;
+       opengl->sprite_height [current] = height;
+       opengl->sprite_u      [current] = 0;
+       opengl->sprite_v      [current] = 0;
 
 
-       return (opengl->sprite_count - 1);
+       return (current);
 }
 
 }
 
-static u4 opengl_font_raw_import (opengl_structure * opengl, u4 * data, u4 image_width, c1 begin, c1 end, u4 empty) {
-       u4   pointer = 0;
-       u4   width   = 0;
-       u4   height  = 0;
+static natural opengl_font_raw_import (opengl_structure * opengl, natural * data, natural image_width, natural image_height, character begin,
+                                       character end, natural separator_colour) {
+       natural current = ++opengl->font_count - 1;
+
+       natural   pointer     = 0;
+       natural   width       = 0;
+       natural   height      = 0;
+       natural   point_count = 0;
+       natural * point_array = null;
 
        fatal_failure (opengl->active == true, "opengl_font_raw_import: OpenGL renderer is already initialized.");
        fatal_failure (data           == null, "opengl_font_raw_import: Data is null pointer.");
        fatal_failure (image_width    == 0,    "opengl_font_raw_import: Font image width is zero.");
 
        fatal_failure (opengl->active == true, "opengl_font_raw_import: OpenGL renderer is already initialized.");
        fatal_failure (data           == null, "opengl_font_raw_import: Data is null pointer.");
        fatal_failure (image_width    == 0,    "opengl_font_raw_import: Font image width is zero.");
+       fatal_failure (image_height   == 0,    "opengl_font_raw_import: Font image height is zero.");
        fatal_failure (begin          >= end,  "opengl_font_raw_import: Font character range is inverted.");
 
        fatal_failure (begin          >= end,  "opengl_font_raw_import: Font character range is inverted.");
 
-       ++opengl->font_count;
-
        opengl->font_index  = reallocate (opengl->font_index,  opengl->font_count * sizeof (* opengl->font_index));
        opengl->font_width  = reallocate (opengl->font_width,  opengl->font_count * sizeof (* opengl->font_width));
        opengl->font_height = reallocate (opengl->font_height, opengl->font_count * sizeof (* opengl->font_height));
        opengl->font_begin  = reallocate (opengl->font_begin,  opengl->font_count * sizeof (* opengl->font_begin));
        opengl->font_end    = reallocate (opengl->font_end,    opengl->font_count * sizeof (* opengl->font_end));
 
        opengl->font_index  = reallocate (opengl->font_index,  opengl->font_count * sizeof (* opengl->font_index));
        opengl->font_width  = reallocate (opengl->font_width,  opengl->font_count * sizeof (* opengl->font_width));
        opengl->font_height = reallocate (opengl->font_height, opengl->font_count * sizeof (* opengl->font_height));
        opengl->font_begin  = reallocate (opengl->font_begin,  opengl->font_count * sizeof (* opengl->font_begin));
        opengl->font_end    = reallocate (opengl->font_end,    opengl->font_count * sizeof (* opengl->font_end));
 
-       opengl->font_begin [opengl->font_count - 1] = begin;
-       opengl->font_end   [opengl->font_count - 1] = end;
+       opengl->font_begin [current] = begin;
+       opengl->font_end   [current] = end;
 
 
-       opengl->font_index  [opengl->font_count - 1] = allocate ((u8) (end - begin + 1) * sizeof (* * opengl->font_index));
-       opengl->font_width  [opengl->font_count - 1] = allocate ((u8) (end - begin + 1) * sizeof (* * opengl->font_width));
-       opengl->font_height [opengl->font_count - 1] = allocate ((u8) (end - begin + 1) * sizeof (* * opengl->font_height));
+       opengl->font_index  [current] = allocate ((caliber) (end - begin + 1) * sizeof (* * opengl->font_index));
+       opengl->font_width  [current] = allocate ((caliber) (end - begin + 1) * sizeof (* * opengl->font_width));
+       opengl->font_height [current] = allocate ((caliber) (end - begin + 1) * sizeof (* * opengl->font_height));
 
 
-       for (c1 index = begin; index <= end; ++index) {
-               for (          ; data [pointer]                        == empty; ++pointer);
-               for (width  = 0; data [pointer + width]                != empty; ++width);
-               for (height = 0; data [pointer + height * image_width] != empty; ++height);
+       point_array = allocate ((caliber) (end - begin + 1) * sizeof (* point_array));
 
 
-               u4 * buffer = allocate (width * height * sizeof (* buffer));
+       if (separator_colour == 0x00000000u) {
+               separator_colour = data [0];
+       }
 
 
-               for (u4 y = 0; y < height; ++y) {
-                       for (u4 x = 0; x < width; ++x) {
-                               buffer [y * width + x] = data [pointer + (y * image_width) + x];
+       for (natural y = 0; y < image_height - 1; ++y) {
+               for (natural x = 0; x < image_width - 1; ++x) {
+                       if ((data [(y + 0) * image_width + (x + 0)] == separator_colour)
+                       &&  (data [(y + 1) * image_width + (x + 0)] == separator_colour)
+                       &&  (data [(y + 0) * image_width + (x + 1)] == separator_colour)
+                       &&  (data [(y + 1) * image_width + (x + 1)] == 0x00000000u)) {
+                               ++point_count;
+                               point_array [point_count - 1] = (y + 1) * image_width + (x + 1);
                        }
                }
                        }
                }
+       }
+
+       if (point_count != end - begin + 1) {
+               print ("/w Mismatch between font character points:\n");
+               print ("/c --- Hardcoded expected number of character points: %i\n", end - begin + 1);
+               print ("/c --- Algorithm found number of character points: %i\n", point_count);
+       }
 
 
-               opengl->font_index  [opengl->font_count - 1] [index - begin] = opengl_sprite_raw_import (opengl, buffer, width, height);
-               opengl->font_width  [opengl->font_count - 1] [index - begin] = width;
-               opengl->font_height [opengl->font_count - 1] [index - begin] = height;
+       for (natural index = 0; index < end - begin + 1; ++index) {
+               for (width  = 0; data [point_array [index] + width]                != separator_colour; ++width);
+               for (height = 0; data [point_array [index] + height * image_width] != separator_colour; ++height);
 
 
-               pointer += width;
+               fatal_failure (width  == 0, "opengl_font_raw_import: Font width is zero.");
+               fatal_failure (height == 0, "opengl_font_raw_import: Font height is zero.");
 
 
-               for (; data [pointer] == empty; ++pointer);
+               natural * buffer = allocate (width * height * sizeof (* buffer));
 
 
-               if (pointer % image_width == 2) {
-                       pointer += height * image_width;
+               for (natural y = 0; y < height; ++y) {
+                       for (natural x = 0; x < width; ++x) {
+                               buffer [y * width + x] = data [point_array [index] + y * image_width + x];
+                       }
                }
                }
+
+               opengl->font_index  [current] [index] = opengl_sprite_raw_import (opengl, buffer, width, height);
+               opengl->font_width  [current] [index] = width;
+               opengl->font_height [current] [index] = height;
        }
 
        }
 
-       return (opengl->font_count - 1);
+       point_array = deallocate (point_array);
+
+       return (current);
 }
 
 }
 
-static u4 opengl_sprite_import (opengl_structure * opengl, c1 * path) {
-       u4   width  = 0;
-       u4   height = 0;
-       u4 * data   = null;
+static natural opengl_sprite_import (opengl_structure * opengl, character * path) {
+       natural   width  = 0;
+       natural   height = 0;
+       natural * data   = null;
 
 
-       c1 buffer [256] = "";
+       fatal_failure (opengl->active == true, "opengl_sprite_import: OpenGL renderer is already initialized.");
 
        if (opengl->using_precomputed_spritesheet == true) {
                return (++opengl->sprite_count - 1);
        }
 
 
        if (opengl->using_precomputed_spritesheet == true) {
                return (++opengl->sprite_count - 1);
        }
 
-#ifdef use_png_library
-       if (file_exists (string_concatenate (string_copy (buffer, path), ".png")) == true) {
-               data = png_image_import (buffer, & width, & height);
-       } else {
-               print ("/w File '/3%s/-' doesn't exist.\n", buffer);
-       }
-#endif
+       data = format_image_import (path, & width, & height);
 
 
-#ifdef use_jxl_library
-       if ((data == null) && (file_exists (string_concatenate (string_copy (buffer, path), ".jxl")) == true)) {
-               data = jxl_image_import (buffer, & width, & height);
-       }
-#endif
+       conditional_print ((data == null) || (width == 0) || (height == 0), "/f Failed to import sprite '%s'.", path);
 
 
-       fatal_failure (data == null, "opengl_sprite_import: Unsupported image format.");
+       conditional_print (opengl->very_verbose_spam == true, "/c Importing sprite '/0/B%s/-' of size %i x %i.\n", path, width, height);
 
        return (opengl_sprite_raw_import (opengl, data, width, height));
 }
 
 
        return (opengl_sprite_raw_import (opengl, data, width, height));
 }
 
-static u4 opengl_font_import (opengl_structure * opengl, c1 * path, c1 begin, c1 end, u4 colour) {
-       u4   width  = 0;
-       u4   height = 0;
-       u4   result = 0;
-       u4 * data   = null;
+static natural opengl_font_import (opengl_structure * opengl, character * path, character begin, character end, natural colour) {
+       natural   width  = 0;
+       natural   height = 0;
+       natural   result = 0;
+       natural * data   = null;
 
 
-       c1 buffer [256] = "";
+       character buffer [256] = "";
+
+       fatal_failure (opengl->active == true, "opengl_font_import: OpenGL renderer is already initialized.");
 
        if (opengl->using_precomputed_spritesheet == true) {
 
        if (opengl->using_precomputed_spritesheet == true) {
-               for (c1 index = begin; index <= end; ++index) {
+               for (character index = begin; index <= end; ++index) {
                        opengl->font_index [opengl->font_count] [index - begin] = ++opengl->sprite_count - 1;
                }
 
                return (++opengl->font_count - 1);
        }
 
                        opengl->font_index [opengl->font_count] [index - begin] = ++opengl->sprite_count - 1;
                }
 
                return (++opengl->font_count - 1);
        }
 
-#ifdef use_png_library
-       if (file_exists (string_concatenate (string_copy (buffer, path), ".png")) == true) {
-               data = png_image_import (buffer, & width, & height);
-       } else {
-               print ("/w File '/3%s/-' doesn't exist.\n", buffer);
-       }
-#endif
-
-#ifdef use_jxl_library
-       if ((data == null) && (file_exists (string_concatenate (string_copy (buffer, path), ".jxl")) == true)) {
-               data = jxl_image_import (buffer, & width, & height);
-       }
-#endif
+       data = format_image_import (path, & width, & height);
 
 
-       fatal_failure (data == null, "opengl_font_import: Unsupported image format.");
+       conditional_print (opengl->very_verbose_spam == true, "/c Importing font '/0/B%s/-' of size %i x %i, in range from (%i) to (%i).\n",
+                          path, width, height, begin, end);
 
 
-       result = opengl_font_raw_import (opengl, data, width, begin, end, colour);
+       result = opengl_font_raw_import (opengl, data, width, height, begin, end, colour);
 
        data = deallocate (data);
 
        return (result);
 }
 
 
        data = deallocate (data);
 
        return (result);
 }
 
-static u4 opengl_sprite_width (opengl_structure * opengl, u4 sprite) {
-       return (opengl->sprite_width [sprite]);
+static natural opengl_sprite_width (opengl_structure * opengl, natural sprite) {
+       return ((sprite >= opengl->sprite_count) ? 0 : opengl->sprite_width [sprite]);
 }
 
 }
 
-static u4 opengl_sprite_height (opengl_structure * opengl, u4 sprite) {
-       return (opengl->sprite_height [sprite]);
+static natural opengl_sprite_height (opengl_structure * opengl, natural sprite) {
+       return ((sprite >= opengl->sprite_count) ? 0 : opengl->sprite_height [sprite]);
 }
 
 }
 
-static u4 opengl_center_x (opengl_structure * opengl, u4 size) {
-       return ((opengl->window_width - size) / 2);
-}
+static natural opengl_character_width (opengl_structure * opengl, character data, natural font, real scale) {
+       if (font == ~ 0u) {
+               font = opengl->font_count - 1;
+       }
 
 
-static u4 opengl_center_y (opengl_structure * opengl, u4 size) {
-       return ((opengl->window_height - size) / 2);
+       if ((data < opengl->font_begin [font]) || (data > opengl->font_end [font])) {
+               return (0);
+       } else {
+               natural index = opengl->font_index [font] [data - opengl->font_begin [font]];
+
+               return ((natural) (scale * (real) opengl->sprite_width [index]));
+       }
 }
 
 }
 
-static b4 opengl_cursor_inside (opengl_structure * opengl, s4 x, s4 y, u4 width, u4 height) {
-       return ((opengl->cursor_x > x)               &&
-               (opengl->cursor_y > y)               &&
-               (opengl->cursor_x < x + (int) width) &&
-               (opengl->cursor_y < y + (int) height));
+static natural opengl_character_height (opengl_structure * opengl, character data, natural font, real scale) {
+       if (font == ~ 0u) {
+               font = opengl->font_count - 1;
+       }
+
+       if ((data < opengl->font_begin [font]) || (data > opengl->font_end [font])) {
+               return (0);
+       } else {
+               natural index = opengl->font_index [font] [data - opengl->font_begin [font]];
+
+               return ((natural) (scale * (real) opengl->sprite_height [index]));
+       }
 }
 
 }
 
-static b4 opengl_cursor_left_click (opengl_structure * opengl, s4 x, s4 y, u4 width, u4 height) {
-       if (opengl->cursor [cursor_left] == true) {
-               opengl->freeze_cursor = true;
+static natural opengl_string_width (opengl_structure * opengl, character * string, natural font, real scale) {
+       natural width = 0;
+       natural match = 0;
 
 
-               return (opengl_cursor_inside (opengl, x, y, width, height) == true);
+       if (string == null) {
+               return (0);
        }
 
        }
 
-       return (false);
+       for (natural index = 0; string [index] != '\0'; ++index) {
+               if (string [index] == '\t') {
+                       width += opengl->tab_width * opengl_character_width (opengl, ' ', font, scale);
+               } else if (string [index] == '\n') {
+                       match = maximum_macro (width, match);
+                       width = 0;
+               } else {
+                       width += opengl_character_width (opengl, string [index], font, scale);
+               }
+       }
+
+       return (maximum_macro (width, match));
 }
 
 }
 
-static b4 opengl_cursor_right_click (opengl_structure * opengl, s4 x, s4 y, u4 width, u4 height) {
-       if (opengl->cursor [cursor_right]) {
-               opengl->freeze_cursor = true;
+static natural opengl_string_height (opengl_structure * opengl, character * string, natural font, real scale) {
+       natural height = opengl_character_height (opengl, ' ', font, scale);
+
+       if ((string == null) || (string [0] == '\0')) {
+               return (0);
+       }
 
 
-               return (opengl_cursor_inside (opengl, x, y, width, height));
+       for (natural index = 0; string [index] != '\0'; ++index) {
+               if (string [index] == '\n') {
+                       height += opengl_character_height (opengl, ' ', font, scale);
+               }
        }
 
        }
 
-       return (false);
+       return (height);
 }
 
 }
 
-static v0 opengl_import_spritesheet (opengl_structure * opengl, c1 * data_file) {
-       s4 file = file_open (data_file, file_flag_read);
+static natural opengl_center_x (opengl_structure * opengl, natural size) {
+       return ((opengl->window_width - size) / 2);
+}
+
+static natural opengl_center_y (opengl_structure * opengl, natural size) {
+       return ((opengl->window_height - size) / 2);
+}
+
+static boolean opengl_cursor_inside (opengl_structure * opengl, integer x, integer y, natural width, natural height) {
+       return ((opengl->cursor_x > x) &&
+               (opengl->cursor_y > y) &&
+               (opengl->cursor_x < x + (integer) width) &&
+               (opengl->cursor_y < y + (integer) height));
+}
+
+static procedure opengl_import_spritesheet (opengl_structure * opengl, character * data_file) {
+       integer file = file_open (data_file, file_flag_read);
 
        fatal_failure (opengl->active == true, "opengl_import_spritesheet: OpenGL renderer is already initialized.");
 
 
        fatal_failure (opengl->active == true, "opengl_import_spritesheet: OpenGL renderer is already initialized.");
 
@@ -326,14 +439,14 @@ static v0 opengl_import_spritesheet (opengl_structure * opengl, c1 * data_file)
        file_read (file, opengl->font_begin, opengl->font_count * sizeof (* opengl->font_begin));
        file_read (file, opengl->font_end,   opengl->font_count * sizeof (* opengl->font_end));
 
        file_read (file, opengl->font_begin, opengl->font_count * sizeof (* opengl->font_begin));
        file_read (file, opengl->font_end,   opengl->font_count * sizeof (* opengl->font_end));
 
-       for (u4 index = 0; index < opengl->font_count; ++index) {
-               u4 range = (u4) (opengl->font_end [index] - opengl->font_begin [index]) + 1;
+       for (natural index = 0; index < opengl->font_count; ++index) {
+               natural range = (natural) (opengl->font_end [index] - opengl->font_begin [index]) + 1;
 
                opengl->font_index  [index] = allocate (range * sizeof (* * opengl->font_index));
                opengl->font_width  [index] = allocate (range * sizeof (* * opengl->font_width));
                opengl->font_height [index] = allocate (range * sizeof (* * opengl->font_height));
 
 
                opengl->font_index  [index] = allocate (range * sizeof (* * opengl->font_index));
                opengl->font_width  [index] = allocate (range * sizeof (* * opengl->font_width));
                opengl->font_height [index] = allocate (range * sizeof (* * opengl->font_height));
 
-               for (u4 subindex = 0; subindex < range; ++subindex) {
+               for (natural subindex = 0; subindex < range; ++subindex) {
                        file_read (file, & opengl->font_index  [index] [subindex], sizeof (* * opengl->font_index));
                        file_read (file, & opengl->font_width  [index] [subindex], sizeof (* * opengl->font_width));
                        file_read (file, & opengl->font_height [index] [subindex], sizeof (* * opengl->font_height));
                        file_read (file, & opengl->font_index  [index] [subindex], sizeof (* * opengl->font_index));
                        file_read (file, & opengl->font_width  [index] [subindex], sizeof (* * opengl->font_width));
                        file_read (file, & opengl->font_height [index] [subindex], sizeof (* * opengl->font_height));
@@ -344,10 +457,12 @@ static v0 opengl_import_spritesheet (opengl_structure * opengl, c1 * data_file)
 
        opengl->sprite_count = 0;
        opengl->font_count   = 0;
 
        opengl->sprite_count = 0;
        opengl->font_count   = 0;
+
+       print ("/c Imported internal binary data of OpenGL spritesheet.\n");
 }
 
 }
 
-static v0 opengl_export_spritesheet (opengl_structure * opengl, c1 * data_file) {
-       s4 file = file_open (data_file, file_flag_write | file_flag_create | file_flag_truncate);
+static procedure opengl_export_spritesheet (opengl_structure * opengl, character * data_file) {
+       integer file = file_open (data_file, file_flag_write | file_flag_create | file_flag_truncate);
 
        fatal_failure (opengl->spritesheet_data == null, "opengl_export_spritesheet: OpenGL renderer can't access spritesheet data.");
 
 
        fatal_failure (opengl->spritesheet_data == null, "opengl_export_spritesheet: OpenGL renderer can't access spritesheet data.");
 
@@ -365,8 +480,8 @@ static v0 opengl_export_spritesheet (opengl_structure * opengl, c1 * data_file)
        file_write (file, opengl->font_begin, opengl->font_count * sizeof (* opengl->font_begin));
        file_write (file, opengl->font_end,   opengl->font_count * sizeof (* opengl->font_end));
 
        file_write (file, opengl->font_begin, opengl->font_count * sizeof (* opengl->font_begin));
        file_write (file, opengl->font_end,   opengl->font_count * sizeof (* opengl->font_end));
 
-       for (u4 index = 0; index < opengl->font_count; ++index) {
-               for (u4 subindex = 0; subindex < (u4) (opengl->font_end [index] - opengl->font_begin [index]) + 1; ++subindex) {
+       for (natural index = 0; index < opengl->font_count; ++index) {
+               for (natural subindex = 0; subindex < (natural) (opengl->font_end [index] - opengl->font_begin [index]) + 1; ++subindex) {
                        file_write (file, & opengl->font_index  [index] [subindex], sizeof (* * opengl->font_index));
                        file_write (file, & opengl->font_width  [index] [subindex], sizeof (* * opengl->font_width));
                        file_write (file, & opengl->font_height [index] [subindex], sizeof (* * opengl->font_height));
                        file_write (file, & opengl->font_index  [index] [subindex], sizeof (* * opengl->font_index));
                        file_write (file, & opengl->font_width  [index] [subindex], sizeof (* * opengl->font_width));
                        file_write (file, & opengl->font_height [index] [subindex], sizeof (* * opengl->font_height));
@@ -375,82 +490,11 @@ static v0 opengl_export_spritesheet (opengl_structure * opengl, c1 * data_file)
 
        file = file_close (file);
 
 
        file = file_close (file);
 
-       print ("/c Exported internal binary data of OpenGL spritesheet.");
-}
-
-static opengl_structure * opengl_initialize (u4 gameplay_framerate, u4 animation_framerate, b4 use_precomputed_spritesheet,
-                                             u4 maximum_quads_on_screen, u4 spritesheet_side) {
-       opengl_structure * opengl = allocate (sizeof (* opengl));
-
-       opengl->using_precomputed_spritesheet = use_precomputed_spritesheet;
-
-       opengl->spritesheet_size    = spritesheet_side;
-       opengl->gameplay_framerate  = gameplay_framerate;
-       opengl->animation_framerate = animation_framerate;
-       opengl->vertex_limit        = maximum_quads_on_screen * 32;
-       opengl->index_limit         = maximum_quads_on_screen * 6;
-       opengl->tab_width           = 4;
-       opengl->default_font        = ~0u;
-
-       if (use_precomputed_spritesheet == true) {
-               print ("[/0Comment/-] Importing spritesheet image and information...\n");
-
-               opengl_import_spritesheet (opengl, "binary/spritesheet.bin");
-       }
-
-       print ("[/2Success/-] Initialized OpenGL renderer.\n");
-
-       return (opengl);
-}
-
-static opengl_structure * opengl_deinitialize (opengl_structure * opengl) {
-       opengl->active = false;
-
-       for (u4 index = 0; index < opengl->font_count; ++index) {
-               opengl->font_index  [index] = deallocate (opengl->font_index  [index]);
-               opengl->font_width  [index] = deallocate (opengl->font_width  [index]);
-               opengl->font_height [index] = deallocate (opengl->font_height [index]);
-       }
-
-       opengl->font_index  = deallocate (opengl->font_index);
-       opengl->font_width  = deallocate (opengl->font_width);
-       opengl->font_height = deallocate (opengl->font_height);
-       opengl->font_begin  = deallocate (opengl->font_begin);
-       opengl->font_end    = deallocate (opengl->font_end);
-
-       opengl->sprite_width  = deallocate (opengl->sprite_width);
-       opengl->sprite_height = deallocate (opengl->sprite_height);
-       opengl->sprite_u      = deallocate (opengl->sprite_u);
-       opengl->sprite_v      = deallocate (opengl->sprite_v);
-
-       if (opengl->using_precomputed_spritesheet == false) {
-               opengl->spritesheet_data = deallocate (opengl->spritesheet_data);
-       }
-
-       opengl->vertex_array = deallocate (opengl->vertex_array);
-       opengl->index_array  = deallocate (opengl->index_array);
-
-       glDeleteTextures (1, & opengl->spritesheet);
-
-       opengl->glDeleteProgram (opengl->shader_program);
-       opengl->glDeleteShader  (opengl->fragment_shader);
-       opengl->glDeleteShader  (opengl->vertex_shader);
-
-       opengl->glDeleteBuffers      (1, & opengl->index_buffer);
-       opengl->glDeleteBuffers      (1, & opengl->vertex_buffer);
-       opengl->glDeleteVertexArrays (1, & opengl->vertex_object);
-
-       glfwDestroyWindow (opengl->window);
-
-       glfwTerminate ();
-
-       print ("[/2Success/-] Deinitialized OpenGL renderer.\n");
-
-       return (deallocate (opengl));
+       print ("/c Exported internal binary data of OpenGL spritesheet.\n");
 }
 
 }
 
-static v0 opengl_configure (opengl_structure * opengl, u4 window_width, u4 window_height, c1 * window_title) {
-       u8 font_bitmap [190] = {
+static procedure opengl_configure (opengl_structure * opengl, natural window_width, natural window_height, character * window_title) {
+       natural_64 font_bitmap [190] = {
                0x0000000000000000, 0x0000000000000000, 0x0000101010101010, 0x1000101000000000, 0x0024242400000000, 0x0000000000000000,
                0x00002424247e2424, 0x7e24242400000000, 0x0010107c9290907c, 0x1212927c10100000, 0x0000649468081010, 0x202c524c00000000,
                0x000018242418304a, 0x4444443a00000000, 0x0010101000000000, 0x0000000000000000, 0x0000081020202020, 0x2020100800000000,
                0x0000000000000000, 0x0000000000000000, 0x0000101010101010, 0x1000101000000000, 0x0024242400000000, 0x0000000000000000,
                0x00002424247e2424, 0x7e24242400000000, 0x0010107c9290907c, 0x1212927c10100000, 0x0000649468081010, 0x202c524c00000000,
                0x000018242418304a, 0x4444443a00000000, 0x0010101000000000, 0x0000000000000000, 0x0000081020202020, 0x2020100800000000,
@@ -485,60 +529,63 @@ static v0 opengl_configure (opengl_structure * opengl, u4 window_width, u4 windo
                0x0000300808080408, 0x0808083000000000, 0x000000000062928c, 0x0000000000000000
        };
 
                0x0000300808080408, 0x0808083000000000, 0x000000000062928c, 0x0000000000000000
        };
 
-       c1 * vertex_shader =
-               "# version 330 core\n"
+       const character * vertex_shader =
+               "#version 330 core\n"
                "in  vec2 vertex_xy;\n"
                "in  vec2 vertex_uv;\n"
                "in  vec4 vertex_rgba;\n"
                "out vec2 fragment_uv;\n"
                "out vec4 fragment_rgba;\n"
                "in  vec2 vertex_xy;\n"
                "in  vec2 vertex_uv;\n"
                "in  vec4 vertex_rgba;\n"
                "out vec2 fragment_uv;\n"
                "out vec4 fragment_rgba;\n"
-               "v0 main () {\n"
-               "  gl_Position   = vec4 (vertex_xy, 0, 1);\n"
-               "  fragment_uv   = vertex_uv;\n"
-               "  fragment_rgba = vertex_rgba;\n"
+               "void main () {\n"
+               "       gl_Position   = vec4 (vertex_xy, 0, 1);\n"
+               "       fragment_uv   = vertex_uv;\n"
+               "       fragment_rgba = vertex_rgba;\n"
                "}\n";
 
                "}\n";
 
-       c1 * fragment_shader =
-               "# version 330 core\n"
+       const character * fragment_shader =
+               "#version 330 core\n"
                "uniform sampler2D texture_p;\n"
                "in  vec2 fragment_uv;\n"
                "in  vec4 fragment_rgba;\n"
                "out vec4 data;\n"
                "uniform sampler2D texture_p;\n"
                "in  vec2 fragment_uv;\n"
                "in  vec4 fragment_rgba;\n"
                "out vec4 data;\n"
-               "v0 main () {\n"
-               "  data = texture (texture_p, fragment_uv) * fragment_rgba;\n"
+               "void main () {\n"
+               "       data = texture (texture_p, fragment_uv) * fragment_rgba;\n"
                "}\n";
 
                "}\n";
 
-       u4 * dumb_buffer = null;
-       u4 * order       = null;
+       natural * dumb_buffer = null;
+       natural * order       = null;
 
 
-       u4 xy_attribute   = 0;
-       u4 uv_attribute   = 0;
-       u4 rgba_attribute = 0;
-       //~u4 flags          = 0;
+       natural xy_attribute   = 0;
+       natural uv_attribute   = 0;
+       natural rgba_attribute = 0;
 
 
-       u4 u = 0;
-       u4 v = 0;
+       natural u = 0;
+       natural v = 0;
+
+       integer status = GL_NO_ERROR;
 
        if (opengl->using_precomputed_spritesheet == true) {
 
        if (opengl->using_precomputed_spritesheet == true) {
-               for (u4 index = 0; index < 95; ++index) {
+               for (natural index = 0; index < 95; ++index) {
                        opengl->font_index [opengl->font_count] [index] = ++opengl->sprite_count - 1;
                }
 
                ++opengl->sprite_count;
                ++opengl->font_count;
 
                        opengl->font_index [opengl->font_count] [index] = ++opengl->sprite_count - 1;
                }
 
                ++opengl->sprite_count;
                ++opengl->font_count;
 
+               print ("[/0Comment/-] Importing spritesheet image and information...\n");
+
+               opengl_import_spritesheet (opengl, "binary/spritesheet.bin");
+
                goto ignore_import;
        }
 
        dumb_buffer = allocate (256 * sizeof (* dumb_buffer));
 
                goto ignore_import;
        }
 
        dumb_buffer = allocate (256 * sizeof (* dumb_buffer));
 
-       for (u4 index = 0; index < 256; ++index) {
+       for (natural index = 0; index < 256; ++index) {
                dumb_buffer [index] = 0xffffffff;
        }
 
                dumb_buffer [index] = 0xffffffff;
        }
 
-       ++opengl->font_count;
-
-       u4 current = opengl->font_count - 1;
+       natural current = ++opengl->font_count - 1;
 
        opengl->font_index  = reallocate (opengl->font_index,  opengl->font_count * sizeof (* opengl->font_index));
        opengl->font_width  = reallocate (opengl->font_width,  opengl->font_count * sizeof (* opengl->font_width));
 
        opengl->font_index  = reallocate (opengl->font_index,  opengl->font_count * sizeof (* opengl->font_index));
        opengl->font_width  = reallocate (opengl->font_width,  opengl->font_count * sizeof (* opengl->font_width));
@@ -546,20 +593,20 @@ static v0 opengl_configure (opengl_structure * opengl, u4 window_width, u4 windo
        opengl->font_begin  = reallocate (opengl->font_begin,  opengl->font_count * sizeof (* opengl->font_begin));
        opengl->font_end    = reallocate (opengl->font_end,    opengl->font_count * sizeof (* opengl->font_end));
 
        opengl->font_begin  = reallocate (opengl->font_begin,  opengl->font_count * sizeof (* opengl->font_begin));
        opengl->font_end    = reallocate (opengl->font_end,    opengl->font_count * sizeof (* opengl->font_end));
 
-       opengl->font_begin [opengl->font_count - 1] = ' ';
-       opengl->font_end   [opengl->font_count - 1] = '~';
+       opengl->font_begin [current] = ' ';
+       opengl->font_end   [current] = '~';
 
 
-       opengl->font_index  [opengl->font_count - 1] = allocate (95 * sizeof (* * opengl->font_index));
-       opengl->font_width  [opengl->font_count - 1] = allocate (95 * sizeof (* * opengl->font_width));
-       opengl->font_height [opengl->font_count - 1] = allocate (95 * sizeof (* * opengl->font_height));
+       opengl->font_index  [current] = allocate (95 * sizeof (* * opengl->font_index));
+       opengl->font_width  [current] = allocate (95 * sizeof (* * opengl->font_width));
+       opengl->font_height [current] = allocate (95 * sizeof (* * opengl->font_height));
 
 
-       for (u4 index = 0; index < 95; ++index) {
-               u4 * buffer = allocate (opengl_font_width * opengl_font_height * sizeof (* buffer));
+       for (natural index = 0; index < 95; ++index) {
+               natural * buffer = allocate (opengl_font_width * opengl_font_height * sizeof (* buffer));
 
 
-               for (u4 value = 0; value < 2; ++value) {
-                       for (u4 bit = 64; bit > 0; --bit) {
-                               u4 destination = ((value << 3) - ((bit - 1) >> 3) + 7) * opengl_font_width - ((bit - 1) & 7) + 7;
-                               u4 source      = (font_bitmap [2 * index + value] >> (bit - 1)) & 1;
+               for (natural value = 0; value < 2; ++value) {
+                       for (natural bit = 64; bit > 0; --bit) {
+                               natural destination = ((value << 3) - ((bit - 1) >> 3) + 7) * opengl_font_width - ((bit - 1) & 7) + 7;
+                               natural source      = (font_bitmap [2 * index + value] >> (bit - 1)) & 1;
 
                                buffer [destination] = (source) ? 0xffffffff : 0x00000000;
                        }
 
                                buffer [destination] = (source) ? 0xffffffff : 0x00000000;
                        }
@@ -576,34 +623,31 @@ static v0 opengl_configure (opengl_structure * opengl, u4 window_width, u4 windo
 
        order = allocate (opengl->sprite_count * sizeof (* order));
 
 
        order = allocate (opengl->sprite_count * sizeof (* order));
 
-       for (u4 index = 0; index < opengl->sprite_count; ++index) {
+       for (natural index = 0; index < opengl->sprite_count; ++index) {
                order [index] = index;
        }
 
                order [index] = index;
        }
 
-       for (u4 index = 0; index < opengl->sprite_count; ++index) {
-               for (u4 subindex = 0; subindex < opengl->sprite_count; ++subindex) {
+       for (natural index = 0; index < opengl->sprite_count; ++index) {
+               for (natural subindex = 0; subindex < opengl->sprite_count; ++subindex) {
                        if (opengl->sprite_height [order [index]] < opengl->sprite_height [order [subindex]]) {
                        if (opengl->sprite_height [order [index]] < opengl->sprite_height [order [subindex]]) {
-                               u4 temporary = order [index];
-
-                               order [index]    = order [subindex];
-                               order [subindex] = temporary;
+                               exchange_natural (& order [index], & order [subindex]);
                        }
                }
        }
 
                        }
                }
        }
 
-       for (u4 index = 0; index < opengl->sprite_count; ++index) {
+       for (natural index = 0; index < opengl->sprite_count; ++index) {
                if (u + opengl->sprite_width [order [index]] >= opengl->spritesheet_size) {
                        u *= 0;
                        v += opengl->sprite_height [order [index]];
                }
 
                if (u + opengl->sprite_width [order [index]] >= opengl->spritesheet_size) {
                        u *= 0;
                        v += opengl->sprite_height [order [index]];
                }
 
-               opengl->sprite_u [order [index]] = (float) u / (float) opengl->spritesheet_size;
-               opengl->sprite_v [order [index]] = (float) v / (float) opengl->spritesheet_size;
+               opengl->sprite_u [order [index]] = (real) u / (real) opengl->spritesheet_size;
+               opengl->sprite_v [order [index]] = (real) v / (real) opengl->spritesheet_size;
 
 
-               for (u4 y = 0; y < opengl->sprite_height [order [index]]; ++y) {
-                       for (u4 x = 0; x < opengl->sprite_width [order [index]]; ++x) {
-                               u4 destination = (v + y) * opengl->spritesheet_size + (u + x);
-                               u4 source      = y * opengl->sprite_width [order [index]] + x;
+               for (natural y = 0; y < opengl->sprite_height [order [index]]; ++y) {
+                       for (natural x = 0; x < opengl->sprite_width [order [index]]; ++x) {
+                               natural destination = (v + y) * opengl->spritesheet_size + (u + x);
+                               natural source      = y * opengl->sprite_width [order [index]] + x;
 
                                opengl->spritesheet_data [destination] = opengl->sprite_data [order [index]] [source];
                        }
 
                                opengl->spritesheet_data [destination] = opengl->sprite_data [order [index]] [source];
                        }
@@ -615,35 +659,29 @@ static v0 opengl_configure (opengl_structure * opengl, u4 window_width, u4 windo
        }
 
        opengl->sprite_data = deallocate (opengl->sprite_data);
        }
 
        opengl->sprite_data = deallocate (opengl->sprite_data);
-       order                  = deallocate (order);
+       order               = deallocate (order);
 
        ignore_import:
 
        opengl->window_width  = window_width;
        opengl->window_height = window_height;
 
 
        ignore_import:
 
        opengl->window_width  = window_width;
        opengl->window_height = window_height;
 
-       opengl->pixel_width  = 2.0f / (float) window_width;
-       opengl->pixel_height = 2.0f / (float) window_height;
-
-       //~if (window_flags == 0) {
-               //~flags = opengl_window_decorated | opengl_window_resizable;
-       //~} else {
-               //~flags = window_flags;
-       //~}
+       opengl->pixel_width  = 2.0f / (real) window_width;
+       opengl->pixel_height = 2.0f / (real) window_height;
 
        glfwInit ();
 
 
        glfwInit ();
 
-       glfwWindowHs4 (GLFW_CONTEXT_VERSION_MAJOR,   3);
-       glfwWindowHs4 (GLFW_CONTEXT_VERSION_MINOR,   3);
-       glfwWindowHs4 (GLFW_OPENGL_PROFILE,          GLFW_OPENGL_CORE_PROFILE);
-       glfwWindowHs4 (GLFW_OPENGL_FORWARD_COMPAT,   1);
-
-       opengl->window = glfwCreateWindow ((int) window_width, (int) window_height, window_title, null, null);
+       glfwWindowHint (GLFW_CONTEXT_VERSION_MAJOR,   3);
+       glfwWindowHint (GLFW_CONTEXT_VERSION_MINOR,   3);
+       glfwWindowHint (GLFW_OPENGL_PROFILE,          GLFW_OPENGL_CORE_PROFILE);
+       glfwWindowHint (GLFW_OPENGL_FORWARD_COMPAT,   1);
 
 
-       glfwSetWindowSizeLimits (opengl->window, 320, 240, 1920, 1080);
+       opengl->window = glfwCreateWindow ((integer) window_width, (integer) window_height, window_title, null, null);
 
        fatal_failure (opengl->window == null, "Failed to create GLFW window.\n");
 
 
        fatal_failure (opengl->window == null, "Failed to create GLFW window.\n");
 
+       glfwSetWindowSizeLimits (opengl->window, 320, 240, 1920, 1080); /// REDO
+
        glfwMakeContextCurrent (opengl->window);
 
        opengl->glGenVertexArrays         = (PFNGLGENVERTEXARRAYSPROC)         glfwGetProcAddress ("glGenVertexArrays");
        glfwMakeContextCurrent (opengl->window);
 
        opengl->glGenVertexArrays         = (PFNGLGENVERTEXARRAYSPROC)         glfwGetProcAddress ("glGenVertexArrays");
@@ -668,60 +706,88 @@ static v0 opengl_configure (opengl_structure * opengl, u4 window_width, u4 windo
        opengl->glDeleteProgram           = (PFNGLDELETEPROGRAMPROC)           glfwGetProcAddress ("glDeleteProgram");
        opengl->glGetUniformLocation      = (PFNGLGETUNIFORMLOCATIONPROC)      glfwGetProcAddress ("glGetUniformLocation");
        opengl->glBufferData              = (PFNGLBUFFERDATAPROC)              glfwGetProcAddress ("glBufferData");
        opengl->glDeleteProgram           = (PFNGLDELETEPROGRAMPROC)           glfwGetProcAddress ("glDeleteProgram");
        opengl->glGetUniformLocation      = (PFNGLGETUNIFORMLOCATIONPROC)      glfwGetProcAddress ("glGetUniformLocation");
        opengl->glBufferData              = (PFNGLBUFFERDATAPROC)              glfwGetProcAddress ("glBufferData");
+       opengl->glGetShaderiv             = (PFNGLGETSHADERIVPROC)             glfwGetProcAddress ("glGetShaderiv");
+       opengl->glGetProgramiv            = (PFNGLGETPROGRAMIVPROC)            glfwGetProcAddress ("glGetProgramiv");
 
 
-       glViewport (0, 0, (int) window_width, (int) window_height);
+       glViewport (0, 0, (integer) window_width, (integer) window_height);
 
 
-       glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
-
-       glEnable (GL_CULL_FACE);
-       glEnable (GL_BLEND);
+       conditional_print ((status = glGetError ()) != GL_NO_ERROR, "/f Failed to set OpenGL viewport dimensions: %i\n", status);
 
        opengl->glGenVertexArrays (1, & opengl->vertex_object);
        opengl->glBindVertexArray (opengl->vertex_object);
 
 
        opengl->glGenVertexArrays (1, & opengl->vertex_object);
        opengl->glBindVertexArray (opengl->vertex_object);
 
+       conditional_print ((status = glGetError ()) != GL_NO_ERROR, "/f Failed to generate and bind OpenGL vertex array object: %i\n", status);
+
        opengl->glGenBuffers (1, & opengl->vertex_buffer);
        opengl->glBindBuffer (GL_ARRAY_BUFFER, opengl->vertex_buffer);
 
        opengl->glGenBuffers (1, & opengl->vertex_buffer);
        opengl->glBindBuffer (GL_ARRAY_BUFFER, opengl->vertex_buffer);
 
+       conditional_print ((status = glGetError ()) != GL_NO_ERROR, "/f Failed to generate and bind OpenGL vertex buffer object: %i\n", status);
+
        opengl->glGenBuffers (1, & opengl->index_buffer);
        opengl->glBindBuffer (GL_ELEMENT_ARRAY_BUFFER, opengl->index_buffer);
 
        opengl->glGenBuffers (1, & opengl->index_buffer);
        opengl->glBindBuffer (GL_ELEMENT_ARRAY_BUFFER, opengl->index_buffer);
 
+       conditional_print ((status = glGetError ()) != GL_NO_ERROR, "/f Failed to generate and bind OpenGL index buffer object: %i\n", status);
+
        opengl->vertex_shader = opengl->glCreateShader (GL_VERTEX_SHADER);
 
        opengl->vertex_shader = opengl->glCreateShader (GL_VERTEX_SHADER);
 
+       conditional_print (opengl->vertex_shader == 0, "/f Failed to create OpenGL vertex shader: %i\n", glGetError ());
+
        opengl->glShaderSource  (opengl->vertex_shader, 1, & vertex_shader, null);
        opengl->glCompileShader (opengl->vertex_shader);
 
        opengl->glShaderSource  (opengl->vertex_shader, 1, & vertex_shader, null);
        opengl->glCompileShader (opengl->vertex_shader);
 
+       opengl->glGetShaderiv (opengl->vertex_shader, GL_COMPILE_STATUS, & status);
+
+       conditional_print (status == GL_FALSE, "/f Failed to compile OpenGL vertex shader: %i\n", status);
+
        opengl->fragment_shader = opengl->glCreateShader (GL_FRAGMENT_SHADER);
 
        opengl->fragment_shader = opengl->glCreateShader (GL_FRAGMENT_SHADER);
 
+       conditional_print (opengl->fragment_shader == 0, "/f Failed to create OpenGL fragment shader: %i\n", glGetError ());
+
        opengl->glShaderSource  (opengl->fragment_shader, 1, & fragment_shader, null);
        opengl->glCompileShader (opengl->fragment_shader);
 
        opengl->glShaderSource  (opengl->fragment_shader, 1, & fragment_shader, null);
        opengl->glCompileShader (opengl->fragment_shader);
 
+       opengl->glGetShaderiv (opengl->fragment_shader, GL_COMPILE_STATUS, & status);
+
+       conditional_print (status == GL_FALSE, "/f Failed to compile OpenGL fragment shader: %i\n", status);
+
        opengl->shader_program = opengl->glCreateProgram ();
 
        opengl->shader_program = opengl->glCreateProgram ();
 
+       conditional_print (opengl->shader_program == 0, "/f Failed to create OpenGL shader program: /1%i/-.\n", glGetError ());
+
        opengl->glAttachShader (opengl->shader_program, opengl->vertex_shader);
        opengl->glAttachShader (opengl->shader_program, opengl->fragment_shader);
 
        opengl->glBindFragDataLocation (opengl->shader_program, 0, "data");
 
        opengl->glLinkProgram (opengl->shader_program);
        opengl->glAttachShader (opengl->shader_program, opengl->vertex_shader);
        opengl->glAttachShader (opengl->shader_program, opengl->fragment_shader);
 
        opengl->glBindFragDataLocation (opengl->shader_program, 0, "data");
 
        opengl->glLinkProgram (opengl->shader_program);
-       opengl->glUseProgram  (opengl->shader_program);
 
 
-       xy_attribute = (u4) opengl->glGetAttribLocation (opengl->shader_program, "vertex_xy");
+       opengl->glGetProgramiv (opengl->shader_program, GL_LINK_STATUS, & status);
+
+       conditional_print (status == GL_FALSE, "/f Failed to link OpenGL shader program: %i\n", status);
+
+       opengl->glUseProgram (opengl->shader_program);
+       ///////////////////
+       status = glGetError (); if (status != GL_NO_ERROR) printf (">>> using %i\n", status);
+
+       xy_attribute = (natural) opengl->glGetAttribLocation (opengl->shader_program, "vertex_xy");
 
        opengl->glEnableVertexAttribArray (xy_attribute);
 
 
        opengl->glEnableVertexAttribArray (xy_attribute);
 
-       opengl->glVertexAttribPointer (xy_attribute, 2, GL_FLOAT, GL_FALSE, 8 * sizeof (float), (v0 *) 0);
+       opengl->glVertexAttribPointer (xy_attribute, 2, GL_FLOAT, GL_FALSE, 8 * sizeof (real), (procedure *) 0);
 
 
-       uv_attribute = (u4) opengl->glGetAttribLocation (opengl->shader_program, "vertex_uv");
+       uv_attribute = (natural) opengl->glGetAttribLocation (opengl->shader_program, "vertex_uv");
 
        opengl->glEnableVertexAttribArray (uv_attribute);
 
 
        opengl->glEnableVertexAttribArray (uv_attribute);
 
-       opengl->glVertexAttribPointer (uv_attribute, 2, GL_FLOAT, GL_FALSE, 8 * sizeof (float), (v0 *) (2 * sizeof (float)));
+       opengl->glVertexAttribPointer (uv_attribute, 2, GL_FLOAT, GL_FALSE, 8 * sizeof (real), (procedure *) (2 * sizeof (real)));
 
 
-       rgba_attribute = (u4) opengl->glGetAttribLocation (opengl->shader_program, "vertex_rgba");
+       rgba_attribute = (natural) opengl->glGetAttribLocation (opengl->shader_program, "vertex_rgba");
 
        opengl->glEnableVertexAttribArray (rgba_attribute);
 
 
        opengl->glEnableVertexAttribArray (rgba_attribute);
 
-       opengl->glVertexAttribPointer (rgba_attribute, 4, GL_FLOAT, GL_FALSE, 8 * sizeof (float), (v0 *) (4 * sizeof (float)));
+       opengl->glVertexAttribPointer (rgba_attribute, 4, GL_FLOAT, GL_FALSE, 8 * sizeof (real), (procedure *) (4 * sizeof (real)));
+
+       if (glGetError () != GL_NO_ERROR) printf (">>> texture+\n");
 
        opengl->vertex_array = allocate (opengl->vertex_limit * sizeof (opengl->vertex_array));
        opengl->index_array  = allocate (opengl->index_limit  * sizeof (opengl->index_array));
 
        opengl->vertex_array = allocate (opengl->vertex_limit * sizeof (opengl->vertex_array));
        opengl->index_array  = allocate (opengl->index_limit  * sizeof (opengl->index_array));
@@ -735,6 +801,8 @@ static v0 opengl_configure (opengl_structure * opengl, u4 window_width, u4 windo
 
        opengl->glUniform1i (opengl->glGetUniformLocation (opengl->shader_program, "texture_p"), 0);
 
 
        opengl->glUniform1i (opengl->glGetUniformLocation (opengl->shader_program, "texture_p"), 0);
 
+       if (glGetError () != GL_NO_ERROR) printf (">>> texture-\n");
+
        glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S,     GL_REPEAT);
        glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T,     GL_REPEAT);
        glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
        glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S,     GL_REPEAT);
        glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T,     GL_REPEAT);
        glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
@@ -744,6 +812,11 @@ static v0 opengl_configure (opengl_structure * opengl, u4 window_width, u4 windo
                opengl->spritesheet_data = deallocate (opengl->spritesheet_data);
        }
 
                opengl->spritesheet_data = deallocate (opengl->spritesheet_data);
        }
 
+       glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+
+       glEnable (GL_CULL_FACE);
+       glEnable (GL_BLEND);
+
        opengl->active = true;
 
        opengl->frame_begin = nano_time ();
        opengl->active = true;
 
        opengl->frame_begin = nano_time ();
@@ -752,170 +825,37 @@ static v0 opengl_configure (opengl_structure * opengl, u4 window_width, u4 windo
 
        glClear (GL_COLOR_BUFFER_BIT);
 
 
        glClear (GL_COLOR_BUFFER_BIT);
 
-       print ("[/2Success/-] Configured OpenGL renderer.\n");
-}
+       if (glGetError () != GL_NO_ERROR) printf (">>> done\n");
 
 
-static v0 opengl_synchronize (opengl_structure * opengl, u4 colour) {
-       s4 signal_code [signal_count] = {
-               0,
-               GLFW_KEY_A,                     GLFW_KEY_B,                     GLFW_KEY_C,                     GLFW_KEY_D,
-               GLFW_KEY_E,                     GLFW_KEY_F,                     GLFW_KEY_G,                     GLFW_KEY_H,
-               GLFW_KEY_I,                     GLFW_KEY_J,                     GLFW_KEY_K,                     GLFW_KEY_L,
-               GLFW_KEY_M,                     GLFW_KEY_N,                     GLFW_KEY_O,                     GLFW_KEY_P,
-               GLFW_KEY_Q,                     GLFW_KEY_R,                     GLFW_KEY_S,                     GLFW_KEY_T,
-               GLFW_KEY_U,                     GLFW_KEY_V,                     GLFW_KEY_W,                     GLFW_KEY_X,
-               GLFW_KEY_Y,                     GLFW_KEY_Z,                     GLFW_KEY_0,                     GLFW_KEY_1,
-               GLFW_KEY_2,                     GLFW_KEY_3,                     GLFW_KEY_4,                     GLFW_KEY_5,
-               GLFW_KEY_6,                     GLFW_KEY_7,                     GLFW_KEY_8,                     GLFW_KEY_9,
-               GLFW_KEY_ESCAPE,                GLFW_KEY_TAB,                   GLFW_KEY_ENTER,                 GLFW_KEY_ENTER,
-               GLFW_KEY_SLASH,                 GLFW_KEY_BACKSLASH,             GLFW_KEY_SEMICOLON,             GLFW_KEY_GRAVE_ACCENT,
-               GLFW_KEY_SPACE,                 GLFW_KEY_BACKSPACE,             GLFW_KEY_PERIOD,                GLFW_KEY_COMMA,
-               GLFW_KEY_APOSTROPHE,            GLFW_KEY_CAPS_LOCK,             GLFW_KEY_MINUS,                 GLFW_KEY_EQUAL,
-               GLFW_KEY_LEFT_BRACKET,          GLFW_KEY_RIGHT_BRACKET,         GLFW_KEY_LEFT_CONTROL,          GLFW_KEY_RIGHT_CONTROL,
-               GLFW_KEY_LEFT_SHIFT,            GLFW_KEY_RIGHT_SHIFT,           GLFW_KEY_LEFT_ALT,              GLFW_KEY_RIGHT_ALT,
-               GLFW_KEY_F1,                    GLFW_KEY_F2,                    GLFW_KEY_F3,                    GLFW_KEY_F4,
-               GLFW_KEY_F5,                    GLFW_KEY_F6,                    GLFW_KEY_F7,                    GLFW_KEY_F8,
-               GLFW_KEY_F9,                    GLFW_KEY_F10,                   GLFW_KEY_F11,                   GLFW_KEY_F12,
-               GLFW_KEY_UP,                    GLFW_KEY_DOWN,                  GLFW_KEY_LEFT,                  GLFW_KEY_RIGHT,
-               GLFW_KEY_NUM_LOCK,              GLFW_KEY_PAUSE,                 GLFW_KEY_INSERT,                GLFW_KEY_HOME,
-               GLFW_KEY_PAGE_UP,               GLFW_KEY_DELETE,                GLFW_KEY_END,                   GLFW_KEY_PAGE_DOWN,
-               GLFW_KEY_KP_ADD,                GLFW_KEY_KP_SUBTRACT,           GLFW_KEY_KP_MULTIPLY,           GLFW_KEY_KP_DIVIDE,
-               GLFW_KEY_KP_ENTER,              GLFW_KEY_KP_DECIMAL,            GLFW_KEY_KP_0,                  GLFW_KEY_KP_1,
-               GLFW_KEY_KP_2,                  GLFW_KEY_KP_3,                  GLFW_KEY_KP_4,                  GLFW_KEY_KP_5,
-               GLFW_KEY_KP_6,                  GLFW_KEY_KP_7,                  GLFW_KEY_KP_8,                  GLFW_KEY_KP_9
-       };
-
-       f4 r = (float) ((colour >> 24) & 0xff) / 255.0f;
-       f4 g = (float) ((colour >> 16) & 0xff) / 255.0f;
-       f4 b = (float) ((colour >>  8) & 0xff) / 255.0f;
-       f4 a = (float) ((colour >>  0) & 0xff) / 255.0f;
-
-       s4 new_window_width  = 0;
-       s4 new_window_height = 0;
-
-       glClearColor (r, g, b, a);
-
-       glClear (GL_COLOR_BUFFER_BIT);
-
-       glfwPollEvents ();
-
-       glfwSetWindowShouldClose (opengl->window, opengl->active == false);
-
-       glfwGetWindowSize (opengl->window, & new_window_width, & new_window_height);
-
-       if ((opengl->window_width != (u4) new_window_width) || (opengl->window_height != (u4) new_window_height)) {
-               if ((new_window_width <= 0) || (new_window_height <= 0)) return;
-
-               glViewport (0, 0, new_window_width, new_window_height);
-
-               opengl->window_width  = (u4) new_window_width;
-               opengl->window_height = (u4) new_window_height;
-
-               opengl->pixel_width  = 2.0f / (float) new_window_width;
-               opengl->pixel_height = 2.0f / (float) new_window_height;
-       }
-
-       opengl->cursor [cursor_left]   = (b4) (glfwGetMouseButton (opengl->window, GLFW_MOUSE_BUTTON_LEFT)   == GLFW_PRESS);
-       opengl->cursor [cursor_middle] = (b4) (glfwGetMouseButton (opengl->window, GLFW_MOUSE_BUTTON_MIDDLE) == GLFW_PRESS);
-       opengl->cursor [cursor_right]  = (b4) (glfwGetMouseButton (opengl->window, GLFW_MOUSE_BUTTON_RIGHT)  == GLFW_PRESS);
-
-       if (opengl->freeze_cursor == false) {
-               f8 x = 0.0;
-               f8 y = 0.0;
-
-               glfwGetCursorPos (opengl->window, & x, & y);
-
-               opengl->cursor_x = (int) x;
-               opengl->cursor_y = (int) y;
-
-               //~if ((opengl->cursor_x < 0) || (opengl->cursor_x > (int) opengl->window_width) ||
-                   //~(opengl->cursor_y < 0) || (opengl->cursor_y > (int) opengl->window_height)) {
-                       //~opengl->cursor_x = 0;
-                       //~opengl->cursor_y = 0;
-               //~}
-       } else {
-               if ((opengl->cursor [cursor_left]   == false)
-               &&  (opengl->cursor [cursor_middle] == false)
-               &&  (opengl->cursor [cursor_right]  == false)) {
-                       opengl->freeze_cursor = false;
-               }
-       }
-
-       if (opengl->freeze_signal == false) {
-               for (u4 index = 0; index < signal_count; ++index) {
-                       opengl->signal [index] = (b4) (glfwGetKey (opengl->window, signal_code [index]) == GLFW_PRESS);
-               }
-       }
-
-       opengl->glBufferData (GL_ARRAY_BUFFER,         opengl->vertex_count * 4, opengl->vertex_array, GL_DYNAMIC_DRAW);
-       opengl->glBufferData (GL_ELEMENT_ARRAY_BUFFER, opengl->index_count  * 4, opengl->index_array,  GL_DYNAMIC_DRAW);
-
-       opengl->glBindBuffer (GL_ARRAY_BUFFER, opengl->vertex_buffer);
-
-       glDrawElements (GL_TRIANGLES, (int) opengl->index_count * 4, GL_UNSIGNED_INT, null);
-
-       glfwSwapBuffers (opengl->window);
-
-       opengl->vertex_count = 0;
-       opengl->index_count  = 0;
-
-       opengl->frame_end = nano_time ();
-
-       opengl->frame_time = opengl->frame_end - opengl->frame_begin;
-
-       if (opengl->frame_time < 1000000000ul / opengl->gameplay_framerate) {
-               nano_wait (1000000000ul / opengl->gameplay_framerate - opengl->frame_time);
-       }
-
-       if (opengl->global_tick % opengl->gameplay_framerate == 0) {
-               opengl->framerate = (u4) (1000000000ul / opengl->frame_time);
-       }
-
-       ++opengl->global_tick;
-
-       opengl->global_tick    = opengl->global_tick % (opengl->gameplay_framerate * opengl->animation_framerate);
-       opengl->gameplay_tick  = opengl->global_tick % (opengl->gameplay_framerate);
-       opengl->animation_tick = opengl->global_tick / (opengl->gameplay_framerate / opengl->animation_framerate);
-
-       opengl->frame_begin = nano_time ();
+       print ("/s Configured OpenGL renderer.\n");
 }
 
 }
 
-static v0 opengl_render_base (opengl_structure * opengl, u4 sprite, s4 x, s4 y, u4 u, u4 v, u4 width, u4 height,
-                                f4 scale_x, f4 scale_y, s4 flip_x, s4 flip_y,
-                                u4 colour_upper_left, u4 colour_upper_right, u4 colour_lower_left, u4 colour_lower_right) {
-       f4 screen_x      = 0.0f;
-       f4 screen_y      = 0.0f;
-       f4 unwrap_x      = 0.0f;
-       f4 unwrap_y      = 0.0f;
-       f4 screen_width  = 0.0f;
-       f4 screen_height = 0.0f;
-       f4 unwrap_width  = 0.0f;
-       f4 unwrap_height = 0.0f;
-
-       if ((x > (int) opengl->window_width) || (y > (int) opengl->window_height)) return;
-
-       if ((x < (int) - ((float) width * scale_x)) || (y < (int) - ((float) height * scale_y))) return;
+static procedure opengl_render_base (opengl_structure * opengl, natural sprite, integer x, integer y, natural u, natural v, natural width,
+                                     natural height, real scale_x, real scale_y, integer flip_x, integer flip_y, natural colour_upper_left,
+                                     natural colour_upper_right, natural colour_lower_left, natural colour_lower_right) {
+       if ((x > (integer) opengl->window_width)  || (x < (integer) - ((real) width  * scale_x))) return;
+       if ((y > (integer) opengl->window_height) || (y < (integer) - ((real) height * scale_y))) return;
 
 
-       if (sprite                    >= opengl->sprite_count) return;
-       if (opengl->vertex_count + 32 >= opengl->vertex_limit)    return;
-       if (opengl->index_count  +  6 >= opengl->index_limit)     return;
+       fatal_failure (sprite                    >= opengl->sprite_count, "Not rendering, sprite out of range.");
+       fatal_failure (opengl->vertex_count + 32 >= opengl->vertex_limit, "Not rendering, not enough vertex space.");
+       fatal_failure (opengl->index_count  +  6 >= opengl->index_limit,  "Not rendering, not enough index space.");
 
 
-       screen_x = + ((float) x * opengl->pixel_width  - 1);
-       screen_y = - ((float) y * opengl->pixel_height - 1);
+       real screen_x = + ((real) x * opengl->pixel_width  - 1.0f);
+       real screen_y = - ((real) y * opengl->pixel_height - 1.0f);
 
 
-       unwrap_x = opengl->sprite_u [sprite] + (float) u / (float) opengl->spritesheet_size;
-       unwrap_y = opengl->sprite_v [sprite] + (float) v / (float) opengl->spritesheet_size;
+       real screen_width  = + ((real) width  * opengl->pixel_width  * scale_x);
+       real screen_height = - ((real) height * opengl->pixel_height * scale_y);
 
 
-       screen_width  = +((float) width  * opengl->pixel_width  * scale_x);
-       screen_height = -((float) height * opengl->pixel_height * scale_y);
+       real unwrap_x = opengl->sprite_u [sprite] + (real) u / (real) opengl->spritesheet_size;
+       real unwrap_y = opengl->sprite_v [sprite] + (real) v / (real) opengl->spritesheet_size;
 
 
-       unwrap_width  = (float) width  / (float) opengl->spritesheet_size;
-       unwrap_height = (float) height / (float) opengl->spritesheet_size;
+       real unwrap_width  = (real) width  / (real) opengl->spritesheet_size;
+       real unwrap_height = (real) height / (real) opengl->spritesheet_size;
 
        opengl->vertex_array [opengl->vertex_count +  0] = screen_x;
        opengl->vertex_array [opengl->vertex_count +  1] = screen_y;
 
        opengl->vertex_array [opengl->vertex_count +  0] = screen_x;
        opengl->vertex_array [opengl->vertex_count +  1] = screen_y;
-       opengl->vertex_array [opengl->vertex_count +  2] = unwrap_x + unwrap_width  * (float) (flip_y != 0);
-       opengl->vertex_array [opengl->vertex_count +  3] = unwrap_y + unwrap_height * (float) (flip_x != 0);
+       opengl->vertex_array [opengl->vertex_count +  2] = unwrap_x + unwrap_width  * (real) (flip_y != 0);
+       opengl->vertex_array [opengl->vertex_count +  3] = unwrap_y + unwrap_height * (real) (flip_x != 0);
        opengl->vertex_array [opengl->vertex_count +  4] = normal_r (colour_upper_left);
        opengl->vertex_array [opengl->vertex_count +  5] = normal_g (colour_upper_left);
        opengl->vertex_array [opengl->vertex_count +  6] = normal_b (colour_upper_left);
        opengl->vertex_array [opengl->vertex_count +  4] = normal_r (colour_upper_left);
        opengl->vertex_array [opengl->vertex_count +  5] = normal_g (colour_upper_left);
        opengl->vertex_array [opengl->vertex_count +  6] = normal_b (colour_upper_left);
@@ -923,8 +863,8 @@ static v0 opengl_render_base (opengl_structure * opengl, u4 sprite, s4 x, s4 y,
 
        opengl->vertex_array [opengl->vertex_count +  8] = screen_x + screen_width;
        opengl->vertex_array [opengl->vertex_count +  9] = screen_y;
 
        opengl->vertex_array [opengl->vertex_count +  8] = screen_x + screen_width;
        opengl->vertex_array [opengl->vertex_count +  9] = screen_y;
-       opengl->vertex_array [opengl->vertex_count + 10] = unwrap_x + unwrap_width  * (float) (flip_y == 0);
-       opengl->vertex_array [opengl->vertex_count + 11] = unwrap_y + unwrap_height * (float) (flip_x != 0);
+       opengl->vertex_array [opengl->vertex_count + 10] = unwrap_x + unwrap_width  * (real) (flip_y == 0);
+       opengl->vertex_array [opengl->vertex_count + 11] = unwrap_y + unwrap_height * (real) (flip_x != 0);
        opengl->vertex_array [opengl->vertex_count + 12] = normal_r (colour_upper_right);
        opengl->vertex_array [opengl->vertex_count + 13] = normal_g (colour_upper_right);
        opengl->vertex_array [opengl->vertex_count + 14] = normal_b (colour_upper_right);
        opengl->vertex_array [opengl->vertex_count + 12] = normal_r (colour_upper_right);
        opengl->vertex_array [opengl->vertex_count + 13] = normal_g (colour_upper_right);
        opengl->vertex_array [opengl->vertex_count + 14] = normal_b (colour_upper_right);
@@ -932,8 +872,8 @@ static v0 opengl_render_base (opengl_structure * opengl, u4 sprite, s4 x, s4 y,
 
        opengl->vertex_array [opengl->vertex_count + 16] = screen_x;
        opengl->vertex_array [opengl->vertex_count + 17] = screen_y + screen_height;
 
        opengl->vertex_array [opengl->vertex_count + 16] = screen_x;
        opengl->vertex_array [opengl->vertex_count + 17] = screen_y + screen_height;
-       opengl->vertex_array [opengl->vertex_count + 18] = unwrap_x + unwrap_width  * (float) (flip_y != 0);
-       opengl->vertex_array [opengl->vertex_count + 19] = unwrap_y + unwrap_height * (float) (flip_x == 0);
+       opengl->vertex_array [opengl->vertex_count + 18] = unwrap_x + unwrap_width  * (real) (flip_y != 0);
+       opengl->vertex_array [opengl->vertex_count + 19] = unwrap_y + unwrap_height * (real) (flip_x == 0);
        opengl->vertex_array [opengl->vertex_count + 20] = normal_r (colour_lower_left);
        opengl->vertex_array [opengl->vertex_count + 21] = normal_g (colour_lower_left);
        opengl->vertex_array [opengl->vertex_count + 22] = normal_b (colour_lower_left);
        opengl->vertex_array [opengl->vertex_count + 20] = normal_r (colour_lower_left);
        opengl->vertex_array [opengl->vertex_count + 21] = normal_g (colour_lower_left);
        opengl->vertex_array [opengl->vertex_count + 22] = normal_b (colour_lower_left);
@@ -941,269 +881,348 @@ static v0 opengl_render_base (opengl_structure * opengl, u4 sprite, s4 x, s4 y,
 
        opengl->vertex_array [opengl->vertex_count + 24] = screen_x + screen_width;
        opengl->vertex_array [opengl->vertex_count + 25] = screen_y + screen_height;
 
        opengl->vertex_array [opengl->vertex_count + 24] = screen_x + screen_width;
        opengl->vertex_array [opengl->vertex_count + 25] = screen_y + screen_height;
-       opengl->vertex_array [opengl->vertex_count + 26] = unwrap_x + unwrap_width  * (float) (flip_y == 0);
-       opengl->vertex_array [opengl->vertex_count + 27] = unwrap_y + unwrap_height * (float) (flip_x == 0);
+       opengl->vertex_array [opengl->vertex_count + 26] = unwrap_x + unwrap_width  * (real) (flip_y == 0);
+       opengl->vertex_array [opengl->vertex_count + 27] = unwrap_y + unwrap_height * (real) (flip_x == 0);
        opengl->vertex_array [opengl->vertex_count + 28] = normal_r (colour_lower_right);
        opengl->vertex_array [opengl->vertex_count + 29] = normal_g (colour_lower_right);
        opengl->vertex_array [opengl->vertex_count + 30] = normal_b (colour_lower_right);
        opengl->vertex_array [opengl->vertex_count + 31] = normal_a (colour_lower_right);
 
        opengl->vertex_array [opengl->vertex_count + 28] = normal_r (colour_lower_right);
        opengl->vertex_array [opengl->vertex_count + 29] = normal_g (colour_lower_right);
        opengl->vertex_array [opengl->vertex_count + 30] = normal_b (colour_lower_right);
        opengl->vertex_array [opengl->vertex_count + 31] = normal_a (colour_lower_right);
 
-       opengl->index_array [opengl->index_count + 0] = (opengl->vertex_count / 8) + 2;
-       opengl->index_array [opengl->index_count + 1] = (opengl->vertex_count / 8) + 1;
-       opengl->index_array [opengl->index_count + 2] = (opengl->vertex_count / 8) + 0;
-       opengl->index_array [opengl->index_count + 3] = (opengl->vertex_count / 8) + 1;
-       opengl->index_array [opengl->index_count + 4] = (opengl->vertex_count / 8) + 2;
-       opengl->index_array [opengl->index_count + 5] = (opengl->vertex_count / 8) + 3;
+       opengl->index_array [opengl->index_count + 0] = opengl->vertex_count / 8 + 2;
+       opengl->index_array [opengl->index_count + 1] = opengl->vertex_count / 8 + 1;
+       opengl->index_array [opengl->index_count + 2] = opengl->vertex_count / 8 + 0;
+       opengl->index_array [opengl->index_count + 3] = opengl->vertex_count / 8 + 1;
+       opengl->index_array [opengl->index_count + 4] = opengl->vertex_count / 8 + 2;
+       opengl->index_array [opengl->index_count + 5] = opengl->vertex_count / 8 + 3;
 
        opengl->vertex_count += 32;
        opengl->index_count  +=  6;
 }
 
 
        opengl->vertex_count += 32;
        opengl->index_count  +=  6;
 }
 
-static v0 opengl_render_rectangle (opengl_structure * opengl, s4 x, s4 y, u4 width, u4 height, u4 colour) {
-       opengl_render_base (opengl, opengl->sprite_count - 1, x, y, 0, 0, 16, 16, (float) width / 16.0f, (float) height / 16.0f, 0, 0,
+static procedure opengl_render_rectangle (opengl_structure * opengl, integer x, integer y, natural width, natural height, natural colour) {
+       opengl_render_base (opengl, opengl->sprite_count - 1, x, y, 0, 0, 16, 16, (real) width / 16.0f, (real) height / 16.0f, 0, 0,
                            colour, colour, colour, colour);
 }
 
                            colour, colour, colour, colour);
 }
 
-static v0 opengl_render_rectangle_vertical_gradient (opengl_structure * opengl, s4 x, s4 y, u4 width, u4 height,
-                                                       u4 colour_up, u4 colour_down) {
-       opengl_render_base (opengl, opengl->sprite_count - 1, x, y, 0, 0, 16, 16, (float) width / 16.0f, (float) height / 16.0f, 0, 0,
+static procedure opengl_render_rectangle_vertical_gradient (opengl_structure * opengl, integer x, integer y, natural width, natural height,
+                                                            natural colour_up, natural colour_down) {
+       opengl_render_base (opengl, opengl->sprite_count - 1, x, y, 0, 0, 16, 16, (real) width / 16.0f, (real) height / 16.0f, 0, 0,
                            colour_up, colour_up, colour_down, colour_down);
 }
 
                            colour_up, colour_up, colour_down, colour_down);
 }
 
-static v0 opengl_render_rectangle_horizontal_gradient (opengl_structure * opengl, s4 x, s4 y, u4 width, u4 height,
-                                                         u4 colour_left, u4 colour_right) {
-       opengl_render_base (opengl, opengl->sprite_count - 1, x, y, 0, 0, 16, 16, (float) width / 16.0f, (float) height / 16.0f, 0, 0,
+static procedure opengl_render_rectangle_horizontal_gradient (opengl_structure * opengl, integer x, integer y, natural width, natural height,
+                                                         natural colour_left, natural colour_right) {
+       opengl_render_base (opengl, opengl->sprite_count - 1, x, y, 0, 0, 16, 16, (real) width / 16.0f, (real) height / 16.0f, 0, 0,
                            colour_left, colour_right, colour_left, colour_right);
 }
 
                            colour_left, colour_right, colour_left, colour_right);
 }
 
-static v0 opengl_render_sprite (opengl_structure * opengl, u4 sprite, s4 x, s4 y) {
+static procedure opengl_render_sprite (opengl_structure * opengl, natural sprite, integer x, integer y) {
        opengl_render_base (opengl, sprite, x, y, 0, 0, opengl->sprite_width [sprite], opengl->sprite_height [sprite], 1.0f, 1.0f, 0, 0,
                            0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu);
 }
 
        opengl_render_base (opengl, sprite, x, y, 0, 0, opengl->sprite_width [sprite], opengl->sprite_height [sprite], 1.0f, 1.0f, 0, 0,
                            0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu);
 }
 
-static v0 opengl_render_sprite_crop (opengl_structure * opengl, u4 sprite, s4 x, s4 y, u4 u, u4 v, u4 width, u4 height) {
-       opengl_render_base (opengl, sprite, x, y, u, v, width, height, 1.0f, 1.0f, 0, 0, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu);
+static procedure opengl_render_sprite_scale (opengl_structure * opengl, natural sprite, integer x, integer y, real scale_x, real scale_y) {
+       opengl_render_base (opengl, sprite, x, y, 0, 0, opengl->sprite_width [sprite], opengl->sprite_height [sprite], scale_x, scale_y, 0, 0,
+                           0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu);
 }
 
 }
 
-static v0 opengl_render_sprite_flip (opengl_structure * opengl, u4 sprite, s4 x, s4 y, s4 flip_x, s4 flip_y) {
-       opengl_render_base (opengl, sprite, x, y, 0, 0, opengl->sprite_width [sprite], opengl->sprite_height [sprite], 1.0f, 1.0f,
-                           flip_x, flip_y, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu);
+static procedure opengl_render_sprite_crop (opengl_structure * opengl, natural sprite, integer x, integer y, natural u, natural v,
+                                            natural width, natural height) {
+       opengl_render_base (opengl, sprite, x, y, u, v, width, height, 1.0f, 1.0f, 0, 0, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu);
 }
 
 }
 
-static v0 opengl_render_sprite_colour (opengl_structure * opengl, u4 sprite, s4 x, s4 y, u4 colour) {
+static procedure opengl_render_sprite_colour (opengl_structure * opengl, natural sprite, integer x, integer y, natural colour) {
        opengl_render_base (opengl, sprite, x, y, 0, 0, opengl->sprite_width [sprite], opengl->sprite_height [sprite], 1.0f, 1.0f, 0, 0,
                            colour, colour, colour, colour);
 }
 
        opengl_render_base (opengl, sprite, x, y, 0, 0, opengl->sprite_width [sprite], opengl->sprite_height [sprite], 1.0f, 1.0f, 0, 0,
                            colour, colour, colour, colour);
 }
 
-static v0 opengl_render_sprite_control (opengl_structure * opengl, u4 sprite, s4 x, s4 y, u4 u, u4 v, u4 width, u4 height,
-                                          s4 flip_x, s4 flip_y) {
-       opengl_render_base (opengl, sprite, x, y, u, v, width, height, 1.0f, 1.0f, flip_x, flip_y, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu);
-}
-
-static v0 opengl_render_sprite_crop_colour (opengl_structure * opengl, u4 sprite, u4 colour, s4 x, s4 y, u4 u, u4 v, u4 width, u4 height) {
-       opengl_render_base (opengl, sprite, x, y, u, v, width, height, 1.0f, 1.0f, 0, 0, colour, colour, colour, colour);
-}
-
-static v0 opengl_render_sprite_animate (opengl_structure * opengl, u4 sprite, s4 x, s4 y, u4 frames, u4 state, u4 states) {
-       u4 width  = opengl->sprite_width  [sprite] / states;
-       u4 height = opengl->sprite_height [sprite] / frames;
-       u4 u      = width  * (state                   % states);
-       u4 v      = height * (opengl->animation_tick  % frames);
-
-       opengl_render_sprite_crop (opengl, sprite, x, y, u, v, width, height);
-}
-
-static u4 opengl_render_character_width (opengl_structure * opengl, c1 character, u4 font, f4 scale) {
-       if ((character < opengl->font_begin [font]) || (character > opengl->font_end [font])) {
-               return (0);
-       } else {
-               u4 index = opengl->font_index [font] [character - opengl->font_begin [font]];
-
-               return ((u4) (scale * (float) opengl->sprite_width [index]));
-       }
+static procedure opengl_render_sprite_flip (opengl_structure * opengl, natural sprite, integer x, integer y, integer flip_x, integer flip_y) {
+       opengl_render_base (opengl, sprite, x, y, 0, 0, opengl->sprite_width [sprite], opengl->sprite_height [sprite], 1.0f, 1.0f,
+                           flip_x, flip_y, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu);
 }
 
 }
 
-static u4 opengl_render_character_height (opengl_structure * opengl, c1 character, u4 font, f4 scale) {
-       if ((character < opengl->font_begin [font]) || (character > opengl->font_end [font])) {
-               return (0);
-       } else {
-               u4 index = opengl->font_index [font] [character - opengl->font_begin [font]];
-
-               return ((u4) (scale * (float) opengl->sprite_height [index]));
-       }
+static procedure opengl_render_sprite_orient (opengl_structure * opengl, natural sprite, integer x, integer y, natural u, natural v,
+                                              natural width, natural height, integer flip_x, integer flip_y) {
+       opengl_render_base (opengl, sprite, x, y, u, v, width, height, 1.0f, 1.0f, flip_x, flip_y, 0xffffffffu, 0xffffffffu, 0xffffffffu,
+                           0xffffffffu);
 }
 
 }
 
-static u4 opengl_render_string_width (opengl_structure * opengl, c1 * string, u4 font, f4 scale) {
-       u4 width = 0;
-       u4 match = 0;
+static procedure opengl_render_sprite_animation (opengl_structure * opengl, natural sprite, integer x, integer y, natural frames, natural state,
+                                                 natural states) {
+       natural width  = opengl->sprite_width  [sprite] / states;
+       natural height = opengl->sprite_height [sprite] / frames;
 
 
-       if (string == null) {
-               return (0);
-       }
-
-       for (u4 index = 0; string [index] != '\0'; ++index) {
-               if (string [index] == '\t') {
-                       width += opengl->tab_width * opengl_render_character_width (opengl, ' ', font, scale);
-               } else if (string [index] == '\n') {
-                       match = maximum (width, match);
-                       width = 0;
-               } else {
-                       width += opengl_render_character_width (opengl, string [index], font, scale);
-               }
-       }
+       natural u = width  * (state                  % states);
+       natural v = height * (opengl->animation_tick % frames);
 
 
-       return (maximum (width, match));
+       opengl_render_sprite_crop (opengl, sprite, x, y, u, v, width, height);
 }
 
 }
 
-static u4 opengl_render_string_height (opengl_structure * opengl, c1 * string, u4 font, f4 scale) {
-       u4 height = opengl_render_character_height (opengl, ' ', font, scale);
-
-       if ((string == null) || (string [0] == '\0')) {
-               return (0);
-       }
-
-       for (u4 index = 0; string [index] != '\0'; ++index) {
-               if (string [index] == '\n') {
-                       height += opengl_render_character_height (opengl, ' ', font, scale);
-               }
-       }
-
-       return (height);
+static procedure opengl_render_sprite_crop_colour (opengl_structure * opengl, natural sprite, natural colour, integer x, integer y, natural u,
+                                                   natural v, natural width, natural height) {
+       opengl_render_base (opengl, sprite, x, y, u, v, width, height, 1.0f, 1.0f, 0, 0, colour, colour, colour, colour);
 }
 
 }
 
-static v0 opengl_render_character_base (opengl_structure * opengl, c1 character, u4 font, s4 x, s4 y, f4 scale,
-                                          u4 colour_upper_left, u4 colour_upper_right, u4 colour_lower_left, u4 colour_lower_right) {
-       if ((character < opengl->font_begin [font]) || (character > opengl->font_end [font])) return;
+static procedure opengl_render_character_base (opengl_structure * opengl, character data, natural font, integer x, integer y, real scale,
+                                               natural colour_upper_left, natural colour_upper_right, natural colour_lower_left,
+                                               natural colour_lower_right) {
+       if ((font >= opengl->font_count) && (font != ~ 0u)) return;
 
 
-       if (font == opengl->default_font) {
+       if (font == ~ 0u) {
                font = opengl->font_count - 1;
        }
 
                font = opengl->font_count - 1;
        }
 
-       u4 index  = opengl->font_index    [font] [character - opengl->font_begin [font]];
-       u4 width  = opengl->sprite_width  [index];
-       u4 height = opengl->sprite_height [index];
+       if ((data < opengl->font_begin [font]) || (data > opengl->font_end [font])) return;
+
+       natural index  = opengl->font_index    [font] [data - opengl->font_begin [font]];
+       natural width  = opengl->sprite_width  [index];
+       natural height = opengl->sprite_height [index];
 
        opengl_render_base (opengl, index, x, y, 0, 0, width, height, scale, scale, 0, 0, colour_upper_left, colour_upper_right,
                            colour_lower_left, colour_lower_right);
 }
 
 
        opengl_render_base (opengl, index, x, y, 0, 0, width, height, scale, scale, 0, 0, colour_upper_left, colour_upper_right,
                            colour_lower_left, colour_lower_right);
 }
 
-static v0 opengl_render_character (opengl_structure * opengl, c1 character, u4 font, s4 x, s4 y, f4 scale, u4 colour) {
-       opengl_render_character_base (opengl, character, font, x, y, scale, colour, colour, colour, colour);
+static procedure opengl_render_character (opengl_structure * opengl, character data, natural font, integer x, integer y, real scale, natural colour) {
+       opengl_render_character_base (opengl, data, font, x, y, scale, colour, colour, colour, colour);
 }
 
 }
 
-static v0 opengl_render_character_vertical_gradient (opengl_structure * opengl, c1 character, u4 font, s4 x, s4 y, f4 scale,
-                                                       u4 colour_up, u4 colour_down) {
-       opengl_render_character_base (opengl, character, font, x, y, scale, colour_up, colour_up, colour_down, colour_down);
+static procedure opengl_render_character_vertical_gradient (opengl_structure * opengl, character data, natural font, integer x, integer y, real scale,
+                                                       natural colour_up, natural colour_down) {
+       opengl_render_character_base (opengl, data, font, x, y, scale, colour_up, colour_up, colour_down, colour_down);
 }
 
 }
 
-static v0 opengl_render_character_horizontal_gradient (opengl_structure * opengl, c1 character, u4 font, s4 x, s4 y, f4 scale,
-                                                         u4 colour_left, u4 colour_right) {
-       opengl_render_character_base (opengl, character, font, x, y, scale, colour_left, colour_right, colour_left, colour_right);
+static procedure opengl_render_character_horizontal_gradient (opengl_structure * opengl, character data, natural font, integer x, integer y, real scale,
+                                                         natural colour_left, natural colour_right) {
+       opengl_render_character_base (opengl, data, font, x, y, scale, colour_left, colour_right, colour_left, colour_right);
 }
 
 }
 
-static v0 opengl_render_string_base (opengl_structure * opengl, c1 * string, u4 font, s4 x, s4 y, f4 scale,
-                                       u4 colour_upper_left, u4 colour_upper_right, u4 colour_lower_left, u4 colour_lower_right) {
-       s4 offset = x;
+static procedure opengl_render_string_base (opengl_structure * opengl, character * string, natural font, integer x, integer y, real scale,
+                                       natural colour_upper_left, natural colour_upper_right, natural colour_lower_left, natural colour_lower_right) {
+       integer offset = x;
 
        if (string == null) return;
 
 
        if (string == null) return;
 
-       for (u4 index = 0; string [index] != '\0'; ++index) {
+       for (natural index = 0; string [index] != '\0'; ++index) {
                if (string [index] == '\t') {
                if (string [index] == '\t') {
-                       x += opengl->tab_width * opengl_render_character_width (opengl, ' ', font, scale);
+                       x += opengl->tab_width * opengl_character_width (opengl, ' ', font, scale);
                        continue;
                } else if (string [index] == '\n') {
                        x  = offset;
                        continue;
                } else if (string [index] == '\n') {
                        x  = offset;
-                       y += opengl_render_character_height (opengl, ' ', font, scale);
+                       y += opengl_character_height (opengl, ' ', font, scale);
                        continue;
                } else {
                        opengl_render_character_base (opengl, string [index], font, x, y, scale, colour_upper_left, colour_upper_right,
                                                      colour_lower_left, colour_lower_right);
 
                        continue;
                } else {
                        opengl_render_character_base (opengl, string [index], font, x, y, scale, colour_upper_left, colour_upper_right,
                                                      colour_lower_left, colour_lower_right);
 
-                       x += opengl_render_character_width (opengl, string [index], font, scale);
+                       x += opengl_character_width (opengl, string [index], font, scale);
                }
        }
 }
 
                }
        }
 }
 
-static v0 opengl_render_string (opengl_structure * opengl, c1 * string, u4 font, s4 x, s4 y, f4 scale, u4 colour) {
+static procedure opengl_render_string (opengl_structure * opengl, character * string, natural font, integer x, integer y, real scale, natural colour) {
        opengl_render_string_base (opengl, string, font, x, y, scale, colour, colour, colour, colour);
 }
 
        opengl_render_string_base (opengl, string, font, x, y, scale, colour, colour, colour, colour);
 }
 
-static v0 opengl_render_string_vertical_gradient (opengl_structure * opengl, c1 * string, u4 font, s4 x, s4 y, f4 scale,
-                                                    u4 colour_up, u4 colour_down) {
+static procedure opengl_render_string_vertical_gradient (opengl_structure * opengl, character * string, natural font, integer x, integer y, real scale,
+                                                    natural colour_up, natural colour_down) {
        opengl_render_string_base (opengl, string, font, x, y, scale, colour_up, colour_up, colour_down, colour_down);
 }
 
        opengl_render_string_base (opengl, string, font, x, y, scale, colour_up, colour_up, colour_down, colour_down);
 }
 
-static v0 opengl_render_string_horizontal_gradient (opengl_structure * opengl, c1 * string, u4 font, s4 x, s4 y, f4 scale,
-                                                      u4 colour_left, u4 colour_right) {
+static procedure opengl_render_string_horizontal_gradient (opengl_structure * opengl, character * string, natural font, integer x, integer y, real scale,
+                                                      natural colour_left, natural colour_right) {
        opengl_render_string_base (opengl, string, font, x, y, scale, colour_left, colour_right, colour_left, colour_right);
 }
 
        opengl_render_string_base (opengl, string, font, x, y, scale, colour_left, colour_right, colour_left, colour_right);
 }
 
-static v0 opengl_render_string_full_vertical_gradient (opengl_structure * opengl, c1 * string, u4 font, s4 x, s4 y, f4 scale,
-                                                         u4 colour_up, u4 colour_down) {
-       s4  offset = x;
-       u4 back   = 0;
-       u4 up     = 0;
-       u4 down   = 0;
+static procedure opengl_render_string_full_vertical_gradient (opengl_structure * opengl, character * string, natural font, integer x, integer y, real scale,
+                                                         natural colour_up, natural colour_down) {
+       integer offset = x;
+       natural back   = 0;
+       natural up     = 0;
+       natural down   = 0;
 
 
-       f4 interpolator = 1.0f / (float) string_full_height (string);
+       real interpolator = 1.0f / (real) string_full_height (string);
 
        if (string == null) return;
 
 
        if (string == null) return;
 
-       for (u4 index = 0; string [index] != '\0'; ++index) {
+       for (natural index = 0; string [index] != '\0'; ++index) {
                if (string [index] == '\t') {
                if (string [index] == '\t') {
-                       x += opengl->tab_width * opengl_render_character_width (opengl, ' ', font, scale);
+                       x += opengl->tab_width * opengl_character_width (opengl, ' ', font, scale);
                        continue;
                } else if (string [index] == '\n') {
                        back += 1;
                        x     = offset;
                        continue;
                } else if (string [index] == '\n') {
                        back += 1;
                        x     = offset;
-                       y    += opengl_render_character_height (opengl, ' ', font, scale);
+                       y    += opengl_character_height (opengl, ' ', font, scale);
                        continue;
                } else {
                        continue;
                } else {
-                       up   = colour_linear_interpolation (colour_up, colour_down, (float) (back + 0) * interpolator);
-                       down = colour_linear_interpolation (colour_up, colour_down, (float) (back + 1) * interpolator);
+                       up   = colour_linear_interpolation (colour_up, colour_down, (real) (back + 0) * interpolator);
+                       down = colour_linear_interpolation (colour_up, colour_down, (real) (back + 1) * interpolator);
 
                        opengl_render_character_vertical_gradient (opengl, string [index], font, x, y, scale, up, down);
 
 
                        opengl_render_character_vertical_gradient (opengl, string [index], font, x, y, scale, up, down);
 
-                       x += opengl_render_character_width (opengl, string [index], font, scale);
+                       x += opengl_character_width (opengl, string [index], font, scale);
                }
        }
 }
 
                }
        }
 }
 
-static v0 opengl_render_string_full_horizontal_gradient (opengl_structure * opengl, c1 * string, u4 font, s4 x, s4 y, f4 scale,
-                                                           u4 colour_left, u4 colour_right) {
-       s4  offset = x;
-       u4 back   = 0;
-       u4 left   = 0;
-       u4 right  = 0;
+static procedure opengl_render_string_full_horizontal_gradient (opengl_structure * opengl, character * string, natural font, integer x,
+                                                                integer y, real scale, natural colour_left, natural colour_right) {
+       integer  offset = x;
+       natural back   = 0;
+       natural left   = 0;
+       natural right  = 0;
 
 
-       f4 interpolator = 1.0f / (float) string_full_width (string, opengl->tab_width);
+       real interpolator = 1.0f / (real) string_full_width (string, opengl->tab_width);
 
        if (string == null) return;
 
 
        if (string == null) return;
 
-       for (u4 index = 0; string [index] != '\0'; ++index) {
+       for (natural index = 0; string [index] != '\0'; ++index) {
                if (string [index] == '\t') {
                if (string [index] == '\t') {
-                       x += opengl->tab_width * opengl_render_character_width (opengl, ' ', font, scale);
+                       x += opengl->tab_width * opengl_character_width (opengl, ' ', font, scale);
                        continue;
                } else if (string [index] == '\n') {
                        back  = 0;
                        x     = offset;
                        continue;
                } else if (string [index] == '\n') {
                        back  = 0;
                        x     = offset;
-                       y    += opengl_render_character_height (opengl, ' ', font, scale);
+                       y    += opengl_character_height (opengl, ' ', font, scale);
                        continue;
                } else {
                        back  += 1;
                        continue;
                } else {
                        back  += 1;
-                       left   = colour_linear_interpolation (colour_left, colour_right, (float) (back + 0) * interpolator);
-                       right  = colour_linear_interpolation (colour_left, colour_right, (float) (back + 1) * interpolator);
+                       left   = colour_linear_interpolation (colour_left, colour_right, (real) (back + 0) * interpolator);
+                       right  = colour_linear_interpolation (colour_left, colour_right, (real) (back + 1) * interpolator);
 
                        opengl_render_character_horizontal_gradient (opengl, string [index], font, x, y, scale, left, right);
 
 
                        opengl_render_character_horizontal_gradient (opengl, string [index], font, x, y, scale, left, right);
 
-                       x += opengl_render_character_width (opengl, string [index], font, scale);
+                       x += opengl_character_width (opengl, string [index], font, scale);
                }
        }
 }
 
                }
        }
 }
 
-static v0 opengl_render_framerate (opengl_structure * opengl, u4 font, s4 x, s4 y, f4 scale, u4 colour) {
+static procedure opengl_render_framerate (opengl_structure * opengl, natural font, integer x, integer y, real scale, natural colour) {
        opengl_render_string (opengl, number_to_string (opengl->framerate), font, x, y, scale, colour);
 }
 
        opengl_render_string (opengl, number_to_string (opengl->framerate), font, x, y, scale, colour);
 }
 
+static procedure opengl_synchronize (opengl_structure * opengl, natural colour) {
+       integer signal_code [signal_count] = {
+               0,
+               GLFW_KEY_A,                     GLFW_KEY_B,                     GLFW_KEY_C,                     GLFW_KEY_D,
+               GLFW_KEY_E,                     GLFW_KEY_F,                     GLFW_KEY_G,                     GLFW_KEY_H,
+               GLFW_KEY_I,                     GLFW_KEY_J,                     GLFW_KEY_K,                     GLFW_KEY_L,
+               GLFW_KEY_M,                     GLFW_KEY_N,                     GLFW_KEY_O,                     GLFW_KEY_P,
+               GLFW_KEY_Q,                     GLFW_KEY_R,                     GLFW_KEY_S,                     GLFW_KEY_T,
+               GLFW_KEY_U,                     GLFW_KEY_V,                     GLFW_KEY_W,                     GLFW_KEY_X,
+               GLFW_KEY_Y,                     GLFW_KEY_Z,                     GLFW_KEY_0,                     GLFW_KEY_1,
+               GLFW_KEY_2,                     GLFW_KEY_3,                     GLFW_KEY_4,                     GLFW_KEY_5,
+               GLFW_KEY_6,                     GLFW_KEY_7,                     GLFW_KEY_8,                     GLFW_KEY_9,
+               GLFW_KEY_ESCAPE,                GLFW_KEY_TAB,                   GLFW_KEY_ENTER,                 GLFW_KEY_ENTER,
+               GLFW_KEY_SLASH,                 GLFW_KEY_BACKSLASH,             GLFW_KEY_SEMICOLON,             GLFW_KEY_GRAVE_ACCENT,
+               GLFW_KEY_SPACE,                 GLFW_KEY_BACKSPACE,             GLFW_KEY_PERIOD,                GLFW_KEY_COMMA,
+               GLFW_KEY_APOSTROPHE,            GLFW_KEY_CAPS_LOCK,             GLFW_KEY_MINUS,                 GLFW_KEY_EQUAL,
+               GLFW_KEY_LEFT_BRACKET,          GLFW_KEY_RIGHT_BRACKET,         GLFW_KEY_LEFT_CONTROL,          GLFW_KEY_RIGHT_CONTROL,
+               GLFW_KEY_LEFT_SHIFT,            GLFW_KEY_RIGHT_SHIFT,           GLFW_KEY_LEFT_ALT,              GLFW_KEY_RIGHT_ALT,
+               GLFW_KEY_F1,                    GLFW_KEY_F2,                    GLFW_KEY_F3,                    GLFW_KEY_F4,
+               GLFW_KEY_F5,                    GLFW_KEY_F6,                    GLFW_KEY_F7,                    GLFW_KEY_F8,
+               GLFW_KEY_F9,                    GLFW_KEY_F10,                   GLFW_KEY_F11,                   GLFW_KEY_F12,
+               GLFW_KEY_UP,                    GLFW_KEY_DOWN,                  GLFW_KEY_LEFT,                  GLFW_KEY_RIGHT,
+               GLFW_KEY_NUM_LOCK,              GLFW_KEY_PAUSE,                 GLFW_KEY_INSERT,                GLFW_KEY_HOME,
+               GLFW_KEY_PAGE_UP,               GLFW_KEY_DELETE,                GLFW_KEY_END,                   GLFW_KEY_PAGE_DOWN,
+               GLFW_KEY_KP_ADD,                GLFW_KEY_KP_SUBTRACT,           GLFW_KEY_KP_MULTIPLY,           GLFW_KEY_KP_DIVIDE,
+               GLFW_KEY_KP_ENTER,              GLFW_KEY_KP_DECIMAL,            GLFW_KEY_KP_0,                  GLFW_KEY_KP_1,
+               GLFW_KEY_KP_2,                  GLFW_KEY_KP_3,                  GLFW_KEY_KP_4,                  GLFW_KEY_KP_5,
+               GLFW_KEY_KP_6,                  GLFW_KEY_KP_7,                  GLFW_KEY_KP_8,                  GLFW_KEY_KP_9
+       };
+
+       integer new_window_width  = 0;
+       integer new_window_height = 0;
+
+       opengl->cursor [cursor_left]   = false;
+       opengl->cursor [cursor_middle] = false;
+       opengl->cursor [cursor_right]  = false;
+
+       glClearColor (normal_r (colour), normal_g (colour), normal_b (colour), normal_a (colour));
+
+       glClear (GL_COLOR_BUFFER_BIT);
+
+       glfwPollEvents ();
+
+       glfwSetWindowShouldClose (opengl->window, opengl->active == false);
+
+       glfwGetWindowSize (opengl->window, & new_window_width, & new_window_height);
+
+       if ((opengl->window_width != (natural) new_window_width) || (opengl->window_height != (natural) new_window_height)) {
+               if ((new_window_width <= 0) || (new_window_height <= 0)) return;
+
+               glViewport (0, 0, new_window_width, new_window_height);
+
+               opengl->window_width  = (natural) new_window_width;
+               opengl->window_height = (natural) new_window_height;
+
+               opengl->pixel_width  = 2.0f / (real) new_window_width;
+               opengl->pixel_height = 2.0f / (real) new_window_height;
+       }
+
+       opengl->cursor [cursor_left]   = (boolean) (glfwGetMouseButton (opengl->window, GLFW_MOUSE_BUTTON_LEFT)   == GLFW_PRESS);
+       opengl->cursor [cursor_middle] = (boolean) (glfwGetMouseButton (opengl->window, GLFW_MOUSE_BUTTON_MIDDLE) == GLFW_PRESS);
+       opengl->cursor [cursor_right]  = (boolean) (glfwGetMouseButton (opengl->window, GLFW_MOUSE_BUTTON_RIGHT)  == GLFW_PRESS);
+
+       if (opengl->freeze_cursor == false) {
+               real_64 x = 0.0;
+               real_64 y = 0.0;
+
+               glfwGetCursorPos (opengl->window, & x, & y);
+
+               opengl->cursor_x = (integer) x;
+               opengl->cursor_y = (integer) y;
+
+               //~if ((opengl->cursor_x < 0) || (opengl->cursor_x > (integer) opengl->window_width) ||
+                   //~(opengl->cursor_y < 0) || (opengl->cursor_y > (integer) opengl->window_height)) {
+                       //~opengl->cursor_x = 0;
+                       //~opengl->cursor_y = 0;
+               //~}
+       } else {
+               if ((opengl->cursor [cursor_left]   == false)
+               &&  (opengl->cursor [cursor_middle] == false)
+               &&  (opengl->cursor [cursor_right]  == false)) {
+                       opengl->freeze_cursor = false;
+               }
+       }
+
+       if (opengl->freeze_signal == false) {
+               for (natural index = 0; index < signal_count; ++index) {
+                       opengl->signal [index] = (boolean) (glfwGetKey (opengl->window, signal_code [index]) == GLFW_PRESS);
+               }
+       }
+
+       opengl->glBufferData (GL_ARRAY_BUFFER,         opengl->vertex_count * 4, opengl->vertex_array, GL_DYNAMIC_DRAW);
+       opengl->glBufferData (GL_ELEMENT_ARRAY_BUFFER, opengl->index_count  * 4, opengl->index_array,  GL_DYNAMIC_DRAW);
+
+       opengl->glBindBuffer (GL_ARRAY_BUFFER, opengl->vertex_buffer);
+
+       glDrawElements (GL_TRIANGLES, (integer) opengl->index_count * 4, GL_UNSIGNED_INT, null);
+
+       glfwSwapBuffers (opengl->window);
+
+       opengl->vertex_count = 0;
+       opengl->index_count  = 0;
+
+       opengl->frame_end = nano_time ();
+
+       opengl->frame_time = opengl->frame_end - opengl->frame_begin;
+
+       if (opengl->frame_time < 1000000000ul / opengl->gameplay_framerate) {
+               nano_wait (1000000000ul / opengl->gameplay_framerate - opengl->frame_time);
+       }
+
+       if (opengl->global_tick % opengl->gameplay_framerate == 0) {
+               opengl->framerate = (natural) (1000000000ul / opengl->frame_time);
+       }
+
+       ++opengl->global_tick;
+
+       opengl->global_tick    = opengl->global_tick % (opengl->gameplay_framerate * opengl->animation_framerate);
+       opengl->gameplay_tick  = opengl->global_tick % (opengl->gameplay_framerate);
+       opengl->animation_tick = opengl->global_tick / (opengl->gameplay_framerate / opengl->animation_framerate);
+
+       opengl->frame_begin = nano_time ();
+}
+
 #undef opengl_font_width
 #undef opengl_font_height
 #undef opengl_font_width
 #undef opengl_font_height
index f0d7e002ef4e14809e4be48a20e06977c9a96f01..a3de6facba21d304057cf8eb3ebe856ef2499ed6 100755 (executable)
--- a/xphere.h
+++ b/xphere.h
 /// for more details, if you dare, it is a lot of text that nobody wants to read...
 
 typedef struct {
 /// for more details, if you dare, it is a lot of text that nobody wants to read...
 
 typedef struct {
-       f4 distance;
-       f4 horizontal;
-       f4 vertical;
+       real distance;
+       real horizontal;
+       real vertical;
 } sphere_vector;
 
 } sphere_vector;
 
-static b4 sphere_epsilon (f4 error) {
+static boolean sphere_epsilon (real error) {
        return (error < 0.000001);
 }
 
        return (error < 0.000001);
 }
 
-static f4 sphere_distance (f4 x, f4 y, f4 z) {
+static real sphere_distance (real x, real y, real z) {
        return (square_root (x * x + y * y + z * z));
 }
 
        return (square_root (x * x + y * y + z * z));
 }
 
-static f4 sphere_horizontal (f4 x, f4 z) {
+static real sphere_horizontal (real x, real z) {
        return ((sphere_epsilon (z)) ? (sign (x) * pi / 2.0f) : (arc_tangent (x / z)));
 }
 
        return ((sphere_epsilon (z)) ? (sign (x) * pi / 2.0f) : (arc_tangent (x / z)));
 }
 
-static f4 sphere_vertical (f4 y, f4 z) {
+static real sphere_vertical (real y, real z) {
        return ((sphere_epsilon (z)) ? (sign (y) * pi / 2.0f) : (arc_tangent (y / z)));
 }
 
        return ((sphere_epsilon (z)) ? (sign (y) * pi / 2.0f) : (arc_tangent (y / z)));
 }
 
-static f4 sphere_x (f4 horizontal, f4 z) {
+static real sphere_x (real horizontal, real z) {
        return (z * tangent (horizontal));
 }
 
        return (z * tangent (horizontal));
 }
 
-static f4 sphere_y (f4 vertical, f4 z) {
+static real sphere_y (real vertical, real z) {
        return (z * tangent (vertical));
 }
 
        return (z * tangent (vertical));
 }
 
-static f4 sphere_z (f4 distance, f4 horizontal, f4 vertical) {
-       f4 x_over_z = tangent (horizontal);
-       f4 y_over_z = tangent (vertical);
+static real sphere_z (real distance, real horizontal, real vertical) {
+       real x_over_z = tangent (horizontal);
+       real y_over_z = tangent (vertical);
 
        return (distance * square_root (1.0f / (x_over_z * x_over_z + y_over_z * y_over_z + 1.0f)));
 }
 
 
        return (distance * square_root (1.0f / (x_over_z * x_over_z + y_over_z * y_over_z + 1.0f)));
 }
 
-static v0 sphere_transpose_x (f4 * distance, f4 * horizontal, f4 x) {
-       f4 origin = (* distance) * (* distance);
-       f4 offset = x * x;
-       f4 square = origin + offset + 2 * x * (* distance) * cosine (* horizontal);
+static procedure sphere_transpose_x (real * distance, real * horizontal, real x) {
+       real origin = (* distance) * (* distance);
+       real offset = x * x;
+       real square = origin + offset + 2 * x * (* distance) * cosine (* horizontal);
 
        * distance = square_root (square);
 
        * horizontal = arc_sine ((square + offset - origin) / (2 * (* distance) * x));
 }
 
 
        * distance = square_root (square);
 
        * horizontal = arc_sine ((square + offset - origin) / (2 * (* distance) * x));
 }
 
-static v0 sphere_transpose_y (f4 * distance, f4 * vertical, f4 y) {
-       f4 origin = (* distance) * (* distance);
-       f4 offset = y * y;
+static procedure sphere_transpose_y (real * distance, real * vertical, real y) {
+       real origin = (* distance) * (* distance);
+       real offset = y * y;
 
        * distance = square_root (origin + offset + 2 * y * (* distance) * cosine (* vertical));
 }
 
 
        * distance = square_root (origin + offset + 2 * y * (* distance) * cosine (* vertical));
 }
 
-static v0 sphere_transpose_z (f4 * distance, f4 * horizontal, f4 * vertical, f4 z) {
-       f4 origin = (* distance) * (* distance);
-       f4 offset = z * z;
-       f4 side_a = secant (* vertical);
-       f4 side_b = tangent (* horizontal);
+static procedure sphere_transpose_z (real * distance, real * horizontal, real * vertical, real z) {
+       real origin = (* distance) * (* distance);
+       real offset = z * z;
+       real side_a = secant (* vertical);
+       real side_b = tangent (* horizontal);
 
        * distance = square_root (origin + offset + 2 * z * (* distance) * square_root (1.0f / (side_a * side_a + sibe_b * side_b)));
 }
 
 
        * distance = square_root (origin + offset + 2 * z * (* distance) * square_root (1.0f / (side_a * side_a + sibe_b * side_b)));
 }
 
-static v0 sphere_convert (sphere_vector * vector, f4 x, f4 y, f4 z) {
+static procedure sphere_convert (sphere_vector * vector, real x, real y, real z) {
        vector->distance   = sphere_distance   (x, y, z);
        vector->horizontal = sphere_horizontal (x,    z);
        vector->vertical   = sphere_vertical   (   y, z);
        vector->distance   = sphere_distance   (x, y, z);
        vector->horizontal = sphere_horizontal (x,    z);
        vector->vertical   = sphere_vertical   (   y, z);
index 84922e73b1345531e34020fa736d11bcb56d2670..20fa637e37a094be2f7ce155cfb7cbe6d495a937 100755 (executable)
--- a/xprite.h
+++ b/xprite.h
@@ -16,7 +16,7 @@
 /// warranty of merchantability or fitness for a particular purpose, because it is pointless. Please see the GNU (Geenoo) General Public License
 /// for more details, if you dare, it is a lot of text that nobody wants to read...
 
 /// warranty of merchantability or fitness for a particular purpose, because it is pointless. Please see the GNU (Geenoo) General Public License
 /// for more details, if you dare, it is a lot of text that nobody wants to read...
 
-static unsigned s4 sprite_colour [128] = {
+static unsigned integer sprite_colour [128] = {
        0x00000000,     0xff222222,     0xff444444,     0xff666666,     0xff888888,     0xffaaaaaa,     0xffcccccc,     0xffeeeeee,
        0x11000000,     0xff000022,     0xff000044,     0xff000066,     0xff000088,     0xff0000aa,     0xff0000cc,     0xff0000ee,
        0x22000000,     0xff002200,     0xff004400,     0xff006600,     0xff008800,     0xff00aa00,     0xff00cc00,     0xff00ee00,
        0x00000000,     0xff222222,     0xff444444,     0xff666666,     0xff888888,     0xffaaaaaa,     0xffcccccc,     0xffeeeeee,
        0x11000000,     0xff000022,     0xff000044,     0xff000066,     0xff000088,     0xff0000aa,     0xff0000cc,     0xff0000ee,
        0x22000000,     0xff002200,     0xff004400,     0xff006600,     0xff008800,     0xff00aa00,     0xff00cc00,     0xff00ee00,
@@ -35,37 +35,37 @@ static unsigned s4 sprite_colour [128] = {
        0xff000000,     0xff221122,     0xff442244,     0xff663366,     0xff884488,     0xffaa55aa,     0xffcc66cc,     0xffee77ee
 };
 
        0xff000000,     0xff221122,     0xff442244,     0xff663366,     0xff884488,     0xffaa55aa,     0xffcc66cc,     0xffee77ee
 };
 
-static v0 * sprite_import (c1 * path, s4 * width, s4 * height) {
-       unsigned c1 check_width  = 0;
-       unsigned c1 check_height = 0;
+static generic * sprite_import (character * path, integer * width, integer * height) {
+       unsigned character check_width  = 0;
+       unsigned character check_height = 0;
 
 
-       s4 file, move;
+       integer file, move;
 
 
-       unsigned s4 * data = null;
+       unsigned integer * data = null;
 
        file = file_open (path, file_flag_read);
 
 
        file = file_open (path, file_flag_read);
 
-       file_read (file, & check_width,  (int) sizeof (check_width));
-       file_read (file, & check_height, (int) sizeof (check_height));
+       file_read (file, & check_width,  (integer) sizeof (check_width));
+       file_read (file, & check_height, (integer) sizeof (check_height));
 
 
-       * width  = (int) check_width;
-       * height = (int) check_height;
+       * width  = (integer) check_width;
+       * height = (integer) check_height;
 
        fatal_failure ((* width)  == 0, "sprite_import: Invalid sprite width.");
        fatal_failure ((* height) == 0, "sprite_import: Invalid sprite height.");
 
 
        fatal_failure ((* width)  == 0, "sprite_import: Invalid sprite width.");
        fatal_failure ((* height) == 0, "sprite_import: Invalid sprite height.");
 
-       data = allocate ((* width) * (* height) * (int) sizeof (* data));
+       data = allocate ((* width) * (* height) * (integer) sizeof (* data));
 
        for (move = 0; move < (* width) * (* height); ++move) {
 
        for (move = 0; move < (* width) * (* height); ++move) {
-               s4 colour = 0;
-               s4 repeat = 0;
+               integer colour = 0;
+               integer repeat = 0;
 
                file_read (file, & colour, 1);
 
                if ((colour & 0x80) == 0) {
                        data [move] = sprite_colour [colour];
                } else {
 
                file_read (file, & colour, 1);
 
                if ((colour & 0x80) == 0) {
                        data [move] = sprite_colour [colour];
                } else {
-                       s4 offset;
+                       integer offset;
 
                        file_read (file, & repeat, 1);
 
 
                        file_read (file, & repeat, 1);
 
@@ -85,8 +85,8 @@ static v0 * sprite_import (c1 * path, s4 * width, s4 * height) {
        return (data);
 }
 
        return (data);
 }
 
-static v0 sprite_export (c1 * path, s4 width, s4 height, unsigned s4 * data) {
-       s4 file, move;
+static procedure sprite_export (character * path, integer width, integer height, unsigned integer * data) {
+       integer file, move;
 
        file = file_open (path, file_flag_edit | file_flag_truncate | file_flag_create);
 
 
        file = file_open (path, file_flag_edit | file_flag_truncate | file_flag_create);
 
@@ -97,8 +97,8 @@ static v0 sprite_export (c1 * path, s4 width, s4 height, unsigned s4 * data) {
        file_write (file, & height, 1);
 
        for (move = 0; move < width * height; ++move) {
        file_write (file, & height, 1);
 
        for (move = 0; move < width * height; ++move) {
-               s4 colour = 0;
-               s4 repeat = 0;
+               integer colour = 0;
+               integer repeat = 0;
 
                for (repeat = 1; (move + repeat < width * height) && (data [move] == data [move + repeat]) && (repeat < 256); ++repeat);
 
 
                for (repeat = 1; (move + repeat < width * height) && (data [move] == data [move + repeat]) && (repeat < 256); ++repeat);
 
@@ -122,8 +122,8 @@ static v0 sprite_export (c1 * path, s4 width, s4 height, unsigned s4 * data) {
        file = file_close (file);
 }
 
        file = file_close (file);
 }
 
-static v0 sprite_swap_channels (unsigned s4 * data, s4 width, s4 height) {
-       s4 move;
+static procedure sprite_swap_channels (unsigned integer * data, integer width, integer height) {
+       integer move;
 
        for (move = 0; move < width * height; ++move) {
                data [move] = (data [move] & 0xff00ff00) | ((data [move] & 0xff0000) >> 16) | ((data [move] & 0xff) << 16);
 
        for (move = 0; move < width * height; ++move) {
                data [move] = (data [move] & 0xff00ff00) | ((data [move] & 0xff0000) >> 16) | ((data [move] & 0xff) << 16);
diff --git a/xrena.h b/xrena.h
index 10feaf52e5817a4f2e91d0bc481118d3fb205790..16adb8078dfa74a528739a162b7c5109cc0d3b7b 100755 (executable)
--- a/xrena.h
+++ b/xrena.h
 /// warranty of merchantability or fitness for a particular purpose, because it is pointless. Please see the GNU (Geenoo) General Public License
 /// for more details, if you dare, it is a lot of text that nobody wants to read...
 
 /// warranty of merchantability or fitness for a particular purpose, because it is pointless. Please see the GNU (Geenoo) General Public License
 /// for more details, if you dare, it is a lot of text that nobody wants to read...
 
+/// Description
+///
+/// Xrena, extremely small header only library serving as arena allocator, with one global variable.In order to use it, include this header file,
+/// there's no macro for including implementation (like stb libraries), this is for projects that have only one C source file, and one or more C
+/// header files. I'll provide minimal examples below.
+
+/// Maximum size for single memory "allocation", if you're making a parser, you can use as low as 8 or 16, but as soon as you start working with
+/// bigger structures, images or models, you need this to be higher value, for example 64 * 1024 * 1024 (loading 4k textures). If you don't
+/// understand how to use this macro, turn off your machine and read some books, or alternatively, fuck around until you find out.
+
 #ifndef arena_block_limit
 #define arena_block_limit (1024 * 1024)
 #endif
 
 #ifndef arena_block_limit
 #define arena_block_limit (1024 * 1024)
 #endif
 
+/// Structure and global variable definition, you shouldn't ever modify this, functions below cover that task.
+
 static struct {
 static struct {
-       u8 block_count;
-       u8 block_limit;
+       caliber block_count;
+       caliber block_limit;
        struct {
        struct {
-               u8   count;
-               u8   capacity;
-               c1  * buffer;
+               caliber      count;
+               caliber      capacity;
+               character  * buffer;
        } * * block_array;
        } * * block_array;
-} * arena = null;
+} * arena_memory = null;
+
+/// Warning: Local function! You don't need to use this at all, it's covered by other functions, don't worry about it.
+///
+/// This function will initialize the state of variable 'arena_memory', or extend it's size once memory is filled.
 
 
-static v0 arena_initialize (v0) {
-       u8 current = ++arena->block_count - 1;
+static procedure arena_begin_or_widen (none) {
+       caliber current = ++arena_memory->block_count - 1;
 
 
-       arena->block_limit = arena_block_limit;
+       arena_memory->block_limit = arena_block_limit;
 
 
-       arena->block_array = reallocate (arena->block_array, arena->block_count * sizeof (* arena->block_array));
+       arena_memory->block_array = reallocate (arena_memory->block_array, arena_memory->block_count * sizeof (* arena_memory->block_array));
 
 
-       arena->block_array [current] = allocate (sizeof (* arena));
+       arena_memory->block_array [current] = allocate (sizeof (* arena));
 
 
-       arena->block_array [current]->buffer   = allocate (arena_block_limit);
-       arena->block_array [current]->count    = 0;
-       arena->block_array [current]->capacity = arena_block_limit;
+       arena_memory->block_array [current]->buffer   = allocate (arena_block_limit);
+       arena_memory->block_array [current]->count    = 0;
+       arena_memory->block_array [current]->capacity = arena_block_limit;
 }
 
 }
 
-static v0 arena_deinitialize (v0) {
-       for (u8 index = 0; index < arena->block_count; ++index) {
-               arena->block_array [index]->buffer = deallocate (arena->block_array [index]->buffer);
-               arena->block_array [index]         = deallocate (arena->block_array [index]);
+/// Warning: Local function! You don't need to use this at all, it's covered by other functions, don't worry about it.
+///
+/// This function will clean all memory pools from variable 'arena_memory', freeing all memory used by the arena allocator.
+
+static procedure arena_clean (none) {
+       for (caliber index = 0; index < arena_memory->block_count; ++index) {
+               arena_memory->block_array [index]->buffer = deallocate (arena_memory->block_array [index]->buffer);
+               arena_memory->block_array [index]         = deallocate (arena_memory->block_array [index]);
        }
 
        }
 
-       arena->block_array = deallocate (arena->block_array);
-       arena              = deallocate (arena);
+       arena_memory->block_array = deallocate (arena_memory->block_array);
+       arena_memory              = deallocate (arena_memory);
 }
 
 }
 
-static v0 * arena_add (u8 size) {
-       u8 current = arena->block_count - 1;
+/// Now, this is finally a function that you want to use. You want to allocate object of some size, just add that size in arena, it'll return
+/// you a pointer to that memory location, the same way you'd use 'malloc', and that memory will be zero initialized (unlike 'malloc', just like
+/// 'calloc'). You don't ever have to worry about freeing memory, if your program has definite exit routine. Internally, it checks if arena
+/// allocator was initialized, if it was, it'll extend it if there's not enough memory and return that pointer, otherwise, it will initialize it
+/// and set clean up call at exit.
+///
+/// Make an array of 60 integers, they'll all be zero.
+///
+/// integer * my_integers = arena_add (60 * sizeof (my_integers));
+
+static generic * arena_add (caliber size) {
+       caliber current = arena_memory->block_count - 1;
 
        if (arena == null) {
 
        if (arena == null) {
-               clean_up (arena_deinitialize);
+               clean_up (arena_clean);
 
 
-               arena = allocate (sizeof (* arena));
+               arena_memory = allocate (sizeof (* arena_memory));
 
 
-               arena_initialize ();
+               arena_begin_or_widen ();
        }
 
        }
 
-       fatal_failure (size > arena->block_limit, "arena_add: Block limit reached.");
+       fatal_failure (size > arena_memory->block_limit, "arena_add: Block limit reached.");
 
 
-       if (arena->block_array [current]->count + size > arena->block_array [current]->capacity) {
-               arena_initialize ();
+       if (arena_memory->block_array [current]->count + size > arena_memory->block_array [current]->capacity) {
+               arena_begin_or_widen ();
        }
 
        }
 
-       arena->block_array [current]->count += size;
+       arena_memory->block_array [current]->count += size;
+
+       return ((generic *) & arena_memory->block_array [current]->buffer [arena_memory->block_array [current]->count - size]);
+}
+
+/// Add null terminated string to arena memory.
+///
+/// character * my_token = arena_add_string (parsed_token);
 
 
-       return ((v0*) & arena->block_array [current]->buffer [arena->block_array [current]->count - size]);
+static character * arena_add_string (character * string) {
+       character * pointer = arena_add (string_length (string) * sizeof (pointer));
+
+       string_copy (pointer, string);
+
+       return (pointer);
 }
 
 }
 
-static c1 * arena_add_data (v0 * data, u8 size) {
-       v0 * pointer = arena_add (size);
+/// Add raw memory of certain size to arena memory.
+///
+/// generic * my_model = arena_add_memory (raw_model_data, size_of_model_data);
+
+static generic * arena_add_memory (generic * memory, caliber size) {
+       generic * pointer = arena_add (size);
 
 
-       memory_copy (pointer, data, size);
+       memory_copy (pointer, memory, size);
 
        return (pointer);
 }
 
 
        return (pointer);
 }
 
-static c1 * arena_add_file (c1 * path, u4 flag, b4 null_terminate) {
-       s4     file = -1;
-       u8   size = 0;
-       c1  * data = null;
+/// Add file data from certain path, specify file flags (similar to 'open' system call) and set if you want it to be null terminated.
+///
+/// generic   * my_binary_file = arena_add_file ("foo.bin", file_flag_read, false);
+/// character * my_text_file   = arena_add_file ("foo.txt", file_flag_read, true);
+
+static character * arena_add_file (character * path, integer flag, boolean null_terminate) {
+       integer     file = -1;
+       caliber     size = 0;
+       character * data = null;
 
        file = file_open (path, flag);
 
        file = file_open (path, flag);
-       size = file_size (path) + (u8) null_terminate;
+       size = file_size (path) + (caliber) null_terminate;
        data = arena_add (size);
 
        data = arena_add (size);
 
-       file_read (file, data, size - (u8) null_terminate);
+       file_read (file, data, size - (caliber) null_terminate);
 
        file = file_close (file);
 
        return (data);
 }
 
 
        file = file_close (file);
 
        return (data);
 }
 
-static u8 arena_usage (v0) {
-       u8 usage = 0;
+/// Simple utility function that returns how many bytes have been added to arena allocator.
+///
+/// print ("So far I used %l bytes of memory...\n", arena_usage ());
+
+static caliber arena_usage (none) {
+       caliber usage = 0;
 
 
-       for (u8 block = 0; block < arena->block_count; ++block) {
-               usage += arena->block_array [block]->count;
+       for (caliber block = 0; block < arena_memory->block_count; ++block) {
+               usage += arena_memory->block_array [block]->count;
        }
 
        return (usage);
        }
 
        return (usage);
index fb432e1c2b27d40a972fdbf9766021b75acb5abd..143cf332323068f4d15a981f74714354d239e910 100755 (executable)
@@ -5,7 +5,7 @@
 ///
 /// Copyright (c) 1997 - Ognjen 'xolatile' Milan Robovic
 ///
 ///
 /// Copyright (c) 1997 - Ognjen 'xolatile' Milan Robovic
 ///
-/// xolatile@chud.cyou - xrocessor - Probably the most minimalistic general preprocessor aimed at Ada, Pascal and EAXHLA language syntax.
+/// xolatile@chud.cyou - xrocessor - Probably the most minimalistic general preprocessor aimed at EAXHLA language syntax.
 ///
 /// This program is free software, free as in freedom and as in free beer, you can redistribute it and/or modify it under the terms of the GNU
 /// General Public License as published by the Free Software Foundation, either version 3 of the License, or any later version if you wish...
 ///
 /// This program is free software, free as in freedom and as in free beer, you can redistribute it and/or modify it under the terms of the GNU
 /// General Public License as published by the Free Software Foundation, either version 3 of the License, or any later version if you wish...
 /// warranty of merchantability or fitness for a particular purpose, because it is pointless. Please see the GNU (Geenoo) General Public License
 /// for more details, if you dare, it is a lot of text that nobody wants to read...
 
 /// warranty of merchantability or fitness for a particular purpose, because it is pointless. Please see the GNU (Geenoo) General Public License
 /// for more details, if you dare, it is a lot of text that nobody wants to read...
 
-#define processor_token_limit (1024)
+static natural processor_parse_comment (character * buffer);
+static natural processor_parse_include (character * buffer);
+static natural processor_parse_use     (character * buffer);
+static natural processor_parse_alias   (character * buffer);
+static natural processor_parse_macro   (character * buffer);
+static natural processor_parse_scope   (character * buffer);
+static natural processor_parse_unscope (character * buffer);
+static natural processor_parse_default (character * buffer);
 
 
-static u8 processor_parse_comment (c1 * buffer);
-static u8 processor_parse_include (c1 * buffer);
-static u8 processor_parse_use     (c1 * buffer);
-static u8 processor_parse_alias   (c1 * buffer);
-static u8 processor_parse_macro   (c1 * buffer);
-static u8 processor_parse_scope   (c1 * buffer);
-static u8 processor_parse_unscope (c1 * buffer);
-static u8 processor_parse_default (c1 * buffer);
-
-static v0 processor_parse_buffer (c1 * buffer, u8 limit);
+static procedure processor_parse_buffer (character * buffer, natural limit);
 
 typedef enum {
        processor_token_comment,        processor_token_include,        processor_token_use,            processor_token_alias,
 
 typedef enum {
        processor_token_comment,        processor_token_include,        processor_token_use,            processor_token_alias,
@@ -33,28 +31,25 @@ typedef enum {
        processor_token_count
 } processor_token_enumeration;
 
        processor_token_count
 } processor_token_enumeration;
 
-static c1 * processor_token_key [processor_token_count - 1] = {
+static character * processor_token_key [processor_token_count - 1] = {
        "---",          "include ",     "use ",         "alias ",       "macro ",       "scope ",       "unscope "
 };
 
        "---",          "include ",     "use ",         "alias ",       "macro ",       "scope ",       "unscope "
 };
 
-static u8 (* processor_parse_key [processor_token_count]) (c1 * buffer) = {
+static natural (* processor_parse_key [processor_token_count]) (character * buffer) = {
        processor_parse_comment,        processor_parse_include,        processor_parse_use,            processor_parse_alias,
        processor_parse_macro,          processor_parse_scope,          processor_parse_unscope,        processor_parse_default
 };
 
        processor_parse_comment,        processor_parse_include,        processor_parse_use,            processor_parse_alias,
        processor_parse_macro,          processor_parse_scope,          processor_parse_unscope,        processor_parse_default
 };
 
-static u4 token_count = 0;
-
-static struct {
-       c1  * data;
-       u8   size;
-       s4     type;
-} * token_array [processor_token_limit],
-  * token_value [processor_token_limit];
-
-static u8 processor_parse_default (c1 * buffer) {
-       s4 select;
+typedef struct {
+       natural       count;
+       natural       limit;
+       character * * token_array_data;
+       natural     * token_array_size;
+       natural     * token_array_type;
+} processor_structure;
 
 
-       for (select = 0; select < token_count; ++select) {
+static natural processor_parse_default (character * buffer) {
+       for (natural select = 0; select < token_count; ++select) {
                if (string_compare_limit (buffer, token_array [select]->data, token_array [select]->size) == true) {
                        if (token_array [select]->type == token_alias) {
                                if (character_is_separator (buffer [-1])                         == false) continue;
                if (string_compare_limit (buffer, token_array [select]->data, token_array [select]->size) == true) {
                        if (token_array [select]->type == token_alias) {
                                if (character_is_separator (buffer [-1])                         == false) continue;
@@ -81,21 +76,18 @@ static u8 processor_parse_default (c1 * buffer) {
        return (1);
 }
 
        return (1);
 }
 
-static u8 processor_parse_comment (c1 * buffer) {
-       s4 offset;
-
-       for (offset = 3; buffer [offset] != '\0'; ++offset) {
+static natural processor_parse_comment (character * buffer) {
+       for (natural offset = 3; buffer [offset] != '\0'; ++offset) {
                if (buffer [offset] == '\n') break;
        }
 
        return (offset + 1);
 }
 
                if (buffer [offset] == '\n') break;
        }
 
        return (offset + 1);
 }
 
-static u8 processor_parse_use (c1 * buffer) {
-       s4 offset;
-       s4 length;
+static natural processor_parse_use (character * buffer) {
+       natural length = 0;
 
 
-       for (offset = 4; (buffer [offset] != '\0') && (character_is_blank (buffer [offset]) == true); ++offset);
+       for (natural offset = 4; (buffer [offset] != '\0') && (character_is_blank (buffer [offset]) == true); ++offset);
 
        ++token_count;
 
 
        ++token_count;
 
@@ -111,10 +103,10 @@ static u8 processor_parse_use (c1 * buffer) {
        return (offset + length + 1);
 }
 
        return (offset + length + 1);
 }
 
-static u8 processor_parse_include (c1 * buffer) {
-       s4    length;
-       s4    offset;
-       c1 * data;
+static natural processor_parse_include (character * buffer) {
+       natural     length = 0;
+       natural     offset = 0;
+       character * data   = null;
 
        for (offset = 8; (buffer [offset] != '\0') && (character_is_blank (buffer [offset]) == true); ++offset);
 
 
        for (offset = 8; (buffer [offset] != '\0') && (character_is_blank (buffer [offset]) == true); ++offset);
 
@@ -138,9 +130,9 @@ static u8 processor_parse_include (c1 * buffer) {
        return (offset + length + 1);
 }
 
        return (offset + length + 1);
 }
 
-static u8 processor_parse_alias (c1 * buffer) {
-       s4 offset;
-       s4 length;
+static natural processor_parse_alias (character * buffer) {
+       natural offset = 0;
+       natural length = 0;
 
        for (offset = 6; (buffer [offset] != '\0') && (character_is_blank (buffer [offset]) == true); ++offset);
 
 
        for (offset = 6; (buffer [offset] != '\0') && (character_is_blank (buffer [offset]) == true); ++offset);
 
@@ -168,9 +160,9 @@ static u8 processor_parse_alias (c1 * buffer) {
        return (offset + length + 1);
 }
 
        return (offset + length + 1);
 }
 
-static u8 processor_parse_macro (c1 * buffer) {
-       s4 offset;
-       s4 length;
+static natural processor_parse_macro (character * buffer) {
+       natural offset = 0;
+       natural length = 0;
 
        for (offset = 6; (buffer [offset] != '\0') && (character_is_blank (buffer [offset]) == true); ++offset);
 
 
        for (offset = 6; (buffer [offset] != '\0') && (character_is_blank (buffer [offset]) == true); ++offset);
 
@@ -202,10 +194,10 @@ static u8 processor_parse_macro (c1 * buffer) {
        return (offset + length + 9 + 1);
 }
 
        return (offset + length + 9 + 1);
 }
 
-static u8 processor_parse_scope (c1 * buffer) {
-       s4 offset;
-       s4 length;
-       s4 select;
+static natural processor_parse_scope (character * buffer) {
+       natural offset = 0;
+       natural length = 0;
+       natural select = 0;
 
        for (offset = 6; (buffer [offset] != '\0') && (character_is_blank (buffer [offset]) == true); ++offset);
 
 
        for (offset = 6; (buffer [offset] != '\0') && (character_is_blank (buffer [offset]) == true); ++offset);
 
@@ -224,10 +216,10 @@ static u8 processor_parse_scope (c1 * buffer) {
        return (offset + length + 1);
 }
 
        return (offset + length + 1);
 }
 
-static u8 processor_parse_unscope (c1 * buffer) {
-       s4 offset;
-       s4 length;
-       s4 select;
+static natural processor_parse_unscope (character * buffer) {
+       natural offset = 0;
+       natural length = 0;
+       natural select = 0;
 
        for (offset = 8; (buffer [offset] != '\0') && (character_is_blank (buffer [offset]) == true); ++offset);
 
 
        for (offset = 8; (buffer [offset] != '\0') && (character_is_blank (buffer [offset]) == true); ++offset);
 
@@ -248,12 +240,10 @@ static u8 processor_parse_unscope (c1 * buffer) {
        return (offset + length + 1);
 }
 
        return (offset + length + 1);
 }
 
-static v0 processor_parse_buffer (c1 * buffer, s4 limit) {
-       s4 offset;
-       s4 length;
-       s4 select;
+static procedure processor_parse_buffer (character * buffer, natural limit) {
+       for (natural length = 0, offset = 0; (buffer [offset] != '\0') && (offset != limit); offset += length) {
+               natural select = 0;
 
 
-       for (length = offset = 0; (buffer [offset] != '\0') && (offset != limit); offset += length) {
                for (select = 0; select < token_default; ++select) {
                        length = string_length (token_key [select]);
                        if (string_compare_limit (& buffer [offset], token_key [select], length) == true) {
                for (select = 0; select < token_default; ++select) {
                        length = string_length (token_key [select]);
                        if (string_compare_limit (& buffer [offset], token_key [select], length) == true) {
diff --git a/xross.h b/xross.h
index c23ad6dc45004200b4cf82e39c98bf8e882ccf97..fe5bff0ef5b2ae87f982a11564a9e6e749bafee1 100755 (executable)
--- a/xross.h
+++ b/xross.h
 /// warranty of merchantability or fitness for a particular purpose, because it is pointless. Please see the GNU (Geenoo) General Public License
 /// for more details, if you dare, it is a lot of text that nobody wants to read...
 
 /// warranty of merchantability or fitness for a particular purpose, because it is pointless. Please see the GNU (Geenoo) General Public License
 /// for more details, if you dare, it is a lot of text that nobody wants to read...
 
-typedef enum {
-       cross_window_fullscreen  = 0x1,
-       cross_window_transparent = 0x2,
-       cross_window_resizable   = 0x4,
-       cross_window_decorated   = 0x8
-} cross_window_flag;
-
 #ifdef use_raptor_renderer
 
 #ifdef use_raptor_renderer
 
-#define cross_structure                   raptor_structure
-#define cross_initialize                  raptor_initialize
-#define cross_deinitialize                raptor_deinitialize
-#define cross_sprite_raw_import           raptor_sprite_raw_import
-#define cross_font_raw_import             raptor_font_raw_import
-#define cross_sprite_import               raptor_sprite_import
-#define cross_font_import                 raptor_font_import
-#define cross_sprite_width                raptor_sprite_width
-#define cross_sprite_height               raptor_sprite_height
-#define cross_character_width             raptor_character_width
-#define cross_character_height            raptor_character_height
-#define cross_string_width                raptor_string_width
-#define cross_string_height               raptor_string_height
-#define cross_center_x                    raptor_center_x
-#define cross_center_y                    raptor_center_y
-#define cross_cursor_inside               raptor_cursor_inside
-#define cross_cursor_left_click           raptor_cursor_left_click
-#define cross_cursor_right_click          raptor_cursor_right_click
-#define cross_configure                   raptor_configure
-#define cross_render_base                 raptor_render_base
-#define cross_render_rectangle            raptor_render_rectangle
-#define cross_render_sprite               raptor_render_sprite
-#define cross_render_sprite_scale         raptor_render_sprite_scale
-#define cross_render_sprite_crop          raptor_render_sprite_crop
-#define cross_render_sprite_colour        raptor_render_sprite_colour
-#define cross_render_sprite_crop_colour   raptor_render_sprite_crop_colour
-#define cross_render_sprite_flip          raptor_render_sprite_flip
-#define cross_render_sprite_animate       raptor_render_sprite_animate
-#define cross_render_character            raptor_render_character
-#define cross_render_string               raptor_render_string
-#define cross_render_framerate            raptor_render_framerate
-#define cross_synchronize                 raptor_synchronize
-#define cross_render_rectangle_vertical_gradient raptor_render_rectangle_vertical_gradient
-
-#include "xaptor.h"
+#define cross_initialize                           raptor_initialize
+#define cross_deinitialize                         raptor_deinitialize
+#define cross_sprite_raw_import                    raptor_sprite_raw_import
+#define cross_font_raw_import                      raptor_font_raw_import
+#define cross_sprite_import                        raptor_sprite_import
+#define cross_font_import                          raptor_font_import
+#define cross_sprite_width                         raptor_sprite_width
+#define cross_sprite_height                        raptor_sprite_height
+#define cross_character_width                      raptor_character_width
+#define cross_character_height                     raptor_character_height
+#define cross_string_width                         raptor_string_width
+#define cross_string_height                        raptor_string_height
+#define cross_center_x                             raptor_center_x
+#define cross_center_y                             raptor_center_y
+#define cross_cursor_inside                        raptor_cursor_inside
+#define cross_configure                            raptor_configure
+#define cross_render_base                          raptor_render_base
+#define cross_render_rectangle                     raptor_render_rectangle
+#define cross_render_sprite                        raptor_render_sprite
+#define cross_render_sprite_scale                  raptor_render_sprite_scale
+#define cross_render_sprite_crop                   raptor_render_sprite_crop
+#define cross_render_sprite_colour                 raptor_render_sprite_colour
+#define cross_render_sprite_flip                   raptor_render_sprite_flip
+#define cross_render_sprite_animation              raptor_render_sprite_animation
+#define cross_render_sprite_crop_colour            raptor_render_sprite_crop_colour
+#define cross_render_character                     raptor_render_character
+#define cross_render_string                        raptor_render_string
+#define cross_render_framerate                     raptor_render_framerate
+#define cross_synchronize                          raptor_synchronize
+#define cross_render_rectangle_vertical_gradient   raptor_render_rectangle_vertical_gradient
+#define cross_render_rectangle_horizontal_gradient raptor_render_rectangle_horizontal_gradient
+
+#include <xolatile/xaptor.h>
+
+typedef raptor_structure cross_structure;
 
 #endif
 
 #ifdef use_common_renderer
 
 
 #endif
 
 #ifdef use_common_renderer
 
-#define cross_structure                   common_structure
 #define cross_font_width                  common_font_width
 #define cross_font_height                 common_font_height
 #define cross_font_tabulator              common_font_tabulator
 #define cross_font_width                  common_font_width
 #define cross_font_height                 common_font_height
 #define cross_font_tabulator              common_font_tabulator
-#define cross_gameplay_framerate          common_gameplay_framerate
-#define cross_animation_framerate         common_animation_framerate
 #define cross_center_x                    common_center_x
 #define cross_center_y                    common_center_y
 #define cross_cursor_inside               common_cursor_inside
 #define cross_center_x                    common_center_x
 #define cross_center_y                    common_center_y
 #define cross_cursor_inside               common_cursor_inside
@@ -93,74 +83,71 @@ typedef enum {
 #define cross_render_sprite_colour        common_render_sprite_colour
 #define cross_render_sprite_crop_colour   common_render_sprite_crop_colour
 #define cross_render_sprite_flip          common_render_sprite_flip
 #define cross_render_sprite_colour        common_render_sprite_colour
 #define cross_render_sprite_crop_colour   common_render_sprite_crop_colour
 #define cross_render_sprite_flip          common_render_sprite_flip
-#define cross_render_sprite_animate       common_render_sprite_animate
+#define cross_render_sprite_animation     common_render_sprite_animation
 #define cross_render_sprite_preview       common_render_sprite_preview
 #define cross_render_sprite_control       common_render_sprite_control
 #define cross_render_string_width         common_render_string_width
 #define cross_render_string               common_render_string
 
 #define cross_render_sprite_preview       common_render_sprite_preview
 #define cross_render_sprite_control       common_render_sprite_control
 #define cross_render_string_width         common_render_string_width
 #define cross_render_string               common_render_string
 
-#include "xommon.h"
+#include <xolatile/xommon.h>
+
+typedef common_structure cross_structure;
 
 #endif
 
 #ifdef use_opengl_renderer
 
 
 #endif
 
 #ifdef use_opengl_renderer
 
-#define cross_structure                   opengl_structure
-#define cross_font_width                  opengl_font_width
-#define cross_font_height                 opengl_font_height
-#define cross_font_tabulator              opengl_font_tabulator
-#define cross_gameplay_framerate          opengl_gameplay_framerate
-#define cross_animation_framerate         opengl_animation_framerate
-#define cross_center_x                    opengl_center_x
-#define cross_center_y                    opengl_center_y
-#define cross_cursor_inside               opengl_cursor_inside
-#define cross_cursor_left_click           opengl_cursor_left_click
-#define cross_cursor_right_click          opengl_cursor_right_click
-#define cross_sprite_raw_import            opengl_sprite_raw_import
-#define cross_font_raw_import              opengl_font_raw_import
-#define cross_sprite_import               opengl_sprite_import
-#define cross_font_import                 opengl_font_import
-#define cross_sprite_width                opengl_sprite_width
-#define cross_sprite_height               opengl_sprite_height
-#define cross_initialize                  opengl_initialize
-#define cross_deinitialize                opengl_deinitialize
-#define cross_configure                   opengl_configure
-#define cross_synchronize                 opengl_synchronize
-#define cross_render_base                 opengl_render_base
-#define cross_render_rectangle            opengl_render_rectangle
-#define cross_render_rectangle_gradient_v opengl_render_rectangle_gradient_v
-#define cross_render_rectangle_gradient_h opengl_render_rectangle_gradient_h
-#define cross_render_sprite               opengl_render_sprite
-#define cross_render_sprite_crop          opengl_render_sprite_crop
-#define cross_render_sprite_colour        opengl_render_sprite_colour
-#define cross_render_sprite_crop_colour   opengl_render_sprite_crop_colour
-#define cross_render_sprite_flip          opengl_render_sprite_flip
-#define cross_render_sprite_animate       opengl_render_sprite_animate
-#define cross_render_sprite_preview       opengl_render_sprite_preview
-#define cross_render_sprite_control       opengl_render_sprite_control
-#define cross_render_character            opengl_render_character
-#define cross_render_string_width         opengl_render_string_width
-#define cross_render_string               opengl_render_string
-
-#include "xpengl.h"
+#define cross_initialize                           opengl_initialize
+#define cross_deinitialize                         opengl_deinitialize
+#define cross_sprite_raw_import                    opengl_sprite_raw_import
+#define cross_font_raw_import                      opengl_font_raw_import
+#define cross_sprite_import                        opengl_sprite_import
+#define cross_font_import                          opengl_font_import
+#define cross_sprite_width                         opengl_sprite_width
+#define cross_sprite_height                        opengl_sprite_height
+#define cross_character_width                      opengl_character_width
+#define cross_character_height                     opengl_character_height
+#define cross_string_width                         opengl_string_width
+#define cross_string_height                        opengl_string_height
+#define cross_center_x                             opengl_center_x
+#define cross_center_y                             opengl_center_y
+#define cross_cursor_inside                        opengl_cursor_inside
+#define cross_configure                            opengl_configure
+#define cross_render_base                          opengl_render_base
+#define cross_render_rectangle                     opengl_render_rectangle
+#define cross_render_sprite                        opengl_render_sprite
+#define cross_render_sprite_scale                  opengl_render_sprite_scale
+#define cross_render_sprite_crop                   opengl_render_sprite_crop
+#define cross_render_sprite_colour                 opengl_render_sprite_colour
+#define cross_render_sprite_flip                   opengl_render_sprite_flip
+#define cross_render_sprite_orient                 opengl_render_sprite_orient
+#define cross_render_sprite_animation              opengl_render_sprite_animation
+#define cross_render_sprite_crop_colour            opengl_render_sprite_crop_colour
+#define cross_render_character                     opengl_render_character
+#define cross_render_string                        opengl_render_string
+#define cross_render_framerate                     opengl_render_framerate
+#define cross_synchronize                          opengl_synchronize
+#define cross_render_rectangle_vertical_gradient   opengl_render_rectangle_vertical_gradient
+#define cross_render_rectangle_horizontal_gradient opengl_render_rectangle_horizontal_gradient
+
+#include <xolatile/xpengl.h>
+
+typedef opengl_structure cross_structure;
 
 #endif
 
 #ifdef use_vulkan_renderer
 
 
 #endif
 
 #ifdef use_vulkan_renderer
 
-#define cross_structure                   vulkan_structure
 #define cross_font_width                  vulkan_font_width
 #define cross_font_height                 vulkan_font_height
 #define cross_font_tabulator              vulkan_font_tabulator
 #define cross_font_width                  vulkan_font_width
 #define cross_font_height                 vulkan_font_height
 #define cross_font_tabulator              vulkan_font_tabulator
-#define cross_gameplay_framerate          vulkan_gameplay_framerate
-#define cross_animation_framerate         vulkan_animation_framerate
 #define cross_center_x                    vulkan_center_x
 #define cross_center_y                    vulkan_center_y
 #define cross_cursor_inside               vulkan_cursor_inside
 #define cross_cursor_left_click           vulkan_cursor_left_click
 #define cross_cursor_right_click          vulkan_cursor_right_click
 #define cross_center_x                    vulkan_center_x
 #define cross_center_y                    vulkan_center_y
 #define cross_cursor_inside               vulkan_cursor_inside
 #define cross_cursor_left_click           vulkan_cursor_left_click
 #define cross_cursor_right_click          vulkan_cursor_right_click
-#define cross_sprite_raw_import            vulkan_sprite_raw_import
-#define cross_font_raw_import              vulkan_font_raw_import
+#define cross_sprite_raw_import           vulkan_sprite_raw_import
+#define cross_font_raw_import             vulkan_font_raw_import
 #define cross_sprite_import               vulkan_sprite_import
 #define cross_font_import                 vulkan_font_import
 #define cross_sprite_width                vulkan_sprite_width
 #define cross_sprite_import               vulkan_sprite_import
 #define cross_font_import                 vulkan_font_import
 #define cross_sprite_width                vulkan_sprite_width
@@ -178,13 +165,15 @@ typedef enum {
 #define cross_render_sprite_colour        vulkan_render_sprite_colour
 #define cross_render_sprite_crop_colour   vulkan_render_sprite_crop_colour
 #define cross_render_sprite_flip          vulkan_render_sprite_flip
 #define cross_render_sprite_colour        vulkan_render_sprite_colour
 #define cross_render_sprite_crop_colour   vulkan_render_sprite_crop_colour
 #define cross_render_sprite_flip          vulkan_render_sprite_flip
-#define cross_render_sprite_animate       vulkan_render_sprite_animate
+#define cross_render_sprite_animation     vulkan_render_sprite_animation
 #define cross_render_sprite_preview       vulkan_render_sprite_preview
 #define cross_render_sprite_control       vulkan_render_sprite_control
 #define cross_render_character            vulkan_render_character
 #define cross_render_string_width         vulkan_render_string_width
 #define cross_render_string               vulkan_render_string
 
 #define cross_render_sprite_preview       vulkan_render_sprite_preview
 #define cross_render_sprite_control       vulkan_render_sprite_control
 #define cross_render_character            vulkan_render_character
 #define cross_render_string_width         vulkan_render_string_width
 #define cross_render_string               vulkan_render_string
 
-#include "xulkan.h"
+#include <xolatile/xulkan.h>
+
+typedef vulkan_structure cross_structure;
 
 #endif
 
 #endif
diff --git a/xscii.c b/xscii.c
index 0e657e5d2a5a455fb22c7b3097e071461da9d734..8f638975d0df1c047c71c1f65d213fbf7710b2a3 100755 (executable)
--- a/xscii.c
+++ b/xscii.c
@@ -1,44 +1,44 @@
 #include <xolatile/xtandard.h>
 
 #include <xolatile/xtandard.h>
 
-static v0 echo_base (s4 character, s4 base, s4 colour, s4 effect) {
+static procedure echo_base (integer index, integer base, integer colour, integer effect) {
        print ("/0 | /-");
 
        echo_colour (colour, effect);
 
        if (base == 2) {
        print ("/0 | /-");
 
        echo_colour (colour, effect);
 
        if (base == 2) {
-               echo (format_to_string (character, 0, base, 7, '0'));
+               echo (format_to_string (index, 0, base, 7, '0'));
        } else if (base == 8) {
        } else if (base == 8) {
-               echo (format_to_string (character, 0, base, 3, '0'));
+               echo (format_to_string (index, 0, base, 3, '0'));
        } else if (base == 16) {
        } else if (base == 16) {
-               echo (format_to_string (character, 0, base, 2, '0'));
+               echo (format_to_string (index, 0, base, 2, '0'));
        } else {
        } else {
-               echo (format_to_string (character, 0, base, 3, ' '));
+               echo (format_to_string (index, 0, base, 3, ' '));
        }
 
        echo_cancel ();
 }
 
        }
 
        echo_cancel ();
 }
 
-static v0 echo_code (s4 character) {
-       c1 * code [] = {
+static procedure echo_code (integer index) {
+       character * code [] = {
                "NUL",  "SOH",  "STX",  "ETX",  "EOT",  "ENQ",  "ACK",  "BEL",  "BS",   "HT",   "LF",   "VT",   "FF",   "CR",   "SO",   "SI",
                "DLE",  "DC1",  "DC2",  "DC3",  "DC4",  "NAK",  "SYN",  "ETB",  "CAN",  "EM",   "SUB",  "ESC",  "FS",   "GS",   "RS",   "US",
                "  "
        };
 
                "NUL",  "SOH",  "STX",  "ETX",  "EOT",  "ENQ",  "ACK",  "BEL",  "BS",   "HT",   "LF",   "VT",   "FF",   "CR",   "SO",   "SI",
                "DLE",  "DC1",  "DC2",  "DC3",  "DC4",  "NAK",  "SYN",  "ETB",  "CAN",  "EM",   "SUB",  "ESC",  "FS",   "GS",   "RS",   "US",
                "  "
        };
 
-       if (character == 127) {
+       if (index == 127) {
                print ("/0 | /4DEL/-");
                print ("/0 | /4DEL/-");
-       } else if (character_is_visible (character) == false) {
-               print ("/0 | /4%s/-", code [character]);
-               if (string_length (code [character]) == 2) {
+       } else if (character_is_visible (index) == false) {
+               print ("/0 | /4%s/-", code [index]);
+               if (string_length (code [index]) == 2) {
                        echo (" ");
                }
        } else {
                        echo (" ");
                }
        } else {
-               print ("/0 | /4%c  /-", character);
+               print ("/0 | /4%c  /-", index);
        }
 }
 
        }
 }
 
-static v0 echo_name (s4 character) {
-       c1 * name [] = {
+static procedure echo_name (integer index) {
+       character * name [] = {
                "Null",                         "Start of heading",             "Start of text",                "End of text",
                "End of transmission",          "Enquiry",                      "Acknowledge",                  "Bell",
                "Backspace",                    "Horizontal tab",               "Line feed",                    "Vertical tab",
                "Null",                         "Start of heading",             "Start of text",                "End of text",
                "End of transmission",          "Enquiry",                      "Acknowledge",                  "Bell",
                "Backspace",                    "Horizontal tab",               "Line feed",                    "Vertical tab",
@@ -73,24 +73,22 @@ static v0 echo_name (s4 character) {
                "Vertical bar",                 "Closing brace",                "Tilde",                        "Delete"
        };
 
                "Vertical bar",                 "Closing brace",                "Tilde",                        "Delete"
        };
 
-       print ("/0 | /5%s/-", name [character]);
+       print ("/0 | /5%s/-", name [index]);
 
 
-       output ("                                        ", 24 - string_length (name [character]));
+       output ("                                        ", 24 - string_length (name [index]));
 }
 
 }
 
-s4 main (v0) {
-       s4 character;
+integer main (none) {
+       for (integer index = 0; index < 128; ++index) {
+               echo_base (index,  2, colour_white, effect_normal);
+               echo_base (index,  8, colour_cyan,  effect_normal);
+               echo_base (index, 10, colour_cyan,  effect_italic);
+               echo_base (index, 16, colour_cyan,  effect_bold);
 
 
-       for (character = 0; character < 128; ++character) {
-               echo_base (character,  2, colour_white, effect_normal);
-               echo_base (character,  8, colour_cyan,  effect_normal);
-               echo_base (character, 10, colour_cyan,  effect_italic);
-               echo_base (character, 16, colour_cyan,  effect_bold);
+               echo_code (index);
+               echo_name (index);
 
 
-               echo_code (character);
-               echo_name (character);
-
-               if (character % 2 != 0) {
+               if (index % 2 != 0) {
                        echo ("\n");
                }
        }
                        echo ("\n");
                }
        }
index 585f135db96e0a69ace376b277b1208febf325d2..25bc7a0d1a94c8e5da0d49ba233c789320cc95ea 100755 (executable)
@@ -19,6 +19,7 @@
 #define _GNU_SOURCE
 
 #include <sys/stat.h>
 #define _GNU_SOURCE
 
 #include <sys/stat.h>
+
 #include <stdlib.h>
 #include <stdarg.h>
 #include <unistd.h>
 #include <stdlib.h>
 #include <stdarg.h>
 #include <unistd.h>
@@ -26,7 +27,7 @@
 #include <time.h>
 #include <dirent.h>
 
 #include <time.h>
 #include <dirent.h>
 
-#define null ((v0 *) 0)
+#define null ((generic *) 0)
 
 #define standard_input  (STDIN_FILENO)
 #define standard_output (STDOUT_FILENO)
 
 #define standard_input  (STDIN_FILENO)
 #define standard_output (STDOUT_FILENO)
 #define file_seek_set     (SEEK_SET)
 #define file_seek_end     (SEEK_END)
 
 #define file_seek_set     (SEEK_SET)
 #define file_seek_end     (SEEK_END)
 
+#define maximal_integer (0b01111111111111111111111111111111)
+#define minimal_integer (0b10000000000000000000000000000000)
+#define maximal_natural (0b11111111111111111111111111111111)
+#define minimal_natural (0b00000000000000000000000000000000)
+
+#define pstring_length (256)
+
 #define echo(text) output ((text), sizeof ((text)) - 1)
 
 #define echo(text) output ((text), sizeof ((text)) - 1)
 
-#define maximum(x, y) (((x) > (y)) ? (x) : (y))
-#define minimum(x, y) (((x) < (y)) ? (x) : (y))
+#define maximum_macro(x, y) (((x) > (y)) ? (x) : (y))
+#define minimum_macro(x, y) (((x) < (y)) ? (x) : (y))
 
 #define array_length(array) (sizeof ((array)) / sizeof (* (array)))
 
 
 #define array_length(array) (sizeof ((array)) / sizeof (* (array)))
 
-typedef void v0;
-typedef char c1;
+typedef void  procedure;
+typedef void  none;
+typedef void  generic;
+typedef char  character;
+typedef float real;
 
 
-typedef signed char  s1;
-typedef signed short s2;
-typedef signed int   s4;
-typedef signed long  s8;
+typedef signed   int integer;
+typedef unsigned int natural;
 
 
-typedef unsigned char  u1;
-typedef unsigned short u2;
-typedef unsigned int   u4;
-typedef unsigned long  u8;
+typedef size_t caliber;
 
 
-typedef float  f4;
-typedef double f8;
+typedef float  real_32;
+typedef double real_64;
 
 
-typedef char pstring [256];
+typedef signed char  integer_8;
+typedef signed short integer_16;
+typedef signed int   integer_32;
+typedef signed long  integer_64;
+
+typedef unsigned char  natural_8;
+typedef unsigned short natural_16;
+typedef unsigned int   natural_32;
+typedef unsigned long  natural_64;
+
+typedef char pstring [pstring_length];
 
 typedef enum {
        false,
        true
 
 typedef enum {
        false,
        true
-} b4;
+} boolean;
 
 typedef enum {
        log_success,                    log_warning,                    log_failure,                    log_comment,
 
 typedef enum {
        log_success,                    log_warning,                    log_failure,                    log_comment,
@@ -97,7 +113,7 @@ typedef enum {
 } file_type_enumeration;
 
 typedef enum {
 } file_type_enumeration;
 
 typedef enum {
-       effect_normal,                  effect_bold,                    effect_italic,                  effect_undefined_code,
+       effect_normal,                  effect_bold,                    effect_darken,                  effect_italic,
        effect_underline,               effect_blink,                   effect_reverse,                 effect_invisible_text,
        effect_count
 } effect_enumeration;
        effect_underline,               effect_blink,                   effect_reverse,                 effect_invisible_text,
        effect_count
 } effect_enumeration;
@@ -156,14 +172,14 @@ typedef enum {
        signal_count
 } signal_enumeration;
 
        signal_count
 } signal_enumeration;
 
-static c1 * cursor_name [cursor_count] = {
+static character * cursor_name [cursor_count] = {
        "---",
        "Left button",                  "Middle button",                "Right button",
        "Scroll up",                    "Scroll down"
 
 };
 
        "---",
        "Left button",                  "Middle button",                "Right button",
        "Scroll up",                    "Scroll down"
 
 };
 
-static c1 * signal_name [signal_count] = {
+static character * signal_name [signal_count] = {
        "---",
        "A",                            "B",                            "C",                            "D",
        "E",                            "F",                            "G",                            "H",
        "---",
        "A",                            "B",                            "C",                            "D",
        "E",                            "F",                            "G",                            "H",
@@ -192,48 +208,40 @@ static c1 * signal_name [signal_count] = {
        "Key 6",                        "Key 7",                        "Key 8",                        "Key 9"
 };
 
        "Key 6",                        "Key 7",                        "Key 8",                        "Key 9"
 };
 
-static v0 randomize_seed_by_time (v0) {
-       srand ((u4) time (null));
+static procedure random_integer_seed_by_time (none) {
+       srand ((natural) time (null));
 }
 
 }
 
-static s4 randomize (s4 from, s4 to) {
+static integer random_integer (integer from, integer to) {
        return (rand () % (to - from + 1) + from);
 }
 
        return (rand () % (to - from + 1) + from);
 }
 
-static u4 urandomize (u4 from, u4 to) {
-       return ((u4) rand () % (to - from + 1) + from);
+static natural random_natural (natural from, natural to) {
+       return ((natural) rand () % (to - from + 1) + from);
 }
 
 }
 
-static f4 frandomize (f4 from, f4 to) {
-       return (((float) rand () / (float) RAND_MAX) * (to - from) + from);
+static real random_real (real from, real to) {
+       return (((real) rand () / (real) RAND_MAX) * (to - from) + from);
 }
 
 }
 
-static s4 upper_bound (s4 a, s4 b) {
-       return ((a > b) ? a : b);
-}
-
-static s4 lower_bound (s4 a, s4 b) {
-       return ((a < b) ? a : b);
-}
-
-static v0 input (v0 * data, u8 size) {
+static procedure input (generic * data, caliber size) {
        read (standard_input, data, size);
 }
 
        read (standard_input, data, size);
 }
 
-static v0 output (v0 * data, u8 size) {
+static procedure output (generic * data, caliber size) {
        write (standard_output, data, size);
 }
 
        write (standard_output, data, size);
 }
 
-static v0 clean_up (v0 (* procedure) (v0)) {
-       atexit (procedure);
+static procedure clean_up (procedure (* procedure_pointer) (none)) {
+       atexit (procedure_pointer);
 }
 
 #ifdef use_fatal_failure
 }
 
 #ifdef use_fatal_failure
-static v0 fatal_failure (b4 condition, c1 * message) {
+static procedure fatal_failure (boolean condition, character * message) {
        if (condition == true) {
                echo ("[\x1b[1;31m FATAL \x1b[0m] ");
 
        if (condition == true) {
                echo ("[\x1b[1;31m FATAL \x1b[0m] ");
 
-               for (s4 index = 0; message [index] != '\0'; ++index) {
+               for (integer index = 0; message [index] != '\0'; ++index) {
                        output (& message [index], 1);
                }
 
                        output (& message [index], 1);
                }
 
@@ -246,31 +254,31 @@ static v0 fatal_failure (b4 condition, c1 * message) {
 #define fatal_failure(...)
 #endif
 
 #define fatal_failure(...)
 #endif
 
-static v0 execute (c1 * command) {
-       s4 status = 0;
+static procedure execute (character * command) {
+       integer status = 0;
 
        system (command);
 
        fatal_failure (status != 0, "execute: System returned an error code.");
 }
 
 
        system (command);
 
        fatal_failure (status != 0, "execute: System returned an error code.");
 }
 
-static u4 tick_tock (v0) {
-       return ((u4) clock ());
+static natural tick_tock (none) {
+       return ((natural) clock ());
 }
 
 }
 
-static u8 nano_time (v0) {
+static natural_64 nano_time (none) {
        struct timespec time = { 0 };
 
        struct timespec time = { 0 };
 
-       u8 result = 0;
+       natural_64 result = 0;
 
        clock_gettime (CLOCK_MONOTONIC, & time);
 
 
        clock_gettime (CLOCK_MONOTONIC, & time);
 
-       result = 1000000000ul * (u8) time.tv_sec + (u8) time.tv_nsec;
+       result = 1000000000ul * (natural_64) time.tv_sec + (natural_64) time.tv_nsec;
 
        return (result);
 }
 
 
        return (result);
 }
 
-static v0 nano_wait (u8 time) {
+static procedure nano_wait (natural_64 time) {
        struct timespec wait = {
                time / 1000000000,
                time % 1000000000
        struct timespec wait = {
                time / 1000000000,
                time % 1000000000
@@ -279,26 +287,114 @@ static v0 nano_wait (u8 time) {
        while (nanosleep (& wait, null)) continue;
 }
 
        while (nanosleep (& wait, null)) continue;
 }
 
-static f4 normal_r (u4 colour) { return ((float) ((colour >> 24) & 0xff) / 255.0f); }
-static f4 normal_g (u4 colour) { return ((float) ((colour >> 16) & 0xff) / 255.0f); }
-static f4 normal_b (u4 colour) { return ((float) ((colour >>  8) & 0xff) / 255.0f); }
-static f4 normal_a (u4 colour) { return ((float) ((colour >>  0) & 0xff) / 255.0f); }
+static natural maximum_natural (caliber count, ...) {
+       va_list list;
+
+       natural match = minimal_natural;
+
+       va_start (list, count);
+
+       for (caliber index = 0; index < count; ++index) {
+               natural current = (natural) va_arg (list, integer);
+
+               if (current > match) {
+                       match = current;
+               }
+       }
+
+       va_end (list);
+
+       return (match);
+}
+
+static natural minimum_natural (caliber count, ...) {
+       va_list list;
+
+       natural match = maximal_natural;
+
+       va_start (list, count);
+
+       for (caliber index = 0; index < count; ++index) {
+               natural current = (natural) va_arg (list, integer);
+
+               if (current < match) {
+                       match = current;
+               }
+       }
+
+       va_end (list);
+
+       return (match);
+}
+
+static integer maximum_integer (caliber count, ...) {
+       va_list list;
+
+       integer match = maximal_integer;
+
+       va_start (list, count);
+
+       for (caliber index = 0; index < count; ++index) {
+               integer current = va_arg (list, integer);
+
+               if (current > match) {
+                       match = current;
+               }
+       }
+
+       va_end (list);
+
+       return (match);
+}
+
+static integer minimum_integer (caliber count, ...) {
+       va_list list;
+
+       integer match = minimal_integer;
 
 
-static u4 channel_r (u4 colour) { return ((colour >> 24) & 0xff); }
-static u4 channel_g (u4 colour) { return ((colour >> 16) & 0xff); }
-static u4 channel_b (u4 colour) { return ((colour >>  8) & 0xff); }
-static u4 channel_a (u4 colour) { return ((colour >>  0) & 0xff); }
+       va_start (list, count);
 
 
-static u4 colour_channel_reverse (u4 colour) {
-       u4 r = channel_r (colour);
-       u4 g = channel_g (colour);
-       u4 b = channel_b (colour);
-       u4 a = channel_a (colour);
+       for (caliber index = 0; index < count; ++index) {
+               integer current = va_arg (list, integer);
+
+               if (current < match) {
+                       match = current;
+               }
+       }
+
+       va_end (list);
+
+       return (match);
+}
+
+static procedure exchange_integer (integer * a, integer * b) { integer c = * a; * a = * b; * b = c; }
+static procedure exchange_natural (natural * a, natural * b) { natural c = * a; * a = * b; * b = c; }
+static procedure exchange_real    (real    * a, real    * b) { real    c = * a; * a = * b; * b = c; }
+
+static procedure clamp_integer (integer * x, integer lower, integer upper) { if (* x < lower) * x = lower; if (* x > upper) * x = upper; }
+static procedure clamp_natural (natural * x, natural lower, natural upper) { if (* x < lower) * x = lower; if (* x > upper) * x = upper; }
+static procedure clamp_real    (real    * x, real    lower, real    upper) { if (* x < lower) * x = lower; if (* x > upper) * x = upper; }
+
+static real normal_r (natural colour) { return ((real) ((colour >> 24) & 0xff) / 255.0f); }
+static real normal_g (natural colour) { return ((real) ((colour >> 16) & 0xff) / 255.0f); }
+static real normal_b (natural colour) { return ((real) ((colour >>  8) & 0xff) / 255.0f); }
+static real normal_a (natural colour) { return ((real) ((colour >>  0) & 0xff) / 255.0f); }
+
+static natural channel_r (natural colour) { return ((colour >> 24) & 0xff); }
+static natural channel_g (natural colour) { return ((colour >> 16) & 0xff); }
+static natural channel_b (natural colour) { return ((colour >>  8) & 0xff); }
+static natural channel_a (natural colour) { return ((colour >>  0) & 0xff); }
+
+static natural colour_channel_reverse (natural colour) {
+       natural r = channel_r (colour);
+       natural g = channel_g (colour);
+       natural b = channel_b (colour);
+       natural a = channel_a (colour);
 
        return ((a << 24) | (b << 16) | (g << 8) | (r << 0));
 }
 
 
        return ((a << 24) | (b << 16) | (g << 8) | (r << 0));
 }
 
-static u4 colour_linear_interpolation (u4 colour_a, u4 colour_b, f4 scale) {
+static natural colour_linear_interpolation (natural colour_a, natural colour_b, real scale) {
        if (scale <= 0.0f) {
                return (colour_a);
        }
        if (scale <= 0.0f) {
                return (colour_a);
        }
@@ -307,16 +403,16 @@ static u4 colour_linear_interpolation (u4 colour_a, u4 colour_b, f4 scale) {
                return (colour_b);
        }
 
                return (colour_b);
        }
 
-       u4 r = (u4) ((1.0f - scale) * channel_r (colour_a) + scale * channel_r (colour_b));
-       u4 g = (u4) ((1.0f - scale) * channel_g (colour_a) + scale * channel_g (colour_b));
-       u4 b = (u4) ((1.0f - scale) * channel_b (colour_a) + scale * channel_b (colour_b));
-       u4 a = (u4) ((1.0f - scale) * channel_a (colour_a) + scale * channel_a (colour_b));
+       natural r = (natural) ((1.0f - scale) * channel_r (colour_a) + scale * channel_r (colour_b));
+       natural g = (natural) ((1.0f - scale) * channel_g (colour_a) + scale * channel_g (colour_b));
+       natural b = (natural) ((1.0f - scale) * channel_b (colour_a) + scale * channel_b (colour_b));
+       natural a = (natural) ((1.0f - scale) * channel_a (colour_a) + scale * channel_a (colour_b));
 
        return ((r << 24) | (g << 16) | (b << 8) | (a << 0));
 }
 
 
        return ((r << 24) | (g << 16) | (b << 8) | (a << 0));
 }
 
-static v0 * allocate (u8 size) {
-       c1 * data = null;
+static generic * allocate (caliber size) {
+       character * data = null;
 
        fatal_failure (size <= 0, "allocate: Size is equal or below zero.");
 
 
        fatal_failure (size <= 0, "allocate: Size is equal or below zero.");
 
@@ -327,7 +423,7 @@ static v0 * allocate (u8 size) {
        return (data);
 }
 
        return (data);
 }
 
-static v0 * reallocate (v0 * data, u8 size) {
+static generic * reallocate (generic * data, caliber size) {
        fatal_failure (size <= 0, "reallocate: Size is equal or below zero.");
 
        data = realloc (data, size);
        fatal_failure (size <= 0, "reallocate: Size is equal or below zero.");
 
        data = realloc (data, size);
@@ -337,7 +433,7 @@ static v0 * reallocate (v0 * data, u8 size) {
        return (data);
 }
 
        return (data);
 }
 
-static v0 * deallocate (v0 * data) {
+static generic * deallocate (generic * data) {
        fatal_failure (data == null, "deallocate: Data is null pointer.");
 
        free (data);
        fatal_failure (data == null, "deallocate: Data is null pointer.");
 
        free (data);
@@ -345,10 +441,10 @@ static v0 * deallocate (v0 * data) {
        return (null);
 }
 
        return (null);
 }
 
-static v0 * record (v0) {
-       c * buffer = null;
-       u8   offset = 0;
-       u8   memory = 64 * 1024;
+static generic * record (none) {
+       character * buffer = null;
+       caliber     offset = 0;
+       caliber     memory = 64 * 1024;
 
        buffer = reallocate (buffer, memory);
 
 
        buffer = reallocate (buffer, memory);
 
@@ -369,9 +465,9 @@ static v0 * record (v0) {
        return (buffer);
 }
 
        return (buffer);
 }
 
-static b4 character_compare_array (c1 character, c1 * character_array) {
-       for (u8 index = 0; character_array [index] != '\0'; ++index) {
-               if (character == character_array [index]) {
+static boolean character_compare_array (character c, character * character_array) {
+       for (caliber index = 0; character_array [index] != '\0'; ++index) {
+               if (c == character_array [index]) {
                        return (true);
                }
        }
                        return (true);
                }
        }
@@ -379,44 +475,47 @@ static b4 character_compare_array (c1 character, c1 * character_array) {
        return (false);
 }
 
        return (false);
 }
 
-static b4 character_is_uppercase (c1 character) {
-       return ((character >= 'A') && (character <= 'Z'));
+static boolean character_is_uppercase (character c) {
+       return ((c >= 'A') && (c <= 'Z'));
 }
 
 }
 
-static b4 character_is_lowercase (c1 character) {
-       return ((character >= 'a') && (character <= 'z'));
+static boolean character_is_lowercase (character c) {
+       return ((c >= 'a') && (c <= 'z'));
 }
 
 }
 
-static b4 character_is_digit (c1 character) {
-       return ((character >= '0') && (character <= '9'));
+static boolean character_is_digit (character c) {
+       return ((c >= '0') && (c <= '9'));
 }
 
 }
 
-static b4 character_is_letter (c1 character) {
-       return (((character >= 'A') && (character <= 'Z')) || ((character >= 'a') && (character <= 'z')));
+static boolean character_is_letter (character c) {
+       return (((c >= 'A') && (c <= 'Z')) || ((c >= 'a') && (c <= 'z')));
 }
 
 }
 
-static b4 character_is_blank (c1 character) {
-       return ((character == ' ') || (character == '\t') || (character == '\r') || (character == '\n'));
+static boolean character_is_blank (character c) {
+       return ((c == ' ') || (c == '\t') || (c == '\r') || (c == '\n'));
 }
 
 }
 
-static b4 character_is_symbol (c1 character) {
-       return (((character >= '!') && (character <= '/')) || ((character >= ':') && (character <= '@'))
-            || ((character >= '[') && (character <= '`')) || ((character >= '{') && (character <= '~')));
+static boolean character_is_symbol (character c) {
+       return (((c >= '!') && (c <= '/')) || ((c >= ':') && (c <= '@')) || ((c >= '[') && (c <= '`')) || ((c >= '{') && (c <= '~')));
 }
 
 }
 
-static b4 character_is_separator (c1 character) {
-       return ((character != '_') && ((character_is_blank (character) == true) || (character_is_symbol (character) == true)));
+static boolean character_is_separator (character c) {
+       return ((c != '_') && ((character_is_blank (c) == true) || (character_is_symbol (c) == true)));
 }
 
 }
 
-static b4 character_is_identifier (c1 character) {
-       return ((character == '_') || (character_is_letter (character) == true) || (character_is_digit (character) == true));
+static boolean character_is_identifier (character c) {
+       return ((c == '_') || (character_is_letter (c) == true) || (character_is_digit (c) == true));
 }
 
 }
 
-static b4 character_is_visible (c1 character) {
-       return ((character >= '!') && (character <= '~'));
+static boolean character_is_visible (character c) {
+       return ((c >= '!') && (c <= '~'));
 }
 
 }
 
-static c1 * capitalize (c1 * string) {
+static boolean character_is_invisible (character c) {
+       return (character_is_visible (c) == false);
+}
+
+static character * capitalize (character * string) {
        fatal_failure (string == null, "capitalize: String is null pointer.");
 
        string [0] -= (character_is_lowercase (string [0]) == true) ? ' ' : '\0';
        fatal_failure (string == null, "capitalize: String is null pointer.");
 
        string [0] -= (character_is_lowercase (string [0]) == true) ? ' ' : '\0';
@@ -424,28 +523,28 @@ static c1 * capitalize (c1 * string) {
        return (string);
 }
 
        return (string);
 }
 
-static c1 * uppercase (c1 * string) {
+static character * uppercase (character * string) {
        fatal_failure (string == null, "uppercase: String is null pointer.");
 
        fatal_failure (string == null, "uppercase: String is null pointer.");
 
-       for (u4 index = 0; string [index] != '\0'; ++index) {
+       for (natural index = 0; string [index] != '\0'; ++index) {
                string [index] += (character_is_lowercase (string [index]) == true) ? ' ' : '\0';
        }
 
        return (string);
 }
 
                string [index] += (character_is_lowercase (string [index]) == true) ? ' ' : '\0';
        }
 
        return (string);
 }
 
-static c1 * lowercase (c1 * string) {
+static character * lowercase (character * string) {
        fatal_failure (string == null, "lowercase: String is null pointer.");
 
        fatal_failure (string == null, "lowercase: String is null pointer.");
 
-       for (u4 index = 0; string [index] != '\0'; ++index) {
+       for (natural index = 0; string [index] != '\0'; ++index) {
                string [index] -= (character_is_uppercase (string [index]) == true) ? ' ' : '\0';
        }
 
        return (string);
 }
 
                string [index] -= (character_is_uppercase (string [index]) == true) ? ' ' : '\0';
        }
 
        return (string);
 }
 
-static u8 string_length (c1 * string) {
-       u8 length = 0;
+static caliber string_length (character * string) {
+       caliber length = 0;
 
        fatal_failure (string == null, "string_length: String is null pointer.");
 
 
        fatal_failure (string == null, "string_length: String is null pointer.");
 
@@ -454,41 +553,41 @@ static u8 string_length (c1 * string) {
        return (length);
 }
 
        return (length);
 }
 
-static c1 * string_nullify (c1 * string, u8 length) {
-       fatal_failure (string == null, "string_nullify: String is null pointer.");
-       fatal_failure (length <= 0,    "string_nullify: Length is equal or below zero.");
+static character * string_nullify (character * destination, caliber length) {
+       fatal_failure (destination == null, "string_reverse_limit: Destination string is null pointer.");
+       fatal_failure (length      <= 0,    "string_reverse_limit: Length is equal or below zero.");
 
 
-       for (u8 index = 0; index < length; ++index) {
-               string [index] = '\0';
+       for (caliber index = 0; index < length; ++index) {
+               destination [index] = '\0';
        }
 
        }
 
-       return (string);
+       return (destination);
 }
 
 }
 
-static c1 * string_reverse_limit (c1 * string, u8 limit) {
-       fatal_failure (string == null, "string_reverse_limit: String is null pointer.");
-       fatal_failure (limit  <= 0,    "string_reverse_limit: Limit is equal or below zero.");
+static character * string_reverse_limit (character * destination, caliber limit) {
+       fatal_failure (destination == null, "string_reverse_limit: Destination string is null pointer.");
+       fatal_failure (limit       <= 0,    "string_reverse_limit: Limit is equal or below zero.");
 
 
-       for (u8 index = 0; index < limit / 2; ++index) {
-               c1 temporary = string [index];
+       for (caliber index = 0; index < limit / 2; ++index) {
+               character temporary = destination [index];
 
 
-               string [index]             = string [limit - 1 - index];
-               string [limit - 1 - index] = temporary;
+               destination [index]             = destination [limit - 1 - index];
+               destination [limit - 1 - index] = temporary;
        }
 
        }
 
-       return (string);
+       return (destination);
 }
 
 }
 
-static c1 * string_reverse (c1 * string) {
-       return (string_reverse_limit (string, string_length (string)));
+static character * string_reverse (character * destination) {
+       return (string_reverse_limit (destination, string_length (destination)));
 }
 
 }
 
-static b4 string_compare_limit (c1 * string_a, c1 * string_b, u8 limit) {
+static boolean string_compare_limit (character * string_a, character * string_b, caliber limit) {
        fatal_failure (string_a == null, "string_compare_limit: First source string is null pointer.");
        fatal_failure (string_b == null, "string_compare_limit: Second source string is null pointer.");
        fatal_failure (limit    <= 0,    "string_compare_limit: Limit is equal or below zero.");
 
        fatal_failure (string_a == null, "string_compare_limit: First source string is null pointer.");
        fatal_failure (string_b == null, "string_compare_limit: Second source string is null pointer.");
        fatal_failure (limit    <= 0,    "string_compare_limit: Limit is equal or below zero.");
 
-       for (u8 index = 0; index < limit; ++index) {
+       for (caliber index = 0; index < limit; ++index) {
                if (string_a [index] != string_b [index]) {
                        return (false);
                }
                if (string_a [index] != string_b [index]) {
                        return (false);
                }
@@ -497,94 +596,98 @@ static b4 string_compare_limit (c1 * string_a, c1 * string_b, u8 limit) {
        return (true);
 }
 
        return (true);
 }
 
-static b4 string_compare (c1 * string_a, c1 * string_b) {
+static boolean string_compare (character * string_a, character * string_b) {
        return (string_compare_limit (string_a, string_b, string_length (string_a) + 1));
 }
 
        return (string_compare_limit (string_a, string_b, string_length (string_a) + 1));
 }
 
-static c1 * string_copy_limit (c1 * destination, c1 * source, u8 limit) {
+static character * string_copy_limit (character * destination, character * source, caliber limit) {
        fatal_failure (destination == null, "string_copy_limit: Destination string is null pointer.");
        fatal_failure (source      == null, "string_copy_limit: Source string is null pointer.");
        fatal_failure (limit       <= 0,    "string_copy_limit: Limit is equal or below zero.");
 
        fatal_failure (destination == null, "string_copy_limit: Destination string is null pointer.");
        fatal_failure (source      == null, "string_copy_limit: Source string is null pointer.");
        fatal_failure (limit       <= 0,    "string_copy_limit: Limit is equal or below zero.");
 
-       for (u8 index = 0; index < limit; ++index) {
+       for (caliber index = 0; index < limit; ++index) {
                destination [index] = source [index];
        }
 
        return (destination);
 }
 
                destination [index] = source [index];
        }
 
        return (destination);
 }
 
-static c1 * string_copy (c1 * destination, c1 * source) {
+static character * string_copy (character * destination, character * source) {
        return (string_copy_limit (destination, source, string_length (source) + 1));
 }
 
        return (string_copy_limit (destination, source, string_length (source) + 1));
 }
 
-static c1 * string_concatenate_limit (c1 * destination, c1 * source, u8 limit) {
-       u8 offset = string_length (destination);
+static character * string_concatenate_limit (character * destination, character * source, caliber limit) {
+       caliber offset = string_length (destination);
 
        fatal_failure (destination == null, "string_concatenate_limit: Destination string is null pointer.");
        fatal_failure (source      == null, "string_concatenate_limit: Source string is null pointer.");
        fatal_failure (limit       <= 0,    "string_concatenate_limit: Limit is equal or below zero.");
 
 
        fatal_failure (destination == null, "string_concatenate_limit: Destination string is null pointer.");
        fatal_failure (source      == null, "string_concatenate_limit: Source string is null pointer.");
        fatal_failure (limit       <= 0,    "string_concatenate_limit: Limit is equal or below zero.");
 
-       for (u8 index = 0; index < limit; ++index) {
+       for (caliber index = 0; index < limit; ++index) {
                destination [offset + index] = source [index];
        }
 
        return (destination);
 }
 
                destination [offset + index] = source [index];
        }
 
        return (destination);
 }
 
-static c1 * string_concatenate (c1 * destination, c1 * source) {
+static character * string_concatenate (character * destination, character * source) {
        return (string_concatenate_limit (destination, source, string_length (source) + 1));
 }
 
        return (string_concatenate_limit (destination, source, string_length (source) + 1));
 }
 
-static c1 * string_duplicate (c1 * string) {
-       c1 * duplicate = null;
+static character * string_duplicate (character * source) {
+       character * duplicate = allocate ((string_length (source) + 1) * sizeof (* duplicate));
 
 
-       duplicate = allocate ((string_length (string) + 1) * sizeof (* duplicate));
-
-       string_copy (duplicate, string);
+       string_copy (duplicate, source);
 
        return (duplicate);
 }
 
 
        return (duplicate);
 }
 
-static c1 * string_duplicate_limit (c1 * string, u4 limit) {
-       c1 * duplicate = null;
-
-       duplicate = allocate ((limit + 1) * sizeof (* duplicate));
+static character * string_duplicate_limit (character * source, caliber limit) {
+       character * duplicate = allocate ((limit + 1) * sizeof (* duplicate));
 
 
-       string_copy_limit (duplicate, string, limit);
+       string_copy_limit (duplicate, source, limit);
 
        return (duplicate);
 }
 
 
        return (duplicate);
 }
 
-static c1 * string_align_left (c1 * string, u8 amount, c1 character) {
-       u8 length = string_length (string);
-
-       for (u8 offset = length; offset < amount; ++offset) {
-               string [offset] = character;
+static character * string_align_left (character * destination, caliber amount, character with) {
+       for (caliber offset = string_length (destination); offset < amount; ++offset) {
+               destination [offset] = with;
        }
 
        }
 
-       string [amount] = '\0';
+       destination [amount] = '\0';
 
 
-       return (string);
+       return (destination);
+}
+
+static character * string_remove_extension (character * destination) {
+       caliber length = string_length (destination);
+
+       for (--length; destination [length] != '.'; --length);
+
+       destination [length] = '\0';
+
+       return (destination);
 }
 
 }
 
-static v0 memory_nullify (v0 * memory, u8 size) {
-       c1 * cast = (c1 *) memory;
+static procedure memory_nullify (generic * memory, caliber size) {
+       character * cast = (character *) memory;
 
        fatal_failure (memory == null, "memory_nullify: Memory is null pointer.");
 
 
        fatal_failure (memory == null, "memory_nullify: Memory is null pointer.");
 
-       for (u8 offset = 0; offset < size; ++offset) {
-               cast [offset] = (char) 0;
+       for (caliber offset = 0; offset < size; ++offset) {
+               cast [offset] = '\0';
        }
 }
 
        }
 }
 
-static s4 memory_compare (v0 * memory_0, v0 * memory_1, u8 size) {
-             c1 * cast_0 = (      c1 *) memory_0;
-       c1 * cast_1 = (c1 *) memory_1;
+static integer memory_compare (generic * memory_0, generic * memory_1, caliber size) {
+       character * cast_0 = (character *) memory_0;
+       character * cast_1 = (character *) memory_1;
 
        fatal_failure (memory_0 == null, "memory_compare: Memory is null pointer.");
        fatal_failure (memory_1 == null, "memory_compare: Source is null pointer.");
 
 
        fatal_failure (memory_0 == null, "memory_compare: Memory is null pointer.");
        fatal_failure (memory_1 == null, "memory_compare: Source is null pointer.");
 
-       for (u8 offset = 0; offset < size; ++offset) {
+       for (caliber offset = 0; offset < size; ++offset) {
                if (cast_0 [offset] != cast_1 [offset]) {
                        return (false);
                }
                if (cast_0 [offset] != cast_1 [offset]) {
                        return (false);
                }
@@ -593,46 +696,36 @@ static s4 memory_compare (v0 * memory_0, v0 * memory_1, u8 size) {
        return (true);
 }
 
        return (true);
 }
 
-static v0 memory_copy (v0 * destination, v0 * source, u8 size) {
-             c1 * cast_0 = (      c1 *) destination;
-       c1 * cast_1 = (c1 *) source;
+static procedure memory_copy (generic * destination, generic * source, caliber size) {
+       character * cast_0 = (character *) destination;
+       character * cast_1 = (character *) source;
 
        fatal_failure (destination == null, "memory_copy: Destination is null pointer.");
        fatal_failure (source      == null, "memory_copy: Source is null pointer.");
 
 
        fatal_failure (destination == null, "memory_copy: Destination is null pointer.");
        fatal_failure (source      == null, "memory_copy: Source is null pointer.");
 
-       for (u8 offset = 0; offset < size; ++offset) {
+       for (caliber offset = 0; offset < size; ++offset) {
                cast_0 [offset] = cast_1 [offset];
        }
 }
 
                cast_0 [offset] = cast_1 [offset];
        }
 }
 
-static c1 * string_remove_extension (c1 * string) {
-       u8 length = string_length (string);
-
-       for (--length; string [length] != '.'; --length);
-
-       string [length] = '\0';
-
-       return (string);
-}
-
-static v0 echo_clear (v0) {
+static procedure echo_clear (none) {
        echo ("\033[2J\033[H");
 }
 
        echo ("\033[2J\033[H");
 }
 
-static v0 echo_colour (colour_enumeration colour, effect_enumeration effect) {
-       c1 format [8] = "\033[ ;3 m";
+static procedure echo_colour (colour_enumeration colour, effect_enumeration effect) {
+       character format [8] = "\033[ ;3 m";
 
 
-       format [2] = (char) (effect % effect_count) + '0';
-       format [5] = (char) (colour % colour_count) + '0';
+       format [2] = (character) (effect % effect_count) + '0';
+       format [5] = (character) (colour % colour_count) + '0';
 
        echo (format);
 }
 
 
        echo (format);
 }
 
-static v0 echo_cancel (v0) {
+static procedure echo_cancel (none) {
        echo ("\033[0m");
 }
 
        echo ("\033[0m");
 }
 
-static v0 show_cursor (b4 show) {
+static procedure show_cursor (boolean show) {
        if (show == true) {
                echo ("\033[?25h");
        } else {
        if (show == true) {
                echo ("\033[?25h");
        } else {
@@ -640,13 +733,13 @@ static v0 show_cursor (b4 show) {
        }
 }
 
        }
 }
 
-static s4 file_open (c1 * path, s4 mode) {
+static integer file_open (character * path, integer mode) {
        fatal_failure (path == null, "file_open: File path is null pointer.");
 
        return (open (path, mode, 0777));
 }
 
        fatal_failure (path == null, "file_open: File path is null pointer.");
 
        return (open (path, mode, 0777));
 }
 
-static s4 file_close (s4 file) {
+static integer file_close (integer file) {
        fatal_failure (file == -1, "file_close: Invalid file descriptor.");
 
        close (file);
        fatal_failure (file == -1, "file_close: Invalid file descriptor.");
 
        close (file);
@@ -654,7 +747,7 @@ static s4 file_close (s4 file) {
        return (-1);
 }
 
        return (-1);
 }
 
-static v0 file_read (s4 file, v0 * data, u8 size) {
+static procedure file_read (integer file, generic * data, caliber size) {
        fatal_failure (file <= -1,   "file_read: File descriptor is closed or invalid.");
        fatal_failure (data == null, "file_read: Data is null pointer.");
        fatal_failure (size == 0,    "file_read: Size is zero.");
        fatal_failure (file <= -1,   "file_read: File descriptor is closed or invalid.");
        fatal_failure (data == null, "file_read: Data is null pointer.");
        fatal_failure (size == 0,    "file_read: Size is zero.");
@@ -662,7 +755,7 @@ static v0 file_read (s4 file, v0 * data, u8 size) {
        read (file, data, size);
 }
 
        read (file, data, size);
 }
 
-static v0 file_write (s4 file, v0 * data, u8 size) {
+static procedure file_write (integer file, generic * data, caliber size) {
        fatal_failure (file <= -1,   "file_write: File descriptor is closed or invalid.");
        fatal_failure (data == null, "file_write: Data is null pointer.");
        fatal_failure (size == 0,    "file_write: Size is zero.");
        fatal_failure (file <= -1,   "file_write: File descriptor is closed or invalid.");
        fatal_failure (data == null, "file_write: Data is null pointer.");
        fatal_failure (size == 0,    "file_write: Size is zero.");
@@ -670,28 +763,34 @@ static v0 file_write (s4 file, v0 * data, u8 size) {
        write (file, data, size);
 }
 
        write (file, data, size);
 }
 
-static v0 file_echo (s4 file, c1 * data) {
+static procedure file_echo (integer file, character * data) {
        file_write (file, data, string_length (data));
 }
 
        file_write (file, data, string_length (data));
 }
 
-static u8 file_seek (s4 file, s4 whence) {
+static caliber file_seek (integer file, integer whence) {
        fatal_failure (file == -1, "file_seek: Invalid file descriptor.");
        fatal_failure (file == -1, "file_seek: Invalid file descriptor.");
-
-       return ((u8) lseek (file, 0, whence));
+/// CHECK FOR ERRORS
+       return ((caliber) lseek (file, 0, whence));
 }
 
 }
 
-static u8 file_size (c1 * path) {
+static caliber file_size (character * path) {
        struct stat data = { 0 };
 
        fatal_failure (path == null, "file_size: File path is null pointer.");
 
        lstat (path, & data);
 
        struct stat data = { 0 };
 
        fatal_failure (path == null, "file_size: File path is null pointer.");
 
        lstat (path, & data);
 
-       return ((u8) data.st_size);
+       return ((caliber) data.st_size);
+}
+
+static boolean file_exists (character * path) {
+       fatal_failure (path == null, "file_record: File path is null pointer.");
+
+       return ((access (path, F_OK) == 0) ? true : false);
 }
 
 }
 
-static file_type_enumeration file_type (c1 * path) { /// SHIT BREAKS ON "./THIS/THAT.EXT"...
-       c1 * extensions [file_type_count] = {
+static file_type_enumeration file_type (character * path) {
+       character * extensions [file_type_count] = {
                ".c",           ".h",           ".adb",         ".ads",         ".cpp",         ".hpp",         ".f90",         ".mod",
                ".pas",         ".d",           ".go",          ".jai",         ".asm",         ".eax",         ".gas",         ".fasm",
                ".hs",          ".el",          ".cfg",         ".lua",         ".sh",          ".py",          ".tcl",         ".4th",
                ".c",           ".h",           ".adb",         ".ads",         ".cpp",         ".hpp",         ".f90",         ".mod",
                ".pas",         ".d",           ".go",          ".jai",         ".asm",         ".eax",         ".gas",         ".fasm",
                ".hs",          ".el",          ".cfg",         ".lua",         ".sh",          ".py",          ".tcl",         ".4th",
@@ -701,33 +800,31 @@ static file_type_enumeration file_type (c1 * path) { /// SHIT BREAKS ON "./THIS/
                ".obj",         ".iqm",         ".md5",         ".ply",         ".o",           ".spv"
        };
 
                ".obj",         ".iqm",         ".md5",         ".ply",         ".o",           ".spv"
        };
 
-       fatal_failure (path == null, "file_type: File path is null pointer.");
+       natural cut_at = 0;
 
 
-       for (; * path != '.'; ++path);
+       fatal_failure ((path == null) || (* path == '\0'), "file_type: File path is null pointer.");
+
+       for (cut_at = string_length (path) - 1; cut_at != 0; --cut_at) {
+               if (path [cut_at] == '.') break;
+       }
 
        for (file_type_enumeration type = 0; type != file_type_count; ++type) {
 
        for (file_type_enumeration type = 0; type != file_type_count; ++type) {
-               if (string_compare (path, extensions [type])) {
+               if (string_compare (& path [cut_at], extensions [type])) {
                        return (type);
                }
        }
 
                        return (type);
                }
        }
 
-       return (~ 0u);
+       return (file_type_count);
 }
 
 }
 
-static b4 file_exists (c1 * path) {
-       fatal_failure (path == null, "file_record: File path is null pointer.");
-
-       return ((access (path, F_OK) == 0) ? true : false);
-}
-
-static v0 file_remove (c1 * path) {
+static procedure file_remove (character * path) {
        unlink (path);
 }
 
        unlink (path);
 }
 
-static v0 * file_record (c1 * path) {
-       s4     file = -1;
-       u8   size = 0;
-       c1  * data = null;
+static generic * file_record (character * path) {
+       integer      file = -1;
+       caliber   size = 0;
+       character  * data = null;
 
        fatal_failure (path == null, "file_record: File path is null pointer.");
 
 
        fatal_failure (path == null, "file_record: File path is null pointer.");
 
@@ -742,10 +839,10 @@ static v0 * file_record (c1 * path) {
        return (data);
 }
 
        return (data);
 }
 
-static c1 * file_import (c1 * path) {
-       s4     file = -1;
-       u8   size = 0;
-       c1  * data = null;
+static character * file_import (character * path) {
+       integer      file = -1;
+       caliber   size = 0;
+       character  * data = null;
 
        fatal_failure (path == null, "file_import: File path is null pointer.");
 
 
        fatal_failure (path == null, "file_import: File path is null pointer.");
 
@@ -762,8 +859,8 @@ static c1 * file_import (c1 * path) {
        return (data);
 }
 
        return (data);
 }
 
-static v0 file_export (c1 * path, c1 * data) {
-       s4 file = -1;
+static procedure file_export (character * path, character * data) {
+       integer file = -1;
 
        fatal_failure (path == null, "file_export: File path is null pointer.");
        fatal_failure (data == null, "file_export: Data is null pointer.");
 
        fatal_failure (path == null, "file_export: File path is null pointer.");
        fatal_failure (data == null, "file_export: Data is null pointer.");
@@ -775,17 +872,17 @@ static v0 file_export (c1 * path, c1 * data) {
        file = file_close (file);
 }
 
        file = file_close (file);
 }
 
-static v0 * folder_open (c1 * path) {
+static generic * folder_open (character * path) {
        DIR * folder = null;
 
        fatal_failure (path == null, "folder_open: Folder path is null pointer.");
 
        folder = opendir (path);
 
        DIR * folder = null;
 
        fatal_failure (path == null, "folder_open: Folder path is null pointer.");
 
        folder = opendir (path);
 
-       return ((v0 *) folder);
+       return ((generic *) folder);
 }
 
 }
 
-static c1 * folder_read (v0 * handle) {
+static character * folder_read (generic * handle) {
        struct dirent * file = null;
 
        DIR * folder = (DIR *) handle;
        struct dirent * file = null;
 
        DIR * folder = (DIR *) handle;
@@ -801,7 +898,7 @@ static c1 * folder_read (v0 * handle) {
        }
 }
 
        }
 }
 
-static v0 * folder_close (v0 * handle) {
+static generic * folder_close (generic * handle) {
        DIR * folder = (DIR *) handle;
 
        fatal_failure (handle == null, "folder_read: Folder handle is null pointer.");
        DIR * folder = (DIR *) handle;
 
        fatal_failure (handle == null, "folder_read: Folder handle is null pointer.");
@@ -811,18 +908,18 @@ static v0 * folder_close (v0 * handle) {
        return (null);
 }
 
        return (null);
 }
 
-static c1 * * folder_create_path_list (c1 * folder, u4 * path_count, b4 sort) {
-       v0   * handle     = null;
-       c1 * * path_array = 0;
+static character * * folder_create_path_list (character * folder, natural * path_count, boolean sort) {
+       procedure   * handle     = null;
+       character * * path_array = 0;
 
 
-       (v0) sort;
+       (none) sort;
 
        fatal_failure (folder     == null, "folder_create_path_list: Folder handle is null pointer.");
        fatal_failure (path_count == null, "folder_create_path_list: Path count address is null pointer.");
 
        handle = folder_open (folder);
 
 
        fatal_failure (folder     == null, "folder_create_path_list: Folder handle is null pointer.");
        fatal_failure (path_count == null, "folder_create_path_list: Path count address is null pointer.");
 
        handle = folder_open (folder);
 
-       for (c1 * path = folder_read (handle); path != null; path = folder_read (handle)) {
+       for (character * path = folder_read (handle); path != null; path = folder_read (handle)) {
                if (path [0] != '.') {
                        (* path_count) += 1;
 
                if (path [0] != '.') {
                        (* path_count) += 1;
 
@@ -839,16 +936,16 @@ static c1 * * folder_create_path_list (c1 * folder, u4 * path_count, b4 sort) {
        return (path_array);
 }
 
        return (path_array);
 }
 
-static c1 * * folder_remove_path_list (c1 * * path_array, u4 path_count) {
-       for (u4 index = 0; index < path_count; ++index) {
+static character * * folder_remove_path_list (character * * path_array, natural path_count) {
+       for (natural index = 0; index < path_count; ++index) {
                path_array [index] = deallocate (path_array [index]);
        }
 
        return (deallocate (path_array));
 }
 
                path_array [index] = deallocate (path_array [index]);
        }
 
        return (deallocate (path_array));
 }
 
-static c1 * configuration_format (c1 * path) {
-       static c1 buffer [512] = "";
+static character * configuration_format (character * path) {
+       static character buffer [512] = "";
 
        string_copy (buffer, getenv ("HOME"));
        string_concatenate (buffer, "/.config/xolatile/");
 
        string_copy (buffer, getenv ("HOME"));
        string_concatenate (buffer, "/.config/xolatile/");
@@ -857,29 +954,29 @@ static c1 * configuration_format (c1 * path) {
        return (buffer);
 }
 
        return (buffer);
 }
 
-static b4 configuration_exists (c1 * path) {
+static boolean configuration_exists (character * path) {
        return (file_exists (configuration_format (path)));
 }
 
        return (file_exists (configuration_format (path)));
 }
 
-static v0 configuration_remove (c1 * path) {
+static procedure configuration_remove (character * path) {
        file_remove (configuration_format (path));
 }
 
        file_remove (configuration_format (path));
 }
 
-static c1 * configuration_import (c1 * path) {
+static character * configuration_import (character * path) {
        return (file_import (configuration_format (path)));
 }
 
        return (file_import (configuration_format (path)));
 }
 
-static v0 configuration_export (c1 * path, c1 * data) {
+static procedure configuration_export (character * path, character * data) {
        file_export (configuration_format (path), data);
 }
 
        file_export (configuration_format (path), data);
 }
 
-static b4 argument_compare (c1 * argument, c1 * short_option, c1 * long_option) {
+static boolean argument_compare (character * argument, character * short_option, character * long_option) {
        return ((string_compare (argument, short_option) == true) || (string_compare (argument, long_option) == true));
 }
 
        return ((string_compare (argument, short_option) == true) || (string_compare (argument, long_option) == true));
 }
 
-static u4 string_full_width (c1 * string, u4 tab_width) {
-       u4 width = 0;
-       u4 count = 0;
+static natural string_full_width (character * string, natural tab_width) {
+       natural width = 0;
+       natural count = 0;
 
        do {
                if (* string == '\t') {
 
        do {
                if (* string == '\t') {
@@ -895,8 +992,8 @@ static u4 string_full_width (c1 * string, u4 tab_width) {
        return (width - 1);
 }
 
        return (width - 1);
 }
 
-static u4 string_full_height (c1 * string) {
-       u4 height = 0;
+static natural string_full_height (character * string) {
+       natural height = 0;
 
        do {
                if (* string == '\n') {
 
        do {
                if (* string == '\n') {
@@ -907,26 +1004,26 @@ static u4 string_full_height (c1 * string) {
        return (height + 1);
 }
 
        return (height + 1);
 }
 
-static u4 string_limit_to_number (c1 * string, u4 limit) {
-       u4 number = 0;
+static natural string_limit_to_number (character * string, natural limit) {
+       natural number = 0;
 
 
-       for (u4 index = 0; (string [index] != '\0') && (index < limit); ++index) {
+       for (natural index = 0; (string [index] != '\0') && (index < limit); ++index) {
                number *= 10;
                number *= 10;
-               number += (u4) (string [index] - '0');
+               number += (natural) (string [index] - '0');
        }
 
        return (number);
 }
 
        }
 
        return (number);
 }
 
-static u4 string_to_number (c1 * string) {
+static natural string_to_number (character * string) {
        return (string_limit_to_number (string, string_length (string)));
 }
 
        return (string_limit_to_number (string, string_length (string)));
 }
 
-static c1 * number_to_string (s4 number) {
-       static c1 string [34] = "";
+static character * number_to_string (integer number) {
+       static character string [34] = "";
 
 
-       u4 index = 0;
-       b4 sign  = false;
+       natural index = 0;
+       boolean sign  = false;
 
        string_nullify (string, sizeof (string));
 
 
        string_nullify (string, sizeof (string));
 
@@ -943,8 +1040,8 @@ static c1 * number_to_string (s4 number) {
                sign = false;
        }
 
                sign = false;
        }
 
-       for (index = 0; (number != 0) && (index < (u4) sizeof (string) - 1); ++index) {
-               string [index] = (char) (number % 10) + '0';
+       for (index = 0; (number != 0) && (index < (natural) sizeof (string) - 1); ++index) {
+               string [index] = (character) (number % 10) + '0';
                number /= 10;
        }
 
                number /= 10;
        }
 
@@ -960,10 +1057,10 @@ static c1 * number_to_string (s4 number) {
        return (string);
 }
 
        return (string);
 }
 
-static c1 * format_to_string (s4 number, b4 sign, u4 base, u8 amount, c1 character) {
-       static c1 string [36];
+static character * format_to_string (integer number, boolean sign, natural base, caliber amount, character with) {
+       static character string [36];
 
 
-       s4 i;
+       integer i;
 
        string_nullify (string, sizeof (string));
 
 
        string_nullify (string, sizeof (string));
 
@@ -971,7 +1068,7 @@ static c1 * format_to_string (s4 number, b4 sign, u4 base, u8 amount, c1 charact
                string [0] = '0';
                string [1] = '\0';
 
                string [0] = '0';
                string [1] = '\0';
 
-               string_align_left (string, amount, character);
+               string_align_left (string, amount, with);
 
                return (string);
        }
 
                return (string);
        }
@@ -994,13 +1091,13 @@ static c1 * format_to_string (s4 number, b4 sign, u4 base, u8 amount, c1 charact
 
        string_reverse (string);
 
 
        string_reverse (string);
 
-       string_align_left (string, amount, character);
+       string_align_left (string, amount, with);
 
        return (string);
 }
 
 
        return (string);
 }
 
-static c1 * format (c1 * base, ...) {
-       static c1 string [1024];
+static character * format (character * base, ...) {
+       static character string [1024];
 
        va_list list;
 
 
        va_list list;
 
@@ -1013,10 +1110,10 @@ static c1 * format (c1 * base, ...) {
                        case ('%'): {
                                ++base;
                                switch (* base) {
                        case ('%'): {
                                ++base;
                                switch (* base) {
-                                       case ('%'): string_concatenate (string, "%");                                   break;
-                                       case ('i'): string_concatenate (string, number_to_string (va_arg (list, int))); break;
-                                       case ('s'): string_concatenate (string, va_arg (list, c1 *));                 break;
-                                       default:    string_concatenate (string, "?");                                   break;
+                                       case ('%'): string_concatenate (string, "%");                                        break;
+                                       case ('i'): string_concatenate (string, number_to_string (va_arg (list, integer)));  break;
+                                       case ('s'): string_concatenate (string, va_arg (list, character *));                 break;
+                                       default:    string_concatenate (string, "?");                                        break;
                                }
                        } break;
                        default: {
                                }
                        } break;
                        default: {
@@ -1030,7 +1127,7 @@ static c1 * format (c1 * base, ...) {
        return (string);
 }
 
        return (string);
 }
 
-static v0 print (c1 * format, ...) {
+static procedure print (character * format, ...) {
        va_list list;
 
        va_start (list, format);
        va_list list;
 
        va_start (list, format);
@@ -1044,34 +1141,34 @@ static v0 print (c1 * format, ...) {
                                                output ("%", 1);
                                        } break;
                                        case ('i'): {
                                                output ("%", 1);
                                        } break;
                                        case ('i'): {
-                                               c1 * string = number_to_string (va_arg (list, int));
+                                               character * string = number_to_string (va_arg (list, integer));
                                                output (string, string_length (string));
                                        } break;
                                        case ('f'): {
                                                output (string, string_length (string));
                                        } break;
                                        case ('f'): {
-                                               f4   number = (float) va_arg (list, double);
-                                               c1  * upper  = number_to_string ((int) number);
-                                               c1  * lower  = number_to_string ((int) (number * 1000.0f) % 1000);
+                                               real data = (real) va_arg (list, real_64);
+                                               character * upper = number_to_string ((integer) data);
+                                               character * lower = number_to_string ((integer) (data * 1000.0f) % 1000);
                                                output (upper, string_length (upper));
                                                output (".", 1);
                                                output (lower, string_length (lower));
                                        } break;
                                        case ('t'): {
                                                output (upper, string_length (upper));
                                                output (".", 1);
                                                output (lower, string_length (lower));
                                        } break;
                                        case ('t'): {
-                                               s4 toggle = (va_arg (list, int));
-                                               echo_colour ((toggle == true) ? colour_green : colour_red, effect_normal);
-                                               output ((toggle == true) ? "+" : "-", 1);
+                                               integer data = (va_arg (list, integer));
+                                               echo_colour ((data == true) ? colour_green : colour_red, effect_normal);
+                                               output ((data == true) ? "+" : "-", 1);
                                                echo_cancel ();
                                        } break;
                                        case ('b'): {
                                                echo_cancel ();
                                        } break;
                                        case ('b'): {
-                                               s4 b4ean = (va_arg (list, int));
-                                               output ((b4ean == true) ? "true" : "false", (b4ean == true) ? 4 : 5);
+                                               integer data = (va_arg (list, integer));
+                                               output ((data == true) ? "true" : "false", (data == true) ? 4 : 5);
                                        } break;
                                        case ('c'): {
                                        } break;
                                        case ('c'): {
-                                               c1 character = (char) va_arg (list, int);
-                                               output (& character, 1);
+                                               character data = (character) va_arg (list, integer);
+                                               output (& data, 1);
                                        } break;
                                        case ('s'): {
                                        } break;
                                        case ('s'): {
-                                               c1 * string = va_arg (list, c1 *);
-                                               output (string, string_length (string));
+                                               character * data = va_arg (list, character *);
+                                               output (data, string_length (data));
                                        } break;
                                        default: {
                                                output ("?", 1);
                                        } break;
                                        default: {
                                                output ("?", 1);
@@ -1115,18 +1212,91 @@ static v0 print (c1 * format, ...) {
        va_end (list);
 }
 
        va_end (list);
 }
 
-static v0 uint_exchange (u4 * a, u4 * b) {
-       u4 c = * a;
+static procedure conditional_print (boolean condition, character * format, ...) {
+       va_list list;
 
 
-       * a = * b;
-       * b =   c;
-}
+       if (condition == false) return;
 
 
-static v0 float_exchange (f4 * a, f4 * b) {
-       f4 c = * a;
+       va_start (list, format);
+
+       for (; * format != character_null; ++format) {
+               switch (* format) {
+                       case ('%'): {
+                               ++format;
+                               switch (* format) {
+                                       case ('%'): {
+                                               output ("%", 1);
+                                       } break;
+                                       case ('i'): {
+                                               character * string = number_to_string (va_arg (list, integer));
+                                               output (string, string_length (string));
+                                       } break;
+                                       case ('f'): {
+                                               real data = (real) va_arg (list, real_64);
+                                               character * upper = number_to_string ((integer) data);
+                                               character * lower = number_to_string ((integer) (data * 1000.0f) % 1000);
+                                               output (upper, string_length (upper));
+                                               output (".", 1);
+                                               output (lower, string_length (lower));
+                                       } break;
+                                       case ('t'): {
+                                               integer data = (va_arg (list, integer));
+                                               echo_colour ((data == true) ? colour_green : colour_red, effect_normal);
+                                               output ((data == true) ? "+" : "-", 1);
+                                               echo_cancel ();
+                                       } break;
+                                       case ('b'): {
+                                               integer data = (va_arg (list, integer));
+                                               output ((data == true) ? "true" : "false", (data == true) ? 4 : 5);
+                                       } break;
+                                       case ('c'): {
+                                               character data = (character) va_arg (list, integer);
+                                               output (& data, 1);
+                                       } break;
+                                       case ('s'): {
+                                               character * data = va_arg (list, character *);
+                                               output (data, string_length (data));
+                                       } break;
+                                       default: {
+                                               output ("?", 1);
+                                       } break;
+                               }
+                       } break;
+                       case ('/'): {
+                               ++format;
+                               switch (* format) {
+                                       case ('/'): echo ("/");                          break;
+                                       case ('s'): echo ("[\x1b[1;32mSuccess\x1b[0m]"); break;
+                                       case ('f'): echo ("[\x1b[1;31mFailure\x1b[0m]"); break;
+                                       case ('w'): echo ("[\x1b[1;33mWarning\x1b[0m]"); break;
+                                       case ('c'): echo ("[\x1b[1;30mComment\x1b[0m]"); break;
+                                       case ('A'): echo ("\x1b[0m");                    break;
+                                       case ('B'): echo ("\x1b[1m");                    break;
+                                       case ('C'): echo ("\x1b[2m");                    break;
+                                       case ('D'): echo ("\x1b[3m");                    break;
+                                       case ('E'): echo ("\x1b[4m");                    break;
+                                       case ('F'): echo ("\x1b[5m");                    break;
+                                       case ('G'): echo ("\x1b[6m");                    break;
+                                       case ('H'): echo ("\x1b[7m");                    break;
+                                       case ('0'): echo ("\x1b[30m");                   break;
+                                       case ('1'): echo ("\x1b[31m");                   break;
+                                       case ('2'): echo ("\x1b[32m");                   break;
+                                       case ('3'): echo ("\x1b[33m");                   break;
+                                       case ('4'): echo ("\x1b[34m");                   break;
+                                       case ('5'): echo ("\x1b[35m");                   break;
+                                       case ('6'): echo ("\x1b[36m");                   break;
+                                       case ('7'): echo ("\x1b[37m");                   break;
+                                       case ('-'): echo ("\x1b[0m");                    break;
+                                       default:    echo ("?");                          break;
+                               }
+                       } break;
+                       default: {
+                               output (format, 1);
+                       } break;
+               }
+       }
 
 
-       * a = * b;
-       * b =   c;
+       va_end (list);
 }
 
 #ifdef use_mathematics
 }
 
 #ifdef use_mathematics
@@ -1135,22 +1305,22 @@ static v0 float_exchange (f4 * a, f4 * b) {
 
 #define pi (3.14159265f)
 
 
 #define pi (3.14159265f)
 
-static f4 sign        (f4 x) { return ((x > 0.0f) ? + 1.0f : - 1.0f); }
-static f4 binary_sign (u4  x) { return ((x > 0)    ? + 1.0f : - 1.0f); }
+static real sign        (real    x) { return ((x > 0.0f) ? + 1.0f : - 1.0f); }
+static real binary_sign (natural x) { return ((x > 0)    ? + 1.0f : - 1.0f); }
 
 
-static f4 square_root (f4 x) { return (sqrtf (x)); }
-static f4 cube_root   (f4 x) { return (cbrtf (x)); }
+static real square_root (real x) { return (sqrtf (x)); }
+static real cube_root   (real x) { return (cbrtf (x)); }
 
 
-static f4 sine    (f4 x) { return (sinf (x)); }
-static f4 cosine  (f4 x) { return (cosf (x)); }
-static f4 tangent (f4 x) { return (tanf (x)); }
+static real sine    (real x) { return (sinf (x)); }
+static real cosine  (real x) { return (cosf (x)); }
+static real tangent (real x) { return (tanf (x)); }
 
 
-static f4 arc_sine    (f4 x) { return (asinf (x)); }
-static f4 arc_cosine  (f4 x) { return (acosf (x)); }
-static f4 arc_tangent (f4 x) { return (atanf (x)); }
+static real arc_sine    (real x) { return (asinf (x)); }
+static real arc_cosine  (real x) { return (acosf (x)); }
+static real arc_tangent (real x) { return (atanf (x)); }
 
 
-static f4 cosecant  (f4 x) { return (1.0f / sinf (x)); }
-static f4 secant    (f4 x) { return (1.0f / cosf (x)); }
-static f4 cotangent (f4 x) { return (1.0f / tanf (x)); }
+static real cosecant  (real x) { return (1.0f / sinf (x)); }
+static real secant    (real x) { return (1.0f / cosf (x)); }
+static real cotangent (real x) { return (1.0f / tanf (x)); }
 
 #endif
 
 #endif
diff --git a/xui.h b/xui.h
index defcf62cd1c8170357e1c7102b28d1266d85eb71..2af9e2843b6f2d02bbef25997084f4c809f70b18 100755 (executable)
--- a/xui.h
+++ b/xui.h
@@ -30,15 +30,15 @@ typedef enum {
        ui_button_upper_left,           ui_button_upper_right,          ui_button_lower_left,           ui_button_lower_right,
        ui_button_middle,
        ui_fill_bar_left,               ui_fill_bar_middle,             ui_fill_bar_right,              ui_fill_bar_base,
        ui_button_upper_left,           ui_button_upper_right,          ui_button_lower_left,           ui_button_lower_right,
        ui_button_middle,
        ui_fill_bar_left,               ui_fill_bar_middle,             ui_fill_bar_right,              ui_fill_bar_base,
-       ui_tiny_fill_bar_middle,        ui_tiny_fill_bar_left,          ui_tiny_fill_bar_right,         ui_tiny_fill_middle,
+       ui_tiny_fill_bar_left,          ui_tiny_fill_bar_middle,        ui_tiny_fill_bar_right,         ui_tiny_fill_bar_base,
        ui_check_box_off,               ui_check_box_on,
        ui_check_box_off,               ui_check_box_on,
-       ui_end_turn_button,
+       ui_cursor,
        ui_icon_frame,                  ui_overicon_frame,              ui_ubericon_frame,
        ui_scroll_bar_lower,            ui_scroll_bar_middle,           ui_scroll_bar_upper,            ui_scroll_bar_slider,
        ui_separator_left,              ui_separator_middle,            ui_separator_right,             ui_separator_center,
        ui_title_bar_left,              ui_title_bar_middle,            ui_title_bar_right,
        ui_subcount
        ui_icon_frame,                  ui_overicon_frame,              ui_ubericon_frame,
        ui_scroll_bar_lower,            ui_scroll_bar_middle,           ui_scroll_bar_upper,            ui_scroll_bar_slider,
        ui_separator_left,              ui_separator_middle,            ui_separator_right,             ui_separator_center,
        ui_title_bar_left,              ui_title_bar_middle,            ui_title_bar_right,
        ui_subcount
-} ui_subtype;
+} ui_subtype_enumeration;
 
 typedef enum {
        ui_window = ui_window_left,
 
 typedef enum {
        ui_window = ui_window_left,
@@ -46,224 +46,344 @@ typedef enum {
        ui_status = ui_status_left,
        ui_menu   = ui_menu_left,
        ui_button = ui_button_left
        ui_status = ui_status_left,
        ui_menu   = ui_menu_left,
        ui_button = ui_button_left
-} ui_type;
+} ui_type_enumeration;
 
 typedef struct {
 
 typedef struct {
-       b4   freeview;
-       u4   ignore;
-       u4   camera_x;
-       u4   camera_y;
-       c1 * help_box_none;
-       c1 * help_box_text;
-       u4   help_box_icon;
-       u4   side_panel;
-       u4   font;
-       u4   monofont;
-       u4   sprite [ui_subcount];
-       u4   width  [ui_subcount];
-       u4   height [ui_subcount];
-       u4   separator_size;
-       u4   icon_size;
-       u4   overicon_size;
-       u4   ubericon_size;
-       u4   title_bar_size;
-       u4   fill_bar_size;
-       u4   scroll_bar_size;
-       u4   camera_speed;
+       natural       count;
+       natural       limit;
+       natural       active;
+       natural       ignore;
+       natural       help_box_icon;
+       character   * help_box_none;
+       character   * help_box_text;
+       character * * folder;
+       natural   * * sprite;
+       natural   * * width;
+       natural   * * height;
+       natural     * font;
+       natural     * monofont;
+       natural     * separator_size;
+       natural     * icon_size;
+       natural     * overicon_size;
+       natural     * ubericon_size;
+       natural     * title_bar_size;
+       natural     * fill_bar_size;
+       natural     * tiny_fill_bar_size;
+       natural     * scroll_bar_size;
 } ui_structure;
 
 } ui_structure;
 
-static ui_structure * ui_initialize (cross_structure * cross) {
-       c1 * subtype_file_name [ui_subcount] = {
-               "window_left",                  "window_right",                 "window_upper",                 "window_lower",
-               "window_upper_left",            "window_upper_right",           "window_lower_left",            "window_lower_right",
-               "frame_left",                   "frame_right",                  "frame_upper",                  "frame_lower",
-               "frame_upper_left",             "frame_upper_right",            "frame_lower_left",             "frame_lower_right",
-               "status_left",                  "status_right",                 "status_upper",                 "status_lower",
-               "status_upper_left",            "status_upper_right",           "status_lower_left",            "status_lower_right",
-               "status_middle",
-               "menu_left",                    "menu_right",                   "menu_upper",                   "menu_lower",
-               "menu_upper_left",              "menu_upper_right",             "menu_lower_left",              "menu_lower_right",
-               "menu_middle",
-               "button_left",                  "button_right",                 "button_upper",                 "button_lower",
-               "button_upper_left",            "button_upper_right",           "button_lower_left",            "button_lower_right",
-               "button_middle",
-               "fill_bar_left",                "fill_bar_middle",              "fill_bar_right",               "fill_bar_base",
-               "tiny_fill_bar_left",           "tiny_fill_bar_middle",         "tiny_fill_bar_right",          "tiny_fill_bar_base",
-               "check_box_off",                "check_box_on",
-               "end_turn_button",
-               "cursor",
-               "icon_frame",                   "overicon_frame",               "ubericon_frame",
-               "scroll_bar_lower",             "scroll_bar_middle",            "scroll_bar_upper",             "scroll_bar_slider",
-               "separator_left",               "separator_middle",             "separator_right",              "separator_center",
-               "title_bar_left",               "title_bar_middle",             "title_bar_right"
-       };
-
+static character * ui_subtype_file_name [ui_subcount] = {
+       "window_left",                  "window_right",                 "window_upper",                 "window_lower",
+       "window_upper_left",            "window_upper_right",           "window_lower_left",            "window_lower_right",
+       "frame_left",                   "frame_right",                  "frame_upper",                  "frame_lower",
+       "frame_upper_left",             "frame_upper_right",            "frame_lower_left",             "frame_lower_right",
+       "status_left",                  "status_right",                 "status_upper",                 "status_lower",
+       "status_upper_left",            "status_upper_right",           "status_lower_left",            "status_lower_right",
+       "status_middle",
+       "menu_left",                    "menu_right",                   "menu_upper",                   "menu_lower",
+       "menu_upper_left",              "menu_upper_right",             "menu_lower_left",              "menu_lower_right",
+       "menu_middle",
+       "button_left",                  "button_right",                 "button_upper",                 "button_lower",
+       "button_upper_left",            "button_upper_right",           "button_lower_left",            "button_lower_right",
+       "button_middle",
+       "fill_bar_left",                "fill_bar_middle",              "fill_bar_right",               "fill_bar_base",
+       "tiny_fill_bar_left",           "tiny_fill_bar_middle",         "tiny_fill_bar_right",          "tiny_fill_bar_base",
+       "check_box_off",                "check_box_on",
+       "cursor",
+       "icon_frame",                   "overicon_frame",               "ubericon_frame",
+       "scroll_bar_lower",             "scroll_bar_middle",            "scroll_bar_upper",             "scroll_bar_slider",
+       "separator_left",               "separator_middle",             "separator_right",              "separator_center",
+       "title_bar_left",               "title_bar_middle",             "title_bar_right"
+};
+
+static ui_structure * ui_initialize (cross_structure * cross, natural limit) {
        ui_structure * ui = allocate (sizeof (* ui));
 
        ui_structure * ui = allocate (sizeof (* ui));
 
-       ui->freeview      = false;
+       ui->limit = limit;
+
        ui->ignore        = ~ 0u;
        ui->ignore        = ~ 0u;
-       ui->camera_x      = 0;
-       ui->camera_y      = 0;
        ui->help_box_none = string_duplicate ("---");
        ui->help_box_text = ui->help_box_none;
        ui->help_box_icon = ui->ignore;
        ui->help_box_none = string_duplicate ("---");
        ui->help_box_text = ui->help_box_none;
        ui->help_box_icon = ui->ignore;
-       ui->side_panel    = 400;
-
-       ui->font     = cross_font_import (cross, configuration_format ("xui/regular"),   ' ', '~', 0xffee0000u);
-       ui->monofont = cross_font_import (cross, configuration_format ("xui/monospace"), ' ', '~', 0xffeeee00u);
 
 
-       for (u4 index = 0; index < ui_subcount; ++index) {
-               c1 * file_name = configuration_format (format ("xui/%s", subtype_file_name [index]));
-
-               ui->sprite [index] = cross_sprite_import (cross, file_name);
-
-               ui->width  [index] = cross_sprite_width  (cross, ui->sprite [index]);
-               ui->height [index] = cross_sprite_height (cross, ui->sprite [index]);
+       ui->folder             = allocate (limit * sizeof (* ui->folder));
+       ui->sprite             = allocate (limit * sizeof (* ui->sprite));
+       ui->width              = allocate (limit * sizeof (* ui->width));
+       ui->height             = allocate (limit * sizeof (* ui->height));
+       ui->font               = allocate (limit * sizeof (* ui->font));
+       ui->monofont           = allocate (limit * sizeof (* ui->monofont));
+       ui->separator_size     = allocate (limit * sizeof (* ui->separator_size));
+       ui->icon_size          = allocate (limit * sizeof (* ui->icon_size));
+       ui->overicon_size      = allocate (limit * sizeof (* ui->overicon_size));
+       ui->ubericon_size      = allocate (limit * sizeof (* ui->ubericon_size));
+       ui->title_bar_size     = allocate (limit * sizeof (* ui->title_bar_size));
+       ui->fill_bar_size      = allocate (limit * sizeof (* ui->fill_bar_size));
+       ui->tiny_fill_bar_size = allocate (limit * sizeof (* ui->tiny_fill_bar_size));
+       ui->scroll_bar_size    = allocate (limit * sizeof (* ui->scroll_bar_size));
+
+       for (natural index = 0; index < limit; ++index) {
+               ui->sprite [index] = allocate (ui_subcount * sizeof (* * ui->sprite));
+               ui->width  [index] = allocate (ui_subcount * sizeof (* * ui->width));
+               ui->height [index] = allocate (ui_subcount * sizeof (* * ui->height));
        }
 
        }
 
-       ui->separator_size  = ui->height [ui_separator_middle];
-       ui->icon_size       = ui->height [ui_icon_frame];
-       ui->overicon_size   = ui->height [ui_overicon_frame];
-       ui->ubericon_size   = ui->height [ui_ubericon_frame];
-       ui->title_bar_size  = ui->height [ui_title_bar_middle];
-       ui->fill_bar_size   = ui->height [ui_fill_bar_middle];
-       ui->scroll_bar_size = ui->width  [ui_scroll_bar_middle];
-
-       print ("[/2Success/-] Initialized UI structure.\n");
+       print ("/s Initialized UI structure.\n");
 
        return (ui);
 }
 
 static ui_structure * ui_deinitialize (ui_structure * ui) {
 
        return (ui);
 }
 
 static ui_structure * ui_deinitialize (ui_structure * ui) {
-       ui->help_box_none = deallocate (ui->help_box_none);
+       for (natural index = 0; index < ui->limit; ++index) {
+               ui->sprite [index] = deallocate (ui->sprite [index]);
+               ui->width  [index] = deallocate (ui->width  [index]);
+               ui->height [index] = deallocate (ui->height [index]);
 
 
-       print ("[/2Success/-] Deinitialized UI information.\n");
+               if (ui->folder [index] != null) {
+                       ui->folder [index] = deallocate (ui->folder [index]);
+               }
+       }
+
+       ui->folder             = deallocate (ui->folder);
+       ui->sprite             = deallocate (ui->sprite);
+       ui->width              = deallocate (ui->width);
+       ui->height             = deallocate (ui->height);
+       ui->font               = deallocate (ui->font);
+       ui->monofont           = deallocate (ui->monofont);
+       ui->separator_size     = deallocate (ui->separator_size);
+       ui->icon_size          = deallocate (ui->icon_size);
+       ui->overicon_size      = deallocate (ui->overicon_size);
+       ui->ubericon_size      = deallocate (ui->ubericon_size);
+       ui->title_bar_size     = deallocate (ui->title_bar_size);
+       ui->fill_bar_size      = deallocate (ui->fill_bar_size);
+       ui->tiny_fill_bar_size = deallocate (ui->tiny_fill_bar_size);
+       ui->scroll_bar_size    = deallocate (ui->scroll_bar_size);
+       ui->help_box_none      = deallocate (ui->help_box_none);
+
+       print ("/s Deinitialized UI structure.\n");
 
        return (deallocate (ui));
 }
 
 
        return (deallocate (ui));
 }
 
-static s4 ui_offset_x (cross_structure * cross, ui_structure * ui) {
-       return (ui->camera_x - cross->window_width / 2);
+static boolean ui_validate_dimensions (ui_structure * ui, ui_subtype_enumeration subtype) {
+       if (ui->width [ui->active] [subtype] != ui->height [ui->active] [subtype]) {
+               print ("/w Mismatching sizes for sprite '%s', in UI '%s'.\n", ui_subtype_file_name [subtype], ui->folder [ui->active]);
+       }
 }
 
 }
 
-static s4 ui_offset_y (cross_structure * cross, ui_structure * ui) {
-       return (ui->camera_y - cross->window_height / 2);
+static boolean ui_validate_width_dimensions (ui_structure * ui, ui_subtype_enumeration begin, ui_subtype_enumeration end) {
+       for (ui_subtype_enumeration index = begin; index <= end; ++index) {
+               if (ui->width [ui->active] [index] != ui->width [ui->active] [begin]) {
+                       print ("/w Mismatching width for sprite '%s', in UI '%s'.\n", ui_subtype_file_name [index], ui->folder [ui->active]);
+               }
+       }
 }
 
 }
 
-static u4 ui_side_panel (ui_structure * ui) {
-       return (ui->side_panel); /// MAKE IT WINDOW SIZE DEPENDENT?
+static boolean ui_validate_height_dimensions (ui_structure * ui, ui_subtype_enumeration begin, ui_subtype_enumeration end) {
+       for (ui_subtype_enumeration index = begin; index <= end; ++index) {
+               if (ui->height [ui->active] [index] != ui->height [ui->active] [begin]) {
+                       print ("/w Mismatching height for sprite '%s', in UI '%s'.\n", ui_subtype_file_name [index], ui->folder [ui->active]);
+               }
+       }
 }
 
 }
 
-static v0 ui_camera_upper (ui_structure * ui) { ui->freeview = true; ui->camera_y -= ui->camera_speed; }
-static v0 ui_camera_lower (ui_structure * ui) { ui->freeview = true; ui->camera_y += ui->camera_speed; }
-static v0 ui_camera_left  (ui_structure * ui) { ui->freeview = true; ui->camera_x -= ui->camera_speed; }
-static v0 ui_camera_right (ui_structure * ui) { ui->freeview = true; ui->camera_x += ui->camera_speed; }
+static boolean ui_validate_grid_dimensions (ui_structure * ui, ui_subtype_enumeration begin, ui_subtype_enumeration end) {
+       for (ui_subtype_enumeration index = begin; index <= end; ++index) {
+               if ((ui->width  [ui->active] [index] != ui->width  [ui->active] [begin])
+               ||  (ui->height [ui->active] [index] != ui->height [ui->active] [begin])) {
+                       print ("/w Mismatching grid for sprite '%s', in UI '%s'.\n", ui_subtype_file_name [index], ui->folder [ui->active]);
+               }
+       }
+}
 
 
-static v0 ui_render (cross_structure * cross, ui_structure * ui, ui_subtype index, s4 x, s4 y) {
-       cross_render_sprite (cross, ui->sprite [index], x, y);
+static procedure ui_configure (cross_structure * cross, ui_structure * ui, character * folder) {
+       if (ui->count >= ui->limit) {
+               print ("/w You are trying to configure more UIs than you set the limit to.\n");
+               return;
+       }
+
+       natural current = ui->active = ++ui->count - 1;
+
+       if (cross->very_verbose_spam == true) {
+               print ("/c Importing UI sprites from '%s' at index %i...\n", folder, current);
+       }
+
+       if (folder != null) {
+               ui->folder [current] = string_duplicate (folder);
+       }
+
+       ui->font [current] = cross_font_import (cross, (folder == null)
+                          ? configuration_format ("xui/regular")
+                          : format ("%s/regular", folder), ' ', '~' + 0, 0);
+
+       ui->monofont [current] = cross_font_import (cross, (folder == null)
+                              ? configuration_format ("xui/monospace")
+                              : format ("%s/monospace", folder), ' ', '~' + 1, 0);
+
+       for (natural index = 0; index < ui_subcount; ++index) {
+               character * file_name = (folder == null)
+                                     ? configuration_format (format ("xui/%s", ui_subtype_file_name [index]))
+                                     : format ("%s/%s", folder, ui_subtype_file_name [index]);
+
+               ui->sprite [current] [index] = cross_sprite_import (cross, file_name);
+
+               ui->width  [current] [index] = cross_sprite_width  (cross, ui->sprite [current] [index]);
+               ui->height [current] [index] = cross_sprite_height (cross, ui->sprite [current] [index]);
+
+               if ((ui->width [current] [index] == 0) || (ui->height [current] [index] == 0)) {
+                       print ("/f UI sprite '%s' has width or height zero.\n", file_name);
+                       exit (log_failure);
+               }
+       }
+
+       ui_validate_dimensions (ui, ui_cursor);
+       ui_validate_dimensions (ui, ui_icon_frame);
+       ui_validate_dimensions (ui, ui_overicon_frame);
+       ui_validate_dimensions (ui, ui_ubericon_frame);
+
+       ui_validate_grid_dimensions (ui, ui_status_left, ui_status_lower_right);
+       ui_validate_grid_dimensions (ui, ui_menu_left,   ui_menu_lower_right);
+       ui_validate_grid_dimensions (ui, ui_button_left, ui_button_lower_right);
+
+       ui_validate_width_dimensions (ui, ui_scroll_bar_lower, ui_scroll_bar_slider);
+
+       ui_validate_height_dimensions (ui, ui_fill_bar_left,      ui_fill_bar_base);
+       ui_validate_height_dimensions (ui, ui_tiny_fill_bar_left, ui_tiny_fill_bar_base);
+       ui_validate_height_dimensions (ui, ui_separator_left,     ui_separator_center);
+       ui_validate_height_dimensions (ui, ui_title_bar_left,     ui_title_bar_right);
+
+       ui->separator_size     [current] = ui->height [current] [ui_separator_middle];
+       ui->icon_size          [current] = ui->height [current] [ui_icon_frame];
+       ui->overicon_size      [current] = ui->height [current] [ui_overicon_frame];
+       ui->ubericon_size      [current] = ui->height [current] [ui_ubericon_frame];
+       ui->title_bar_size     [current] = ui->height [current] [ui_title_bar_middle];
+       ui->fill_bar_size      [current] = ui->height [current] [ui_fill_bar_middle];
+       ui->tiny_fill_bar_size [current] = ui->height [current] [ui_tiny_fill_bar_middle];
+       ui->scroll_bar_size    [current] = ui->width  [current] [ui_scroll_bar_middle];
+
+       if (cross->very_verbose_spam == true) {
+               print ("/c Imported UI sprites from '%s' at index %i.\n", folder, ui->count);
+       }
+}
+
+static procedure ui_render (cross_structure * cross, ui_structure * ui, ui_subtype_enumeration index, integer x, integer y) {
+       cross_render_sprite (cross, ui->sprite [ui->active] [index], x, y);
 }
 
 }
 
-static v0 ui_render_colour (cross_structure * cross, ui_structure * ui, ui_subtype index, u4 colour, s4 x, s4 y) {
-       cross_render_sprite_colour (cross, ui->sprite [index], colour, x, y);
+static procedure ui_render_colour (cross_structure * cross, ui_structure * ui, ui_subtype_enumeration index, natural colour, integer x, integer y) {
+       cross_render_sprite_colour (cross, ui->sprite [ui->active] [index], colour, x, y);
 }
 
 }
 
-static v0 ui_subrender (cross_structure * cross, ui_structure * ui, ui_subtype index, s4 x, s4 y, u4 u, u4 v, u4 width, u4 height) {
-       cross_render_sprite_crop (cross, ui->sprite [index], x, y, u, v, width, height);
+static procedure ui_subrender (cross_structure * cross, ui_structure * ui, ui_subtype_enumeration index, integer x, integer y, natural u, natural v,
+                               natural width, natural height) {
+       cross_render_sprite_crop (cross, ui->sprite [ui->active] [index], x, y, u, v, width, height);
 }
 
 }
 
-static v0 ui_subrender_colour (cross_structure * cross, ui_structure * ui, ui_subtype index, u4 colour, s4 x, s4 y, u4 u, u4 v, u4 width, u4 height) {
-       cross_render_sprite_crop_colour (cross, ui->sprite [index], colour, x, y, u, v, width, height);
+static procedure ui_subrender_colour (cross_structure * cross, ui_structure * ui, ui_subtype_enumeration index, natural colour, integer x, integer y,
+                                      natural u, natural v, natural width, natural height) {
+       cross_render_sprite_crop_colour (cross, ui->sprite [ui->active] [index], colour, x, y, u, v, width, height);
 }
 
 }
 
-static v0 ui_render_horizontal (cross_structure * cross, ui_structure * ui, ui_subtype index, s4 x, s4 y, u4 width) {
-       s4 entire = (width / ui->width [index]) * ui->width [index];
+static procedure ui_render_horizontal (cross_structure * cross, ui_structure * ui, ui_subtype_enumeration index, integer x, integer y, natural width) {
+       integer entire = (width / ui->width [ui->active] [index]) * ui->width [ui->active] [index];
 
 
-       for (u4 margin = 0; margin < width / ui->width [index]; ++margin) {
-               ui_render (cross, ui, index, x + margin * ui->width [index], y);
+       for (natural margin = 0; margin < width / ui->width [ui->active] [index]; ++margin) {
+               ui_render (cross, ui, index, x + margin * ui->width [ui->active] [index], y);
        }
 
        }
 
-       if (width % ui->width [index] > 0) {
-               ui_subrender (cross, ui, index, x + entire, y, 0, 0, width % ui->width [index], ui->height [index]);
+       if (width % ui->width [ui->active] [index] > 0) {
+               ui_subrender (cross, ui, index, x + entire, y, 0, 0, width % ui->width [ui->active] [index], ui->height [ui->active] [index]);
        }
 }
 
        }
 }
 
-static v0 ui_render_horizontal_colour (cross_structure * cross, ui_structure * ui, ui_subtype index, u4 colour, s4 x, s4 y, u4 width) {
-       s4 entire = (width / ui->width [index]) * ui->width [index];
+static procedure ui_render_horizontal_colour (cross_structure * cross, ui_structure * ui, ui_subtype_enumeration index, natural colour,
+                                              integer x, integer y, natural width) {
+       //~natural width_divisor   = width / ui->width [ui->active] [index];
+       //~natural width_remainder = width % ui->width [ui->active] [index];
+
+       //~for (natural offset = 0; offset < width_divisor; ++offset) {
+               //~ui_render_colour (cross, ui, index, colour, x + offset * ui->width [ui->active] [index], y);
+       //~}
+
+       //~if (width_remainder > 0) {
+               //~ui_subrender_colour (cross, ui, index, colour, x + width - width_remainder, y, 0, 0, width_remainder, ui->height [ui->active] [index]);
+       //~}
+       integer entire = (width / ui->width [ui->active] [index]) * ui->width [ui->active] [index];
 
 
-       for (u4 margin = 0; margin < width / ui->width [index]; ++margin) {
-               ui_render_colour (cross, ui, index, colour, x + margin * ui->width [index], y);
+       for (natural margin = 0; margin < width / ui->width [ui->active] [index]; ++margin) {
+               ui_render (cross, ui, index, x + margin * ui->width [ui->active] [index], y);
        }
 
        }
 
-       if (width % ui->width [index] > 0) {
-               ui_subrender_colour (cross, ui, index, colour, x + entire, y, 0, 0, width % ui->width [index], ui->height [index]);
+       if (width % ui->width [ui->active] [index] > 0) {
+               ui_subrender (cross, ui, index, x + entire, y, 0, 0, width % ui->width [ui->active] [index], ui->height [ui->active] [index]);
        }
 }
 
        }
 }
 
-static v0 ui_render_vertical (cross_structure * cross, ui_structure * ui, ui_subtype index, s4 x, s4 y, u4 height) {
-       s4 entire = (height / ui->height [index]) * ui->height [index];
+static procedure ui_render_vertical (cross_structure * cross, ui_structure * ui, ui_subtype_enumeration index, integer x, integer y, natural height) {
+       integer entire = (height / ui->height [ui->active] [index]) * ui->height [ui->active] [index];
 
 
-       for (u4 margin = 0; margin < height / ui->height [index]; ++margin) {
-               ui_render (cross, ui, index, x, y + margin * ui->height [index]);
+       for (natural margin = 0; margin < height / ui->height [ui->active] [index]; ++margin) {
+               ui_render (cross, ui, index, x, y + margin * ui->height [ui->active] [index]);
        }
 
        }
 
-       if (height % ui->height [index] > 0) {
-               ui_subrender (cross, ui, index, x, y + entire, 0, 0, ui->width [index], height % ui->height [index]);
+       if (height % ui->height [ui->active] [index] > 0) {
+               ui_subrender (cross, ui, index, x, y + entire, 0, 0, ui->width [ui->active] [index], height % ui->height [ui->active] [index]);
        }
 }
 
        }
 }
 
-static v0 ui_render_background (cross_structure * cross, ui_structure * ui, ui_subtype index, s4 x, s4 y, u4 width, u4 height) {
-       u4 offset_x = (width  / ui->width  [index]) * ui->width  [index];
-       u4 offset_y = (height / ui->height [index]) * ui->height [index];
+static procedure ui_render_background (cross_structure * cross, ui_structure * ui, ui_subtype_enumeration index, integer x, integer y, natural width, natural height) {
+       natural offset_x = (width  / ui->width  [ui->active] [index]) * ui->width  [ui->active] [index];
+       natural offset_y = (height / ui->height [ui->active] [index]) * ui->height [ui->active] [index];
 
 
-       u4 cutoff_x = width  % ui->width  [index];
-       u4 cutoff_y = height % ui->height [index];
+       natural cutoff_x = width  % ui->width  [ui->active] [index];
+       natural cutoff_y = height % ui->height [ui->active] [index];
 
 
-       for (u4 vertical = 0; vertical < height / ui->height [index]; ++vertical) {
-               for (u4 horizontal = 0; horizontal < width / ui->width [index]; ++horizontal) {
-                       ui_render (cross, ui, index, x + horizontal * ui->width [index], y + vertical * ui->height [index]);
+       for (natural vertical = 0; vertical < height / ui->height [ui->active] [index]; ++vertical) {
+               for (natural horizontal = 0; horizontal < width / ui->width [ui->active] [index]; ++horizontal) {
+                       ui_render (cross, ui, index, x + horizontal * ui->width [ui->active] [index], y + vertical * ui->height [ui->active] [index]);
                }
 
                }
 
-               if (width % ui->width [index] > 0) {
-                       ui_subrender (cross, ui, index, x + offset_x, y + vertical * ui->height [index], 0, 0, cutoff_x, ui->height [index]);
+               if (width % ui->width [ui->active] [index] > 0) {
+                       ui_subrender (cross, ui, index, x + offset_x, y + vertical * ui->height [ui->active] [index], 0, 0, cutoff_x, ui->height [ui->active] [index]);
                }
        }
 
                }
        }
 
-       for (u4 horizontal = 0; horizontal < width / ui->width [index]; ++horizontal) {
-               ui_subrender (cross, ui, index, x + horizontal * ui->width [index], y + offset_y, 0, 0, ui->width [index], cutoff_y);
+       for (natural horizontal = 0; horizontal < width / ui->width [ui->active] [index]; ++horizontal) {
+               ui_subrender (cross, ui, index, x + horizontal * ui->width [ui->active] [index], y + offset_y, 0, 0, ui->width [ui->active] [index], cutoff_y);
        }
 
        }
 
-       if (width % ui->width [index] > 0) {
+       if (width % ui->width [ui->active] [index] > 0) {
                ui_subrender (cross, ui, index, x + offset_x, y + offset_y, 0, 0, cutoff_x, cutoff_y);
        }
 }
 
                ui_subrender (cross, ui, index, x + offset_x, y + offset_y, 0, 0, cutoff_x, cutoff_y);
        }
 }
 
-static v0 ui_screen_overlay (cross_structure * cross) {
-       cross_render_rectangle_vertical_gradient (cross, 0, 0,                        cross->window_width, cross->window_height / 2, 0xcc, 0x00);
-       cross_render_rectangle_vertical_gradient (cross, 0, cross->window_height / 2, cross->window_width, cross->window_height / 2, 0x00, 0xcc);
+static procedure ui_screen_overlay (cross_structure * cross, natural colour) {
+       cross_render_rectangle (cross, 0, 0, cross->window_width, cross->window_height, colour);
 }
 
 }
 
-static v0 ui_render_grid (cross_structure * cross, ui_structure * ui, ui_type element, s4 x, s4 y, u4 width, u4 height, u4 margin, b4 background) {
-       u4 upper_length = width  - ui->width  [element + 4] - ui->width  [element + 5];
-       u4 lower_length = width  - ui->width  [element + 6] - ui->width  [element + 7];
-       u4 left_length  = height - ui->height [element + 4] - ui->height [element + 6];
-       u4 right_length = height - ui->height [element + 5] - ui->height [element + 7];
+static procedure ui_render_grid (cross_structure * cross, ui_structure * ui, ui_type_enumeration element, integer x, integer y, natural width,
+                                 natural height, boolean background) {
+       if ((width  < ui->width  [ui->active] [element + 4] + ui->width  [ui->active] [element + 5] + ui->width  [ui->active] [element + 2]) ||
+           (height < ui->height [ui->active] [element + 4] + ui->height [ui->active] [element + 6] + ui->height [ui->active] [element + 0])) {
+               return;
+       }
 
 
-       s4 upper_offset_x =          ui->width  [element + 4];
-       s4 lower_offset_x =          ui->width  [element + 6];
-       s4 lower_offset_y = height - ui->height [element + 3];
+       natural upper_length = width  - ui->width  [ui->active] [element + 4] - ui->width  [ui->active] [element + 5];
+       natural lower_length = width  - ui->width  [ui->active] [element + 6] - ui->width  [ui->active] [element + 7];
+       natural left_length  = height - ui->height [ui->active] [element + 4] - ui->height [ui->active] [element + 6];
+       natural right_length = height - ui->height [ui->active] [element + 5] - ui->height [ui->active] [element + 7];
 
 
-       s4 right_offset_x = width - ui->width  [element + 1];
-       s4 left_offset_y  =         ui->height [element + 4];
-       s4 right_offset_y =         ui->height [element + 5];
+       integer upper_offset_x =          ui->width  [ui->active] [element + 4];
+       integer lower_offset_x =          ui->width  [ui->active] [element + 6];
+       integer lower_offset_y = height - ui->height [ui->active] [element + 3];
 
 
-       s4 upper_right_offset_x = width  - ui->width  [element + 5];
-       s4 lower_right_offset_x = width  - ui->width  [element + 7];
-       s4 lower_left_offset_y  = height - ui->height [element + 6];
-       s4 lower_right_offset_y = height - ui->height [element + 7];
+       integer right_offset_x = width - ui->width  [ui->active] [element + 1];
+       integer left_offset_y  =         ui->height [ui->active] [element + 4];
+       integer right_offset_y =         ui->height [ui->active] [element + 5];
 
 
-       if ((background == true) && (width > 2 * margin) && (height > 2 * margin)) {
-               ui_render_background (cross, ui, element + 8, x + margin, y + margin, width - 2 * margin, height - 2 * margin);
-       }
+       integer upper_right_offset_x = width  - ui->width  [ui->active] [element + 5];
+       integer lower_right_offset_x = width  - ui->width  [ui->active] [element + 7];
+       integer lower_left_offset_y  = height - ui->height [ui->active] [element + 6];
+       integer lower_right_offset_y = height - ui->height [ui->active] [element + 7];
 
        ui_render_vertical (cross, ui, element + 0, x,                  y + left_offset_y,  left_length);
        ui_render_vertical (cross, ui, element + 1, x + right_offset_x, y + right_offset_y, right_length);
 
        ui_render_vertical (cross, ui, element + 0, x,                  y + left_offset_y,  left_length);
        ui_render_vertical (cross, ui, element + 1, x + right_offset_x, y + right_offset_y, right_length);
@@ -275,31 +395,35 @@ static v0 ui_render_grid (cross_structure * cross, ui_structure * ui, ui_type el
        ui_render (cross, ui, element + 5, x + upper_right_offset_x, y);
        ui_render (cross, ui, element + 6, x,                        y + lower_left_offset_y);
        ui_render (cross, ui, element + 7, x + lower_right_offset_x, y + lower_right_offset_y);
        ui_render (cross, ui, element + 5, x + upper_right_offset_x, y);
        ui_render (cross, ui, element + 6, x,                        y + lower_left_offset_y);
        ui_render (cross, ui, element + 7, x + lower_right_offset_x, y + lower_right_offset_y);
+
+       if (background == true) {
+               ui_render_background (cross, ui, element + 8, x + upper_offset_x, y + left_offset_y, upper_length, left_length);
+       }
 }
 
 }
 
-static v0 ui_render_window (cross_structure * cross, ui_structure * ui, s4 x, s4 y, u4 width, u4 height) {
-       ui_render_grid (cross, ui, ui_window, x, y, width, height, 0, false);
+static procedure ui_render_window (cross_structure * cross, ui_structure * ui, integer x, integer y, natural width, natural height) {
+       ui_render_grid (cross, ui, ui_window, x, y, width, height, false);
 }
 
 }
 
-static v0 ui_render_frame (cross_structure * cross, ui_structure * ui, s4 x, s4 y, u4 width, u4 height) {
-       ui_render_grid (cross, ui, ui_frame, x, y, width, height, 0, false);
+static procedure ui_render_frame (cross_structure * cross, ui_structure * ui, integer x, integer y, natural width, natural height) {
+       ui_render_grid (cross, ui, ui_frame, x, y, width, height, false);
 }
 
 }
 
-static v0 ui_render_status (cross_structure * cross, ui_structure * ui, s4 x, s4 y, u4 width, u4 height) {
-       ui_render_grid (cross, ui, ui_status, x, y, width, height, 16, true);
+static procedure ui_render_status (cross_structure * cross, ui_structure * ui, integer x, integer y, natural width, natural height) {
+       ui_render_grid (cross, ui, ui_status, x, y, width, height, true);
 }
 
 }
 
-static v0 ui_render_menu (cross_structure * cross, ui_structure * ui, s4 x, s4 y, u4 width, u4 height) {
-       ui_render_grid (cross, ui, ui_menu, x, y, width, height, 24, true);
+static procedure ui_render_menu (cross_structure * cross, ui_structure * ui, integer x, integer y, natural width, natural height) {
+       ui_render_grid (cross, ui, ui_menu, x, y, width, height, true);
 }
 
 }
 
-static v0 ui_render_button (cross_structure * cross, ui_structure * ui, s4 x, s4 y, u4 width, u4 height) {
-       ui_render_grid (cross, ui, ui_button, x, y, width, height, 16, true);
+static procedure ui_render_button (cross_structure * cross, ui_structure * ui, integer x, integer y, natural width, natural height) {
+       ui_render_grid (cross, ui, ui_button, x, y, width, height, true);
 }
 
 }
 
-static v0 ui_render_separator (cross_structure * cross, ui_structure * ui, s4 x, s4 y, u4 width) {
-       u4 margin =                  ui->width [ui_separator_left];
-       u4 length = width - margin - ui->width [ui_separator_right];
+static procedure ui_render_separator (cross_structure * cross, ui_structure * ui, integer x, integer y, natural width) {
+       natural margin =                  ui->width [ui->active] [ui_separator_left];
+       natural length = width - margin - ui->width [ui->active] [ui_separator_right];
 
        ui_render (cross, ui, ui_separator_left, x, y);
 
 
        ui_render (cross, ui, ui_separator_left, x, y);
 
@@ -307,12 +431,12 @@ static v0 ui_render_separator (cross_structure * cross, ui_structure * ui, s4 x,
 
        ui_render (cross, ui, ui_separator_right, x + margin + length, y);
 
 
        ui_render (cross, ui, ui_separator_right, x + margin + length, y);
 
-       ui_render (cross, ui, ui_separator_center, x + (width - ui->width [ui_separator_center]) / 2, y);
+       ui_render (cross, ui, ui_separator_center, x + (width - ui->width [ui->active] [ui_separator_center]) / 2, y);
 }
 
 }
 
-static v0 ui_render_title_bar (cross_structure * cross, ui_structure * ui, c1 * title, s4 x, s4 y, u4 width) {
-       u4 margin =                  ui->width [ui_title_bar_left];
-       u4 length = width - margin - ui->width [ui_title_bar_right];
+static procedure ui_render_title_bar (cross_structure * cross, ui_structure * ui, character * title, integer x, integer y, natural width) {
+       natural margin =                  ui->width [ui->active] [ui_title_bar_left];
+       natural length = width - margin - ui->width [ui->active] [ui_title_bar_right];
 
        ui_render (cross, ui, ui_title_bar_left, x, y);
 
 
        ui_render (cross, ui, ui_title_bar_left, x, y);
 
@@ -320,18 +444,21 @@ static v0 ui_render_title_bar (cross_structure * cross, ui_structure * ui, c1 *
 
        ui_render (cross, ui, ui_title_bar_right, x + margin + length, y);
 
 
        ui_render (cross, ui, ui_title_bar_right, x + margin + length, y);
 
-       cross_render_string (cross, title, ui->font, x + margin + 8, y + 8, 1, 0x112233ff);
+       cross_render_string (cross, title, ui->font [ui->active], x + margin + 8, y + 8, 1, 0x112233ff);
 }
 
 }
 
-static v0 ui_render_icon_and_text (cross_structure * cross, ui_structure * ui, c1 * title, u4 icon, s4 x, s4 y) {
+static procedure ui_render_icon_and_text (cross_structure * cross, ui_structure * ui, character * title, natural icon, integer x, integer y,
+                                          natural colour) {
        cross_render_sprite (cross, icon, x, y);
        cross_render_sprite (cross, icon, x, y);
-
-       cross_render_string (cross, title, ui->font, x - 2 + ui->icon_size, y + 2, 1, 0x112233ffu);
+//////////////////////////////////////////
+       cross_render_string (cross, title, ui->font [ui->active], x - 2 + ui->icon_size [ui->active], y + 2, 1.0f, colour);
 }
 
 }
 
-static v0 ui_render_scroll_bar (cross_structure * cross, ui_structure * ui, f4 slider, s4 x, s4 y, u4 height) {
-       u4 margin =                   ui->height [ui_scroll_bar_upper];
-       u4 length = height - margin - ui->height [ui_scroll_bar_lower];
+static procedure ui_render_scroll_bar (cross_structure * cross, ui_structure * ui, real slider, integer x, integer y, natural height) {
+       natural margin =                   ui->height [ui->active] [ui_scroll_bar_upper];
+       natural length = height - margin - ui->height [ui->active] [ui_scroll_bar_lower];
+
+       real slider_offset = slider * (real) (length - ui->height [ui->active] [ui_scroll_bar_slider]);
 
        ui_render (cross, ui, ui_scroll_bar_upper, x, y);
 
 
        ui_render (cross, ui, ui_scroll_bar_upper, x, y);
 
@@ -339,12 +466,12 @@ static v0 ui_render_scroll_bar (cross_structure * cross, ui_structure * ui, f4 s
 
        ui_render (cross, ui, ui_scroll_bar_lower, x, y + margin + length);
 
 
        ui_render (cross, ui, ui_scroll_bar_lower, x, y + margin + length);
 
-       ui_render (cross, ui, ui_scroll_bar_slider, x, y + margin + (u4) (slider * (float) (length - ui->height [ui_scroll_bar_slider])));
+       ui_render (cross, ui, ui_scroll_bar_slider, x, y + margin + (natural) slider_offset);
 }
 
 }
 
-static v0 ui_render_fill_bar (cross_structure * cross, ui_structure * ui, f4 fill, u4 colour, s4 x, s4 y, u4 width) {
-       u4 margin =                  ui->width [ui_fill_bar_left];
-       u4 length = width - margin - ui->width [ui_fill_bar_right];
+static procedure ui_render_fill_bar (cross_structure * cross, ui_structure * ui, real fill, natural colour, integer x, integer y, natural width) {
+       natural margin =                  ui->width [ui->active] [ui_fill_bar_left];
+       natural length = width - margin - ui->width [ui->active] [ui_fill_bar_right];
 
        ui_render (cross, ui, ui_fill_bar_left, x, y);
 
 
        ui_render (cross, ui, ui_fill_bar_left, x, y);
 
@@ -352,41 +479,42 @@ static v0 ui_render_fill_bar (cross_structure * cross, ui_structure * ui, f4 fil
 
        ui_render (cross, ui, ui_fill_bar_right, x + margin + length, y);
 
 
        ui_render (cross, ui, ui_fill_bar_right, x + margin + length, y);
 
-       ui_render_horizontal_colour (cross, ui, ui_fill_bar_base, colour, x + margin, y, (u4) (fill * (float) length));
+       ui_render_horizontal_colour (cross, ui, ui_fill_bar_base, colour, x + margin, y, (natural) (fill * (real) length));
 }
 
 }
 
-static v0 ui_render_icon (cross_structure * cross, ui_structure * ui, u4 icon, s4 x, s4 y) {
-       cross_render_sprite (cross, ui->sprite [ui_icon_frame], x, y);
+static procedure ui_render_icon (cross_structure * cross, ui_structure * ui, natural icon, integer x, integer y) {
+       cross_render_sprite (cross, ui->sprite [ui->active] [ui_icon_frame], x, y);
 
        if (icon != ui->ignore) {
                cross_render_sprite (cross, icon, x, y);
        }
 }
 
 
        if (icon != ui->ignore) {
                cross_render_sprite (cross, icon, x, y);
        }
 }
 
-static v0 ui_render_overicon (cross_structure * cross, ui_structure * ui, u4 icon, s4 x, s4 y) {
+static procedure ui_render_overicon (cross_structure * cross, ui_structure * ui, natural icon, integer x, integer y) {
        if (icon != ui->ignore) {
                cross_render_sprite (cross, icon, x, y);
        }
 
        if (icon != ui->ignore) {
                cross_render_sprite (cross, icon, x, y);
        }
 
-       cross_render_sprite (cross, ui->sprite [ui_overicon_frame], x, y);
+       cross_render_sprite (cross, ui->sprite [ui->active] [ui_overicon_frame], x, y);
 }
 
 }
 
-static v0 ui_render_ubericon (cross_structure * cross, ui_structure * ui, u4 icon, s4 x, s4 y) {
-       cross_render_sprite (cross, ui->sprite [ui_ubericon_frame], x, y);
+static procedure ui_render_ubericon (cross_structure * cross, ui_structure * ui, natural icon, integer x, integer y, natural offset) {
+       cross_render_sprite (cross, ui->sprite [ui->active] [ui_ubericon_frame], x, y);
 
        if (icon != ui->ignore) {
 
        if (icon != ui->ignore) {
-               cross_render_sprite (cross, icon, x + 16, y + 16);
+               cross_render_sprite (cross, icon, x + offset, y + offset);
        }
 }
 
        }
 }
 
-static v0 ui_render_menu_full (cross_structure * cross, ui_structure * ui, c1 * title, s4 x, s4 y, u4 width, u4 height) {
-       u4 margin = 24;
-
-       ui_screen_overlay (cross);
+static procedure ui_render_menu_full (cross_structure * cross, ui_structure * ui, character * title, integer x, integer y, natural width,
+                                      natural height, natural overlay_colour, natural margin) {
+       if (overlay_colour != 0x00000000u) {
+               ui_screen_overlay (cross, overlay_colour);
+       }
 
        ui_render_menu (cross, ui, x, y, width, height);
 
        if (title != null) {
 
        ui_render_menu (cross, ui, x, y, width, height);
 
        if (title != null) {
-               ui_render_title_bar (cross, ui, format ("<%s>", title), x + margin, y + margin / 2 - ui->title_bar_size, width - 2 * margin);
+               ui_render_title_bar (cross, ui, title, x + margin, y + margin / 2 - ui->title_bar_size [ui->active], width - 2 * margin);
        }
 }
        }
 }
diff --git a/xui/button_left.png b/xui/button_left.png
new file mode 100755 (executable)
index 0000000..9b460c6
Binary files /dev/null and b/xui/button_left.png differ
diff --git a/xui/button_lower.png b/xui/button_lower.png
new file mode 100755 (executable)
index 0000000..ac26ead
Binary files /dev/null and b/xui/button_lower.png differ
diff --git a/xui/button_lower_left.png b/xui/button_lower_left.png
new file mode 100755 (executable)
index 0000000..e4e42f1
Binary files /dev/null and b/xui/button_lower_left.png differ
diff --git a/xui/button_lower_right.png b/xui/button_lower_right.png
new file mode 100755 (executable)
index 0000000..67b0986
Binary files /dev/null and b/xui/button_lower_right.png differ
diff --git a/xui/button_middle.png b/xui/button_middle.png
new file mode 100755 (executable)
index 0000000..58f49ed
Binary files /dev/null and b/xui/button_middle.png differ
diff --git a/xui/button_right.png b/xui/button_right.png
new file mode 100755 (executable)
index 0000000..44aafbc
Binary files /dev/null and b/xui/button_right.png differ
diff --git a/xui/button_upper.png b/xui/button_upper.png
new file mode 100755 (executable)
index 0000000..7a76ea4
Binary files /dev/null and b/xui/button_upper.png differ
diff --git a/xui/button_upper_left.png b/xui/button_upper_left.png
new file mode 100755 (executable)
index 0000000..82f4707
Binary files /dev/null and b/xui/button_upper_left.png differ
diff --git a/xui/button_upper_right.png b/xui/button_upper_right.png
new file mode 100755 (executable)
index 0000000..dffff05
Binary files /dev/null and b/xui/button_upper_right.png differ
diff --git a/xui/check_box_off.png b/xui/check_box_off.png
new file mode 100755 (executable)
index 0000000..db36276
Binary files /dev/null and b/xui/check_box_off.png differ
diff --git a/xui/check_box_on.png b/xui/check_box_on.png
new file mode 100755 (executable)
index 0000000..356dd53
Binary files /dev/null and b/xui/check_box_on.png differ
diff --git a/xui/cursor.png b/xui/cursor.png
new file mode 100755 (executable)
index 0000000..954f141
Binary files /dev/null and b/xui/cursor.png differ
index 654b381bcff89a11978eae31ef4b7f63231ada5e..aa9e1cfae095fc8539b8bbc608ea9007e384d168 100755 (executable)
Binary files a/xui/dwarf/fill_bar_base.png and b/xui/dwarf/fill_bar_base.png differ
index 87232883816139279d35965c7b13c1cb4e7ade93..f44f66407bb46fcb5ae4efb1ed643b808167953b 100755 (executable)
Binary files a/xui/dwarf/fill_bar_left.png and b/xui/dwarf/fill_bar_left.png differ
index 76ef017e8fd7f76438e3349af3394fd7fffb7d3e..e666d76da64ee4850507a4374828427a33eac8b9 100755 (executable)
Binary files a/xui/dwarf/fill_bar_middle.png and b/xui/dwarf/fill_bar_middle.png differ
index 8aba62c420693042eec4186d36228d6e706a64da..a1e9c513ed90cd076e4d4c63c4e9bd7fe9df5370 100755 (executable)
Binary files a/xui/dwarf/fill_bar_right.png and b/xui/dwarf/fill_bar_right.png differ
diff --git a/xui/dwarf/monospace.png b/xui/dwarf/monospace.png
new file mode 100755 (executable)
index 0000000..074f192
Binary files /dev/null and b/xui/dwarf/monospace.png differ
diff --git a/xui/dwarf/regular.png b/xui/dwarf/regular.png
new file mode 100755 (executable)
index 0000000..0e5bfe7
Binary files /dev/null and b/xui/dwarf/regular.png differ
index c54c9be29b8d7607c705a4c6ca1d2f442d55e591..bf9fa9d5829b0f57ef5413b5f42e1a3ba29a7c5d 100755 (executable)
Binary files a/xui/dwarf/scroll_bar_slider.png and b/xui/dwarf/scroll_bar_slider.png differ
index c54c9be29b8d7607c705a4c6ca1d2f442d55e591..e3de595f0f4a5786113d13aad0155e8d85eed005 100755 (executable)
Binary files a/xui/dwarf/separator_center.png and b/xui/dwarf/separator_center.png differ
index 99020edee27228d3c5831f74dc5288dceede900e..65f1f84c4f0f46573399382c2c6187137dfc048e 100755 (executable)
Binary files a/xui/dwarf/status_left.png and b/xui/dwarf/status_left.png differ
index 1c0a3e7b093bfaafcdbfaf25fb04ddead6594e86..1a482d7d2c4b09b58dc4ac45024b9e33e62a81cf 100755 (executable)
Binary files a/xui/dwarf/status_lower.png and b/xui/dwarf/status_lower.png differ
index fc161ccb41ce1bd427cebedbb43f8a4927d793fd..3352bbd34983e6bb01b8a06fd4aed8c97a63793d 100755 (executable)
Binary files a/xui/dwarf/status_lower_left.png and b/xui/dwarf/status_lower_left.png differ
index 3366adb52c9c703a4018a0b23daf634145bdfb81..95c395da682f8ae1edd650e745175eb51b447331 100755 (executable)
Binary files a/xui/dwarf/status_lower_right.png and b/xui/dwarf/status_lower_right.png differ
index 76de51ac29c0d976a974e2e82a921d6471ffc794..768a797840b7260eac9b4f4eb84ffaee7954aaad 100755 (executable)
Binary files a/xui/dwarf/status_middle.png and b/xui/dwarf/status_middle.png differ
index 99020edee27228d3c5831f74dc5288dceede900e..3182906817b4fdf9bff0d04e1ce6f6c50f3e980a 100755 (executable)
Binary files a/xui/dwarf/status_right.png and b/xui/dwarf/status_right.png differ
index 1c0a3e7b093bfaafcdbfaf25fb04ddead6594e86..9dfe0b19f15c948bffbdb86f8c1770d6083f62ff 100755 (executable)
Binary files a/xui/dwarf/status_upper.png and b/xui/dwarf/status_upper.png differ
index 3d8c27165eee288e2abd968796b08ed4f0d8c360..7458c32e09c300a1de62d8a95a7c9e68ea600ff2 100755 (executable)
Binary files a/xui/dwarf/status_upper_left.png and b/xui/dwarf/status_upper_left.png differ
index 00c9afbc5916b5e43bb78103492b35f467fb9677..2eac3efb4f121e9db7adaa401df0a740bc39070a 100755 (executable)
Binary files a/xui/dwarf/status_upper_right.png and b/xui/dwarf/status_upper_right.png differ
diff --git a/xui/end_turn_button.png b/xui/end_turn_button.png
new file mode 100755 (executable)
index 0000000..34efbcc
Binary files /dev/null and b/xui/end_turn_button.png differ
index cf08f70eda74d52f70a25e152438ddd61d97db28..80ab4a6e504a99015ad6403da9a2c331770f906e 100755 (executable)
Binary files a/xui/fairy/fill_bar_base.png and b/xui/fairy/fill_bar_base.png differ
index 09c10c644fa4b787f710ce6982ca7282af391b8b..8729ed8b78ad8a63268c8d182c627e2d681428c5 100755 (executable)
Binary files a/xui/fairy/fill_bar_left.png and b/xui/fairy/fill_bar_left.png differ
index d7b6b15ea28edac4c658c9e525d754a9607a05fc..40e4f39aef80e59c2a807447dc01937bbce7c177 100755 (executable)
Binary files a/xui/fairy/fill_bar_middle.png and b/xui/fairy/fill_bar_middle.png differ
index 8b0279b0c152e0eda579e708feb24f9b0ca506c0..0fcbddea91fa9bd734aa158322fab2a71937551f 100755 (executable)
Binary files a/xui/fairy/fill_bar_right.png and b/xui/fairy/fill_bar_right.png differ
diff --git a/xui/fairy/monospace.png b/xui/fairy/monospace.png
new file mode 100755 (executable)
index 0000000..074f192
Binary files /dev/null and b/xui/fairy/monospace.png differ
diff --git a/xui/fairy/regular.png b/xui/fairy/regular.png
new file mode 100755 (executable)
index 0000000..0e5bfe7
Binary files /dev/null and b/xui/fairy/regular.png differ
index f4c77c117346e8c740294c32714c728baddd2552..746765cb7c08557998a82f1843d6d61fefe1bba2 100755 (executable)
Binary files a/xui/fairy/scroll_bar_lower.png and b/xui/fairy/scroll_bar_lower.png differ
index d627d82e7d56b23f20b1b77668401e46b7b4e0de..1a6ac9d499889aa49e2f5ef40ee07b975c73a4ec 100755 (executable)
Binary files a/xui/fairy/scroll_bar_middle.png and b/xui/fairy/scroll_bar_middle.png differ
index fd83ff9f8d8cfec6d89fbe851e17dfaf3960c155..7d67c40a5160da84b6d7d6d762b88c503eb4a10e 100755 (executable)
Binary files a/xui/fairy/scroll_bar_upper.png and b/xui/fairy/scroll_bar_upper.png differ
index 1ae30164a4c3f0ed9d4bbef3d2bce22cde80d2f8..162c2c454e0deda9cc65f07babe848e706d1f487 100644 (file)
Binary files a/xui/fairy/separator_center.png and b/xui/fairy/separator_center.png differ
index 6bbb1df0ea66454c5ba783dcbbbff61bfaa64e89..56d0d29489322527bc318c5e629175e5fac39bc1 100755 (executable)
Binary files a/xui/fairy/status_left.png and b/xui/fairy/status_left.png differ
index ac0f64acbaccceaba54a79b5c890ba5a344a1163..be49d15eecbb848840298d1bf82149c0423b24fe 100755 (executable)
Binary files a/xui/fairy/status_lower.png and b/xui/fairy/status_lower.png differ
index 5fad49d3325a5fa5e51cb32043fa710ae393b219..a1cfc4a18be0ff4de380ab52acb50b5d303c8b9f 100755 (executable)
Binary files a/xui/fairy/status_lower_left.png and b/xui/fairy/status_lower_left.png differ
index 803609ee0c596b22cc1450e890a0017736565136..72352215507308cb5c70db66ad28e80115435f2c 100755 (executable)
Binary files a/xui/fairy/status_lower_right.png and b/xui/fairy/status_lower_right.png differ
index efaddd0d0f1c00029f69ced2676ec099180656ce..fa3be7ee1ed6d28849baf131973b092bb52d726f 100755 (executable)
Binary files a/xui/fairy/status_middle.png and b/xui/fairy/status_middle.png differ
index 6bbb1df0ea66454c5ba783dcbbbff61bfaa64e89..769d5a2e5af4b8dc1a28830433cb5d686ebd2eaf 100755 (executable)
Binary files a/xui/fairy/status_right.png and b/xui/fairy/status_right.png differ
index ac0f64acbaccceaba54a79b5c890ba5a344a1163..32f760620745000392165740d86999b59b373c57 100755 (executable)
Binary files a/xui/fairy/status_upper.png and b/xui/fairy/status_upper.png differ
index bc7528d96727104f4c462c1242f327d699bf97d7..ac9b958b34759295cf7911849557b1d5c9cbf797 100755 (executable)
Binary files a/xui/fairy/status_upper_left.png and b/xui/fairy/status_upper_left.png differ
index 24c00a3bbe0fa642baa8c1ebfa268440614d106e..ba9630d0820378dd612ee418d1ff875898db604f 100755 (executable)
Binary files a/xui/fairy/status_upper_right.png and b/xui/fairy/status_upper_right.png differ
index be3768c8d53039e897674ff4a25270eb52d8ee27..7b838e02fcd5aa957bb88f9b31f7be32f3dda3f7 100755 (executable)
Binary files a/xui/fairy/title_bar_middle.png and b/xui/fairy/title_bar_middle.png differ
index f2fc8b1ea5cb7f1b101ce9a6e18d5dcb8310af8a..b73dbc19d8250e08a593367f8814eb1de56442eb 100755 (executable)
Binary files a/xui/fairy/title_bar_right.png and b/xui/fairy/title_bar_right.png differ
diff --git a/xui/fill_bar_base.png b/xui/fill_bar_base.png
new file mode 100755 (executable)
index 0000000..099ae6a
Binary files /dev/null and b/xui/fill_bar_base.png differ
diff --git a/xui/fill_bar_left.png b/xui/fill_bar_left.png
new file mode 100755 (executable)
index 0000000..ba693f6
Binary files /dev/null and b/xui/fill_bar_left.png differ
diff --git a/xui/fill_bar_middle.png b/xui/fill_bar_middle.png
new file mode 100755 (executable)
index 0000000..6161bfb
Binary files /dev/null and b/xui/fill_bar_middle.png differ
diff --git a/xui/fill_bar_right.png b/xui/fill_bar_right.png
new file mode 100755 (executable)
index 0000000..d1a58bc
Binary files /dev/null and b/xui/fill_bar_right.png differ
diff --git a/xui/frame_left.png b/xui/frame_left.png
new file mode 100755 (executable)
index 0000000..007b90c
Binary files /dev/null and b/xui/frame_left.png differ
diff --git a/xui/frame_lower.png b/xui/frame_lower.png
new file mode 100755 (executable)
index 0000000..41c176e
Binary files /dev/null and b/xui/frame_lower.png differ
diff --git a/xui/frame_lower_left.png b/xui/frame_lower_left.png
new file mode 100755 (executable)
index 0000000..35e703c
Binary files /dev/null and b/xui/frame_lower_left.png differ
diff --git a/xui/frame_lower_right.png b/xui/frame_lower_right.png
new file mode 100755 (executable)
index 0000000..ea819a5
Binary files /dev/null and b/xui/frame_lower_right.png differ
diff --git a/xui/frame_right.png b/xui/frame_right.png
new file mode 100755 (executable)
index 0000000..6ed8446
Binary files /dev/null and b/xui/frame_right.png differ
diff --git a/xui/frame_upper.png b/xui/frame_upper.png
new file mode 100755 (executable)
index 0000000..a885c77
Binary files /dev/null and b/xui/frame_upper.png differ
diff --git a/xui/frame_upper_left.png b/xui/frame_upper_left.png
new file mode 100755 (executable)
index 0000000..aee9a04
Binary files /dev/null and b/xui/frame_upper_left.png differ
diff --git a/xui/frame_upper_right.png b/xui/frame_upper_right.png
new file mode 100755 (executable)
index 0000000..2bdcf7c
Binary files /dev/null and b/xui/frame_upper_right.png differ
diff --git a/xui/fullscreen_off.png b/xui/fullscreen_off.png
deleted file mode 100755 (executable)
index eb8c813..0000000
Binary files a/xui/fullscreen_off.png and /dev/null differ
diff --git a/xui/fullscreen_on.png b/xui/fullscreen_on.png
deleted file mode 100755 (executable)
index 5d1c0b3..0000000
Binary files a/xui/fullscreen_on.png and /dev/null differ
index 5456dc3f2024f0a380fd322947258de6ea140948..099ae6a9e62d164f70a36c611e56fa83f35b0f30 100755 (executable)
Binary files a/xui/gnoll/fill_bar_base.png and b/xui/gnoll/fill_bar_base.png differ
index d7cbdf5c7bf6348c13f5b36cdfda8831455c8155..6161bfb4ce9c8432ae97356829c98bf85857f1a1 100755 (executable)
Binary files a/xui/gnoll/fill_bar_middle.png and b/xui/gnoll/fill_bar_middle.png differ
index d5ea533bfa4c34b01ad935d168743996209f5242..d1a58bc6b641f10016d33665bf65f5c03ab28b20 100755 (executable)
Binary files a/xui/gnoll/fill_bar_right.png and b/xui/gnoll/fill_bar_right.png differ
diff --git a/xui/gnoll/monospace.png b/xui/gnoll/monospace.png
new file mode 100755 (executable)
index 0000000..074f192
Binary files /dev/null and b/xui/gnoll/monospace.png differ
diff --git a/xui/gnoll/regular.png b/xui/gnoll/regular.png
new file mode 100755 (executable)
index 0000000..0e5bfe7
Binary files /dev/null and b/xui/gnoll/regular.png differ
index 356dd535f3592ff2affe1b66adc8204e7394774c..87cb4ae2a41225a32a0f34d21e9fe0d4734e90c8 100755 (executable)
Binary files a/xui/gnoll/scroll_bar_slider.png and b/xui/gnoll/scroll_bar_slider.png differ
index 356dd535f3592ff2affe1b66adc8204e7394774c..87cb4ae2a41225a32a0f34d21e9fe0d4734e90c8 100755 (executable)
Binary files a/xui/gnoll/separator_center.png and b/xui/gnoll/separator_center.png differ
index 6eff431156d71b6ccccb77ff05559c7fbe37f83b..443235eb6c862516ea88dd4cd1d0879af5bb2f22 100755 (executable)
Binary files a/xui/gnoll/status_left.png and b/xui/gnoll/status_left.png differ
index c0c69c9cb29c2ce24716dbd5cfd31ecf6e5409b5..975daca97de1f6c1cc04bf4db2d983b53bb988c2 100755 (executable)
Binary files a/xui/gnoll/status_lower.png and b/xui/gnoll/status_lower.png differ
index 45b29199dd87d744a91e617904a5be43c6a12531..23cf2e733e971d0a6e1bb4bf710e82092ca25866 100755 (executable)
Binary files a/xui/gnoll/status_middle.png and b/xui/gnoll/status_middle.png differ
index b4b434350979d6606fb19730a17f3da7f93f1a4f..935c21d9f0d18d6c1b641616560a2cc72a4e5e8d 100755 (executable)
Binary files a/xui/gnoll/status_right.png and b/xui/gnoll/status_right.png differ
index acab93f0639d1e366b62f974915a7c2f66287476..97dee85b830bc23b7071ac7887335145853ca5ac 100755 (executable)
Binary files a/xui/gnoll/status_upper.png and b/xui/gnoll/status_upper.png differ
index 31afc91e16384477651231324034b6f277f09be7..387111094ea830a31d569827630e72b16cb309b5 100755 (executable)
Binary files a/xui/goblin/fill_bar_base.png and b/xui/goblin/fill_bar_base.png differ
index 4bb058ccf480b2d266670ae02ad64cfe62984419..239a5ccb4b1844160b00afb6ceeca5defd8782ff 100755 (executable)
Binary files a/xui/goblin/fill_bar_middle.png and b/xui/goblin/fill_bar_middle.png differ
index 539e94098c5ced7d53319a86b4eb29f97c1b3c09..6bb0b5f0e69cdd02897cbd5be685bda526d40510 100755 (executable)
Binary files a/xui/goblin/fill_bar_right.png and b/xui/goblin/fill_bar_right.png differ
diff --git a/xui/goblin/monospace.png b/xui/goblin/monospace.png
new file mode 100755 (executable)
index 0000000..074f192
Binary files /dev/null and b/xui/goblin/monospace.png differ
diff --git a/xui/goblin/regular.png b/xui/goblin/regular.png
new file mode 100755 (executable)
index 0000000..0e5bfe7
Binary files /dev/null and b/xui/goblin/regular.png differ
index b6c208a9378cb6718352ee11443808f6f34ff031..cffdccb5820ab0f978abc7cb8bd20da2eb099cd9 100755 (executable)
Binary files a/xui/goblin/scroll_bar_slider.png and b/xui/goblin/scroll_bar_slider.png differ
index b6c208a9378cb6718352ee11443808f6f34ff031..5fb8a5d367ea8a4eb51dd189eb4d60c3f8b0e5aa 100755 (executable)
Binary files a/xui/goblin/separator_center.png and b/xui/goblin/separator_center.png differ
index a41240361c7ab78b60a17f11f5e659fd6c601a49..b2e22e1a4a0712e057c267078afd7c358b5492d3 100755 (executable)
Binary files a/xui/goblin/status_middle.png and b/xui/goblin/status_middle.png differ
index 31f331e983f2e10bfeb061ddf38cc6c08d3e9e39..3b3b4aa38287632a801f69a5d0bc54eab009be00 100755 (executable)
Binary files a/xui/goblin/title_bar_middle.png and b/xui/goblin/title_bar_middle.png differ
index 611c36495748289432a06577aba0ab1a897a024c..49bc95144007756f86ff474ea7f425e4f2a05569 100755 (executable)
Binary files a/xui/goblin/title_bar_right.png and b/xui/goblin/title_bar_right.png differ
diff --git a/xui/icon_frame.png b/xui/icon_frame.png
new file mode 100755 (executable)
index 0000000..75b387f
Binary files /dev/null and b/xui/icon_frame.png differ
index 11b3869e6fd494c4d6639051347ba6ecbe16f58e..c174986e89efcee796c675958d49beb1fb9c8f2b 100755 (executable)
Binary files a/xui/imp/fill_bar_base.png and b/xui/imp/fill_bar_base.png differ
index b133332e9ee2b2b5da0f72ac7ce835e2e0a01d0b..968eb628946609f146b2cfa69f60baac0a7d807c 100755 (executable)
Binary files a/xui/imp/fill_bar_middle.png and b/xui/imp/fill_bar_middle.png differ
index 524795f5446de61c888c285e40a7a0df747e53a5..6a2d6119a4227b81384ed933ab2ede529abc2061 100755 (executable)
Binary files a/xui/imp/fill_bar_right.png and b/xui/imp/fill_bar_right.png differ
diff --git a/xui/imp/monospace.png b/xui/imp/monospace.png
new file mode 100755 (executable)
index 0000000..074f192
Binary files /dev/null and b/xui/imp/monospace.png differ
diff --git a/xui/imp/regular.png b/xui/imp/regular.png
new file mode 100755 (executable)
index 0000000..0e5bfe7
Binary files /dev/null and b/xui/imp/regular.png differ
index 216040c67d6e194ea8dcf7850fdd514281747cc9..943003da7c3a80256c39fbbfc7dc1287adf571ed 100644 (file)
Binary files a/xui/imp/scroll_bar_slider.png and b/xui/imp/scroll_bar_slider.png differ
index 216040c67d6e194ea8dcf7850fdd514281747cc9..0e2e1759532b06361003af25de3907d46c03ab48 100644 (file)
Binary files a/xui/imp/separator_center.png and b/xui/imp/separator_center.png differ
index 9ab40e434621ff47d6b2c9c4e875f74c6a4d4cf8..2dadf529b8c057c45e1b896667641437166154be 100755 (executable)
Binary files a/xui/imp/status_left.png and b/xui/imp/status_left.png differ
index df5aac98abf9cf8aabfc0207b6660a0efc114c1c..2f7086ff45330ca257b5efb6053fd3fa018f090a 100755 (executable)
Binary files a/xui/imp/status_lower.png and b/xui/imp/status_lower.png differ
index 02247af94e7e64324cbfff333448027c382bd183..2ad4401dd7e5e591f154f7dff079a4bd8df1d2c0 100755 (executable)
Binary files a/xui/imp/status_lower_left.png and b/xui/imp/status_lower_left.png differ
index ce9f6d64388c2c1fe92b4866b9643a39c64b8f1b..fa7ea694e8f91f992d35537c23b0be02fb06cb5c 100755 (executable)
Binary files a/xui/imp/status_lower_right.png and b/xui/imp/status_lower_right.png differ
index 9344b80da8e1c725dc0ea4d854e869931dfe13fc..239650139a8247d8aca422b3580e32fd675cc55c 100755 (executable)
Binary files a/xui/imp/status_middle.png and b/xui/imp/status_middle.png differ
index 9ab40e434621ff47d6b2c9c4e875f74c6a4d4cf8..6074bfd23d8930baed20089b1a99f44c93b031e4 100755 (executable)
Binary files a/xui/imp/status_right.png and b/xui/imp/status_right.png differ
index df5aac98abf9cf8aabfc0207b6660a0efc114c1c..55cfc933c7ddc0a60724ca5155720310b511334e 100755 (executable)
Binary files a/xui/imp/status_upper.png and b/xui/imp/status_upper.png differ
index dfb727fde3896d90c104371e7f8091aeb96228cd..6f2ed9a0c77b9eaf242a008ce7ae17f8a6baf9ad 100755 (executable)
Binary files a/xui/imp/status_upper_left.png and b/xui/imp/status_upper_left.png differ
index 618735b5c731f578d5f402fd8a9fd9306341be39..f81649e0c029ad9169c70ffd0a0517fc8ee0c3d1 100755 (executable)
Binary files a/xui/imp/status_upper_right.png and b/xui/imp/status_upper_right.png differ
index 444f836d2a3e02c3e7c4f3474802788f8f9f384c..767d429ff73384f8cb7270d2b14353702e131b6f 100755 (executable)
Binary files a/xui/imp/title_bar_middle.png and b/xui/imp/title_bar_middle.png differ
index 9700b8d8e6b9969fb63173b72f545a00a4c275a9..6edb90dfeb62f59fcbe6cd4775adc19c40ba01d2 100755 (executable)
Binary files a/xui/kobold/fill_bar_base.png and b/xui/kobold/fill_bar_base.png differ
index 792516403a2602be728546bafdc0cb098931a0e6..d14294445ea372076e90f25ca991487fc85ae6ad 100755 (executable)
Binary files a/xui/kobold/fill_bar_middle.png and b/xui/kobold/fill_bar_middle.png differ
index 186aeeff2b4fdb2dabede9f976faa20627328750..01dd0bb942639547d145513ce6683601e5056450 100755 (executable)
Binary files a/xui/kobold/fill_bar_right.png and b/xui/kobold/fill_bar_right.png differ
diff --git a/xui/kobold/monospace.png b/xui/kobold/monospace.png
new file mode 100755 (executable)
index 0000000..074f192
Binary files /dev/null and b/xui/kobold/monospace.png differ
diff --git a/xui/kobold/regular.png b/xui/kobold/regular.png
new file mode 100755 (executable)
index 0000000..0e5bfe7
Binary files /dev/null and b/xui/kobold/regular.png differ
index 67ade15afa31a6e30f851cbc10a7685512796367..82ab1d22c8a20b91d05f574c9e3cef605182cbd1 100755 (executable)
Binary files a/xui/kobold/scroll_bar_slider.png and b/xui/kobold/scroll_bar_slider.png differ
index 67ade15afa31a6e30f851cbc10a7685512796367..c848a49ca0beabc5dba74281ae447c5c3f5eaf72 100755 (executable)
Binary files a/xui/kobold/separator_center.png and b/xui/kobold/separator_center.png differ
index 5a0b0cd19a84c92cc909567b5c83e41122f281f9..e8bd43d3186f470d9644b9b460c62c6e9b483e8e 100755 (executable)
Binary files a/xui/kobold/status_left.png and b/xui/kobold/status_left.png differ
index f4a3428389ff97858fe20c9c3a3dad3763c2bf05..fb952c56f2a1f003d9ce608483df7bc04cc22a6d 100755 (executable)
Binary files a/xui/kobold/status_lower.png and b/xui/kobold/status_lower.png differ
index 3d3061aba8904d7b85bf07187a73db69b5ac62a9..962f11a8ecef2c889a8b38fcc402021b563d67b2 100755 (executable)
Binary files a/xui/kobold/status_lower_left.png and b/xui/kobold/status_lower_left.png differ
index 4db83b499b3151a5f0f2d76950f92de990c79424..62875d3efa78c1f1d2ba8e44b67395a4afde8c14 100755 (executable)
Binary files a/xui/kobold/status_lower_right.png and b/xui/kobold/status_lower_right.png differ
index fc8774ac1bb6f8f26179a3c6a27d77e8f85882a1..533fd7f0534a47aec9b83bda3f0f11bea9a22925 100755 (executable)
Binary files a/xui/kobold/status_middle.png and b/xui/kobold/status_middle.png differ
index 2b472066342b0c6b126d3db596803a67a6596460..d6ff0ed75454fa38532e49167a74f8eb45efe407 100755 (executable)
Binary files a/xui/kobold/status_right.png and b/xui/kobold/status_right.png differ
index 8ba8817e9dae9ab55a22810a50821e3684c7f65b..277f26eb41c2906370438372c471eb995a2ab2ee 100755 (executable)
Binary files a/xui/kobold/status_upper.png and b/xui/kobold/status_upper.png differ
index 4db83b499b3151a5f0f2d76950f92de990c79424..d7d7d88cde4369cf746987eaa13578a939f7a865 100755 (executable)
Binary files a/xui/kobold/status_upper_left.png and b/xui/kobold/status_upper_left.png differ
index 616a8b55797862c5cb8c77f0065049d33ac35c15..b037126d2c0a28974ef727570a0b32916aaf7b27 100755 (executable)
Binary files a/xui/kobold/status_upper_right.png and b/xui/kobold/status_upper_right.png differ
index a00e65cdc3ce0d0aa6a178194f202ba5994357c2..4095c1fb99c3541298811840ed6b46f8efa1eadb 100755 (executable)
Binary files a/xui/main/fill_bar_base.png and b/xui/main/fill_bar_base.png differ
index 718b784a74c757d04b79fe740bb22d2eac2d2c8f..5019a64a664a52ed16d0ab8752a8f2248d859ced 100755 (executable)
Binary files a/xui/main/fill_bar_left.png and b/xui/main/fill_bar_left.png differ
index 09c77427e8bd95d7622d43b00558d198525fa0ca..d19051abe3f6d8bcf8f20069fac0b5eb110e13eb 100755 (executable)
Binary files a/xui/main/fill_bar_middle.png and b/xui/main/fill_bar_middle.png differ
index 7b0d2b3f5bed8f1969913857e2b599906f897425..ae9d6bf59654b160b20a934c71460bf31773e07a 100755 (executable)
Binary files a/xui/main/fill_bar_right.png and b/xui/main/fill_bar_right.png differ
diff --git a/xui/main/monospace.png b/xui/main/monospace.png
new file mode 100755 (executable)
index 0000000..074f192
Binary files /dev/null and b/xui/main/monospace.png differ
diff --git a/xui/main/regular.png b/xui/main/regular.png
new file mode 100755 (executable)
index 0000000..0e5bfe7
Binary files /dev/null and b/xui/main/regular.png differ
index 62aad2c30e7dbe463e7714d8efa10115f3985443..2d2c5b3fd56f5d6277a8ab4ee60b4cd458345fb7 100755 (executable)
Binary files a/xui/main/scroll_bar_slider.png and b/xui/main/scroll_bar_slider.png differ
index 62aad2c30e7dbe463e7714d8efa10115f3985443..2e685837e03e48fe95ddd6b8b8f9e74d557c443e 100755 (executable)
Binary files a/xui/main/separator_center.png and b/xui/main/separator_center.png differ
index ecd9b46dbd8b4d0210a76235aaff42a4c06a979a..8f3e195a026ee51b32909c9b8df2dbf9bfe23650 100755 (executable)
Binary files a/xui/main/status_left.png and b/xui/main/status_left.png differ
index 3a59006a975d2a9863c93606a38b3c33d0285cab..e22d2ce65f6ac07a454bab4a5abd29f0d21e61cd 100755 (executable)
Binary files a/xui/main/status_lower.png and b/xui/main/status_lower.png differ
index d75c94a0979e8c4450cf352c1ba0cd2a38ec06e0..edc80f4c39f624bfeae7c610e9e2257c130e0a4f 100755 (executable)
Binary files a/xui/main/status_lower_left.png and b/xui/main/status_lower_left.png differ
index e0cda067f380dd2fc26f370657a990f26885b530..7d2c7b383e667049ce4f8a50655bd39c5e3f5bc8 100755 (executable)
Binary files a/xui/main/status_lower_right.png and b/xui/main/status_lower_right.png differ
index bf7008517cc790a6074be12783f5fc1d86c7b3e1..cf38b84edb3c9bbf90981b68f2d99b610f999db6 100755 (executable)
Binary files a/xui/main/status_middle.png and b/xui/main/status_middle.png differ
index ecd9b46dbd8b4d0210a76235aaff42a4c06a979a..dd6f2043e54b8595e25e71f1fdc40f7448b15f54 100755 (executable)
Binary files a/xui/main/status_right.png and b/xui/main/status_right.png differ
index 3a59006a975d2a9863c93606a38b3c33d0285cab..8647bafc2ed21831fe95595ceb221cd3fc085204 100755 (executable)
Binary files a/xui/main/status_upper.png and b/xui/main/status_upper.png differ
index a83439b67b1fca65bae08cc5eef2c5186758a0fe..15ff199cd3b32711015ddee8df238b2bf2181e4b 100755 (executable)
Binary files a/xui/main/status_upper_left.png and b/xui/main/status_upper_left.png differ
index ac1a9e2ab2236f361b7fed5e939c5325bd4b3355..3fb059dfd94534b54b0085e5bb8b61b66763674c 100755 (executable)
Binary files a/xui/main/status_upper_right.png and b/xui/main/status_upper_right.png differ
diff --git a/xui/map_preview_panel_off.png b/xui/map_preview_panel_off.png
deleted file mode 100755 (executable)
index d0fb58a..0000000
Binary files a/xui/map_preview_panel_off.png and /dev/null differ
diff --git a/xui/map_preview_panel_on.png b/xui/map_preview_panel_on.png
deleted file mode 100755 (executable)
index 08dd569..0000000
Binary files a/xui/map_preview_panel_on.png and /dev/null differ
diff --git a/xui/menu_left.png b/xui/menu_left.png
new file mode 100755 (executable)
index 0000000..a49003c
Binary files /dev/null and b/xui/menu_left.png differ
diff --git a/xui/menu_lower.png b/xui/menu_lower.png
new file mode 100755 (executable)
index 0000000..95cd0df
Binary files /dev/null and b/xui/menu_lower.png differ
diff --git a/xui/menu_lower_left.png b/xui/menu_lower_left.png
new file mode 100755 (executable)
index 0000000..bf7e4fc
Binary files /dev/null and b/xui/menu_lower_left.png differ
diff --git a/xui/menu_lower_right.png b/xui/menu_lower_right.png
new file mode 100755 (executable)
index 0000000..7aa4bb9
Binary files /dev/null and b/xui/menu_lower_right.png differ
diff --git a/xui/menu_middle.png b/xui/menu_middle.png
new file mode 100755 (executable)
index 0000000..a9eddc0
Binary files /dev/null and b/xui/menu_middle.png differ
diff --git a/xui/menu_right.png b/xui/menu_right.png
new file mode 100755 (executable)
index 0000000..88de24a
Binary files /dev/null and b/xui/menu_right.png differ
diff --git a/xui/menu_upper.png b/xui/menu_upper.png
new file mode 100755 (executable)
index 0000000..6b2d146
Binary files /dev/null and b/xui/menu_upper.png differ
diff --git a/xui/menu_upper_left.png b/xui/menu_upper_left.png
new file mode 100755 (executable)
index 0000000..0afa4f7
Binary files /dev/null and b/xui/menu_upper_left.png differ
diff --git a/xui/menu_upper_right.png b/xui/menu_upper_right.png
new file mode 100755 (executable)
index 0000000..9019c35
Binary files /dev/null and b/xui/menu_upper_right.png differ
diff --git a/xui/overicon_frame.png b/xui/overicon_frame.png
new file mode 100755 (executable)
index 0000000..e11efa5
Binary files /dev/null and b/xui/overicon_frame.png differ
diff --git a/xui/palette.png b/xui/palette.png
deleted file mode 100755 (executable)
index 8a8ab27..0000000
Binary files a/xui/palette.png and /dev/null differ
diff --git a/xui/scroll_bar_lower.png b/xui/scroll_bar_lower.png
new file mode 100755 (executable)
index 0000000..9a2c0ac
Binary files /dev/null and b/xui/scroll_bar_lower.png differ
diff --git a/xui/scroll_bar_middle.png b/xui/scroll_bar_middle.png
new file mode 100755 (executable)
index 0000000..453539e
Binary files /dev/null and b/xui/scroll_bar_middle.png differ
diff --git a/xui/scroll_bar_slider.png b/xui/scroll_bar_slider.png
new file mode 100755 (executable)
index 0000000..87cb4ae
Binary files /dev/null and b/xui/scroll_bar_slider.png differ
diff --git a/xui/scroll_bar_upper.png b/xui/scroll_bar_upper.png
new file mode 100755 (executable)
index 0000000..1412b7d
Binary files /dev/null and b/xui/scroll_bar_upper.png differ
diff --git a/xui/separator_center.png b/xui/separator_center.png
new file mode 100755 (executable)
index 0000000..87cb4ae
Binary files /dev/null and b/xui/separator_center.png differ
diff --git a/xui/separator_left.png b/xui/separator_left.png
new file mode 100755 (executable)
index 0000000..6fdd0eb
Binary files /dev/null and b/xui/separator_left.png differ
diff --git a/xui/separator_middle.png b/xui/separator_middle.png
new file mode 100755 (executable)
index 0000000..5b4a7b4
Binary files /dev/null and b/xui/separator_middle.png differ
diff --git a/xui/separator_right.png b/xui/separator_right.png
new file mode 100755 (executable)
index 0000000..e58569d
Binary files /dev/null and b/xui/separator_right.png differ
diff --git a/xui/status_left.png b/xui/status_left.png
new file mode 100755 (executable)
index 0000000..443235e
Binary files /dev/null and b/xui/status_left.png differ
diff --git a/xui/status_lower.png b/xui/status_lower.png
new file mode 100755 (executable)
index 0000000..975daca
Binary files /dev/null and b/xui/status_lower.png differ
diff --git a/xui/status_lower_left.png b/xui/status_lower_left.png
new file mode 100755 (executable)
index 0000000..8a73b35
Binary files /dev/null and b/xui/status_lower_left.png differ
diff --git a/xui/status_lower_right.png b/xui/status_lower_right.png
new file mode 100755 (executable)
index 0000000..e655ef5
Binary files /dev/null and b/xui/status_lower_right.png differ
diff --git a/xui/status_middle.png b/xui/status_middle.png
new file mode 100755 (executable)
index 0000000..23cf2e7
Binary files /dev/null and b/xui/status_middle.png differ
diff --git a/xui/status_preview_panel_off.png b/xui/status_preview_panel_off.png
deleted file mode 100755 (executable)
index fdb5173..0000000
Binary files a/xui/status_preview_panel_off.png and /dev/null differ
diff --git a/xui/status_preview_panel_on.png b/xui/status_preview_panel_on.png
deleted file mode 100755 (executable)
index 530fc12..0000000
Binary files a/xui/status_preview_panel_on.png and /dev/null differ
diff --git a/xui/status_right.png b/xui/status_right.png
new file mode 100755 (executable)
index 0000000..935c21d
Binary files /dev/null and b/xui/status_right.png differ
diff --git a/xui/status_upper.png b/xui/status_upper.png
new file mode 100755 (executable)
index 0000000..97dee85
Binary files /dev/null and b/xui/status_upper.png differ
diff --git a/xui/status_upper_left.png b/xui/status_upper_left.png
new file mode 100755 (executable)
index 0000000..bd0e017
Binary files /dev/null and b/xui/status_upper_left.png differ
diff --git a/xui/status_upper_right.png b/xui/status_upper_right.png
new file mode 100755 (executable)
index 0000000..ecc87d6
Binary files /dev/null and b/xui/status_upper_right.png differ
diff --git a/xui/text_box_panel_off.png b/xui/text_box_panel_off.png
deleted file mode 100755 (executable)
index 06efe6c..0000000
Binary files a/xui/text_box_panel_off.png and /dev/null differ
diff --git a/xui/text_box_panel_on.png b/xui/text_box_panel_on.png
deleted file mode 100755 (executable)
index 0576c96..0000000
Binary files a/xui/text_box_panel_on.png and /dev/null differ
diff --git a/xui/tiny_fill_bar_base.png b/xui/tiny_fill_bar_base.png
new file mode 100755 (executable)
index 0000000..4d72d7a
Binary files /dev/null and b/xui/tiny_fill_bar_base.png differ
diff --git a/xui/tiny_fill_bar_left.png b/xui/tiny_fill_bar_left.png
new file mode 100755 (executable)
index 0000000..254499a
Binary files /dev/null and b/xui/tiny_fill_bar_left.png differ
diff --git a/xui/tiny_fill_bar_middle.png b/xui/tiny_fill_bar_middle.png
new file mode 100755 (executable)
index 0000000..ee6a587
Binary files /dev/null and b/xui/tiny_fill_bar_middle.png differ
diff --git a/xui/tiny_fill_bar_right.png b/xui/tiny_fill_bar_right.png
new file mode 100755 (executable)
index 0000000..64634e4
Binary files /dev/null and b/xui/tiny_fill_bar_right.png differ
diff --git a/xui/title_bar_left.png b/xui/title_bar_left.png
new file mode 100755 (executable)
index 0000000..a1f300e
Binary files /dev/null and b/xui/title_bar_left.png differ
diff --git a/xui/title_bar_middle.png b/xui/title_bar_middle.png
new file mode 100755 (executable)
index 0000000..b4c3780
Binary files /dev/null and b/xui/title_bar_middle.png differ
diff --git a/xui/title_bar_right.png b/xui/title_bar_right.png
new file mode 100755 (executable)
index 0000000..2b2cec2
Binary files /dev/null and b/xui/title_bar_right.png differ
diff --git a/xui/ubericon_frame.png b/xui/ubericon_frame.png
new file mode 100755 (executable)
index 0000000..342a87a
Binary files /dev/null and b/xui/ubericon_frame.png differ
diff --git a/xui/window_left.png b/xui/window_left.png
new file mode 100755 (executable)
index 0000000..54e60b4
Binary files /dev/null and b/xui/window_left.png differ
diff --git a/xui/window_lower.png b/xui/window_lower.png
new file mode 100755 (executable)
index 0000000..8f62ea9
Binary files /dev/null and b/xui/window_lower.png differ
diff --git a/xui/window_lower_left.png b/xui/window_lower_left.png
new file mode 100755 (executable)
index 0000000..1b68f63
Binary files /dev/null and b/xui/window_lower_left.png differ
diff --git a/xui/window_lower_right.png b/xui/window_lower_right.png
new file mode 100755 (executable)
index 0000000..14e3543
Binary files /dev/null and b/xui/window_lower_right.png differ
diff --git a/xui/window_right.png b/xui/window_right.png
new file mode 100755 (executable)
index 0000000..587bc2a
Binary files /dev/null and b/xui/window_right.png differ
diff --git a/xui/window_upper.png b/xui/window_upper.png
new file mode 100755 (executable)
index 0000000..8f62ea9
Binary files /dev/null and b/xui/window_upper.png differ
diff --git a/xui/window_upper_left.png b/xui/window_upper_left.png
new file mode 100755 (executable)
index 0000000..3e5dc89
Binary files /dev/null and b/xui/window_upper_left.png differ
diff --git a/xui/window_upper_right.png b/xui/window_upper_right.png
new file mode 100755 (executable)
index 0000000..1a24a0a
Binary files /dev/null and b/xui/window_upper_right.png differ
index 71117964d4a943488a8bb6599445a6c74bf70159..3f120ae3433566f659718d8345f5b03d934dd7de 100755 (executable)
--- a/xulkan.h
+++ b/xulkan.h
 #include <vulkan/vulkan.h>
 
 typedef struct {
 #include <vulkan/vulkan.h>
 
 typedef struct {
-       b4 active;
-       b4 reconfigure_active;
-       b4 validation_layers;
-       b4 hide_cursor_full;
-       b4 hide_cursor;
-       u4 time;
-
-       u4 cursor; /// TODO: PROPER INPUT
-       s4  cursor_x;
-       s4  cursor_y;
-
-       b4 signal [signal_count];
-
-       f4     pixel_width;
-       f4     pixel_height;
-       u4      frame;
-       u4      width;
-       u4      height;
-       u4      sprite_count;
-       u4  * * sprite_data;
-       u4    * sprite_width;
-       u4    * sprite_height;
-       f4   * sprite_u;
-       f4   * sprite_v;
-       u4      font_count;
-       u4  * * font_index;
-       u4  * * font_width;
-       u4  * * font_height;
-       c1    * font_begin;
-       c1    * font_end;
+       boolean active;
+       boolean reconfigure_active;
+       boolean validation_layers;
+       boolean hide_cursor_full;
+       boolean hide_cursor;
+       natural time;
+
+       natural cursor; /// TODO: PROPER INPUT
+       integer  cursor_x;
+       integer  cursor_y;
+
+       boolean signal [signal_count];
+
+       real     pixel_width;
+       real     pixel_height;
+       natural      frame;
+       natural      width;
+       natural      height;
+       natural      sprite_count;
+       natural  * * sprite_data;
+       natural    * sprite_width;
+       natural    * sprite_height;
+       real   * sprite_u;
+       real   * sprite_v;
+       natural      font_count;
+       natural  * * font_index;
+       natural  * * font_width;
+       natural  * * font_height;
+       character    * font_begin;
+       character    * font_end;
 
        xcb_connection_t * connection;
        xcb_screen_t     * screen;
        xcb_window_t       window;
 
 
        xcb_connection_t * connection;
        xcb_screen_t     * screen;
        xcb_window_t       window;
 
-       u4  global_time;
-       u4  gameplay_time;
-       u4  animation_time;
-       u4  framerate;
-       u4  gameplay_framerate;
-       u4  animation_framerate;
-       u8 frame_time_in_ns;
+       natural  global_time;
+       natural  gameplay_time;
+       natural  animation_time;
+       natural  framerate;
+       natural  gameplay_framerate;
+       natural  animation_framerate;
+       natural_64 frame_time_in_ns;
 
        VkInstance                      instance;
        VkSurfaceKHR                    surface;
        VkPhysicalDevice                physical_device;
        VkQueue                         queue;
 
        VkInstance                      instance;
        VkSurfaceKHR                    surface;
        VkPhysicalDevice                physical_device;
        VkQueue                         queue;
-       u4                            queue_index;
-       VkDevice                        logical_device;
-       u4                            image_count;
+       natural                            queue_index;
+       VkDevice                        boolean_device;
+       natural                            image_count;
        VkExtent2D                      extent;
        VkFormat                        format;
        VkPresentModeKHR                present_mode;
        VkExtent2D                      extent;
        VkFormat                        format;
        VkPresentModeKHR                present_mode;
@@ -98,27 +98,27 @@ typedef struct {
        VkCommandBuffer                 transfer_buffer;
        VkBuffer                        vertex_buffer;
        VkDeviceMemory                  vertex_memory;
        VkCommandBuffer                 transfer_buffer;
        VkBuffer                        vertex_buffer;
        VkDeviceMemory                  vertex_memory;
-       f4                         * vertex_data;
+       real                         * vertex_data;
        VkDeviceSize                    vertex_size;
        VkDeviceSize                    vertex_size;
-       u4                            vertex_count;
-       u4                            vertex_limit;
+       natural                            vertex_count;
+       natural                            vertex_limit;
        VkBuffer                        index_buffer;
        VkDeviceMemory                  index_memory;
        VkBuffer                        index_buffer;
        VkDeviceMemory                  index_memory;
-       u4                          * index_data;
+       natural                          * index_data;
        VkDeviceSize                    index_size;
        VkDeviceSize                    index_size;
-       u4                            index_count;
-       u4                            index_limit;
+       natural                            index_count;
+       natural                            index_limit;
        VkSampler                       sampler;
        VkImage                         layout_image;
        VkDeviceMemory                  layout_memory;
        VkImageView                     layout_image_view;
        VkSampler                       sampler;
        VkImage                         layout_image;
        VkDeviceMemory                  layout_memory;
        VkImageView                     layout_image_view;
-       u4                          * layout_data;
-       u4                            layout_size;
-       u4                            layout_width;
-       u4                            layout_height;
+       natural                          * layout_data;
+       natural                            layout_size;
+       natural                            layout_width;
+       natural                            layout_height;
 } vulkan_structure;
 
 } vulkan_structure;
 
-static c1 * vulkan_continue_execution [] = {
+static character * vulkan_continue_execution [] = {
        "/s Commands successfully completed.\n",
        "/w Fence or query hasn't yet completed.\n",
        "/w Wait operation hasn't completed in the specified time.\n",
        "/s Commands successfully completed.\n",
        "/w Fence or query hasn't yet completed.\n",
        "/w Wait operation hasn't completed in the specified time.\n",
@@ -127,7 +127,7 @@ static c1 * vulkan_continue_execution [] = {
        "/w Return array was too small for the result.\n"
 };
 
        "/w Return array was too small for the result.\n"
 };
 
-static c1 * vulkan_break_execution [] = {
+static character * vulkan_break_execution [] = {
        "/f Host memory allocation has failed.\n",
        "/f Device memory allocation has failed.\n",
        "/f Initialization of an object couldn't be completed.\n",
        "/f Host memory allocation has failed.\n",
        "/f Device memory allocation has failed.\n",
        "/f Initialization of an object couldn't be completed.\n",
@@ -144,7 +144,7 @@ static c1 * vulkan_break_execution [] = {
        "/f Undefined error has occured.\n"
 };
 
        "/f Undefined error has occured.\n"
 };
 
-static v0 vulkan_result (VkResult result) {
+static procedure vulkan_result (VkResult result) {
        if (result == 0) {
                return;
        } else if (result > 0) {
        if (result == 0) {
                return;
        } else if (result > 0) {
@@ -155,7 +155,7 @@ static v0 vulkan_result (VkResult result) {
        }
 }
 
        }
 }
 
-static vulkan_structure * vulkan_initialize (u8 quad_memory, u8 layout_side, u4 gameplay_framerate, u4 animation_framerate) {
+static vulkan_structure * vulkan_initialize (caliber quad_memory, caliber layout_side, natural gameplay_framerate, natural animation_framerate) {
        vulkan_structure * vulkan = allocate (sizeof (* vulkan));
 
        vulkan->vertex_limit        = quad_memory * 32;
        vulkan_structure * vulkan = allocate (sizeof (* vulkan));
 
        vulkan->vertex_limit        = quad_memory * 32;
@@ -172,7 +172,7 @@ static vulkan_structure * vulkan_deinitialize (vulkan_structure * vulkan) {
        print ("/c Destroying and deallocating all the bullshit used so far...\n");
 
        vulkan_result (vkQueueWaitIdle  (vulkan->queue));
        print ("/c Destroying and deallocating all the bullshit used so far...\n");
 
        vulkan_result (vkQueueWaitIdle  (vulkan->queue));
-       vulkan_result (vkDeviceWaitIdle (vulkan->logical_device));
+       vulkan_result (vkDeviceWaitIdle (vulkan->boolean_device));
 
        vulkan->sprite_width  = deallocate (vulkan->sprite_width);
        vulkan->sprite_height = deallocate (vulkan->sprite_height);
 
        vulkan->sprite_width  = deallocate (vulkan->sprite_width);
        vulkan->sprite_height = deallocate (vulkan->sprite_height);
@@ -180,7 +180,7 @@ static vulkan_structure * vulkan_deinitialize (vulkan_structure * vulkan) {
        vulkan->sprite_v      = deallocate (vulkan->sprite_v);
 
        if (vulkan->font_count > 0) {
        vulkan->sprite_v      = deallocate (vulkan->sprite_v);
 
        if (vulkan->font_count > 0) {
-               for (u4 index = 0; index < vulkan->font_count; ++index) {
+               for (natural index = 0; index < vulkan->font_count; ++index) {
                        vulkan->font_index  [index] = deallocate (vulkan->font_index  [index]);
                        vulkan->font_width  [index] = deallocate (vulkan->font_width  [index]);
                        vulkan->font_height [index] = deallocate (vulkan->font_height [index]);
                        vulkan->font_index  [index] = deallocate (vulkan->font_index  [index]);
                        vulkan->font_width  [index] = deallocate (vulkan->font_width  [index]);
                        vulkan->font_height [index] = deallocate (vulkan->font_height [index]);
@@ -193,64 +193,64 @@ static vulkan_structure * vulkan_deinitialize (vulkan_structure * vulkan) {
                vulkan->font_end    = deallocate (vulkan->font_end);
        }
 
                vulkan->font_end    = deallocate (vulkan->font_end);
        }
 
-       vkFreeDescriptorSets (vulkan->logical_device, vulkan->descriptor_pool, vulkan->image_count, vulkan->descriptor_sets);
+       vkFreeDescriptorSets (vulkan->boolean_device, vulkan->descriptor_pool, vulkan->image_count, vulkan->descriptor_sets);
 
        vulkan->descriptor_set_layouts = deallocate (vulkan->descriptor_set_layouts);
        vulkan->descriptor_sets        = deallocate (vulkan->descriptor_sets);
 
 
        vulkan->descriptor_set_layouts = deallocate (vulkan->descriptor_set_layouts);
        vulkan->descriptor_sets        = deallocate (vulkan->descriptor_sets);
 
-       vkDestroyDescriptorPool (vulkan->logical_device, vulkan->descriptor_pool,   null);
-       vkDestroySampler        (vulkan->logical_device, vulkan->sampler,           null);
-       vkDestroyImageView      (vulkan->logical_device, vulkan->layout_image_view, null);
-       vkDestroyImage          (vulkan->logical_device, vulkan->layout_image,      null);
-       vkFreeMemory            (vulkan->logical_device, vulkan->layout_memory,     null);
+       vkDestroyDescriptorPool (vulkan->boolean_device, vulkan->descriptor_pool,   null);
+       vkDestroySampler        (vulkan->boolean_device, vulkan->sampler,           null);
+       vkDestroyImageView      (vulkan->boolean_device, vulkan->layout_image_view, null);
+       vkDestroyImage          (vulkan->boolean_device, vulkan->layout_image,      null);
+       vkFreeMemory            (vulkan->boolean_device, vulkan->layout_memory,     null);
 
        vulkan->layout_data = deallocate (vulkan->layout_data);
 
        vulkan->index_data  = deallocate (vulkan->index_data);
        vulkan->vertex_data = deallocate (vulkan->vertex_data);
 /*
 
        vulkan->layout_data = deallocate (vulkan->layout_data);
 
        vulkan->index_data  = deallocate (vulkan->index_data);
        vulkan->vertex_data = deallocate (vulkan->vertex_data);
 /*
-       vkFreeCommandBuffers (vulkan->logical_device, vulkan->command_pool, vulkan->image_count, vulkan->command_buffers);
+       vkFreeCommandBuffers (vulkan->boolean_device, vulkan->command_pool, vulkan->image_count, vulkan->command_buffers);
 */
        vulkan->command_buffers = deallocate (vulkan->command_buffers);
 
 */
        vulkan->command_buffers = deallocate (vulkan->command_buffers);
 
-       vkDestroyCommandPool (vulkan->logical_device, vulkan->command_pool, null);
+       vkDestroyCommandPool (vulkan->boolean_device, vulkan->command_pool, null);
 
 
-       for (u4 index = 0; index < vulkan->image_count; ++index) {
-               vkDestroyFramebuffer (vulkan->logical_device, vulkan->framebuffers [index], null);
+       for (natural index = 0; index < vulkan->image_count; ++index) {
+               vkDestroyFramebuffer (vulkan->boolean_device, vulkan->framebuffers [index], null);
        }
 
        vulkan->framebuffers = deallocate (vulkan->framebuffers);
 
        }
 
        vulkan->framebuffers = deallocate (vulkan->framebuffers);
 
-       vkDestroyPipeline            (vulkan->logical_device, vulkan->pipeline,              null);
-       vkDestroyPipelineLayout      (vulkan->logical_device, vulkan->pipeline_layout,       null);
-       vkDestroyShaderModule        (vulkan->logical_device, vulkan->fragment_shader,       null);
-       vkDestroyShaderModule        (vulkan->logical_device, vulkan->vertex_shader,         null);
-       vkDestroyDescriptorSetLayout (vulkan->logical_device, vulkan->descriptor_set_layout, null);
-       vkDestroyRenderPass          (vulkan->logical_device, vulkan->render_pass,           null);
-
-       for (u4 index = 0; index < vulkan->image_count; ++index) {
-               vkDestroySemaphore (vulkan->logical_device, vulkan->semaphore_set_1 [index], null);
-               vkDestroySemaphore (vulkan->logical_device, vulkan->semaphore_set_2 [index], null);
-               vkDestroyFence     (vulkan->logical_device, vulkan->fence_set_1     [index], null);
+       vkDestroyPipeline            (vulkan->boolean_device, vulkan->pipeline,              null);
+       vkDestroyPipelineLayout      (vulkan->boolean_device, vulkan->pipeline_layout,       null);
+       vkDestroyShaderModule        (vulkan->boolean_device, vulkan->fragment_shader,       null);
+       vkDestroyShaderModule        (vulkan->boolean_device, vulkan->vertex_shader,         null);
+       vkDestroyDescriptorSetLayout (vulkan->boolean_device, vulkan->descriptor_set_layout, null);
+       vkDestroyRenderPass          (vulkan->boolean_device, vulkan->render_pass,           null);
+
+       for (natural index = 0; index < vulkan->image_count; ++index) {
+               vkDestroySemaphore (vulkan->boolean_device, vulkan->semaphore_set_1 [index], null);
+               vkDestroySemaphore (vulkan->boolean_device, vulkan->semaphore_set_2 [index], null);
+               vkDestroyFence     (vulkan->boolean_device, vulkan->fence_set_1     [index], null);
        }
 
        vulkan->semaphore_set_1 = deallocate (vulkan->semaphore_set_1);
        vulkan->semaphore_set_2 = deallocate (vulkan->semaphore_set_2);
        vulkan->fence_set_1     = deallocate (vulkan->fence_set_1);
 
        }
 
        vulkan->semaphore_set_1 = deallocate (vulkan->semaphore_set_1);
        vulkan->semaphore_set_2 = deallocate (vulkan->semaphore_set_2);
        vulkan->fence_set_1     = deallocate (vulkan->fence_set_1);
 
-       for (u4 index = 0; index < vulkan->image_count; ++index) {
-               vkDestroyImageView (vulkan->logical_device, vulkan->image_views [index], null);
+       for (natural index = 0; index < vulkan->image_count; ++index) {
+               vkDestroyImageView (vulkan->boolean_device, vulkan->image_views [index], null);
        }
 
        vulkan->image_views = deallocate (vulkan->image_views);
 
        }
 
        vulkan->image_views = deallocate (vulkan->image_views);
 
-       vkDestroySwapchainKHR (vulkan->logical_device, vulkan->swapchain, null);
+       vkDestroySwapchainKHR (vulkan->boolean_device, vulkan->swapchain, null);
 
        vulkan->images = deallocate (vulkan->images);
 
        vkDestroySurfaceKHR (vulkan->instance, vulkan->surface, null);
 
 
        vulkan->images = deallocate (vulkan->images);
 
        vkDestroySurfaceKHR (vulkan->instance, vulkan->surface, null);
 
-       vkDestroyDevice   (vulkan->logical_device, null);
+       vkDestroyDevice   (vulkan->boolean_device, null);
        vkDestroyInstance (vulkan->instance,       null);
 
        xcb_destroy_window (vulkan->connection, vulkan->window);
        vkDestroyInstance (vulkan->instance,       null);
 
        xcb_destroy_window (vulkan->connection, vulkan->window);
@@ -261,9 +261,9 @@ static vulkan_structure * vulkan_deinitialize (vulkan_structure * vulkan) {
        return (deallocate (vulkan));
 }
 
        return (deallocate (vulkan));
 }
 
-static u4 vulkan_choose_memory_property (vulkan_structure * vulkan, u4 wanted) {
-       u4 index  = 0;
-       u4 usable = 0;
+static natural vulkan_choose_memory_property (vulkan_structure * vulkan, natural wanted) {
+       natural index  = 0;
+       natural usable = 0;
 
        VkPhysicalDeviceMemoryProperties memory_properties = { 0 };
 
 
        VkPhysicalDeviceMemoryProperties memory_properties = { 0 };
 
@@ -282,8 +282,8 @@ static u4 vulkan_choose_memory_property (vulkan_structure * vulkan, u4 wanted) {
        return (usable);
 }
 
        return (usable);
 }
 
-static v0 vulkan_create_buffer (vulkan_structure * vulkan, VkBuffer * buffer, VkDeviceMemory * memory, VkDeviceSize size, VkMemoryPropertyFlags usage) {
-       u4 wanted_memory_index = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT;
+static procedure vulkan_create_buffer (vulkan_structure * vulkan, VkBuffer * buffer, VkDeviceMemory * memory, VkDeviceSize size, VkMemoryPropertyFlags usage) {
+       natural wanted_memory_index = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT;
 
        VkBufferCreateInfo   buffer_information            = { 0 };
        VkMemoryRequirements memory_requirements           = { 0 };
 
        VkBufferCreateInfo   buffer_information            = { 0 };
        VkMemoryRequirements memory_requirements           = { 0 };
@@ -294,20 +294,20 @@ static v0 vulkan_create_buffer (vulkan_structure * vulkan, VkBuffer * buffer, Vk
        buffer_information.usage       = usage;
        buffer_information.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
 
        buffer_information.usage       = usage;
        buffer_information.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
 
-       vulkan_result (vkCreateBuffer (vulkan->logical_device, & buffer_information, null, buffer));
+       vulkan_result (vkCreateBuffer (vulkan->boolean_device, & buffer_information, null, buffer));
 
 
-       vkGetBufferMemoryRequirements (vulkan->logical_device, * buffer, & memory_requirements);
+       vkGetBufferMemoryRequirements (vulkan->boolean_device, * buffer, & memory_requirements);
 
        memory_allocation_information.sType           = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO;
        memory_allocation_information.allocationSize  = memory_requirements.size;
        memory_allocation_information.memoryTypeIndex = vulkan_choose_memory_property (vulkan, wanted_memory_index);
 
 
        memory_allocation_information.sType           = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO;
        memory_allocation_information.allocationSize  = memory_requirements.size;
        memory_allocation_information.memoryTypeIndex = vulkan_choose_memory_property (vulkan, wanted_memory_index);
 
-       vulkan_result (vkAllocateMemory (vulkan->logical_device, & memory_allocation_information, null, memory));
+       vulkan_result (vkAllocateMemory (vulkan->boolean_device, & memory_allocation_information, null, memory));
 
 
-       vulkan_result (vkBindBufferMemory (vulkan->logical_device, * buffer, * memory, 0));
+       vulkan_result (vkBindBufferMemory (vulkan->boolean_device, * buffer, * memory, 0));
 }
 
 }
 
-static v0 vulkan_begin_command_buffer (vulkan_structure * vulkan) {
+static procedure vulkan_begin_command_buffer (vulkan_structure * vulkan) {
        VkCommandBufferAllocateInfo command_buffer_allocation_information = { 0 };
        VkCommandBufferBeginInfo    command_buffer_begin_information      = { 0 };
 
        VkCommandBufferAllocateInfo command_buffer_allocation_information = { 0 };
        VkCommandBufferBeginInfo    command_buffer_begin_information      = { 0 };
 
@@ -319,12 +319,12 @@ static v0 vulkan_begin_command_buffer (vulkan_structure * vulkan) {
        command_buffer_begin_information.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO;
        command_buffer_begin_information.flags = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT;
 
        command_buffer_begin_information.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO;
        command_buffer_begin_information.flags = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT;
 
-       vulkan_result (vkAllocateCommandBuffers (vulkan->logical_device, & command_buffer_allocation_information, & vulkan->transfer_buffer));
+       vulkan_result (vkAllocateCommandBuffers (vulkan->boolean_device, & command_buffer_allocation_information, & vulkan->transfer_buffer));
 
        vulkan_result (vkBeginCommandBuffer (vulkan->transfer_buffer, & command_buffer_begin_information));
 }
 
 
        vulkan_result (vkBeginCommandBuffer (vulkan->transfer_buffer, & command_buffer_begin_information));
 }
 
-static v0 vulkan_end_command_buffer (vulkan_structure * vulkan) {
+static procedure vulkan_end_command_buffer (vulkan_structure * vulkan) {
        VkSubmitInfo submit_information = { 0 };
 
        vkEndCommandBuffer (vulkan->transfer_buffer);
        VkSubmitInfo submit_information = { 0 };
 
        vkEndCommandBuffer (vulkan->transfer_buffer);
@@ -337,13 +337,13 @@ static v0 vulkan_end_command_buffer (vulkan_structure * vulkan) {
 
        vkQueueWaitIdle (vulkan->queue);
 
 
        vkQueueWaitIdle (vulkan->queue);
 
-       vkFreeCommandBuffers (vulkan->logical_device, vulkan->command_pool, 1, & vulkan->transfer_buffer);
+       vkFreeCommandBuffers (vulkan->boolean_device, vulkan->command_pool, 1, & vulkan->transfer_buffer);
 
        vulkan->transfer_buffer = VK_NULL_HANDLE;
 }
 
 
        vulkan->transfer_buffer = VK_NULL_HANDLE;
 }
 
-static v0 vulkan_create_window (vulkan_structure * vulkan, c1 * application) {
-       u4 window_flags [2] = { 0 };
+static procedure vulkan_create_window (vulkan_structure * vulkan, character * application) {
+       natural window_flags [2] = { 0 };
 
        vulkan->time = tick_tock ();
 
 
        vulkan->time = tick_tock ();
 
@@ -367,7 +367,7 @@ static v0 vulkan_create_window (vulkan_structure * vulkan, c1 * application) {
                           XCB_EVENT_MASK_BUTTON_PRESS;
 
        xcb_create_window (vulkan->connection, vulkan->screen->root_depth, vulkan->window, vulkan->screen->root, 0, 0,
                           XCB_EVENT_MASK_BUTTON_PRESS;
 
        xcb_create_window (vulkan->connection, vulkan->screen->root_depth, vulkan->window, vulkan->screen->root, 0, 0,
-                          (u2) vulkan->width, (u2) vulkan->height, 10, XCB_WINDOW_CLASS_INPUT_OUTPUT,
+                          (natural_16) vulkan->width, (natural_16) vulkan->height, 10, XCB_WINDOW_CLASS_INPUT_OUTPUT,
                           vulkan->screen->root_visual, XCB_CW_BACK_PIXEL | XCB_CW_EVENT_MASK, window_flags);
 
        print ("/c Created /3XCB window/-.\n");
                           vulkan->screen->root_visual, XCB_CW_BACK_PIXEL | XCB_CW_EVENT_MASK, window_flags);
 
        print ("/c Created /3XCB window/-.\n");
@@ -383,31 +383,31 @@ static v0 vulkan_create_window (vulkan_structure * vulkan, c1 * application) {
        print ("/c Time approximation: /6%i/-\n", tick_tock () - vulkan->time);
 }
 
        print ("/c Time approximation: /6%i/-\n", tick_tock () - vulkan->time);
 }
 
-static v0 vulkan_create_instance (vulkan_structure * vulkan, c1 * application) {
-       u4 current = 0;
-       u4 general = 0;
+static procedure vulkan_create_instance (vulkan_structure * vulkan, character * application) {
+       natural current = 0;
+       natural general = 0;
 
        VkApplicationInfo    application_information = { 0 };
        VkInstanceCreateInfo instance_information    = { 0 };
 
 
        VkApplicationInfo    application_information = { 0 };
        VkInstanceCreateInfo instance_information    = { 0 };
 
-       u4                    instance_layer_count     = 0;
-       u4                  * instance_layer_index     = null;
+       natural                    instance_layer_count     = 0;
+       natural                  * instance_layer_index     = null;
        VkLayerProperties     * instance_layer_array     = null;
        VkLayerProperties     * instance_layer_array     = null;
-       u4                    instance_extension_count = 0;
-       u4                  * instance_extension_index = null;
+       natural                    instance_extension_count = 0;
+       natural                  * instance_extension_index = null;
        VkExtensionProperties * instance_extension_array = null;
 
        VkExtensionProperties * instance_extension_array = null;
 
-       u4 default_instance_layer_count     = (u4) (vulkan->validation_layers == true);
-       u4 default_instance_extension_count = 2;
+       natural default_instance_layer_count     = (natural) (vulkan->validation_layers == true);
+       natural default_instance_extension_count = 2;
 
 
-       c1 * default_instance_layer_array [VK_MAX_EXTENSION_NAME_SIZE] = {
+       character * default_instance_layer_array [VK_MAX_EXTENSION_NAME_SIZE] = {
                "VK_LAYER_KHRONOS_validation"
                //~"VK_LAYER_LUNARG_parameter_validation",
                //~"VK_LAYER_LUNARG_core_validation",
                //~"VK_LAYER_LUNARG_standard_validation"
        };
 
                "VK_LAYER_KHRONOS_validation"
                //~"VK_LAYER_LUNARG_parameter_validation",
                //~"VK_LAYER_LUNARG_core_validation",
                //~"VK_LAYER_LUNARG_standard_validation"
        };
 
-       c1 * default_instance_extension_array [VK_MAX_EXTENSION_NAME_SIZE] = {
+       character * default_instance_extension_array [VK_MAX_EXTENSION_NAME_SIZE] = {
                VK_KHR_SURFACE_EXTENSION_NAME,
                VK_KHR_XCB_SURFACE_EXTENSION_NAME
        };
                VK_KHR_SURFACE_EXTENSION_NAME,
                VK_KHR_XCB_SURFACE_EXTENSION_NAME
        };
@@ -425,7 +425,7 @@ static v0 vulkan_create_instance (vulkan_structure * vulkan, c1 * application) {
 
        for (current = 0; current < instance_layer_count; ++current) {
                for (general = 0; general < default_instance_layer_count; ++general) {
 
        for (current = 0; current < instance_layer_count; ++current) {
                for (general = 0; general < default_instance_layer_count; ++general) {
-                       if (string_compare (instance_layer_array [current].layerName, (c1 *) default_instance_layer_array [general])) {
+                       if (string_compare (instance_layer_array [current].layerName, (character *) default_instance_layer_array [general])) {
                                instance_layer_index [current] = true;
                        }
                }
                                instance_layer_index [current] = true;
                        }
                }
@@ -451,7 +451,7 @@ static v0 vulkan_create_instance (vulkan_structure * vulkan, c1 * application) {
 
        for (current = 0; current < instance_extension_count; ++current) {
                for (general = 0; general < default_instance_extension_count; ++general) {
 
        for (current = 0; current < instance_extension_count; ++current) {
                for (general = 0; general < default_instance_extension_count; ++general) {
-                       if (string_compare (instance_extension_array [current].extensionName, (c1 *) default_instance_extension_array [general])) {
+                       if (string_compare (instance_extension_array [current].extensionName, (character *) default_instance_extension_array [general])) {
                                instance_extension_index [current] = true;
                        }
                }
                                instance_extension_index [current] = true;
                        }
                }
@@ -486,7 +486,7 @@ static v0 vulkan_create_instance (vulkan_structure * vulkan, c1 * application) {
        print ("/c Time approximation: /6%i/-\n", tick_tock () - vulkan->time);
 }
 
        print ("/c Time approximation: /6%i/-\n", tick_tock () - vulkan->time);
 }
 
-static v0 vulkan_create_surface (vulkan_structure * vulkan) {
+static procedure vulkan_create_surface (vulkan_structure * vulkan) {
        VkXcbSurfaceCreateInfoKHR surface_information = { 0 };
 
        vulkan->time = tick_tock ();
        VkXcbSurfaceCreateInfoKHR surface_information = { 0 };
 
        vulkan->time = tick_tock ();
@@ -501,21 +501,21 @@ static v0 vulkan_create_surface (vulkan_structure * vulkan) {
        print ("/c Time approximation: /6%i/-\n", tick_tock () - vulkan->time);
 }
 
        print ("/c Time approximation: /6%i/-\n", tick_tock () - vulkan->time);
 }
 
-static v0 vulkan_create_device (vulkan_structure * vulkan) {
+static procedure vulkan_create_device (vulkan_structure * vulkan) {
        VkDeviceQueueCreateInfo          queues             = { 0 };
        VkDeviceCreateInfo               device_information = { 0 };
        VkPhysicalDeviceMemoryProperties memory_properties  = { 0 };
 
        VkDeviceQueueCreateInfo          queues             = { 0 };
        VkDeviceCreateInfo               device_information = { 0 };
        VkPhysicalDeviceMemoryProperties memory_properties  = { 0 };
 
-       u4               queue_count           = 0;
-       u4               physical_device_count = 0;
+       natural               queue_count           = 0;
+       natural               physical_device_count = 0;
        VkPhysicalDevice * physical_device_array = null;
        VkBool32         * support               = null;
 
        VkPhysicalDevice * physical_device_array = null;
        VkBool32         * support               = null;
 
-       f4 queue_priorities [1] = { 1 };
+       real queue_priorities [1] = { 1 };
 
 
-       u4 default_device_extension_count = 1;
+       natural default_device_extension_count = 1;
 
 
-       c1 * default_device_extension_array [VK_MAX_EXTENSION_NAME_SIZE] = {
+       character * default_device_extension_array [VK_MAX_EXTENSION_NAME_SIZE] = {
                VK_KHR_SWAPCHAIN_EXTENSION_NAME
        };
 
                VK_KHR_SWAPCHAIN_EXTENSION_NAME
        };
 
@@ -531,12 +531,12 @@ static v0 vulkan_create_device (vulkan_structure * vulkan) {
 
        print ("Enumerated available physical devices.\n");
 
 
        print ("Enumerated available physical devices.\n");
 
-       for (u4 index = 0; index < physical_device_count; ++index) {
-               u4 general = 0;
-               u4 current = 0;
+       for (natural index = 0; index < physical_device_count; ++index) {
+               natural general = 0;
+               natural current = 0;
 
 
-               u4                    device_extension_count = 0;
-               u4                  * device_extension_index = null;
+               natural                    device_extension_count = 0;
+               natural                  * device_extension_index = null;
                VkExtensionProperties * device_extension_array = null;
 
                VkPhysicalDeviceProperties physical_device_properties = { 0 };
                VkExtensionProperties * device_extension_array = null;
 
                VkPhysicalDeviceProperties physical_device_properties = { 0 };
@@ -587,7 +587,7 @@ static v0 vulkan_create_device (vulkan_structure * vulkan) {
 
                for (current = 0; current < device_extension_count; ++current) {
                        for (general = 0; general < default_device_extension_count; ++general) {
 
                for (current = 0; current < device_extension_count; ++current) {
                        for (general = 0; general < default_device_extension_count; ++general) {
-                               if (string_compare (device_extension_array [current].extensionName, (c1 *) default_device_extension_array [general])) {
+                               if (string_compare (device_extension_array [current].extensionName, (character *) default_device_extension_array [general])) {
                                        device_extension_index [current] = true;
                                }
                        }
                                        device_extension_index [current] = true;
                                }
                        }
@@ -642,21 +642,21 @@ static v0 vulkan_create_device (vulkan_structure * vulkan) {
        device_information.ppEnabledExtensionNames = default_device_extension_array;
        device_information.pEnabledFeatures        = null;
 
        device_information.ppEnabledExtensionNames = default_device_extension_array;
        device_information.pEnabledFeatures        = null;
 
-       vulkan_result (vkCreateDevice (vulkan->physical_device, & device_information, null, & vulkan->logical_device));
+       vulkan_result (vkCreateDevice (vulkan->physical_device, & device_information, null, & vulkan->boolean_device));
 
 
-       print ("/c Created Vulkan logical device.\n");
+       print ("/c Created Vulkan boolean device.\n");
 
 
-       vkGetDeviceQueue (vulkan->logical_device, vulkan->queue_index, 0, & vulkan->queue);
+       vkGetDeviceQueue (vulkan->boolean_device, vulkan->queue_index, 0, & vulkan->queue);
 
        vkGetPhysicalDeviceQueueFamilyProperties (vulkan->physical_device, & queue_count, null);
 
        support = allocate (queue_count * sizeof (VkBool32));
 
 
        vkGetPhysicalDeviceQueueFamilyProperties (vulkan->physical_device, & queue_count, null);
 
        support = allocate (queue_count * sizeof (VkBool32));
 
-       for (u4 index = 0; index < queue_count; ++index) {
+       for (natural index = 0; index < queue_count; ++index) {
                vulkan_result (vkGetPhysicalDeviceSurfaceSupportKHR (vulkan->physical_device, index, vulkan->surface, & support [index]));
        }
 
                vulkan_result (vkGetPhysicalDeviceSurfaceSupportKHR (vulkan->physical_device, index, vulkan->surface, & support [index]));
        }
 
-       for (u4 index = 0; (index != queue_count) && (! (vulkan->queue_index = support [index] ? (index++) : 0)); );
+       for (natural index = 0; (index != queue_count) && (! (vulkan->queue_index = support [index] ? (index++) : 0)); );
 
        support = deallocate (support);
 
 
        support = deallocate (support);
 
@@ -664,7 +664,7 @@ static v0 vulkan_create_device (vulkan_structure * vulkan) {
 
        print ("Found /2Vulkan physical device/- memory properties.\n");
 
 
        print ("Found /2Vulkan physical device/- memory properties.\n");
 
-       for (u4 index = 0; index < memory_properties.memoryTypeCount; ++index) {
+       for (natural index = 0; index < memory_properties.memoryTypeCount; ++index) {
                print ("> %i\n", memory_properties.memoryTypes [index].propertyFlags);
        }
 
                print ("> %i\n", memory_properties.memoryTypes [index].propertyFlags);
        }
 
@@ -672,7 +672,7 @@ static v0 vulkan_create_device (vulkan_structure * vulkan) {
        print ("/c Time approximation: /6%i/-\n", tick_tock () - vulkan->time);
 }
 
        print ("/c Time approximation: /6%i/-\n", tick_tock () - vulkan->time);
 }
 
-static v0 vulkan_choose_extent (vulkan_structure * vulkan) {
+static procedure vulkan_choose_extent (vulkan_structure * vulkan) {
        VkSurfaceCapabilitiesKHR capabilities = { 0 };
 
        vulkan->time = tick_tock ();
        VkSurfaceCapabilitiesKHR capabilities = { 0 };
 
        vulkan->time = tick_tock ();
@@ -697,8 +697,8 @@ static v0 vulkan_choose_extent (vulkan_structure * vulkan) {
        print ("/c Time approximation: /6%i/-\n", tick_tock () - vulkan->time);
 }
 
        print ("/c Time approximation: /6%i/-\n", tick_tock () - vulkan->time);
 }
 
-static v0 vulkan_choose_format (vulkan_structure * vulkan) {
-       u4                 format_count = 0;
+static procedure vulkan_choose_format (vulkan_structure * vulkan) {
+       natural                 format_count = 0;
        VkSurfaceFormatKHR * format_array = null;
 
        vulkan->time = tick_tock ();
        VkSurfaceFormatKHR * format_array = null;
 
        vulkan->time = tick_tock ();
@@ -719,8 +719,8 @@ static v0 vulkan_choose_format (vulkan_structure * vulkan) {
        print ("/c Time approximation: /6%i/-\n", tick_tock () - vulkan->time);
 }
 
        print ("/c Time approximation: /6%i/-\n", tick_tock () - vulkan->time);
 }
 
-static v0 vulkan_choose_present_mode (vulkan_structure * vulkan) {
-       u4               present_mode_count = 0;
+static procedure vulkan_choose_present_mode (vulkan_structure * vulkan) {
+       natural               present_mode_count = 0;
        VkPresentModeKHR * present_mode_array = null;
 
        vulkan->time = tick_tock ();
        VkPresentModeKHR * present_mode_array = null;
 
        vulkan->time = tick_tock ();
@@ -740,7 +740,7 @@ static v0 vulkan_choose_present_mode (vulkan_structure * vulkan) {
        print ("/c Time approximation: /6%i/-\n", tick_tock () - vulkan->time);
 }
 
        print ("/c Time approximation: /6%i/-\n", tick_tock () - vulkan->time);
 }
 
-static v0 vulkan_create_swapchain (vulkan_structure * vulkan) {
+static procedure vulkan_create_swapchain (vulkan_structure * vulkan) {
        VkSwapchainCreateInfoKHR swapchain_information = { 0 };
 
        vulkan->time = tick_tock ();
        VkSwapchainCreateInfoKHR swapchain_information = { 0 };
 
        vulkan->time = tick_tock ();
@@ -762,28 +762,28 @@ static v0 vulkan_create_swapchain (vulkan_structure * vulkan) {
        swapchain_information.clipped               = VK_TRUE;
        swapchain_information.oldSwapchain          = VK_NULL_HANDLE;
 
        swapchain_information.clipped               = VK_TRUE;
        swapchain_information.oldSwapchain          = VK_NULL_HANDLE;
 
-       vulkan_result (vkCreateSwapchainKHR (vulkan->logical_device, & swapchain_information, null, & vulkan->swapchain));
+       vulkan_result (vkCreateSwapchainKHR (vulkan->boolean_device, & swapchain_information, null, & vulkan->swapchain));
 
        print ("/c Created /2Vulkan swapchain/-.\n");
        print ("/c Time approximation: /6%i/-\n", tick_tock () - vulkan->time);
 }
 
 
        print ("/c Created /2Vulkan swapchain/-.\n");
        print ("/c Time approximation: /6%i/-\n", tick_tock () - vulkan->time);
 }
 
-static v0 vulkan_create_images (vulkan_structure * vulkan) {
-       u4 temporary = vulkan->image_count;
+static procedure vulkan_create_images (vulkan_structure * vulkan) {
+       natural temporary = vulkan->image_count;
 
        vulkan->time = tick_tock ();
 
 
        vulkan->time = tick_tock ();
 
-       vulkan_result (vkGetSwapchainImagesKHR (vulkan->logical_device, vulkan->swapchain, & temporary, null));
+       vulkan_result (vkGetSwapchainImagesKHR (vulkan->boolean_device, vulkan->swapchain, & temporary, null));
 
        vulkan->images = allocate (vulkan->image_count * sizeof (VkImage));
 
 
        vulkan->images = allocate (vulkan->image_count * sizeof (VkImage));
 
-       vulkan_result (vkGetSwapchainImagesKHR (vulkan->logical_device, vulkan->swapchain, & temporary, vulkan->images));
+       vulkan_result (vkGetSwapchainImagesKHR (vulkan->boolean_device, vulkan->swapchain, & temporary, vulkan->images));
 
        print ("/c Created /2Vulkan swapchain images/-.\n");
        print ("/c Time approximation: /6%i/-\n", tick_tock () - vulkan->time);
 }
 
 
        print ("/c Created /2Vulkan swapchain images/-.\n");
        print ("/c Time approximation: /6%i/-\n", tick_tock () - vulkan->time);
 }
 
-static v0 vulkan_create_image_views (vulkan_structure * vulkan) {
+static procedure vulkan_create_image_views (vulkan_structure * vulkan) {
        VkComponentMapping      component_mapping       = { 0 };
        VkImageSubresourceRange image_subresource_range = { 0 };
        VkImageViewCreateInfo   image_view_information  = { 0 };
        VkComponentMapping      component_mapping       = { 0 };
        VkImageSubresourceRange image_subresource_range = { 0 };
        VkImageViewCreateInfo   image_view_information  = { 0 };
@@ -809,17 +809,17 @@ static v0 vulkan_create_image_views (vulkan_structure * vulkan) {
        image_view_information.components       = component_mapping;
        image_view_information.subresourceRange = image_subresource_range;
 
        image_view_information.components       = component_mapping;
        image_view_information.subresourceRange = image_subresource_range;
 
-       for (u4 index = 0; index < vulkan->image_count; ++index) {
+       for (natural index = 0; index < vulkan->image_count; ++index) {
                image_view_information.image = vulkan->images [index];
 
                image_view_information.image = vulkan->images [index];
 
-               vulkan_result (vkCreateImageView (vulkan->logical_device, & image_view_information, null, & vulkan->image_views [index]));
+               vulkan_result (vkCreateImageView (vulkan->boolean_device, & image_view_information, null, & vulkan->image_views [index]));
        }
 
        print ("/c Created /2Vulkan swapchain image views/-.\n");
        print ("/c Time approximation: /6%i/-\n", tick_tock () - vulkan->time);
 }
 
        }
 
        print ("/c Created /2Vulkan swapchain image views/-.\n");
        print ("/c Time approximation: /6%i/-\n", tick_tock () - vulkan->time);
 }
 
-static v0 vulkan_create_semaphores (vulkan_structure * vulkan) {
+static procedure vulkan_create_semaphores (vulkan_structure * vulkan) {
        VkSemaphoreCreateInfo semaphore_information = { 0 };
 
        vulkan->time = tick_tock ();
        VkSemaphoreCreateInfo semaphore_information = { 0 };
 
        vulkan->time = tick_tock ();
@@ -829,17 +829,17 @@ static v0 vulkan_create_semaphores (vulkan_structure * vulkan) {
 
        semaphore_information.sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO;
 
 
        semaphore_information.sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO;
 
-       for (u4 index = 0; index < vulkan->image_count; ++index) {
-               vulkan_result (vkCreateSemaphore (vulkan->logical_device, & semaphore_information, null, & vulkan->semaphore_set_1 [index]));
-               vulkan_result (vkCreateSemaphore (vulkan->logical_device, & semaphore_information, null, & vulkan->semaphore_set_2 [index]));
+       for (natural index = 0; index < vulkan->image_count; ++index) {
+               vulkan_result (vkCreateSemaphore (vulkan->boolean_device, & semaphore_information, null, & vulkan->semaphore_set_1 [index]));
+               vulkan_result (vkCreateSemaphore (vulkan->boolean_device, & semaphore_information, null, & vulkan->semaphore_set_2 [index]));
        }
 
        print ("/c Created /2Vulkan synchronization semaphores/-.\n");
        print ("/c Time approximation: /6%i/-\n", tick_tock () - vulkan->time);
 }
 
        }
 
        print ("/c Created /2Vulkan synchronization semaphores/-.\n");
        print ("/c Time approximation: /6%i/-\n", tick_tock () - vulkan->time);
 }
 
-static v0 vulkan_create_fences (vulkan_structure * vulkan) {
-       u4 index = 0;
+static procedure vulkan_create_fences (vulkan_structure * vulkan) {
+       natural index = 0;
 
        VkFenceCreateInfo fence_information = { 0 };
 
 
        VkFenceCreateInfo fence_information = { 0 };
 
@@ -851,14 +851,14 @@ static v0 vulkan_create_fences (vulkan_structure * vulkan) {
        fence_information.flags = VK_FENCE_CREATE_SIGNALED_BIT;
 
        for (index = 0; index < vulkan->image_count; ++index) {
        fence_information.flags = VK_FENCE_CREATE_SIGNALED_BIT;
 
        for (index = 0; index < vulkan->image_count; ++index) {
-               vulkan_result (vkCreateFence (vulkan->logical_device, & fence_information, null, & vulkan->fence_set_1 [index]));
+               vulkan_result (vkCreateFence (vulkan->boolean_device, & fence_information, null, & vulkan->fence_set_1 [index]));
        }
 
        print ("/c Created /2Vulkan synchronization fences/-.\n");
        print ("/c Time approximation: /6%i/-\n", tick_tock () - vulkan->time);
 }
 
        }
 
        print ("/c Created /2Vulkan synchronization fences/-.\n");
        print ("/c Time approximation: /6%i/-\n", tick_tock () - vulkan->time);
 }
 
-static v0 vulkan_create_render_pass (vulkan_structure * vulkan) {
+static procedure vulkan_create_render_pass (vulkan_structure * vulkan) {
        VkAttachmentDescription attachment_description      = { 0 };
        VkAttachmentReference   attachment_reference        = { 0 };
        VkSubpassDescription    subpass_description         = { 0 };
        VkAttachmentDescription attachment_description      = { 0 };
        VkAttachmentReference   attachment_reference        = { 0 };
        VkSubpassDescription    subpass_description         = { 0 };
@@ -881,7 +881,7 @@ static v0 vulkan_create_render_pass (vulkan_structure * vulkan) {
        attachment_reference.layout     = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
 
        subpass_description.flags                   = 0;
        attachment_reference.layout     = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
 
        subpass_description.flags                   = 0;
-       subpass_description.pipelineBindPos4       = VK_PIPELINE_BIND_POINT_GRAPHICS;
+       subpass_description.pipelineBindPointeger       = VK_PIPELINE_BIND_POINT_GRAPHICS;
        subpass_description.inputAttachmentCount    = 0;
        subpass_description.pInputAttachments       = null;
        subpass_description.colorAttachmentCount    = 1;
        subpass_description.inputAttachmentCount    = 0;
        subpass_description.pInputAttachments       = null;
        subpass_description.colorAttachmentCount    = 1;
@@ -914,13 +914,13 @@ static v0 vulkan_create_render_pass (vulkan_structure * vulkan) {
        render_pass_information.dependencyCount = 2;
        render_pass_information.pDependencies   = subpass_dependencies;
 
        render_pass_information.dependencyCount = 2;
        render_pass_information.pDependencies   = subpass_dependencies;
 
-       vulkan_result (vkCreateRenderPass (vulkan->logical_device, & render_pass_information, null, & vulkan->render_pass));
+       vulkan_result (vkCreateRenderPass (vulkan->boolean_device, & render_pass_information, null, & vulkan->render_pass));
 
        print ("/c Created /2Vulkan render pass/-.\n");
        print ("/c Time approximation: /6%i/-\n", tick_tock () - vulkan->time);
 }
 
 
        print ("/c Created /2Vulkan render pass/-.\n");
        print ("/c Time approximation: /6%i/-\n", tick_tock () - vulkan->time);
 }
 
-static v0 vulkan_create_descriptor_set_layout (vulkan_structure * vulkan) {
+static procedure vulkan_create_descriptor_set_layout (vulkan_structure * vulkan) {
        VkDescriptorSetLayoutBinding    descriptor_set_layout_bindings    [2] = { { 0 } };
        VkDescriptorSetLayoutCreateInfo descriptor_set_layout_information     = { 0 };
 
        VkDescriptorSetLayoutBinding    descriptor_set_layout_bindings    [2] = { { 0 } };
        VkDescriptorSetLayoutCreateInfo descriptor_set_layout_information     = { 0 };
 
@@ -941,15 +941,15 @@ static v0 vulkan_create_descriptor_set_layout (vulkan_structure * vulkan) {
        descriptor_set_layout_information.bindingCount = 2;
        descriptor_set_layout_information.pBindings    = descriptor_set_layout_bindings;
 
        descriptor_set_layout_information.bindingCount = 2;
        descriptor_set_layout_information.pBindings    = descriptor_set_layout_bindings;
 
-       vulkan_result (vkCreateDescriptorSetLayout (vulkan->logical_device, & descriptor_set_layout_information, null,
+       vulkan_result (vkCreateDescriptorSetLayout (vulkan->boolean_device, & descriptor_set_layout_information, null,
                                                    & vulkan->descriptor_set_layout));
 
        print ("/c Created /2 Vulkan descriptor layout/-.\n");
        print ("/c Time approximation: /6%i/-\n", tick_tock () - vulkan->time);
 }
 
                                                    & vulkan->descriptor_set_layout));
 
        print ("/c Created /2 Vulkan descriptor layout/-.\n");
        print ("/c Time approximation: /6%i/-\n", tick_tock () - vulkan->time);
 }
 
-static v0 vulkan_create_vertex_shader (vulkan_structure * vulkan) {
-       u4 vertex_shader_code [] = {
+static procedure vulkan_create_vertex_shader (vulkan_structure * vulkan) {
+       natural vertex_shader_code [] = {
                0x07230203,     0x00010000,     0x000d000b,     0x00000028,     0x00000000,     0x00020011,     0x00000001,     0x0006000b,
                0x00000001,     0x4c534c47,     0x6474732e,     0x3035342e,     0x00000000,     0x0003000e,     0x00000000,     0x00000001,
                0x000b000f,     0x00000000,     0x00000004,     0x6e69616d,     0x00000000,     0x0000000d,     0x00000012,     0x00000021,
                0x07230203,     0x00010000,     0x000d000b,     0x00000028,     0x00000000,     0x00020011,     0x00000001,     0x0006000b,
                0x00000001,     0x4c534c47,     0x6474732e,     0x3035342e,     0x00000000,     0x0003000e,     0x00000000,     0x00000001,
                0x000b000f,     0x00000000,     0x00000004,     0x6e69616d,     0x00000000,     0x0000000d,     0x00000012,     0x00000021,
@@ -1000,14 +1000,14 @@ static v0 vulkan_create_vertex_shader (vulkan_structure * vulkan) {
        vertex_shader_information.codeSize = sizeof (vertex_shader_code);
        vertex_shader_information.pCode    = vertex_shader_code;
 
        vertex_shader_information.codeSize = sizeof (vertex_shader_code);
        vertex_shader_information.pCode    = vertex_shader_code;
 
-       vulkan_result (vkCreateShaderModule (vulkan->logical_device, & vertex_shader_information, null, & vulkan->vertex_shader));
+       vulkan_result (vkCreateShaderModule (vulkan->boolean_device, & vertex_shader_information, null, & vulkan->vertex_shader));
 
        print ("/c Created /2Vulkan vertex shader module/-.\n");
        print ("/c Time approximation: /6%i/-\n", tick_tock () - vulkan->time);
 }
 
 
        print ("/c Created /2Vulkan vertex shader module/-.\n");
        print ("/c Time approximation: /6%i/-\n", tick_tock () - vulkan->time);
 }
 
-static v0 vulkan_create_fragment_shader (vulkan_structure * vulkan) {
-       u4 fragment_shader_code [] = {
+static procedure vulkan_create_fragment_shader (vulkan_structure * vulkan) {
+       natural fragment_shader_code [] = {
                0x07230203,     0x00010000,     0x000d000b,     0x00000018,     0x00000000,     0x00020011,     0x00000001,     0x0006000b,
                0x00000001,     0x4c534c47,     0x6474732e,     0x3035342e,     0x00000000,     0x0003000e,     0x00000000,     0x00000001,
                0x0008000f,     0x00000004,     0x00000004,     0x6e69616d,     0x00000000,     0x00000009,     0x00000011,     0x00000015,
                0x07230203,     0x00010000,     0x000d000b,     0x00000018,     0x00000000,     0x00020011,     0x00000001,     0x0006000b,
                0x00000001,     0x4c534c47,     0x6474732e,     0x3035342e,     0x00000000,     0x0003000e,     0x00000000,     0x00000001,
                0x0008000f,     0x00000004,     0x00000004,     0x6e69616d,     0x00000000,     0x00000009,     0x00000011,     0x00000015,
@@ -1041,13 +1041,13 @@ static v0 vulkan_create_fragment_shader (vulkan_structure * vulkan) {
        fragment_shader_information.codeSize = sizeof (fragment_shader_code);
        fragment_shader_information.pCode    = fragment_shader_code;
 
        fragment_shader_information.codeSize = sizeof (fragment_shader_code);
        fragment_shader_information.pCode    = fragment_shader_code;
 
-       vulkan_result (vkCreateShaderModule (vulkan->logical_device, & fragment_shader_information, null, & vulkan->fragment_shader));
+       vulkan_result (vkCreateShaderModule (vulkan->boolean_device, & fragment_shader_information, null, & vulkan->fragment_shader));
 
        print ("/c Created /2Vulkan fragment shader module/-.\n");
        print ("/c Time approximation: /6%i/-\n", tick_tock () - vulkan->time);
 }
 
 
        print ("/c Created /2Vulkan fragment shader module/-.\n");
        print ("/c Time approximation: /6%i/-\n", tick_tock () - vulkan->time);
 }
 
-static v0 vulkan_create_pipeline_layout (vulkan_structure * vulkan) {
+static procedure vulkan_create_pipeline_layout (vulkan_structure * vulkan) {
        VkPipelineLayoutCreateInfo pipeline_layout_information = { 0 };
 
        vulkan->time = tick_tock ();
        VkPipelineLayoutCreateInfo pipeline_layout_information = { 0 };
 
        vulkan->time = tick_tock ();
@@ -1056,13 +1056,13 @@ static v0 vulkan_create_pipeline_layout (vulkan_structure * vulkan) {
        pipeline_layout_information.setLayoutCount         = 1;
        pipeline_layout_information.pSetLayouts            = & vulkan->descriptor_set_layout;
 
        pipeline_layout_information.setLayoutCount         = 1;
        pipeline_layout_information.pSetLayouts            = & vulkan->descriptor_set_layout;
 
-       vulkan_result (vkCreatePipelineLayout (vulkan->logical_device, & pipeline_layout_information, VK_NULL_HANDLE, & vulkan->pipeline_layout));
+       vulkan_result (vkCreatePipelineLayout (vulkan->boolean_device, & pipeline_layout_information, VK_NULL_HANDLE, & vulkan->pipeline_layout));
 
        print ("/c Created /2Vulkan graphics pipeline layout/-.\n");
        print ("/c Time approximation: /6%i/-\n", tick_tock () - vulkan->time);
 }
 
 
        print ("/c Created /2Vulkan graphics pipeline layout/-.\n");
        print ("/c Time approximation: /6%i/-\n", tick_tock () - vulkan->time);
 }
 
-static v0 vulkan_create_pipeline (vulkan_structure * vulkan) {
+static procedure vulkan_create_pipeline (vulkan_structure * vulkan) {
        VkPipelineShaderStageCreateInfo        pipeline_shader_stage_information         [2] = { { 0 } };
        VkPipelineInputAssemblyStateCreateInfo pipeline_input_assembly_state_information     = { 0 };
        VkVertexInputBindingDescription        vertex_input_binding_description          [1] = { { 0 } };
        VkPipelineShaderStageCreateInfo        pipeline_shader_stage_information         [2] = { { 0 } };
        VkPipelineInputAssemblyStateCreateInfo pipeline_input_assembly_state_information     = { 0 };
        VkVertexInputBindingDescription        vertex_input_binding_description          [1] = { { 0 } };
@@ -1198,13 +1198,13 @@ static v0 vulkan_create_pipeline (vulkan_structure * vulkan) {
        pipeline_information.basePipelineHandle  = VK_NULL_HANDLE;
        pipeline_information.basePipelineIndex   = -1;
 
        pipeline_information.basePipelineHandle  = VK_NULL_HANDLE;
        pipeline_information.basePipelineIndex   = -1;
 
-       vulkan_result (vkCreateGraphicsPipelines (vulkan->logical_device, VK_NULL_HANDLE, 1, & pipeline_information, null, & vulkan->pipeline));
+       vulkan_result (vkCreateGraphicsPipelines (vulkan->boolean_device, VK_NULL_HANDLE, 1, & pipeline_information, null, & vulkan->pipeline));
 
        print ("/c Created /2Vulkan graphics pipeline/-.\n");
        print ("/c Time approximation: /6%i/-\n", tick_tock () - vulkan->time);
 }
 
 
        print ("/c Created /2Vulkan graphics pipeline/-.\n");
        print ("/c Time approximation: /6%i/-\n", tick_tock () - vulkan->time);
 }
 
-static v0 vulkan_create_framebuffers (vulkan_structure * vulkan) {
+static procedure vulkan_create_framebuffers (vulkan_structure * vulkan) {
        VkFramebufferCreateInfo framebuffer_information = { 0 };
 
        vulkan->time = tick_tock ();
        VkFramebufferCreateInfo framebuffer_information = { 0 };
 
        vulkan->time = tick_tock ();
@@ -1218,17 +1218,17 @@ static v0 vulkan_create_framebuffers (vulkan_structure * vulkan) {
        framebuffer_information.height          = vulkan->extent.height;
        framebuffer_information.layers          = 1;
 
        framebuffer_information.height          = vulkan->extent.height;
        framebuffer_information.layers          = 1;
 
-       for (u4 index = 0; index < vulkan->image_count; ++index) {
+       for (natural index = 0; index < vulkan->image_count; ++index) {
                framebuffer_information.pAttachments = & vulkan->image_views [index];
 
                framebuffer_information.pAttachments = & vulkan->image_views [index];
 
-               vulkan_result (vkCreateFramebuffer (vulkan->logical_device, & framebuffer_information, null, & vulkan->framebuffers [index]));
+               vulkan_result (vkCreateFramebuffer (vulkan->boolean_device, & framebuffer_information, null, & vulkan->framebuffers [index]));
        }
 
        print ("/c Created /2Vulkan framebuffers/-.\n");
        print ("/c Time approximation: /6%i/-\n", tick_tock () - vulkan->time);
 }
 
        }
 
        print ("/c Created /2Vulkan framebuffers/-.\n");
        print ("/c Time approximation: /6%i/-\n", tick_tock () - vulkan->time);
 }
 
-static v0 vulkan_create_command_pool (vulkan_structure * vulkan) {
+static procedure vulkan_create_command_pool (vulkan_structure * vulkan) {
        VkCommandPoolCreateInfo command_pool_information = { 0 };
 
        vulkan->time = tick_tock ();
        VkCommandPoolCreateInfo command_pool_information = { 0 };
 
        vulkan->time = tick_tock ();
@@ -1237,13 +1237,13 @@ static v0 vulkan_create_command_pool (vulkan_structure * vulkan) {
        command_pool_information.flags            = VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT;
        command_pool_information.queueFamilyIndex = vulkan->queue_index;
 
        command_pool_information.flags            = VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT;
        command_pool_information.queueFamilyIndex = vulkan->queue_index;
 
-       vulkan_result (vkCreateCommandPool (vulkan->logical_device, & command_pool_information, null, & vulkan->command_pool));
+       vulkan_result (vkCreateCommandPool (vulkan->boolean_device, & command_pool_information, null, & vulkan->command_pool));
 
        print ("/c Created /2Vulkan command pool/-.\n");
        print ("/c Time approximation: /6%i/-\n", tick_tock () - vulkan->time);
 }
 
 
        print ("/c Created /2Vulkan command pool/-.\n");
        print ("/c Time approximation: /6%i/-\n", tick_tock () - vulkan->time);
 }
 
-static v0 vulkan_create_command_buffers (vulkan_structure * vulkan) {
+static procedure vulkan_create_command_buffers (vulkan_structure * vulkan) {
        VkCommandBufferAllocateInfo command_buffer_information = { 0 };
 
        vulkan->time = tick_tock ();
        VkCommandBufferAllocateInfo command_buffer_information = { 0 };
 
        vulkan->time = tick_tock ();
@@ -1255,16 +1255,16 @@ static v0 vulkan_create_command_buffers (vulkan_structure * vulkan) {
        command_buffer_information.level              = VK_COMMAND_BUFFER_LEVEL_PRIMARY;
        command_buffer_information.commandBufferCount = vulkan->image_count;
 
        command_buffer_information.level              = VK_COMMAND_BUFFER_LEVEL_PRIMARY;
        command_buffer_information.commandBufferCount = vulkan->image_count;
 
-       vulkan_result (vkAllocateCommandBuffers (vulkan->logical_device, & command_buffer_information, vulkan->command_buffers));
+       vulkan_result (vkAllocateCommandBuffers (vulkan->boolean_device, & command_buffer_information, vulkan->command_buffers));
 
        print ("/c Allocated /2Vulkan command buffers/-.\n");
        print ("/c Time approximation: /6%i/-\n", tick_tock () - vulkan->time);
 }
 
 
        print ("/c Allocated /2Vulkan command buffers/-.\n");
        print ("/c Time approximation: /6%i/-\n", tick_tock () - vulkan->time);
 }
 
-static v0 vulkan_create_vertex_buffer (vulkan_structure * vulkan) {
+static procedure vulkan_create_vertex_buffer (vulkan_structure * vulkan) {
        VkBuffer         transfer_buffer = VK_NULL_HANDLE;
        VkDeviceMemory   transfer_memory = VK_NULL_HANDLE;
        VkBuffer         transfer_buffer = VK_NULL_HANDLE;
        VkDeviceMemory   transfer_memory = VK_NULL_HANDLE;
-       v0           * transfer_v0   = null;
+       procedure           * transfer_procedure   = null;
 
        VkBufferCopy copy_information = { 0 };
 /*
 
        VkBufferCopy copy_information = { 0 };
 /*
@@ -1274,7 +1274,7 @@ static v0 vulkan_create_vertex_buffer (vulkan_structure * vulkan) {
 
        vulkan_create_buffer (vulkan, & transfer_buffer, & transfer_memory, vulkan->vertex_size, VK_BUFFER_USAGE_TRANSFER_SRC_BIT);
 
 
        vulkan_create_buffer (vulkan, & transfer_buffer, & transfer_memory, vulkan->vertex_size, VK_BUFFER_USAGE_TRANSFER_SRC_BIT);
 
-       vulkan_result (vkMapMemory (vulkan->logical_device, transfer_memory, 0, vulkan->vertex_size, 0, & transfer_v0));
+       vulkan_result (vkMapMemory (vulkan->boolean_device, transfer_memory, 0, vulkan->vertex_size, 0, & transfer_v0));
 
        memory_copy (transfer_v0, vulkan->vertex_data, vulkan->vertex_size);
 
 
        memory_copy (transfer_v0, vulkan->vertex_data, vulkan->vertex_size);
 
@@ -1291,17 +1291,17 @@ static v0 vulkan_create_vertex_buffer (vulkan_structure * vulkan) {
 
        vulkan_end_command_buffer (vulkan);
 
 
        vulkan_end_command_buffer (vulkan);
 
-       vkDestroyBuffer (vulkan->logical_device, transfer_buffer, null);
-       vkFreeMemory    (vulkan->logical_device, transfer_memory, null);
+       vkDestroyBuffer (vulkan->boolean_device, transfer_buffer, null);
+       vkFreeMemory    (vulkan->boolean_device, transfer_memory, null);
 
        /*print ("/c Created /2Vulkan vertex buffer/-.\n");
        print ("/c Time approximation: /6%i/-\n", tick_tock () - vulkan->time);*/
 }
 
 
        /*print ("/c Created /2Vulkan vertex buffer/-.\n");
        print ("/c Time approximation: /6%i/-\n", tick_tock () - vulkan->time);*/
 }
 
-static v0 vulkan_create_index_buffer (vulkan_structure * vulkan) {
+static procedure vulkan_create_index_buffer (vulkan_structure * vulkan) {
        VkBuffer         transfer_buffer = VK_NULL_HANDLE;
        VkDeviceMemory   transfer_memory = VK_NULL_HANDLE;
        VkBuffer         transfer_buffer = VK_NULL_HANDLE;
        VkDeviceMemory   transfer_memory = VK_NULL_HANDLE;
-       v0           * transfer_v0   = null;
+       procedure           * transfer_procedure   = null;
 
        VkBufferCopy copy_information = { 0 };
 /*
 
        VkBufferCopy copy_information = { 0 };
 /*
@@ -1311,7 +1311,7 @@ static v0 vulkan_create_index_buffer (vulkan_structure * vulkan) {
 
        vulkan_create_buffer (vulkan, & transfer_buffer, & transfer_memory, vulkan->index_size, VK_BUFFER_USAGE_TRANSFER_SRC_BIT);
 
 
        vulkan_create_buffer (vulkan, & transfer_buffer, & transfer_memory, vulkan->index_size, VK_BUFFER_USAGE_TRANSFER_SRC_BIT);
 
-       vulkan_result (vkMapMemory (vulkan->logical_device, transfer_memory, 0, vulkan->index_size, 0, & transfer_v0));
+       vulkan_result (vkMapMemory (vulkan->boolean_device, transfer_memory, 0, vulkan->index_size, 0, & transfer_v0));
 
        memory_copy (transfer_v0, vulkan->index_data, vulkan->index_size);
 
 
        memory_copy (transfer_v0, vulkan->index_data, vulkan->index_size);
 
@@ -1328,17 +1328,17 @@ static v0 vulkan_create_index_buffer (vulkan_structure * vulkan) {
 
        vulkan_end_command_buffer (vulkan);
 
 
        vulkan_end_command_buffer (vulkan);
 
-       vkDestroyBuffer (vulkan->logical_device, transfer_buffer, null);
-       vkFreeMemory    (vulkan->logical_device, transfer_memory, null);
+       vkDestroyBuffer (vulkan->boolean_device, transfer_buffer, null);
+       vkFreeMemory    (vulkan->boolean_device, transfer_memory, null);
 /*
        print ("/c Created /2Vulkan index buffer/-.\n");
        print ("/c Time approximation: /6%i/-\n", tick_tock () - vulkan->time);*/
 }
 
 /*
        print ("/c Created /2Vulkan index buffer/-.\n");
        print ("/c Time approximation: /6%i/-\n", tick_tock () - vulkan->time);*/
 }
 
-static v0 vulkan_create_image_buffer (vulkan_structure * vulkan) {
+static procedure vulkan_create_image_buffer (vulkan_structure * vulkan) {
        VkBuffer         transfer_buffer = VK_NULL_HANDLE;
        VkDeviceMemory   transfer_memory = VK_NULL_HANDLE;
        VkBuffer         transfer_buffer = VK_NULL_HANDLE;
        VkDeviceMemory   transfer_memory = VK_NULL_HANDLE;
-       v0           * transfer_v0   = null;
+       procedure           * transfer_procedure   = null;
 
        VkExtent3D               image_extent                  = { 0 };
        VkImageCreateInfo        image_information             = { 0 };
 
        VkExtent3D               image_extent                  = { 0 };
        VkImageCreateInfo        image_information             = { 0 };
@@ -1357,7 +1357,7 @@ static v0 vulkan_create_image_buffer (vulkan_structure * vulkan) {
 
        vulkan_create_buffer (vulkan, & transfer_buffer, & transfer_memory, vulkan->layout_size, VK_BUFFER_USAGE_TRANSFER_SRC_BIT);
 
 
        vulkan_create_buffer (vulkan, & transfer_buffer, & transfer_memory, vulkan->layout_size, VK_BUFFER_USAGE_TRANSFER_SRC_BIT);
 
-       vulkan_result (vkMapMemory (vulkan->logical_device, transfer_memory, 0, vulkan->layout_size, 0, & transfer_v0));
+       vulkan_result (vkMapMemory (vulkan->boolean_device, transfer_memory, 0, vulkan->layout_size, 0, & transfer_v0));
 
        memory_copy (transfer_v0, vulkan->layout_data, vulkan->layout_size);
 
 
        memory_copy (transfer_v0, vulkan->layout_data, vulkan->layout_size);
 
@@ -1383,17 +1383,17 @@ static v0 vulkan_create_image_buffer (vulkan_structure * vulkan) {
        image_subresource_range.baseArrayLayer = 0;
        image_subresource_range.layerCount     = 1;
 
        image_subresource_range.baseArrayLayer = 0;
        image_subresource_range.layerCount     = 1;
 
-       vulkan_result (vkCreateImage (vulkan->logical_device, & image_information, null, & vulkan->layout_image));
+       vulkan_result (vkCreateImage (vulkan->boolean_device, & image_information, null, & vulkan->layout_image));
 
 
-       vkGetImageMemoryRequirements (vulkan->logical_device, vulkan->layout_image, & memory_requirements);
+       vkGetImageMemoryRequirements (vulkan->boolean_device, vulkan->layout_image, & memory_requirements);
 
        memory_allocation_information.sType           = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO;
        memory_allocation_information.allocationSize  = memory_requirements.size;
        memory_allocation_information.memoryTypeIndex = vulkan_choose_memory_property (vulkan, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT);
 
 
        memory_allocation_information.sType           = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO;
        memory_allocation_information.allocationSize  = memory_requirements.size;
        memory_allocation_information.memoryTypeIndex = vulkan_choose_memory_property (vulkan, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT);
 
-       vulkan_result (vkAllocateMemory (vulkan->logical_device, & memory_allocation_information, null, & vulkan->layout_memory));
+       vulkan_result (vkAllocateMemory (vulkan->boolean_device, & memory_allocation_information, null, & vulkan->layout_memory));
 
 
-       vulkan_result (vkBindImageMemory (vulkan->logical_device, vulkan->layout_image, vulkan->layout_memory, 0));
+       vulkan_result (vkBindImageMemory (vulkan->boolean_device, vulkan->layout_image, vulkan->layout_memory, 0));
 
        vulkan_begin_command_buffer (vulkan);
 
 
        vulkan_begin_command_buffer (vulkan);
 
@@ -1470,16 +1470,16 @@ static v0 vulkan_create_image_buffer (vulkan_structure * vulkan) {
        image_view_information.subresourceRange = image_subresource_range;
        image_view_information.image            = vulkan->layout_image;
 
        image_view_information.subresourceRange = image_subresource_range;
        image_view_information.image            = vulkan->layout_image;
 
-       vulkan_result (vkCreateImageView (vulkan->logical_device, & image_view_information, null, & vulkan->layout_image_view));
+       vulkan_result (vkCreateImageView (vulkan->boolean_device, & image_view_information, null, & vulkan->layout_image_view));
 
 
-       vkDestroyBuffer (vulkan->logical_device, transfer_buffer, null);
-       vkFreeMemory    (vulkan->logical_device, transfer_memory, null);
+       vkDestroyBuffer (vulkan->boolean_device, transfer_buffer, null);
+       vkFreeMemory    (vulkan->boolean_device, transfer_memory, null);
 
        print ("/c Created /2Vulkan image layout buffer/-.\n");
        print ("/c Time approximation: /6%i/-\n", tick_tock () - vulkan->time);
 }
 
 
        print ("/c Created /2Vulkan image layout buffer/-.\n");
        print ("/c Time approximation: /6%i/-\n", tick_tock () - vulkan->time);
 }
 
-static v0 vulkan_create_sampler (vulkan_structure * vulkan) {
+static procedure vulkan_create_sampler (vulkan_structure * vulkan) {
        VkSamplerCreateInfo sampler_information = { 0 };
 
        vulkan->time = tick_tock ();
        VkSamplerCreateInfo sampler_information = { 0 };
 
        vulkan->time = tick_tock ();
@@ -1501,13 +1501,13 @@ static v0 vulkan_create_sampler (vulkan_structure * vulkan) {
        sampler_information.borderColor             = VK_BORDER_COLOR_INT_OPAQUE_BLACK;
        sampler_information.unnormalizedCoordinates = VK_FALSE;
 
        sampler_information.borderColor             = VK_BORDER_COLOR_INT_OPAQUE_BLACK;
        sampler_information.unnormalizedCoordinates = VK_FALSE;
 
-       vulkan_result (vkCreateSampler (vulkan->logical_device, & sampler_information, null, & vulkan->sampler));
+       vulkan_result (vkCreateSampler (vulkan->boolean_device, & sampler_information, null, & vulkan->sampler));
 
        print ("/c Created /2Vulkan sampler/-.\n");
        print ("/c Time approximation: /6%i/-\n", tick_tock () - vulkan->time);
 }
 
 
        print ("/c Created /2Vulkan sampler/-.\n");
        print ("/c Time approximation: /6%i/-\n", tick_tock () - vulkan->time);
 }
 
-static v0 vulkan_create_descriptor_pool (vulkan_structure * vulkan) {
+static procedure vulkan_create_descriptor_pool (vulkan_structure * vulkan) {
        VkDescriptorPoolSize       descriptor_pool_sizes       [2] = { { 0 } };
        VkDescriptorPoolCreateInfo descriptor_pool_information     = { 0 };
 
        VkDescriptorPoolSize       descriptor_pool_sizes       [2] = { { 0 } };
        VkDescriptorPoolCreateInfo descriptor_pool_information     = { 0 };
 
@@ -1524,20 +1524,20 @@ static v0 vulkan_create_descriptor_pool (vulkan_structure * vulkan) {
        descriptor_pool_information.poolSizeCount = 2;
        descriptor_pool_information.pPoolSizes    = descriptor_pool_sizes;
 
        descriptor_pool_information.poolSizeCount = 2;
        descriptor_pool_information.pPoolSizes    = descriptor_pool_sizes;
 
-       vulkan_result (vkCreateDescriptorPool (vulkan->logical_device, & descriptor_pool_information, null, & vulkan->descriptor_pool));
+       vulkan_result (vkCreateDescriptorPool (vulkan->boolean_device, & descriptor_pool_information, null, & vulkan->descriptor_pool));
 
        print ("/c Created /2Vulkan descriptor pool/-.\n");
        print ("/c Time approximation: /6%i/-\n", tick_tock () - vulkan->time);
 }
 
 
        print ("/c Created /2Vulkan descriptor pool/-.\n");
        print ("/c Time approximation: /6%i/-\n", tick_tock () - vulkan->time);
 }
 
-static v0 vulkan_create_descriptor_sets (vulkan_structure * vulkan) {
+static procedure vulkan_create_descriptor_sets (vulkan_structure * vulkan) {
        VkDescriptorSetAllocateInfo descriptor_set_allocation_information = { 0 };
 
        vulkan->time = tick_tock ();
 
        vulkan->descriptor_set_layouts = allocate (vulkan->image_count * sizeof (VkDescriptorSetLayout));
 
        VkDescriptorSetAllocateInfo descriptor_set_allocation_information = { 0 };
 
        vulkan->time = tick_tock ();
 
        vulkan->descriptor_set_layouts = allocate (vulkan->image_count * sizeof (VkDescriptorSetLayout));
 
-       for (u4 index = 0; index < vulkan->image_count; ++index) {
+       for (natural index = 0; index < vulkan->image_count; ++index) {
                vulkan->descriptor_set_layouts [index] = vulkan->descriptor_set_layout;
        }
 
                vulkan->descriptor_set_layouts [index] = vulkan->descriptor_set_layout;
        }
 
@@ -1548,13 +1548,13 @@ static v0 vulkan_create_descriptor_sets (vulkan_structure * vulkan) {
 
        vulkan->descriptor_sets = allocate (vulkan->image_count * sizeof (VkDescriptorSet));
 
 
        vulkan->descriptor_sets = allocate (vulkan->image_count * sizeof (VkDescriptorSet));
 
-       vulkan_result (vkAllocateDescriptorSets (vulkan->logical_device, & descriptor_set_allocation_information, vulkan->descriptor_sets));
+       vulkan_result (vkAllocateDescriptorSets (vulkan->boolean_device, & descriptor_set_allocation_information, vulkan->descriptor_sets));
 
        print ("/c Allocated /2Vulkan descriptor sets/-.\n");
        print ("/c Time approximation: /6%i/-\n", tick_tock () - vulkan->time);
 }
 
 
        print ("/c Allocated /2Vulkan descriptor sets/-.\n");
        print ("/c Time approximation: /6%i/-\n", tick_tock () - vulkan->time);
 }
 
-static v0 vulkan_record_descriptor_sets (vulkan_structure * vulkan) {
+static procedure vulkan_record_descriptor_sets (vulkan_structure * vulkan) {
        VkDescriptorBufferInfo descriptor_buffer_information = { 0 };
        VkDescriptorImageInfo  descriptor_image_information  = { 0 };
        VkWriteDescriptorSet   write_descriptor_set          = { 0 };
        VkDescriptorBufferInfo descriptor_buffer_information = { 0 };
        VkDescriptorImageInfo  descriptor_image_information  = { 0 };
        VkWriteDescriptorSet   write_descriptor_set          = { 0 };
@@ -1573,18 +1573,18 @@ static v0 vulkan_record_descriptor_sets (vulkan_structure * vulkan) {
        write_descriptor_set.pImageInfo      = & descriptor_image_information;
        write_descriptor_set.pBufferInfo     = null;
 
        write_descriptor_set.pImageInfo      = & descriptor_image_information;
        write_descriptor_set.pBufferInfo     = null;
 
-       for (u4 index = 0; index < vulkan->image_count; ++index) {
+       for (natural index = 0; index < vulkan->image_count; ++index) {
                write_descriptor_set.dstSet = vulkan->descriptor_sets [index];
 
                write_descriptor_set.dstSet = vulkan->descriptor_sets [index];
 
-               vkUpdateDescriptorSets (vulkan->logical_device, 1, & write_descriptor_set, 0, null);
+               vkUpdateDescriptorSets (vulkan->boolean_device, 1, & write_descriptor_set, 0, null);
        }
 
        print ("/c Recorded /2Vulkan descriptor sets/-.\n");
        print ("/c Time approximation: /6%i/-\n", tick_tock () - vulkan->time);
 }
 
        }
 
        print ("/c Recorded /2Vulkan descriptor sets/-.\n");
        print ("/c Time approximation: /6%i/-\n", tick_tock () - vulkan->time);
 }
 
-static v0 vulkan_record_command_buffers (vulkan_structure * vulkan, s4 clear_colour, s4 frame) {
-       u4 index = 0;
+static procedure vulkan_record_command_buffers (vulkan_structure * vulkan, integer clear_colour, integer frame) {
+       natural index = 0;
 
        VkCommandBufferBeginInfo command_buffer_begin_information = { 0 };
        //~VkImageSubresourceRange  image_subresource_range          = { 0 };
 
        VkCommandBufferBeginInfo command_buffer_begin_information = { 0 };
        //~VkImageSubresourceRange  image_subresource_range          = { 0 };
@@ -1596,13 +1596,13 @@ static v0 vulkan_record_command_buffers (vulkan_structure * vulkan, s4 clear_col
        VkDeviceSize             vertex_offset                    = 0;
 
        VkClearColorValue clear_colour_value = { {
        VkDeviceSize             vertex_offset                    = 0;
 
        VkClearColorValue clear_colour_value = { {
-               (float) ((clear_colour & 0xff000000) >> 24) / 255,
-               (float) ((clear_colour & 0x00ff0000) >> 16) / 255,
-               (float) ((clear_colour & 0x0000ff00) >>  8) / 255,
-               (float) ((clear_colour & 0x000000ff) >>  0) / 255
+               (real) ((clear_colour & 0xff000000) >> 24) / 255,
+               (real) ((clear_colour & 0x00ff0000) >> 16) / 255,
+               (real) ((clear_colour & 0x0000ff00) >>  8) / 255,
+               (real) ((clear_colour & 0x000000ff) >>  0) / 255
        } };
 
        } };
 
-       (v0) frame;
+       (none) frame;
 /*
        vulkan->time = tick_tock ();
 */
 /*
        vulkan->time = tick_tock ();
 */
@@ -1678,13 +1678,13 @@ static v0 vulkan_record_command_buffers (vulkan_structure * vulkan, s4 clear_col
        vulkan_result (vkEndCommandBuffer (vulkan_command_buffers [frame]));
 */
        vulkan_result (vkQueueWaitIdle  (vulkan->queue));
        vulkan_result (vkEndCommandBuffer (vulkan_command_buffers [frame]));
 */
        vulkan_result (vkQueueWaitIdle  (vulkan->queue));
-       vulkan_result (vkDeviceWaitIdle (vulkan->logical_device));
+       vulkan_result (vkDeviceWaitIdle (vulkan->boolean_device));
 
        /*print ("/c Recorded /2Vulkan command buffers/-.\n");
        print ("/c Time approximation: /6%i/-\n", tick_tock () - vulkan->time);*/
 }
 
 
        /*print ("/c Recorded /2Vulkan command buffers/-.\n");
        print ("/c Time approximation: /6%i/-\n", tick_tock () - vulkan->time);*/
 }
 
-static u4 vulkan_import_sprite (vulkan_structure * vulkan, u4 * data, u4 width, u4 height) {
+static natural vulkan_import_sprite (vulkan_structure * vulkan, natural * data, natural width, natural height) {
        fatal_failure (vulkan->active == true, "vulkan_import_sprite: Failed to import sprite, engine was already configured.");
        fatal_failure (data           == null, "vulkan_import_sprite: Failed to import sprite, data is null pointer.");
        fatal_failure (width          <= 0,    "vulkan_import_sprite: Failed to import sprite, width is equal or below zero.");
        fatal_failure (vulkan->active == true, "vulkan_import_sprite: Failed to import sprite, engine was already configured.");
        fatal_failure (data           == null, "vulkan_import_sprite: Failed to import sprite, data is null pointer.");
        fatal_failure (width          <= 0,    "vulkan_import_sprite: Failed to import sprite, width is equal or below zero.");
@@ -1707,15 +1707,15 @@ static u4 vulkan_import_sprite (vulkan_structure * vulkan, u4 * data, u4 width,
        return (vulkan->sprite_count - 1);
 }
 
        return (vulkan->sprite_count - 1);
 }
 
-static u4 vulkan_import_font (vulkan_structure * vulkan, u4 * data, u4 image_width, u4 image_height, c1 begin, c1 end, u4 empty) {
-       u4 pointer = 0;
-       c1 index   = 0;
-       u4 width   = 0;
-       u4 height  = 0;
-       u4 x       = 0;
-       u4 y       = 0;
+static natural vulkan_import_font (vulkan_structure * vulkan, natural * data, natural image_width, natural image_height, character begin, character end, natural empty) {
+       natural pointer = 0;
+       character index   = 0;
+       natural width   = 0;
+       natural height  = 0;
+       natural x       = 0;
+       natural y       = 0;
 
 
-       u4 * buffer = null;
+       natural * buffer = null;
 
        ++vulkan->font_count;
 
 
        ++vulkan->font_count;
 
@@ -1761,23 +1761,23 @@ static u4 vulkan_import_font (vulkan_structure * vulkan, u4 * data, u4 image_wid
        return (vulkan->font_count - 1);
 }
 
        return (vulkan->font_count - 1);
 }
 
-static v0 vulkan_bundle_layout (vulkan_structure * vulkan) {
-       u4 * order = null;
+static procedure vulkan_bundle_layout (vulkan_structure * vulkan) {
+       natural * order = null;
 
 
-       vulkan->layout_size = vulkan->layout_width * vulkan->layout_height * (u4) sizeof (* vulkan->layout_data);
+       vulkan->layout_size = vulkan->layout_width * vulkan->layout_height * (natural) sizeof (* vulkan->layout_data);
 
        vulkan->layout_data = allocate (vulkan->layout_size);
 
        order = allocate (vulkan->sprite_count * sizeof (* order));
 
 
        vulkan->layout_data = allocate (vulkan->layout_size);
 
        order = allocate (vulkan->sprite_count * sizeof (* order));
 
-       for (u4 index = 0; index < vulkan->sprite_count; ++index) {
+       for (natural index = 0; index < vulkan->sprite_count; ++index) {
                order [index] = index;
        }
 
                order [index] = index;
        }
 
-       for (u4 index = 0; index < vulkan->sprite_count; ++index) {
-               for (u4 subindex = 0; subindex < vulkan->sprite_count; ++subindex) {
+       for (natural index = 0; index < vulkan->sprite_count; ++index) {
+               for (natural subindex = 0; subindex < vulkan->sprite_count; ++subindex) {
                        if (vulkan->sprite_height [order [index]] < vulkan->sprite_height [order [subindex]]) {
                        if (vulkan->sprite_height [order [index]] < vulkan->sprite_height [order [subindex]]) {
-                               s4 temporary = order [index];
+                               integer temporary = order [index];
 
                                order [index]    = order [subindex];
                                order [subindex] = temporary;
 
                                order [index]    = order [subindex];
                                order [subindex] = temporary;
@@ -1785,11 +1785,11 @@ static v0 vulkan_bundle_layout (vulkan_structure * vulkan) {
                }
        }
 
                }
        }
 
-       for (u4 index = 0; index < vulkan->sprite_count; ++index) {
-               u4 x = 0;
-               u4 y = 0;
-               u4 u = 0;
-               u4 v = 0;
+       for (natural index = 0; index < vulkan->sprite_count; ++index) {
+               natural x = 0;
+               natural y = 0;
+               natural u = 0;
+               natural v = 0;
 
 
                if (u + vulkan->sprite_width [order [index]] >= vulkan->layout_width) {
 
 
                if (u + vulkan->sprite_width [order [index]] >= vulkan->layout_width) {
@@ -1797,13 +1797,13 @@ static v0 vulkan_bundle_layout (vulkan_structure * vulkan) {
                        v += vulkan->sprite_height [order [index]];
                }
 
                        v += vulkan->sprite_height [order [index]];
                }
 
-               vulkan->sprite_u [order [index]] = (float) u / (float) vulkan->layout_width;
-               vulkan->sprite_v [order [index]] = (float) v / (float) vulkan->layout_height;
+               vulkan->sprite_u [order [index]] = (real) u / (real) vulkan->layout_width;
+               vulkan->sprite_v [order [index]] = (real) v / (real) vulkan->layout_height;
 
 
-               for (u4 y = 0; y < vulkan->sprite_height [order [index]]; ++y) {
-                       for (u4 x = 0; x < vulkan->sprite_width [order [index]]; ++x) {
-                               u4 destination = (v + y) * vulkan->layout_width + (u + x);
-                               u4 source      = y * vulkan->sprite_width [order [index]] + x;
+               for (natural y = 0; y < vulkan->sprite_height [order [index]]; ++y) {
+                       for (natural x = 0; x < vulkan->sprite_width [order [index]]; ++x) {
+                               natural destination = (v + y) * vulkan->layout_width + (u + x);
+                               natural source      = y * vulkan->sprite_width [order [index]] + x;
 
                                vulkan->layout_data [destination] = vulkan->sprite_data [order [index]] [source];
                        }
 
                                vulkan->layout_data [destination] = vulkan->sprite_data [order [index]] [source];
                        }
@@ -1818,10 +1818,10 @@ static v0 vulkan_bundle_layout (vulkan_structure * vulkan) {
        order               = deallocate (order);
 }
 
        order               = deallocate (order);
 }
 
-static v0 vulkan_configure (vulkan_structure * vulkan, s4 width, s4 height, c1 * application) {
-       s4 index = 0;
+static procedure vulkan_configure (vulkan_structure * vulkan, integer width, integer height, character * application) {
+       integer index = 0;
 
 
-       u4 * dumb_buffer = null;
+       natural * dumb_buffer = null;
 
        if (vulkan->active == true) {
                return;
 
        if (vulkan->active == true) {
                return;
@@ -1830,8 +1830,8 @@ static v0 vulkan_configure (vulkan_structure * vulkan, s4 width, s4 height, c1 *
        vulkan->width  = width;
        vulkan->height = height;
 
        vulkan->width  = width;
        vulkan->height = height;
 
-       vulkan->pixel_width  = (float) 2 / (float) width;
-       vulkan->pixel_height = (float) 2 / (float) height;
+       vulkan->pixel_width  = (real) 2 / (real) width;
+       vulkan->pixel_height = (real) 2 / (real) height;
 
        dumb_buffer = allocate (256 * sizeof (* dumb_buffer));
 
 
        dumb_buffer = allocate (256 * sizeof (* dumb_buffer));
 
@@ -1888,25 +1888,25 @@ static v0 vulkan_configure (vulkan_structure * vulkan, s4 width, s4 height, c1 *
        vulkan->active = true;
 }
 /*
        vulkan->active = true;
 }
 /*
-static v0 vulkan_reconfigure (v0) {
-       s4 index;
+static procedure vulkan_reconfigure (none) {
+       integer index;
 
        vulkan_result (vkQueueWaitIdle  (vulkan_queue));
 
        vulkan_result (vkQueueWaitIdle  (vulkan_queue));
-       vulkan_result (vkDeviceWaitIdle (vulkan_logical_device));
+       vulkan_result (vkDeviceWaitIdle (vulkan_boolean_device));
 
        for (index = 0; index < vulkan_image_count; ++index) {
 
        for (index = 0; index < vulkan_image_count; ++index) {
-               vkDestroyFramebuffer (vulkan_logical_device, vulkan_framebuffers [index], null);
+               vkDestroyFramebuffer (vulkan_boolean_device, vulkan_framebuffers [index], null);
        }
 
        vulkan_framebuffers = deallocate (vulkan_framebuffers);
 
        for (index = 0; index < vulkan_image_count; ++index) {
        }
 
        vulkan_framebuffers = deallocate (vulkan_framebuffers);
 
        for (index = 0; index < vulkan_image_count; ++index) {
-               vkDestroyImageView (vulkan_logical_device, vulkan_image_views [index], null);
+               vkDestroyImageView (vulkan_boolean_device, vulkan_image_views [index], null);
        }
 
        vulkan_image_views = deallocate (vulkan_image_views);
 
        }
 
        vulkan_image_views = deallocate (vulkan_image_views);
 
-       vkDestroySwapchainKHR (vulkan_logical_device, vulkan_swapchain, null);
+       vkDestroySwapchainKHR (vulkan_boolean_device, vulkan_swapchain, null);
 
        vulkan_images = deallocate (vulkan_images);
 
 
        vulkan_images = deallocate (vulkan_images);
 
@@ -1919,25 +1919,25 @@ static v0 vulkan_reconfigure (v0) {
        vulkan_create_framebuffers ();
 
        vulkan_result (vkQueueWaitIdle  (vulkan_queue));
        vulkan_create_framebuffers ();
 
        vulkan_result (vkQueueWaitIdle  (vulkan_queue));
-       vulkan_result (vkDeviceWaitIdle (vulkan_logical_device));
+       vulkan_result (vkDeviceWaitIdle (vulkan_boolean_device));
 
        vulkan_reconfigure_active = false;
 }
 */
 
        vulkan_reconfigure_active = false;
 }
 */
-static v0 vulkan_render_core (vulkan_structure * vulkan, s4 sprite, s4 x, s4 y, s4 u, s4 v, s4 width, s4 height,
-                                f4 scale_x, f4 scale_y, s4 flip_x, s4 flip_y,
-                                s4 colour_0, u4 colour_1, u4 colour_2, u4 colour_3) {
-       f4 screen_x = x * vulkan->pixel_width;
-       f4 screen_y = y * vulkan->pixel_height;
+static procedure vulkan_render_core (vulkan_structure * vulkan, integer sprite, integer x, integer y, integer u, integer v, integer width, integer height,
+                                real scale_x, real scale_y, integer flip_x, integer flip_y,
+                                integer colour_0, natural colour_1, natural colour_2, natural colour_3) {
+       real screen_x = x * vulkan->pixel_width;
+       real screen_y = y * vulkan->pixel_height;
 
 
-       f4 unwrap_x = vulkan->sprite_u [sprite] + (float) u / vulkan->layout_width;
-       f4 unwrap_y = vulkan->sprite_v [sprite] + (float) v / vulkan->layout_height;
+       real unwrap_x = vulkan->sprite_u [sprite] + (real) u / vulkan->layout_width;
+       real unwrap_y = vulkan->sprite_v [sprite] + (real) v / vulkan->layout_height;
 
 
-       f4 screen_width  = (float) width  * vulkan->pixel_width  * scale_x;
-       f4 screen_height = (float) height * vulkan->pixel_height * scale_y;
+       real screen_width  = (real) width  * vulkan->pixel_width  * scale_x;
+       real screen_height = (real) height * vulkan->pixel_height * scale_y;
 
 
-       f4 unwrap_width  = (float) width  / vulkan->layout_width;
-       f4 unwrap_height = (float) height / vulkan->layout_height;
+       real unwrap_width  = (real) width  / vulkan->layout_width;
+       real unwrap_height = (real) height / vulkan->layout_height;
 
        fatal_failure (vulkan->vertex_count + 32 >= vulkan->vertex_limit, "Reached vertex limit.");
        fatal_failure (vulkan->index_count  +  6 >= vulkan->index_limit,  "Reached index limit.");
 
        fatal_failure (vulkan->vertex_count + 32 >= vulkan->vertex_limit, "Reached vertex limit.");
        fatal_failure (vulkan->index_count  +  6 >= vulkan->index_limit,  "Reached index limit.");
@@ -1946,37 +1946,37 @@ static v0 vulkan_render_core (vulkan_structure * vulkan, s4 sprite, s4 x, s4 y,
        vulkan->vertex_data [vulkan->vertex_count +  1] = screen_y;
        vulkan->vertex_data [vulkan->vertex_count +  2] = unwrap_x + unwrap_width  * (flip_y != 0);
        vulkan->vertex_data [vulkan->vertex_count +  3] = unwrap_y + unwrap_height * (flip_x != 0);
        vulkan->vertex_data [vulkan->vertex_count +  1] = screen_y;
        vulkan->vertex_data [vulkan->vertex_count +  2] = unwrap_x + unwrap_width  * (flip_y != 0);
        vulkan->vertex_data [vulkan->vertex_count +  3] = unwrap_y + unwrap_height * (flip_x != 0);
-       vulkan->vertex_data [vulkan->vertex_count +  4] = (float) ((colour_0 >> 24) & 0xff) / 255;
-       vulkan->vertex_data [vulkan->vertex_count +  5] = (float) ((colour_0 >> 16) & 0xff) / 255;
-       vulkan->vertex_data [vulkan->vertex_count +  6] = (float) ((colour_0 >>  8) & 0xff) / 255;
-       vulkan->vertex_data [vulkan->vertex_count +  7] = (float) ((colour_0 >>  0) & 0xff) / 255;
+       vulkan->vertex_data [vulkan->vertex_count +  4] = (real) ((colour_0 >> 24) & 0xff) / 255;
+       vulkan->vertex_data [vulkan->vertex_count +  5] = (real) ((colour_0 >> 16) & 0xff) / 255;
+       vulkan->vertex_data [vulkan->vertex_count +  6] = (real) ((colour_0 >>  8) & 0xff) / 255;
+       vulkan->vertex_data [vulkan->vertex_count +  7] = (real) ((colour_0 >>  0) & 0xff) / 255;
 
        vulkan->vertex_data [vulkan->vertex_count +  8] = screen_x + screen_width;
        vulkan->vertex_data [vulkan->vertex_count +  9] = screen_y;
        vulkan->vertex_data [vulkan->vertex_count + 10] = unwrap_x + unwrap_width  * (flip_y == 0);
        vulkan->vertex_data [vulkan->vertex_count + 11] = unwrap_y + unwrap_height * (flip_x != 0);
 
        vulkan->vertex_data [vulkan->vertex_count +  8] = screen_x + screen_width;
        vulkan->vertex_data [vulkan->vertex_count +  9] = screen_y;
        vulkan->vertex_data [vulkan->vertex_count + 10] = unwrap_x + unwrap_width  * (flip_y == 0);
        vulkan->vertex_data [vulkan->vertex_count + 11] = unwrap_y + unwrap_height * (flip_x != 0);
-       vulkan->vertex_data [vulkan->vertex_count + 12] = (float) ((colour_1 >> 24) & 0xff) / 255;
-       vulkan->vertex_data [vulkan->vertex_count + 13] = (float) ((colour_1 >> 16) & 0xff) / 255;
-       vulkan->vertex_data [vulkan->vertex_count + 14] = (float) ((colour_1 >>  8) & 0xff) / 255;
-       vulkan->vertex_data [vulkan->vertex_count + 15] = (float) ((colour_1 >>  0) & 0xff) / 255;
+       vulkan->vertex_data [vulkan->vertex_count + 12] = (real) ((colour_1 >> 24) & 0xff) / 255;
+       vulkan->vertex_data [vulkan->vertex_count + 13] = (real) ((colour_1 >> 16) & 0xff) / 255;
+       vulkan->vertex_data [vulkan->vertex_count + 14] = (real) ((colour_1 >>  8) & 0xff) / 255;
+       vulkan->vertex_data [vulkan->vertex_count + 15] = (real) ((colour_1 >>  0) & 0xff) / 255;
 
        vulkan->vertex_data [vulkan->vertex_count + 16] = screen_x;
        vulkan->vertex_data [vulkan->vertex_count + 17] = screen_y + screen_height;
        vulkan->vertex_data [vulkan->vertex_count + 18] = unwrap_x + unwrap_width  * (flip_y != 0);
        vulkan->vertex_data [vulkan->vertex_count + 19] = unwrap_y + unwrap_height * (flip_x == 0);
 
        vulkan->vertex_data [vulkan->vertex_count + 16] = screen_x;
        vulkan->vertex_data [vulkan->vertex_count + 17] = screen_y + screen_height;
        vulkan->vertex_data [vulkan->vertex_count + 18] = unwrap_x + unwrap_width  * (flip_y != 0);
        vulkan->vertex_data [vulkan->vertex_count + 19] = unwrap_y + unwrap_height * (flip_x == 0);
-       vulkan->vertex_data [vulkan->vertex_count + 20] = (float) ((colour_2 >> 24) & 0xff) / 255;
-       vulkan->vertex_data [vulkan->vertex_count + 21] = (float) ((colour_2 >> 16) & 0xff) / 255;
-       vulkan->vertex_data [vulkan->vertex_count + 22] = (float) ((colour_2 >>  8) & 0xff) / 255;
-       vulkan->vertex_data [vulkan->vertex_count + 23] = (float) ((colour_2 >>  0) & 0xff) / 255;
+       vulkan->vertex_data [vulkan->vertex_count + 20] = (real) ((colour_2 >> 24) & 0xff) / 255;
+       vulkan->vertex_data [vulkan->vertex_count + 21] = (real) ((colour_2 >> 16) & 0xff) / 255;
+       vulkan->vertex_data [vulkan->vertex_count + 22] = (real) ((colour_2 >>  8) & 0xff) / 255;
+       vulkan->vertex_data [vulkan->vertex_count + 23] = (real) ((colour_2 >>  0) & 0xff) / 255;
 
        vulkan->vertex_data [vulkan->vertex_count + 24] = screen_x + screen_width;
        vulkan->vertex_data [vulkan->vertex_count + 25] = screen_y + screen_height;
        vulkan->vertex_data [vulkan->vertex_count + 26] = unwrap_x + unwrap_width  * (flip_y == 0);
        vulkan->vertex_data [vulkan->vertex_count + 27] = unwrap_y + unwrap_height * (flip_x == 0);
 
        vulkan->vertex_data [vulkan->vertex_count + 24] = screen_x + screen_width;
        vulkan->vertex_data [vulkan->vertex_count + 25] = screen_y + screen_height;
        vulkan->vertex_data [vulkan->vertex_count + 26] = unwrap_x + unwrap_width  * (flip_y == 0);
        vulkan->vertex_data [vulkan->vertex_count + 27] = unwrap_y + unwrap_height * (flip_x == 0);
-       vulkan->vertex_data [vulkan->vertex_count + 28] = (float) ((colour_3 >> 24) & 0xff) / 255;
-       vulkan->vertex_data [vulkan->vertex_count + 29] = (float) ((colour_3 >> 16) & 0xff) / 255;
-       vulkan->vertex_data [vulkan->vertex_count + 30] = (float) ((colour_3 >>  8) & 0xff) / 255;
-       vulkan->vertex_data [vulkan->vertex_count + 31] = (float) ((colour_3 >>  0) & 0xff) / 255;
+       vulkan->vertex_data [vulkan->vertex_count + 28] = (real) ((colour_3 >> 24) & 0xff) / 255;
+       vulkan->vertex_data [vulkan->vertex_count + 29] = (real) ((colour_3 >> 16) & 0xff) / 255;
+       vulkan->vertex_data [vulkan->vertex_count + 30] = (real) ((colour_3 >>  8) & 0xff) / 255;
+       vulkan->vertex_data [vulkan->vertex_count + 31] = (real) ((colour_3 >>  0) & 0xff) / 255;
 
        vulkan->index_data [vulkan->index_count + 0] = (vulkan->vertex_count >> 3) + 0;
        vulkan->index_data [vulkan->index_count + 1] = (vulkan->vertex_count >> 3) + 1;
 
        vulkan->index_data [vulkan->index_count + 0] = (vulkan->vertex_count >> 3) + 0;
        vulkan->index_data [vulkan->index_count + 1] = (vulkan->vertex_count >> 3) + 1;
@@ -1989,35 +1989,35 @@ static v0 vulkan_render_core (vulkan_structure * vulkan, s4 sprite, s4 x, s4 y,
        vulkan->index_count  += 6;
 }
 
        vulkan->index_count  += 6;
 }
 
-static v0 vulkan_render_sprite (vulkan_structure * vulkan, s4 sprite, s4 x, s4 y, u4 colour) {
+static procedure vulkan_render_sprite (vulkan_structure * vulkan, integer sprite, integer x, integer y, natural colour) {
        vulkan_render_core (vulkan, sprite, x, y, 0, 0, vulkan->sprite_width [sprite], vulkan->sprite_height [sprite], 1.0, 1.0, 0, 0, colour, colour, colour,colour);
 }
 
        vulkan_render_core (vulkan, sprite, x, y, 0, 0, vulkan->sprite_width [sprite], vulkan->sprite_height [sprite], 1.0, 1.0, 0, 0, colour, colour, colour,colour);
 }
 
-static v0 vulkan_render_sprite_scale (vulkan_structure * vulkan, s4 sprite, s4 x, s4 y, f4 scale, u4 colour) {
+static procedure vulkan_render_sprite_scale (vulkan_structure * vulkan, integer sprite, integer x, integer y, real scale, natural colour) {
        vulkan_render_core (vulkan, sprite, x, y, 0, 0, vulkan->sprite_width [sprite], vulkan->sprite_height [sprite], scale, scale, 0, 0, colour, colour, colour,colour);
 }
 
        vulkan_render_core (vulkan, sprite, x, y, 0, 0, vulkan->sprite_width [sprite], vulkan->sprite_height [sprite], scale, scale, 0, 0, colour, colour, colour,colour);
 }
 
-static v0 vulkan_render_sprite_crop (vulkan_structure * vulkan, s4 sprite, s4 x, s4 y, s4 u, s4 v, s4 width, s4 height, u4 colour) {
+static procedure vulkan_render_sprite_crop (vulkan_structure * vulkan, integer sprite, integer x, integer y, integer u, integer v, integer width, integer height, natural colour) {
        vulkan_render_core (vulkan, sprite, x, y, u, v, width, height, 1.0, 1.0, 0, 0, colour, colour, colour, colour);
 }
 
        vulkan_render_core (vulkan, sprite, x, y, u, v, width, height, 1.0, 1.0, 0, 0, colour, colour, colour, colour);
 }
 
-static v0 vulkan_render_rectangle (vulkan_structure * vulkan, s4 x, s4 y, s4 width, s4 height, u4 colour) {
-       vulkan_render_core (vulkan, vulkan->sprite_count - 1, x, y, 0, 0, 16, 16, (float) width / 16, (float) height / 16, 0, 0, colour, colour, colour, colour);
+static procedure vulkan_render_rectangle (vulkan_structure * vulkan, integer x, integer y, integer width, integer height, natural colour) {
+       vulkan_render_core (vulkan, vulkan->sprite_count - 1, x, y, 0, 0, 16, 16, (real) width / 16, (real) height / 16, 0, 0, colour, colour, colour, colour);
 }
 
 }
 
-static v0 vulkan_render_rectangle_gradient_v (vulkan_structure * vulkan, s4 x, s4 y, s4 width, s4 height, u4 colour_up, u4 colour_down) {
-       vulkan_render_core (vulkan, vulkan->sprite_count - 1, x, y, 0, 0, 16, 16, (float) width / 16, (float) height / 16, 0, 0, colour_up, colour_up, colour_down, colour_down);
+static procedure vulkan_render_rectangle_gradient_v (vulkan_structure * vulkan, integer x, integer y, integer width, integer height, natural colour_up, natural colour_down) {
+       vulkan_render_core (vulkan, vulkan->sprite_count - 1, x, y, 0, 0, 16, 16, (real) width / 16, (real) height / 16, 0, 0, colour_up, colour_up, colour_down, colour_down);
 }
 
 }
 
-static v0 vulkan_render_rectangle_gradient_h (vulkan_structure * vulkan, s4 x, s4 y, s4 width, s4 height, u4 colour_left, u4 colour_right) {
-       vulkan_render_core (vulkan, vulkan->sprite_count - 1, x, y, 0, 0, 16, 16, (float) width / 16, (float) height / 16, 0, 0, colour_left, colour_right, colour_left, colour_right);
+static procedure vulkan_render_rectangle_gradient_h (vulkan_structure * vulkan, integer x, integer y, integer width, integer height, natural colour_left, natural colour_right) {
+       vulkan_render_core (vulkan, vulkan->sprite_count - 1, x, y, 0, 0, 16, 16, (real) width / 16, (real) height / 16, 0, 0, colour_left, colour_right, colour_left, colour_right);
 }
 
 }
 
-static s4 vulkan_string_width (vulkan_structure * vulkan, c1 * string, s4 font, f4 scale) {
-       s4 length = 0;
+static integer vulkan_string_width (vulkan_structure * vulkan, character * string, integer font, real scale) {
+       integer length = 0;
 
 
-       for (u4 index = 0; string [index] != '\0'; ++index) {
-               s4 character = vulkan->font_index [font] [string [index] - vulkan->font_begin [font]];
+       for (natural index = 0; string [index] != '\0'; ++index) {
+               integer character = vulkan->font_index [font] [string [index] - vulkan->font_begin [font]];
 /*
                if (string [index] == '\t') {
                        length += 8 * vulkan->sprite_width [vulkan->font_index [font] [' ' - vulkan->font_begin [font]]];
 /*
                if (string [index] == '\t') {
                        length += 8 * vulkan->sprite_width [vulkan->font_index [font] [' ' - vulkan->font_begin [font]]];
@@ -2034,11 +2034,11 @@ static s4 vulkan_string_width (vulkan_structure * vulkan, c1 * string, s4 font,
        return (length);
 }
 
        return (length);
 }
 
-static v0 vulkan_render_string (vulkan_structure * vulkan, c1 * string, s4 font, s4 x, s4 y, u4 colour) {
-       s4 offset = x;
+static procedure vulkan_render_string (vulkan_structure * vulkan, character * string, integer font, integer x, integer y, natural colour) {
+       integer offset = x;
 
 
-       for (u4 index = 0; string [index] != '\0'; ++index) {
-               s4 character = vulkan->font_index [font] [string [index] - vulkan->font_begin [font]];
+       for (natural index = 0; string [index] != '\0'; ++index) {
+               integer character = vulkan->font_index [font] [string [index] - vulkan->font_begin [font]];
 
                if (string [index] == '\t') {
                        x += 8 * vulkan->sprite_width [vulkan->font_index [font] [' ' - vulkan->font_begin [font]]];
 
                if (string [index] == '\t') {
                        x += 8 * vulkan->sprite_width [vulkan->font_index [font] [' ' - vulkan->font_begin [font]]];
@@ -2057,11 +2057,11 @@ static v0 vulkan_render_string (vulkan_structure * vulkan, c1 * string, s4 font,
        }
 }
 
        }
 }
 
-static v0 vulkan_render_string_scale (vulkan_structure * vulkan, c1 * string, s4 font, s4 x, s4 y, f4 scale, u4 colour) {
-       s4 offset = x;
+static procedure vulkan_render_string_scale (vulkan_structure * vulkan, character * string, integer font, integer x, integer y, real scale, natural colour) {
+       integer offset = x;
 
 
-       for (u4 index = 0; string [index] != '\0'; ++index) {
-               s4 character = vulkan->font_index [font] [string [index] - vulkan->font_begin [font]];
+       for (natural index = 0; string [index] != '\0'; ++index) {
+               integer character = vulkan->font_index [font] [string [index] - vulkan->font_begin [font]];
 
                if (string [index] == '\t') {
                        x += 8 * vulkan->sprite_width [vulkan->font_index [font] [' ' - vulkan->font_begin [font]]];
 
                if (string [index] == '\t') {
                        x += 8 * vulkan->sprite_width [vulkan->font_index [font] [' ' - vulkan->font_begin [font]]];
@@ -2081,9 +2081,9 @@ static v0 vulkan_render_string_scale (vulkan_structure * vulkan, c1 * string, s4
        }
 }
 
        }
 }
 
-static v0 vulkan_render_string_offset (vulkan_structure * vulkan, c1 * string, u4 length, u4 font, u4 offset, s4 * x, s4 * y, u4 colour) {
-       for (u4 index = 0; (string [index] != '\0') && (index < length); ++index) {
-               u4 character = vulkan->font_index [font] [string [index] - vulkan->font_begin [font]];
+static procedure vulkan_render_string_offset (vulkan_structure * vulkan, character * string, natural length, natural font, natural offset, integer * x, integer * y, natural colour) {
+       for (natural index = 0; (string [index] != '\0') && (index < length); ++index) {
+               natural character = vulkan->font_index [font] [string [index] - vulkan->font_begin [font]];
 
                if (string [index] == '\t') {
                        * x += 8 * vulkan->sprite_width [vulkan->font_index [font] [' ' - vulkan->font_begin [font]]];
 
                if (string [index] == '\t') {
                        * x += 8 * vulkan->sprite_width [vulkan->font_index [font] [' ' - vulkan->font_begin [font]]];
@@ -2102,11 +2102,11 @@ static v0 vulkan_render_string_offset (vulkan_structure * vulkan, c1 * string, u
        }
 }
 
        }
 }
 
-static v0 vulkan_render_string_gradient_v (vulkan_structure * vulkan, c1 * string, s4 font, s4 x, s4 y, f4 scale, u4 colour_up, u4 colour_down) {
-       s4 offset = x;
+static procedure vulkan_render_string_gradient_v (vulkan_structure * vulkan, character * string, integer font, integer x, integer y, real scale, natural colour_up, natural colour_down) {
+       integer offset = x;
 
 
-       for (u4 index = 0; string [index] != '\0'; ++index) {
-               u4 character = vulkan->font_index [font] [string [index] - vulkan->font_begin [font]];
+       for (natural index = 0; string [index] != '\0'; ++index) {
+               natural character = vulkan->font_index [font] [string [index] - vulkan->font_begin [font]];
 
                if (string [index] == '\t') {
                        x += 8 * vulkan->sprite_width [vulkan->font_index [font] [' ' - vulkan->font_begin [font]]] * scale;
 
                if (string [index] == '\t') {
                        x += 8 * vulkan->sprite_width [vulkan->font_index [font] [' ' - vulkan->font_begin [font]]] * scale;
@@ -2126,11 +2126,11 @@ static v0 vulkan_render_string_gradient_v (vulkan_structure * vulkan, c1 * strin
        }
 }
 
        }
 }
 
-static v0 vulkan_render_string_gradient_h (vulkan_structure * vulkan, c1 * string, s4 font, s4 x, s4 y, f4 scale, u4 colour_left, u4 colour_right) {
-       s4 offset = x;
+static procedure vulkan_render_string_gradient_h (vulkan_structure * vulkan, character * string, integer font, integer x, integer y, real scale, natural colour_left, natural colour_right) {
+       integer offset = x;
 
 
-       for (u4 index = 0; string [index] != '\0'; ++index) {
-               u4 character = vulkan->font_index [font] [string [index] - vulkan->font_begin [font]];
+       for (natural index = 0; string [index] != '\0'; ++index) {
+               natural character = vulkan->font_index [font] [string [index] - vulkan->font_begin [font]];
 
                if (string [index] == '\t') {
                        x += 8 * vulkan->sprite_width [vulkan->font_index [font] [' ' - vulkan->font_begin [font]]] * scale;
 
                if (string [index] == '\t') {
                        x += 8 * vulkan->sprite_width [vulkan->font_index [font] [' ' - vulkan->font_begin [font]]] * scale;
@@ -2150,8 +2150,8 @@ static v0 vulkan_render_string_gradient_h (vulkan_structure * vulkan, c1 * strin
        }
 }
 
        }
 }
 
-static v0 vulkan_handle_events (vulkan_structure * vulkan) {
-       static s4 signal_code [signal_count] = {
+static procedure vulkan_handle_events (vulkan_structure * vulkan) {
+       static integer signal_code [signal_count] = {
                0,
                38,     56,     54,     40,     26,     41,     42,     43,     31,     44,     45,     46,     58,     57,     32,     33,
                24,     27,     39,     28,     30,     55,     25,     53,     29,     52,     19,     10,     11,     12,     13,     14,
                0,
                38,     56,     54,     40,     26,     41,     42,     43,     31,     44,     45,     46,     58,     57,     32,     33,
                24,     27,     39,     28,     30,     55,     25,     53,     29,     52,     19,     10,     11,     12,     13,     14,
@@ -2162,7 +2162,7 @@ static v0 vulkan_handle_events (vulkan_structure * vulkan) {
                85, 79, 80, 81
        };
 
                85, 79, 80, 81
        };
 
-       s4 index, key_code;
+       integer index, key_code;
 
        xcb_generic_event_t * generic_event;
 
 
        xcb_generic_event_t * generic_event;
 
@@ -2189,17 +2189,17 @@ static v0 vulkan_handle_events (vulkan_structure * vulkan) {
                        }
                } break;*/
                case (XCB_BUTTON_PRESS): {
                        }
                } break;*/
                case (XCB_BUTTON_PRESS): {
-                       vulkan->cursor   = (int) ((xcb_button_press_event_t *) generic_event)->detail;
-                       vulkan->cursor_x = (int) ((xcb_button_press_event_t *) generic_event)->event_x;
-                       vulkan->cursor_y = (int) ((xcb_button_press_event_t *) generic_event)->event_y;
+                       vulkan->cursor   = (integer) ((xcb_button_press_event_t *) generic_event)->detail;
+                       vulkan->cursor_x = (integer) ((xcb_button_press_event_t *) generic_event)->event_x;
+                       vulkan->cursor_y = (integer) ((xcb_button_press_event_t *) generic_event)->event_y;
                } break;
                case (XCB_BUTTON_RELEASE): {
                        vulkan->cursor   = cursor_none;
                } break;
                case (XCB_BUTTON_RELEASE): {
                        vulkan->cursor   = cursor_none;
-                       vulkan->cursor_x = (int) ((xcb_button_release_event_t *) generic_event)->event_x;
-                       vulkan->cursor_y = (int) ((xcb_button_release_event_t *) generic_event)->event_y;
+                       vulkan->cursor_x = (integer) ((xcb_button_release_event_t *) generic_event)->event_x;
+                       vulkan->cursor_y = (integer) ((xcb_button_release_event_t *) generic_event)->event_y;
                } break;
                case (XCB_KEY_PRESS): {
                } break;
                case (XCB_KEY_PRESS): {
-                       key_code = (int) ((xcb_key_press_event_t *) generic_event)->detail;
+                       key_code = (integer) ((xcb_key_press_event_t *) generic_event)->detail;
                        for (index = 0; index < signal_count; ++index) {
                                if (key_code == signal_code [index]) {
                                        vulkan->signal [index] = true;
                        for (index = 0; index < signal_count; ++index) {
                                if (key_code == signal_code [index]) {
                                        vulkan->signal [index] = true;
@@ -2208,7 +2208,7 @@ static v0 vulkan_handle_events (vulkan_structure * vulkan) {
                        }
                } break;
                case (XCB_KEY_RELEASE): {
                        }
                } break;
                case (XCB_KEY_RELEASE): {
-                       key_code = (int) ((xcb_key_release_event_t *) generic_event)->detail;
+                       key_code = (integer) ((xcb_key_release_event_t *) generic_event)->detail;
                        for (index = 0; index < signal_count; ++index) {
                                if (key_code == signal_code [index]) {
                                        vulkan->signal [index] = false;
                        for (index = 0; index < signal_count; ++index) {
                                if (key_code == signal_code [index]) {
                                        vulkan->signal [index] = false;
@@ -2217,8 +2217,8 @@ static v0 vulkan_handle_events (vulkan_structure * vulkan) {
                        }
                } break;
                /*case (XCB_MOTION_NOTIFY): {
                        }
                } break;
                /*case (XCB_MOTION_NOTIFY): {
-                       vulkan->cursor_x = (int) ((xcb_motion_notify_event_t *) generic_event)->event_x;
-                       vulkan->cursor_y = (int) ((xcb_motion_notify_event_t *) generic_event)->event_y;
+                       vulkan->cursor_x = (integer) ((xcb_motion_notify_event_t *) generic_event)->event_x;
+                       vulkan->cursor_y = (integer) ((xcb_motion_notify_event_t *) generic_event)->event_y;
                } break;*/
                default: {
                } break;
                } break;*/
                default: {
                } break;
@@ -2227,13 +2227,13 @@ static v0 vulkan_handle_events (vulkan_structure * vulkan) {
        generic_event = deallocate (generic_event);
 }
 
        generic_event = deallocate (generic_event);
 }
 
-static v0 vulkan_synchronize (vulkan_structure * vulkan, u4 clear_colour) {
-       u4 index = 0;
-       u4 frame = 0;
+static procedure vulkan_synchronize (vulkan_structure * vulkan, natural clear_colour) {
+       natural index = 0;
+       natural frame = 0;
 
        VkResult result = VK_SUCCESS;
 
 
        VkResult result = VK_SUCCESS;
 
-       v0 * ubo_v0 = null;
+       generic * ubo_procedure = null;
 
        VkPipelineStageFlags wait_stages [1] = { VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT} ;
 
 
        VkPipelineStageFlags wait_stages [1] = { VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT} ;
 
@@ -2264,12 +2264,12 @@ static v0 vulkan_synchronize (vulkan_structure * vulkan, u4 clear_colour) {
 
        vulkan_record_command_buffers (vulkan, clear_colour, frame);
 
 
        vulkan_record_command_buffers (vulkan, clear_colour, frame);
 
-       vulkan_result (vkWaitForFences (vulkan->logical_device, 1, & vulkan->fence_set_1 [vulkan->frame], VK_TRUE, ~0));
+       vulkan_result (vkWaitForFences (vulkan->boolean_device, 1, & vulkan->fence_set_1 [vulkan->frame], VK_TRUE, ~0));
 
 
-       vulkan_result (vkAcquireNextImageKHR (vulkan->logical_device, vulkan->swapchain, ~0, vulkan->semaphore_set_1 [vulkan->frame],
+       vulkan_result (vkAcquireNextImageKHR (vulkan->boolean_device, vulkan->swapchain, ~0, vulkan->semaphore_set_1 [vulkan->frame],
                                              VK_NULL_HANDLE, & frame));
 /*
                                              VK_NULL_HANDLE, & frame));
 /*
-       result = vkAcquireNextImageKHR (vulkan->logical_device, vulkan->swapchain, ~0, vulkan->semaphore_set_1 [vulkan->frame],
+       result = vkAcquireNextImageKHR (vulkan->boolean_device, vulkan->swapchain, ~0, vulkan->semaphore_set_1 [vulkan->frame],
                                        VK_NULL_HANDLE, & frame);
 
        print ("vkAcquireNextImageKHR : /5%i/-\n", result);
                                        VK_NULL_HANDLE, & frame);
 
        print ("vkAcquireNextImageKHR : /5%i/-\n", result);
@@ -2279,7 +2279,7 @@ static v0 vulkan_synchronize (vulkan_structure * vulkan, u4 clear_colour) {
                return;
        }
 */
                return;
        }
 */
-       vulkan_result (vkResetFences (vulkan->logical_device, 1, & vulkan->fence_set_1 [vulkan->frame]));
+       vulkan_result (vkResetFences (vulkan->boolean_device, 1, & vulkan->fence_set_1 [vulkan->frame]));
 
        submit_information.sType                = VK_STRUCTURE_TYPE_SUBMIT_INFO;
        submit_information.waitSemaphoreCount   = 1;
 
        submit_information.sType                = VK_STRUCTURE_TYPE_SUBMIT_INFO;
        submit_information.waitSemaphoreCount   = 1;
@@ -2314,25 +2314,25 @@ static v0 vulkan_synchronize (vulkan_structure * vulkan, u4 clear_colour) {
        vulkan->frame = (vulkan->frame + 1) % vulkan->image_count;
 
        vulkan_result (vkQueueWaitIdle  (vulkan->queue));
        vulkan->frame = (vulkan->frame + 1) % vulkan->image_count;
 
        vulkan_result (vkQueueWaitIdle  (vulkan->queue));
-       vulkan_result (vkDeviceWaitIdle (vulkan->logical_device));
+       vulkan_result (vkDeviceWaitIdle (vulkan->boolean_device));
 
 
-       vkDestroyBuffer (vulkan->logical_device, vulkan->index_buffer,  null);
-       vkFreeMemory    (vulkan->logical_device, vulkan->index_memory,  null);
-       vkDestroyBuffer (vulkan->logical_device, vulkan->vertex_buffer, null);
-       vkFreeMemory    (vulkan->logical_device, vulkan->vertex_memory, null);
+       vkDestroyBuffer (vulkan->boolean_device, vulkan->index_buffer,  null);
+       vkFreeMemory    (vulkan->boolean_device, vulkan->index_memory,  null);
+       vkDestroyBuffer (vulkan->boolean_device, vulkan->vertex_buffer, null);
+       vkFreeMemory    (vulkan->boolean_device, vulkan->vertex_memory, null);
 
        vulkan->vertex_count = 0;
        vulkan->index_count  = 0;
 
        vulkan_result (vkQueueWaitIdle  (vulkan->queue));
 
        vulkan->vertex_count = 0;
        vulkan->index_count  = 0;
 
        vulkan_result (vkQueueWaitIdle  (vulkan->queue));
-       vulkan_result (vkDeviceWaitIdle (vulkan->logical_device));
+       vulkan_result (vkDeviceWaitIdle (vulkan->boolean_device));
 
        clock_gettime (CLOCK_REALTIME, & frame_end);
 
        if (vulkan->gameplay_time % (vulkan->gameplay_framerate / 10) == 0) {
                vulkan->frame_time_in_ns = (frame_end.tv_sec - frame_begin.tv_sec) * 1000000000 + frame_end.tv_nsec - frame_begin.tv_nsec;
 
 
        clock_gettime (CLOCK_REALTIME, & frame_end);
 
        if (vulkan->gameplay_time % (vulkan->gameplay_framerate / 10) == 0) {
                vulkan->frame_time_in_ns = (frame_end.tv_sec - frame_begin.tv_sec) * 1000000000 + frame_end.tv_nsec - frame_begin.tv_nsec;
 
-               vulkan->framerate = (int) (1000000000 / vulkan->frame_time_in_ns);
+               vulkan->framerate = (integer) (1000000000 / vulkan->frame_time_in_ns);
        }
 
        if (vulkan->framerate > vulkan->gameplay_framerate) {
        }
 
        if (vulkan->framerate > vulkan->gameplay_framerate) {
index 5478c60da5059141f4d7c688abf92b54cb4fc470..163b49d88a82f6d761c72e770c9d0761a59d92db 100755 (executable)
--- a/xungeon.h
+++ b/xungeon.h
 // for more details, if you dare, it is a lot of text that nobody wants to read...
 
 //~typedef struct {
 // for more details, if you dare, it is a lot of text that nobody wants to read...
 
 //~typedef struct {
-       //~c1 * name;
+       //~character * name;
 //~} * _definition;
 
 typedef struct {
 //~} * _definition;
 
 typedef struct {
-       c1 * name;        // Name string copy.
-       u4   temperature; // ;
-       u4   humidity;    // ;
+       character * name;        // Name string copy.
+       natural   temperature; // ;
+       natural   humidity;    // ;
 } * dungeon_biome_definition;
 
 typedef struct {
 } * dungeon_biome_definition;
 
 typedef struct {
-       c1 * name;  // Name string copy.
-       u4   biome; // Index in biome array.
-       b4   clip;  // Can entities move through?
+       character * name;  // Name string copy.
+       natural   biome; // Index in biome array.
+       boolean   clip;  // Can entities move through?
 } * dungeon_landmark_definition;
 
 typedef struct {
 } * dungeon_landmark_definition;
 
 typedef struct {
-       c1 * name; // Name string copy.
+       character * name; // Name string copy.
 } * dungeon_expertise_definition;
 
 typedef struct {
 } * dungeon_expertise_definition;
 
 typedef struct {
-       c1 * name;  // Name string copy.
-       u4   base;  // Default amount of points per entity.
-       u4   limit; // After this point, points won't increase.
+       character * name;  // Name string copy.
+       natural   base;  // Default amount of points per entity.
+       natural   limit; // After this point, points won't increase.
 } * dungeon_attribute_definition;
 
 typedef struct {
 } * dungeon_attribute_definition;
 
 typedef struct {
-       c1 * name;  // Name string copy.
-       u4   base;  // Default amount of points per entity.
-       u4   limit; // After this point, points won't increase.
+       character * name;  // Name string copy.
+       natural   base;  // Default amount of points per entity.
+       natural   limit; // After this point, points won't increase.
 } * dungeon_skill_definition;
 
 typedef struct {
 } * dungeon_skill_definition;
 
 typedef struct {
-       c1 * name;  // Name string copy.
-       u4   base;  // Default amount of points per entity.
-       u4   limit; // After this point, points won't increase.
-       u4   value; // Constant trade value per index 0.
-       u4   trade; // Trade rate for acquiring the resource.
+       character * name;  // Name string copy.
+       natural   base;  // Default amount of points per entity.
+       natural   limit; // After this point, points won't increase.
+       natural   value; // Constant trade value per index 0.
+       natural   trade; // Trade rate for acquiring the resource.
 } * dungeon_resource_definition;
 
 typedef struct {
 } * dungeon_resource_definition;
 
 typedef struct {
-       c1 * name; // Name string copy.
+       character * name; // Name string copy.
 } * dungeon_item_slot_definition;
 
 typedef struct {
 } * dungeon_item_slot_definition;
 
 typedef struct {
-       c1 * name;   // Name string copy.
-       u4   slot;   // Index in item slot array.
-       u4   effect; // Index in effect array.
+       character * name;   // Name string copy.
+       natural   slot;   // Index in item slot array.
+       natural   effect; // Index in effect array.
 } * dungeon_item_definition;
 
 typedef struct {
 } * dungeon_item_definition;
 
 typedef struct {
-       u4                           biome_count;
-       u4                           landmark_count;
-       u4                           expertise_count;
-       u4                           attribute_count;
-       u4                           skill_count;
-       u4                           resource_count;
-       u4                           item_slot_count;
-       u4                           item_count;
+       natural                           biome_count;
+       natural                           landmark_count;
+       natural                           expertise_count;
+       natural                           attribute_count;
+       natural                           skill_count;
+       natural                           resource_count;
+       natural                           item_slot_count;
+       natural                           item_count;
        dungeon_biome_definition     * biome_array;
        dungeon_landmark_definition  * landmark_array;
        dungeon_expertise_definition * expertise_array;
        dungeon_biome_definition     * biome_array;
        dungeon_landmark_definition  * landmark_array;
        dungeon_expertise_definition * expertise_array;
@@ -84,7 +84,7 @@ typedef struct {
        dungeon_item_definition      * item_array;
 } * dungeon_structure;
 
        dungeon_item_definition      * item_array;
 } * dungeon_structure;
 
-static u4 dungeon_biome_define (dungeon_structure dungeon, c1 * name, u4 temperature, u4 humidity) {
+static natural dungeon_biome_define (dungeon_structure dungeon, character * name, natural temperature, natural humidity) {
        dungeon_biome_definition biome = arena_add (sizeof (* biome));
 
        fatal_failure (dungeon == null, "biome_define: Dungeon is not configured.");
        dungeon_biome_definition biome = arena_add (sizeof (* biome));
 
        fatal_failure (dungeon == null, "biome_define: Dungeon is not configured.");
@@ -102,11 +102,11 @@ static u4 dungeon_biome_define (dungeon_structure dungeon, c1 * name, u4 tempera
        return (dungeon->biome_count - 1);
 }
 
        return (dungeon->biome_count - 1);
 }
 
-static c1 * dungeon_biome_name        (dungeon_structure dungeon, u4 index) { return (dungeon->biome_array [index]->name);        }
-static u4   dungeon_biome_temperature (dungeon_structure dungeon, u4 index) { return (dungeon->biome_array [index]->temperature); }
-static u4   dungeon_biome_humidity    (dungeon_structure dungeon, u4 index) { return (dungeon->biome_array [index]->humidity);    }
+static character * dungeon_biome_name        (dungeon_structure dungeon, natural index) { return (dungeon->biome_array [index]->name);        }
+static natural   dungeon_biome_temperature (dungeon_structure dungeon, natural index) { return (dungeon->biome_array [index]->temperature); }
+static natural   dungeon_biome_humidity    (dungeon_structure dungeon, natural index) { return (dungeon->biome_array [index]->humidity);    }
 
 
-static u4 dungeon_landmark_define (dungeon_structure dungeon, c1 * name, u4 biome, b4 clip) {
+static natural dungeon_landmark_define (dungeon_structure dungeon, character * name, natural biome, boolean clip) {
        dungeon_landmark_definition landmark = arena_add (sizeof (* landmark));
 
        fatal_failure (dungeon == null, "landmark_define: Dungeon is not configured.");
        dungeon_landmark_definition landmark = arena_add (sizeof (* landmark));
 
        fatal_failure (dungeon == null, "landmark_define: Dungeon is not configured.");
@@ -124,11 +124,11 @@ static u4 dungeon_landmark_define (dungeon_structure dungeon, c1 * name, u4 biom
        return (dungeon->landmark_count - 1);
 }
 
        return (dungeon->landmark_count - 1);
 }
 
-static c1 * dungeon_landmark_name  (dungeon_structure dungeon, u4 index) { return (dungeon->landmark_array [index]->name);  }
-static u4   dungeon_landmark_biome (dungeon_structure dungeon, u4 index) { return (dungeon->landmark_array [index]->biome); }
-static b4   dungeon_landmark_clip  (dungeon_structure dungeon, u4 index) { return (dungeon->landmark_array [index]->clip);  }
+static character * dungeon_landmark_name  (dungeon_structure dungeon, natural index) { return (dungeon->landmark_array [index]->name);  }
+static natural   dungeon_landmark_biome (dungeon_structure dungeon, natural index) { return (dungeon->landmark_array [index]->biome); }
+static boolean   dungeon_landmark_clip  (dungeon_structure dungeon, natural index) { return (dungeon->landmark_array [index]->clip);  }
 
 
-static u4 dungeon_expertise_define (dungeon_structure dungeon, c1 * name) {
+static natural dungeon_expertise_define (dungeon_structure dungeon, character * name) {
        dungeon_expertise_definition expertise = arena_add (sizeof (* expertise));
 
        fatal_failure (dungeon == null, "expertise_define: Dungeon is not configured.");
        dungeon_expertise_definition expertise = arena_add (sizeof (* expertise));
 
        fatal_failure (dungeon == null, "expertise_define: Dungeon is not configured.");
@@ -143,9 +143,9 @@ static u4 dungeon_expertise_define (dungeon_structure dungeon, c1 * name) {
        return (dungeon->expertise_count - 1);
 }
 
        return (dungeon->expertise_count - 1);
 }
 
-static c1 * dungeon_expertise_name (dungeon_structure dungeon, u4 index) { return (dungeon->expertise_array [index]->name); }
+static character * dungeon_expertise_name (dungeon_structure dungeon, natural index) { return (dungeon->expertise_array [index]->name); }
 
 
-static u4 dungeon_attribute_define (dungeon_structure dungeon, c1 * name, u4 base, u4 limit) {
+static natural dungeon_attribute_define (dungeon_structure dungeon, character * name, natural base, natural limit) {
        dungeon_attribute_definition attribute = arena_add (sizeof (* attribute));
 
        fatal_failure (dungeon == null, "attribute_define: Dungeon is not configured.");
        dungeon_attribute_definition attribute = arena_add (sizeof (* attribute));
 
        fatal_failure (dungeon == null, "attribute_define: Dungeon is not configured.");
@@ -163,11 +163,11 @@ static u4 dungeon_attribute_define (dungeon_structure dungeon, c1 * name, u4 bas
        return (dungeon->attribute_count - 1);
 }
 
        return (dungeon->attribute_count - 1);
 }
 
-static c1 * dungeon_attribute_name  (dungeon_structure dungeon, u4 index) { return (dungeon->attribute_array [index]->name);  }
-static u4   dungeon_attribute_base  (dungeon_structure dungeon, u4 index) { return (dungeon->attribute_array [index]->base);  }
-static u4   dungeon_attribute_limit (dungeon_structure dungeon, u4 index) { return (dungeon->attribute_array [index]->limit); }
+static character * dungeon_attribute_name  (dungeon_structure dungeon, natural index) { return (dungeon->attribute_array [index]->name);  }
+static natural   dungeon_attribute_base  (dungeon_structure dungeon, natural index) { return (dungeon->attribute_array [index]->base);  }
+static natural   dungeon_attribute_limit (dungeon_structure dungeon, natural index) { return (dungeon->attribute_array [index]->limit); }
 
 
-static u4 dungeon_skill_define (dungeon_structure dungeon, c1 * name, u4 base, u4 limit) {
+static natural dungeon_skill_define (dungeon_structure dungeon, character * name, natural base, natural limit) {
        dungeon_skill_definition skill = arena_add (sizeof (* skill));
 
        fatal_failure (dungeon == null, "skill_define: Dungeon is not configured.");
        dungeon_skill_definition skill = arena_add (sizeof (* skill));
 
        fatal_failure (dungeon == null, "skill_define: Dungeon is not configured.");
@@ -185,11 +185,11 @@ static u4 dungeon_skill_define (dungeon_structure dungeon, c1 * name, u4 base, u
        return (dungeon->skill_count - 1);
 }
 
        return (dungeon->skill_count - 1);
 }
 
-static c1 * dungeon_skill_name  (dungeon_structure dungeon, u4 index) { return (dungeon->skill_array [index]->name);  }
-static u4   dungeon_skill_base  (dungeon_structure dungeon, u4 index) { return (dungeon->skill_array [index]->base);  }
-static u4   dungeon_skill_limit (dungeon_structure dungeon, u4 index) { return (dungeon->skill_array [index]->limit); }
+static character * dungeon_skill_name  (dungeon_structure dungeon, natural index) { return (dungeon->skill_array [index]->name);  }
+static natural   dungeon_skill_base  (dungeon_structure dungeon, natural index) { return (dungeon->skill_array [index]->base);  }
+static natural   dungeon_skill_limit (dungeon_structure dungeon, natural index) { return (dungeon->skill_array [index]->limit); }
 
 
-static u4 dungeon_resource_define (dungeon_structure dungeon, c1 * name, u4 base, u4 limit, u4 value, u4 trade) {
+static natural dungeon_resource_define (dungeon_structure dungeon, character * name, natural base, natural limit, natural value, natural trade) {
        dungeon_resource_definition resource = arena_add (sizeof (* resource));
 
        fatal_failure (dungeon == null, "resource_define: Dungeon is not configured.");
        dungeon_resource_definition resource = arena_add (sizeof (* resource));
 
        fatal_failure (dungeon == null, "resource_define: Dungeon is not configured.");
@@ -209,13 +209,13 @@ static u4 dungeon_resource_define (dungeon_structure dungeon, c1 * name, u4 base
        return (dungeon->resource_count - 1);
 }
 
        return (dungeon->resource_count - 1);
 }
 
-static c1 * dungeon_resource_name  (dungeon_structure dungeon, u4 index) { return (dungeon->resource_array [index]->name);  }
-static u4   dungeon_resource_base  (dungeon_structure dungeon, u4 index) { return (dungeon->resource_array [index]->base);  }
-static u4   dungeon_resource_limit (dungeon_structure dungeon, u4 index) { return (dungeon->resource_array [index]->limit); }
-static u4   dungeon_resource_value (dungeon_structure dungeon, u4 index) { return (dungeon->resource_array [index]->value); }
-static u4   dungeon_resource_trade (dungeon_structure dungeon, u4 index) { return (dungeon->resource_array [index]->trade); }
+static character * dungeon_resource_name  (dungeon_structure dungeon, natural index) { return (dungeon->resource_array [index]->name);  }
+static natural   dungeon_resource_base  (dungeon_structure dungeon, natural index) { return (dungeon->resource_array [index]->base);  }
+static natural   dungeon_resource_limit (dungeon_structure dungeon, natural index) { return (dungeon->resource_array [index]->limit); }
+static natural   dungeon_resource_value (dungeon_structure dungeon, natural index) { return (dungeon->resource_array [index]->value); }
+static natural   dungeon_resource_trade (dungeon_structure dungeon, natural index) { return (dungeon->resource_array [index]->trade); }
 
 
-static u4 dungeon_item_slot_define (dungeon_structure dungeon, c1 * name) {
+static natural dungeon_item_slot_define (dungeon_structure dungeon, character * name) {
        dungeon_item_slot_definition item_slot = arena_add (sizeof (* item_slot));
 
        fatal_failure (dungeon == null, "item_slot_define: Dungeon is not configured.");
        dungeon_item_slot_definition item_slot = arena_add (sizeof (* item_slot));
 
        fatal_failure (dungeon == null, "item_slot_define: Dungeon is not configured.");
@@ -230,9 +230,9 @@ static u4 dungeon_item_slot_define (dungeon_structure dungeon, c1 * name) {
        return (dungeon->item_slot_count - 1);
 }
 
        return (dungeon->item_slot_count - 1);
 }
 
-static c1 * dungeon_item_slot_name (dungeon_structure dungeon, u4 index) { return (dungeon->item_slot_array [index]->name); }
+static character * dungeon_item_slot_name (dungeon_structure dungeon, natural index) { return (dungeon->item_slot_array [index]->name); }
 
 
-static u4 dungeon_item_define (dungeon_structure dungeon, c1 * name, u4 slot, u4 effect) {
+static natural dungeon_item_define (dungeon_structure dungeon, character * name, natural slot, natural effect) {
        dungeon_item_definition item = arena_add (sizeof (* item));
 
        fatal_failure (dungeon == null, "item_define: Dungeon is not configured.");
        dungeon_item_definition item = arena_add (sizeof (* item));
 
        fatal_failure (dungeon == null, "item_define: Dungeon is not configured.");
@@ -250,12 +250,12 @@ static u4 dungeon_item_define (dungeon_structure dungeon, c1 * name, u4 slot, u4
        return (dungeon->item_count - 1);
 }
 
        return (dungeon->item_count - 1);
 }
 
-static c1 * dungeon_item_name   (dungeon_structure dungeon, u4 index) { return (dungeon->item_array [index]->name);   }
-static u4   dungeon_item_slot   (dungeon_structure dungeon, u4 index) { return (dungeon->item_array [index]->slot);   }
-static u4   dungeon_item_effect (dungeon_structure dungeon, u4 index) { return (dungeon->item_array [index]->effect); }
+static character * dungeon_item_name   (dungeon_structure dungeon, natural index) { return (dungeon->item_array [index]->name);   }
+static natural   dungeon_item_slot   (dungeon_structure dungeon, natural index) { return (dungeon->item_array [index]->slot);   }
+static natural   dungeon_item_effect (dungeon_structure dungeon, natural index) { return (dungeon->item_array [index]->effect); }
 
 
-static dungeon_structure dungeon_configure (u4 biome_limit, u4 landmark_limit, u4 expertise_limit, u4 attribute_limit, u4 skill_limit,
-                                            u4 resource_limit, u4 item_slot_limit, u4 item_limit) {
+static dungeon_structure dungeon_configure (natural biome_limit, natural landmark_limit, natural expertise_limit, natural attribute_limit, natural skill_limit,
+                                            natural resource_limit, natural item_slot_limit, natural item_limit) {
        dungeon_structure dungeon = arena_add (sizeof (* dungeon));
 
        dungeon->biome_array     = arena_add (biome_limit     * sizeof (* dungeon->biome_array));
        dungeon_structure dungeon = arena_add (sizeof (* dungeon));
 
        dungeon->biome_array     = arena_add (biome_limit     * sizeof (* dungeon->biome_array));
index 1423d357ad7552fe249aea1ed0d6fed85c0858ca..c29f75119fb112a18a8af388ce5d083c1d7eea51 100755 (executable)
--- a/xuxuxu.c
+++ b/xuxuxu.c
 #define font_height ( 8)
 #define font_count  (96)
 
 #define font_height ( 8)
 #define font_count  (96)
 
-static u4 * render = null;
-static u4   colour = foreground;
+static natural * render = null;
+static natural   colour = foreground;
 
 
-static u4 width  = 0;
-static u4 height = 0;
-static u4 x      = 0;
-static u4 y      = 0;
+static natural width  = 0;
+static natural height = 0;
+static natural x      = 0;
+static natural y      = 0;
 
 
-static v0 render_character (c1 character) {
-       u8 font_code [font_count] = {
+static procedure render_character (character character) {
+       natural_64 font_code [font_count] = {
                0x0000000000000000,             0x00180018183c3c18,             0x0000000000363636,             0x006c6cfe6cfe6c6c,
                0x00187ed07c16fc30,             0x0060660c18306606,             0x00dc66b61c36361c,             0x0000000000181818,
                0x0030180c0c0c1830,             0x000c18303030180c,             0x0000187e3c7e1800,             0x000018187e181800,
                0x0000000000000000,             0x00180018183c3c18,             0x0000000000363636,             0x006c6cfe6cfe6c6c,
                0x00187ed07c16fc30,             0x0060660c18306606,             0x00dc66b61c36361c,             0x0000000000181818,
                0x0030180c0c0c1830,             0x000c18303030180c,             0x0000187e3c7e1800,             0x000018187e181800,
@@ -46,18 +46,18 @@ static v0 render_character (c1 character) {
                0x0018181818181818,             0x000c18187018180c,             0x000000000062d68c,             0x0000000000000000
        };
 
                0x0018181818181818,             0x000c18187018180c,             0x000000000062d68c,             0x0000000000000000
        };
 
-       for (u4 offset = 0; offset < font_width * font_height; ++offset) {
-               u4 u = offset / font_width + y;
-               u4 v = offset % font_width + x;
+       for (natural offset = 0; offset < font_width * font_height; ++offset) {
+               natural u = offset / font_width + y;
+               natural v = offset % font_width + x;
 
 
-               render [u * width + v] = ((font_code [(u4) (character - ' ')] >> offset) % 2) ? colour : background;
+               render [u * width + v] = ((font_code [(natural) (character - ' ')] >> offset) % 2) ? colour : background;
        }
 
        x += font_width + 1;
 }
 
        }
 
        x += font_width + 1;
 }
 
-static v0 render_string (c1 * string, u4 length) {
-       for (u4 offset = 0; offset < length; ++offset) {
+static procedure render_string (character * string, natural length) {
+       for (natural offset = 0; offset < length; ++offset) {
                if (string [offset] == '\t') {
                        x += font_width * font_indent;
                } else if (string [offset] == '\n') {
                if (string [offset] == '\t') {
                        x += font_width * font_indent;
                } else if (string [offset] == '\n') {
@@ -69,14 +69,14 @@ static v0 render_string (c1 * string, u4 length) {
        }
 }
 
        }
 }
 
-s4 main (v0) {
-       u4   index  = 0;
-       u4   length = 0;
-       c1 * buffer = null;
+integer main (none) {
+       natural   index  = 0;
+       natural   length = 0;
+       character * buffer = null;
 
 
-       c1 separator [] = ".,:;<=>+-*/%!&~^()[]{}'\" \t\r\n";
+       character separator [] = ".,:;<=>+-*/%!&~^()[]{}'\" \t\r\n";
 
 
-       c1 * keywords [] = {
+       character * keywords [] = {
                "register", "volatile", "auto",     "const",    "static",   "extern",   "if",       "else",
                "do",       "while",    "for",      "continue", "switch",   "case",     "default",  "break",
                "enum",     "union",    "struct",   "typedef",  "goto",     "v0",     "return",   "sizeof",
                "register", "volatile", "auto",     "const",    "static",   "extern",   "if",       "else",
                "do",       "while",    "for",      "continue", "switch",   "case",     "default",  "break",
                "enum",     "union",    "struct",   "typedef",  "goto",     "v0",     "return",   "sizeof",
@@ -93,7 +93,7 @@ s4 main (v0) {
        syntax_define (syntax, true,  false, ".,:;<=>+-*/%!&~^?|", "",   '\0', 0xffccaa33, 0);
        syntax_define (syntax, true,  false, "(){}[]",             "",   '\0', 0xffcc3333, 0);
 
        syntax_define (syntax, true,  false, ".,:;<=>+-*/%!&~^?|", "",   '\0', 0xffccaa33, 0);
        syntax_define (syntax, true,  false, "(){}[]",             "",   '\0', 0xffcc3333, 0);
 
-       for (u8 word = 0; word < array_length (keywords); ++word) {
+       for (natural_64 word = 0; word < array_length (keywords); ++word) {
                syntax_define (syntax, false, true, keywords [word], separator, '\0', 0xff33aacc, 0);
        }
 
                syntax_define (syntax, false, true, keywords [word], separator, '\0', 0xff33aacc, 0);
        }
 
@@ -107,11 +107,11 @@ s4 main (v0) {
 
        render = allocate (4 * width * height);
 
 
        render = allocate (4 * width * height);
 
-       for (u4 offset = 0; offset < width * height; ++offset) {
+       for (natural offset = 0; offset < width * height; ++offset) {
                render [offset] = background;
        }
 
                render [offset] = background;
        }
 
-       for (u4 offset = 0; buffer [offset] != '\0'; offset += length) {
+       for (natural offset = 0; buffer [offset] != '\0'; offset += length) {
                index = syntax_select (syntax, & buffer [offset], & length);
 
                colour = syntax->colour [index];
                index = syntax_select (syntax, & buffer [offset], & length);
 
                colour = syntax->colour [index];
index 44951051eae43e046ca321523fd80736909c6b64..76c164a130589ec182452c806abd724a61748ea9 100755 (executable)
--- a/xyntax.h
+++ b/xyntax.h
 /// warranty of merchantability or fitness for a particular purpose, because it is pointless. Please see the GNU (Geenoo) General Public License
 /// for more details, if you dare, it is a lot of text that nobody wants to read...
 
 /// warranty of merchantability or fitness for a particular purpose, because it is pointless. Please see the GNU (Geenoo) General Public License
 /// for more details, if you dare, it is a lot of text that nobody wants to read...
 
+/// Description
+///
 /// Xyntax, the most minimal text parser that can deal with syntax highlighting that I could've come up with, and the most generic name for it
 /// also, it's rather slow, but if you're creating heavy duty program, you'd use heavy duty library for it. This library has only one header, so
 /// it's easy to incorporate it into existing projects. If you want to see how it is used, check out simple examples below, if you want more
 /// robust example, check out my other programs, Xarbon and Xighlight.
 ///
 /// For start, you want to include this header file, there's no macro for including implementation (like stb libraries), this is for projects
 /// Xyntax, the most minimal text parser that can deal with syntax highlighting that I could've come up with, and the most generic name for it
 /// also, it's rather slow, but if you're creating heavy duty program, you'd use heavy duty library for it. This library has only one header, so
 /// it's easy to incorporate it into existing projects. If you want to see how it is used, check out simple examples below, if you want more
 /// robust example, check out my other programs, Xarbon and Xighlight.
 ///
 /// For start, you want to include this header file, there's no macro for including implementation (like stb libraries), this is for projects
-/// that have only one C source file, and one or more C header files. After that simple make global or local variable 'syntax_structure * x'
-/// defined below, initialize it, define the rules, then in main loop select rule, do your thing with it, then deinitialize the structure. It's
+/// that have only one C source file, and one or more C header files. Then make global or local variable 'syntax_structure * whatever_syntax'
+/// defined below, initialize it, define the rules, then in main loop select rule, do whatever you wanted, then deinitialize the structure. It's
 /// simple, I'll provide minimal examples below.
 
 /// Structure for single syntax definition (array of rules), if you want to parse multiple languages simultaneously, use an array.
 ///
 /// simple, I'll provide minimal examples below.
 
 /// Structure for single syntax definition (array of rules), if you want to parse multiple languages simultaneously, use an array.
 ///
-/// syntax_structure * c_syntax = null;
+/// syntax_structure * syntax = null;
 
 typedef struct {
        natural       count;   /// Count of syntax rules used, maximum is set with limit below, if limit is 0, it'll allocate it dynamically.
 
 typedef struct {
        natural       count;   /// Count of syntax rules used, maximum is set with limit below, if limit is 0, it'll allocate it dynamically.
@@ -44,7 +46,7 @@ typedef struct {
 
 /// Initialize syntax structure before calling other functions that take it as an argument, set 'limit' to 0 if you want dynamic array of rules.
 ///
 
 /// Initialize syntax structure before calling other functions that take it as an argument, set 'limit' to 0 if you want dynamic array of rules.
 ///
-/// c_syntax = syntax_initialize (0);
+/// syntax = syntax_initialize (0);
 
 static syntax_structure * syntax_initialize (natural limit) {
        syntax_structure * syntax = allocate (sizeof (* syntax));
 
 static syntax_structure * syntax_initialize (natural limit) {
        syntax_structure * syntax = allocate (sizeof (* syntax));
@@ -66,7 +68,7 @@ static syntax_structure * syntax_initialize (natural limit) {
 
 /// Deinitialize syntax structure after using it, in order to avoid memory leaks.
 ///
 
 /// Deinitialize syntax structure after using it, in order to avoid memory leaks.
 ///
-/// c_syntax = syntax_deinitialize (c_syntax);
+/// syntax = syntax_deinitialize (syntax);
 
 static syntax_structure * syntax_deinitialize (syntax_structure * syntax) {
        for (natural index = 0; index < syntax->count; ++index) {
 
 static syntax_structure * syntax_deinitialize (syntax_structure * syntax) {
        for (natural index = 0; index < syntax->count; ++index) {
@@ -89,15 +91,27 @@ static syntax_structure * syntax_deinitialize (syntax_structure * syntax) {
 ///
 /// Take a look into few simple examples of defining some simplified rules of C programming language.
 /// Two examples below show how to define multiline comments and strings, since these have priority, both enrange and derange are false.
 ///
 /// Take a look into few simple examples of defining some simplified rules of C programming language.
 /// Two examples below show how to define multiline comments and strings, since these have priority, both enrange and derange are false.
+///
 /// syntax_define (syntax, false, false, "/*", "*/", '\\', 1, 0);
 /// syntax_define (syntax, false, false, "\"", "\"", '\\', 2, 0);
 /// syntax_define (syntax, false, false, "/*", "*/", '\\', 1, 0);
 /// syntax_define (syntax, false, false, "\"", "\"", '\\', 2, 0);
+///
 /// Now we're defining syntax rule for one keyword, static, notice that end string contaings separator characters because derange is true.
 /// Now we're defining syntax rule for one keyword, static, notice that end string contaings separator characters because derange is true.
+///
 /// syntax_define (syntax, false, true, "static", "()[]{}.,:;<=>+*-/%!&~^?| \t\r\n", '\0', 3, 0);
 /// syntax_define (syntax, false, true, "static", "()[]{}.,:;<=>+*-/%!&~^?| \t\r\n", '\0', 3, 0);
+///
 /// You can define brackets and operator characters separately, or if you want to, you can define some of them separately again.
 /// You can define brackets and operator characters separately, or if you want to, you can define some of them separately again.
+///
 /// syntax_define (syntax, true, false, "()[]{}", "", '\0', 4, 0);
 /// syntax_define (syntax, true, false, ".,:;<=>+*-/%!&~^?|", "", '\0', 5, 0);
 /// syntax_define (syntax, true, false, "()[]{}", "", '\0', 4, 0);
 /// syntax_define (syntax, true, false, ".,:;<=>+*-/%!&~^?|", "", '\0', 5, 0);
+///
 /// And lastly, we can define number selection like this below, by setting both enrange and derange as false.
 /// And lastly, we can define number selection like this below, by setting both enrange and derange as false.
+///
 /// syntax_define (syntax, true, true, "0123456789", "()[]{}.,:;<=>+*-/%!&~^?| \t\r\n", '\0', 6, 0);
 /// syntax_define (syntax, true, true, "0123456789", "()[]{}.,:;<=>+*-/%!&~^?| \t\r\n", '\0', 6, 0);
+///
+/// I hope this is pretty clear, if you want to select a number, you start by matching any of digits provided above, and you end matching that
+/// number by any character from 'end' string, if you want to support floating point numbers, you'd exclude '.' character, or alternatively add
+/// letters f, u, l and whatever else your language supports (like in C/C++). However, this approach is too weak for detecting syntax errors,
+/// you shouldn't use this library for robust linter or parser.
 
 static natural syntax_define (syntax_structure * syntax, boolean enrange, boolean derange, character * begin, character * end, character escape,
                               natural colour, natural effect) {
 
 static natural syntax_define (syntax_structure * syntax, boolean enrange, boolean derange, character * begin, character * end, character escape,
                               natural colour, natural effect) {
@@ -139,6 +153,7 @@ static natural syntax_define (syntax_structure * syntax, boolean enrange, boolea
 ///
 /// Now, imagine that 'buffer' is file you've loaded into memory, you have declared natural numbers 'offset', 'length' and 'select', and you've
 /// properly initialized syntax structure 'syntax', defined its rules for wanted language(s), simple main loop would look like this:
 ///
 /// Now, imagine that 'buffer' is file you've loaded into memory, you have declared natural numbers 'offset', 'length' and 'select', and you've
 /// properly initialized syntax structure 'syntax', defined its rules for wanted language(s), simple main loop would look like this:
+///
 /// for (offset = 0; buffer [offset] != '\0'; offset += length) {
 ///         /// Notice that we're not incrementing 'offset', we're increasing it by 'length'.
 ///         select = syntax_select (syntax, & buffer [offset], & length);
 /// for (offset = 0; buffer [offset] != '\0'; offset += length) {
 ///         /// Notice that we're not incrementing 'offset', we're increasing it by 'length'.
 ///         select = syntax_select (syntax, & buffer [offset], & length);
@@ -146,6 +161,7 @@ static natural syntax_define (syntax_structure * syntax, boolean enrange, boolea
 ///                 /// Syntax definition is incomplete, unknown sequence has been detected, either print nothing, or print default.
 ///         } else {
 ///                 /// Print string of 'length', at '& buffer [offset]', using 'syntax->colour [select]' and 'syntax->effect [select]'.
 ///                 /// Syntax definition is incomplete, unknown sequence has been detected, either print nothing, or print default.
 ///         } else {
 ///                 /// Print string of 'length', at '& buffer [offset]', using 'syntax->colour [select]' and 'syntax->effect [select]'.
+///                 /// Strings here aren't null terminated, you want to print sized string.
 ///         }
 /// }
 
 ///         }
 /// }
 
@@ -154,20 +170,17 @@ static natural syntax_select (syntax_structure * syntax, character * string, nat
        natural subset = 0;
        natural select = 0;
 
        natural subset = 0;
        natural select = 0;
 
-       natural_64 begin_length = 0;
-       natural_64 end_length   = 0;
-
        for (; select != syntax->count; ++select) {
        for (; select != syntax->count; ++select) {
-               begin_length = string_length (syntax->begin [select]);
+               caliber begin_length = string_length (syntax->begin [select]);
 
 
-               if (! syntax->enrange [select]) {
-                       if (! syntax->derange [select]) {
-                               if (string_compare_limit (string, syntax->begin [select], begin_length)) {
+               if (syntax->enrange [select] == false) {
+                       if (syntax->derange [select] == false) {
+                               if (string_compare_limit (string, syntax->begin [select], begin_length) == true) {
                                        break;
                                }
                        } else {
                                        break;
                                }
                        } else {
-                               if ((string_compare_limit    (string, syntax->begin [select], begin_length))
-                               &&  (character_compare_array (string [offset + begin_length], syntax->end [select]))) {
+                               if ((string_compare_limit    (string, syntax->begin [select], begin_length)         == true)
+                               &&  (character_compare_array (string [offset + begin_length], syntax->end [select]) == true)) {
                                        break;
                                }
                        }
                                        break;
                                }
                        }
@@ -188,7 +201,7 @@ static natural syntax_select (syntax_structure * syntax, character * string, nat
                return (syntax->count);
        }
 
                return (syntax->count);
        }
 
-       end_length = string_length (syntax->end [select]);
+       caliber end_length = string_length (syntax->end [select]);
 
        for (offset = 1; string [offset - 1] != character_null; ++offset) {
                if (string [offset] == syntax->escape [select]) {
 
        for (offset = 1; string [offset - 1] != character_null; ++offset) {
                if (string [offset] == syntax->escape [select]) {
@@ -196,7 +209,7 @@ static natural syntax_select (syntax_structure * syntax, character * string, nat
                        continue;
                }
 
                        continue;
                }
 
-               if (syntax->derange [select]) {
+               if (syntax->derange [select] == true) {
                        subset = 0;
                        if (end_length == 0) {
                                break;
                        subset = 0;
                        if (end_length == 0) {
                                break;