diff --git a/Sources/iron/iron_armpack.c b/Sources/iron/iron_armpack.c index 2ddafeb4..fc993173 100644 --- a/Sources/iron/iron_armpack.c +++ b/Sources/iron/iron_armpack.c @@ -9,8 +9,8 @@ static const int PTR_SIZE = 8; static uint32_t di; // Decoded index static uint32_t ei; // Encoded index static uint32_t bottom; // Decoded bottom -static void *decoded; -static void *encoded; +static uint8_t *decoded; +static uint8_t *encoded; static uint32_t capacity; static uint32_t string_length; static uint32_t array_count; diff --git a/Sources/iron/iron_armpack.h b/Sources/iron/iron_armpack.h index e6889d3b..3e350ad2 100644 --- a/Sources/iron/iron_armpack.h +++ b/Sources/iron/iron_armpack.h @@ -6,6 +6,14 @@ #include +#ifdef __GNUC__ +#define PACK(__Declaration__) __Declaration__ __attribute__((__packed__)) +#endif + +#ifdef _MSC_VER +#define PACK(__Declaration__) __pragma(pack(push, 1)) __Declaration__ __pragma(pack(pop)) +#endif + void *armpack_decode(void *encoded, uint32_t len); void armpack_encode_start(void *encoded); diff --git a/Sources/zui/zui.h b/Sources/zui/zui.h index 867a1754..316db876 100644 --- a/Sources/zui/zui.h +++ b/Sources/zui/zui.h @@ -6,6 +6,7 @@ #include #include +#include "../iron/iron_armpack.h" #include "../g2/g2.h" #define ZUI_LAYOUT_VERTICAL 0 @@ -97,19 +98,19 @@ typedef struct zui_text_extract { char uncolored[128]; } zui_text_extract_t; -typedef struct zui_coloring { +typedef PACK(struct zui_coloring { uint32_t color; char **start; int start_count; char *end; bool separated; -}__attribute__((packed)) zui_coloring_t; +}) zui_coloring_t; -typedef struct zui_text_coloring { +typedef PACK(struct zui_text_coloring { zui_coloring_t **colorings; int colorings_count; uint32_t default_color; -}__attribute__((packed)) zui_text_coloring_t; +}) zui_text_coloring_t; typedef struct zui { bool is_scrolling; // Use to limit other activities diff --git a/Sources/zui/zui_nodes.h b/Sources/zui/zui_nodes.h index c488b3d0..cce0c7ec 100644 --- a/Sources/zui/zui_nodes.h +++ b/Sources/zui/zui_nodes.h @@ -1,6 +1,7 @@ #pragma once #include "zui.h" +#include "../iron/iron_armpack.h" typedef struct zui_canvas_control { float pan_x; @@ -8,7 +9,7 @@ typedef struct zui_canvas_control { float zoom; } zui_canvas_control_t; -typedef struct zui_node_socket { +typedef PACK(struct zui_node_socket { int id; int node_id; char *name; @@ -20,9 +21,9 @@ typedef struct zui_node_socket { float max; float precision; int display; -}__attribute__((packed)) zui_node_socket_t; +}) zui_node_socket_t; -typedef struct zui_node_button { +typedef PACK(struct zui_node_button { char *name; char *type; int output; @@ -34,9 +35,9 @@ typedef struct zui_node_button { float max; float precision; float height; -}__attribute__((packed)) zui_node_button_t; +}) zui_node_button_t; -typedef struct zui_node { +typedef PACK(struct zui_node { int id; char *name; char *type; @@ -50,17 +51,17 @@ typedef struct zui_node { zui_node_button_t **buttons; int buttons_count; int width; // float width -}__attribute__((packed)) zui_node_t; +}) zui_node_t; -typedef struct zui_node_link { +typedef PACK(struct zui_node_link { int id; int from_id; int from_socket; int to_id; int to_socket; -}__attribute__((packed)) zui_node_link_t; +}) zui_node_link_t; -typedef struct zui_node_canvas { +typedef PACK(struct zui_node_canvas { char *name; zui_node_t **nodes; int nodes_capacity; // 128 @@ -68,7 +69,7 @@ typedef struct zui_node_canvas { zui_node_link_t **links; int links_capacity; // 256 int links_count; -}__attribute__((packed)) zui_node_canvas_t; +}) zui_node_canvas_t; typedef struct zui_nodes { bool nodes_drag;