changeset 185:dfdd66825396

Merged in keep alive changes and mrjunejune changes.
author MrJuneJune <me@mrjunejune.com>
date Fri, 23 Jan 2026 22:22:30 -0800
parents d6ab5921fedc (diff) 8c74204fd362 (current diff)
children 8cf4ec5e2191 14cc84ba35a0
files
diffstat 6 files changed, 501 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/dowa/d_string.c	Fri Jan 23 22:20:35 2026 -0800
+++ b/dowa/d_string.c	Fri Jan 23 22:22:30 2026 -0800
@@ -133,7 +133,7 @@
 char *Dowa_String_Copy_Arena(char *from, Dowa_Arena *p_arena)
 {
   char *buffer = Dowa_Arena_Allocate(p_arena, sizeof(char*) * strlen(from) + 1);
-  if (buffer);
+  if (buffer)
     memcpy(buffer, from, strlen(from));
   buffer[strlen(from)] = '\0';
   return buffer;
@@ -160,3 +160,253 @@
   res[36] = '\0';
   return res;
 }
+
+// --- JSON Parser --- //
+
+static void json_skip_ws(const char *json, int32 *pos, int32 len)
+{
+  while (*pos < len && (json[*pos] == ' ' || json[*pos] == '\t' ||
+         json[*pos] == '\n' || json[*pos] == '\r'))
+    (*pos)++;
+}
+
+static char *json_parse_str(const char *json, int32 *pos, int32 len, Dowa_Arena *arena)
+{
+  if (*pos >= len || json[*pos] != '"')
+    return NULL;
+
+  (*pos)++;
+  int32 start = *pos;
+
+  while (*pos < len && json[*pos] != '"')
+    (*pos)++;
+
+  int32 slen = *pos - start;
+  char *str = arena ? Dowa_Arena_Allocate(arena, slen + 1) : malloc(slen + 1);
+  if (!str) return NULL;
+
+  int32 j = 0;
+  for (int32 i = start; i < *pos; i++)
+  {
+    if (json[i] == '\\' && i + 1 < *pos)
+    {
+      i++;
+      switch (json[i])
+      {
+        case 'n':  str[j++] = '\n'; break;
+        case 't':  str[j++] = '\t'; break;
+        case 'r':  str[j++] = '\r'; break;
+        case '\\': str[j++] = '\\'; break;
+        case '"':  str[j++] = '"';  break;
+        default:   str[j++] = json[i]; break;
+      }
+    }
+    else
+      str[j++] = json[i];
+  }
+  str[j] = '\0';
+
+  if (*pos < len && json[*pos] == '"')
+    (*pos)++;
+
+  return str;
+}
+
+// Forward declaration for recursion
+static Dowa_JSON_Value json_parse_val(const char *json, int32 *pos, int32 len, Dowa_Arena *arena);
+
+static Dowa_JSON_Entry *json_parse_obj(const char *json, int32 *pos, int32 len, Dowa_Arena *arena)
+{
+  if (*pos >= len || json[*pos] != '{')
+    return NULL;
+
+  (*pos)++;
+  Dowa_JSON_Entry *map = NULL;
+
+  while (*pos < len)
+  {
+    json_skip_ws(json, pos, len);
+
+    if (*pos >= len) break;
+    if (json[*pos] == '}') { (*pos)++; break; }
+    if (json[*pos] == ',') { (*pos)++; continue; }
+
+    char *key = json_parse_str(json, pos, len, arena);
+    if (!key) break;
+
+    json_skip_ws(json, pos, len);
+    if (*pos >= len || json[*pos] != ':') break;
+    (*pos)++;
+
+    Dowa_JSON_Value val = json_parse_val(json, pos, len, arena);
+
+    if (arena)
+      Dowa_HashMap_Push_Arena(map, key, val, arena);
+    else
+      Dowa_HashMap_Push(map, key, val);
+  }
+
+  return map;
+}
+
+static Dowa_JSON_Value *json_parse_arr(const char *json, int32 *pos, int32 len, Dowa_Arena *arena)
+{
+  if (*pos >= len || json[*pos] != '[')
+    return NULL;
+
+  (*pos)++;
+  Dowa_JSON_Value *arr = NULL;
+
+  while (*pos < len)
+  {
+    json_skip_ws(json, pos, len);
+
+    if (*pos >= len) break;
+    if (json[*pos] == ']') { (*pos)++; break; }
+    if (json[*pos] == ',') { (*pos)++; continue; }
+
+    Dowa_JSON_Value val = json_parse_val(json, pos, len, arena);
+
+    if (arena)
+      Dowa_Array_Push_Arena(arr, val, arena);
+    else
+      Dowa_Array_Push(arr, val);
+  }
+
+  return arr;
+}
+
+static Dowa_JSON_Value json_parse_val(const char *json, int32 *pos, int32 len, Dowa_Arena *arena)
+{
+  Dowa_JSON_Value val = {0};
+  json_skip_ws(json, pos, len);
+
+  if (*pos >= len)
+  {
+    val.type = DOWA_JSON_NULL;
+    return val;
+  }
+
+  char c = json[*pos];
+
+  // String
+  if (c == '"')
+  {
+    val.type = DOWA_JSON_STRING;
+    val.str_val = json_parse_str(json, pos, len, arena);
+    return val;
+  }
+
+  // Object
+  if (c == '{')
+  {
+    val.type = DOWA_JSON_OBJECT;
+    val.object_val = json_parse_obj(json, pos, len, arena);
+    return val;
+  }
+
+  // Array
+  if (c == '[')
+  {
+    val.type = DOWA_JSON_ARRAY;
+    val.array_val = json_parse_arr(json, pos, len, arena);
+    return val;
+  }
+
+  // Number
+  if (c == '-' || (c >= '0' && c <= '9'))
+  {
+    val.type = DOWA_JSON_NUMBER;
+    int32 start = *pos;
+    while (*pos < len && (json[*pos] == '-' || json[*pos] == '+' ||
+           json[*pos] == '.' || json[*pos] == 'e' || json[*pos] == 'E' ||
+           (json[*pos] >= '0' && json[*pos] <= '9')))
+      (*pos)++;
+
+    char tmp[64];
+    int32 nlen = *pos - start;
+    if (nlen >= 64) nlen = 63;
+    memcpy(tmp, &json[start], nlen);
+    tmp[nlen] = '\0';
+    val.num_val = atof(tmp);
+    return val;
+  }
+
+  // true
+  if (c == 't' && *pos + 4 <= len && memcmp(&json[*pos], "true", 4) == 0)
+  {
+    val.type = DOWA_JSON_BOOL;
+    val.bool_val = TRUE;
+    *pos += 4;
+    return val;
+  }
+
+  // false
+  if (c == 'f' && *pos + 5 <= len && memcmp(&json[*pos], "false", 5) == 0)
+  {
+    val.type = DOWA_JSON_BOOL;
+    val.bool_val = FALSE;
+    *pos += 5;
+    return val;
+  }
+
+  // null
+  if (c == 'n' && *pos + 4 <= len && memcmp(&json[*pos], "null", 4) == 0)
+  {
+    val.type = DOWA_JSON_NULL;
+    *pos += 4;
+    return val;
+  }
+
+  val.type = DOWA_JSON_NULL;
+  return val;
+}
+
+Dowa_JSON_Value Dowa_JSON_Parse(const char *json, int32 length, Dowa_Arena *p_arena)
+{
+  Dowa_JSON_Value val = {0};
+  if (!json || length <= 0)
+  {
+    val.type = DOWA_JSON_NULL;
+    return val;
+  }
+
+  int32 pos = 0;
+  return json_parse_val(json, &pos, length, p_arena);
+}
+
+Dowa_JSON_Value *Dowa_JSON_Get(Dowa_JSON_Entry *map, const char *key)
+{
+  if (!map || !key)
+    return NULL;
+
+  void *kv = Dowa_HashMap_Get_Ptr(map, key);
+  if (!kv)
+    return NULL;
+
+  return &((Dowa_JSON_Entry *)kv)->value;
+}
+
+char *Dowa_JSON_Get_String(Dowa_JSON_Entry *map, const char *key)
+{
+  Dowa_JSON_Value *val = Dowa_JSON_Get(map, key);
+  if (!val || val->type != DOWA_JSON_STRING)
+    return NULL;
+  return val->str_val;
+}
+
+double Dowa_JSON_Get_Number(Dowa_JSON_Entry *map, const char *key)
+{
+  Dowa_JSON_Value *val = Dowa_JSON_Get(map, key);
+  if (!val || val->type != DOWA_JSON_NUMBER)
+    return 0.0;
+  return val->num_val;
+}
+
+boolean Dowa_JSON_Get_Bool(Dowa_JSON_Entry *map, const char *key)
+{
+  Dowa_JSON_Value *val = Dowa_JSON_Get(map, key);
+  if (!val || val->type != DOWA_JSON_BOOL)
+    return FALSE;
+  return val->bool_val;
+}
--- a/dowa/dowa.h	Fri Jan 23 22:20:35 2026 -0800
+++ b/dowa/dowa.h	Fri Jan 23 22:22:30 2026 -0800
@@ -206,6 +206,35 @@
 DLAPI char       *Dowa_String_Find_Char(const char *p_from, int c, int32 from_length);
 DLAPI char       *Dowa_String_UUID(uint32 seed, void *buffer);
 
+// --- JSON --- //
+typedef enum {
+  DOWA_JSON_NULL,
+  DOWA_JSON_BOOL,
+  DOWA_JSON_NUMBER,
+  DOWA_JSON_STRING,
+  DOWA_JSON_ARRAY,
+  DOWA_JSON_OBJECT
+} Dowa_JSON_Type;
+
+typedef struct Dowa_JSON_Value {
+  Dowa_JSON_Type type;
+  union {
+    boolean bool_val;
+    double  num_val;
+    char   *str_val;
+    struct Dowa_JSON_Value *array_val;  // Dowa array of Dowa_JSON_Value
+    void   *object_val;                 // Dowa_JSON_Entry* hashmap
+  };
+} Dowa_JSON_Value;
+
+typedef Dowa_KV(char*, Dowa_JSON_Value) Dowa_JSON_Entry;
+
+DLAPI Dowa_JSON_Value  Dowa_JSON_Parse(const char *json, int32 length, Dowa_Arena *p_arena);
+DLAPI Dowa_JSON_Value *Dowa_JSON_Get(Dowa_JSON_Entry *map, const char *key);
+DLAPI char            *Dowa_JSON_Get_String(Dowa_JSON_Entry *map, const char *key);
+DLAPI double           Dowa_JSON_Get_Number(Dowa_JSON_Entry *map, const char *key);
+DLAPI boolean          Dowa_JSON_Get_Bool(Dowa_JSON_Entry *map, const char *key);
+
 // --- Math --- //
 DLAPI uint32      Dowa_Math_Random_Uint32(uint32 seed_number);
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/npc/BUILD	Fri Jan 23 22:22:30 2026 -0800
@@ -0,0 +1,7 @@
+load("@rules_cc//cc:cc_binary.bzl", "cc_binary")
+
+cc_binary(
+  name = "npc",
+  srcs = ["main.c"],
+  deps = ["//seobeo:seobeo_tcp_server"],
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/npc/main.c	Fri Jan 23 22:22:30 2026 -0800
@@ -0,0 +1,146 @@
+#include "seobeo/seobeo.h"
+#include <string.h>
+#include <time.h>
+
+static _Atomic uint32_t counter = 0;
+
+static void build_response(char *out, size_t size, const char *id, const char *result) {
+  snprintf(out, size, "{\"jsonrpc\":\"2.0\",\"id\":%s,\"result\":%s}", id, result);
+}
+
+static void build_error(char *out, size_t size, const char *id, int code, const char *msg) {
+  snprintf(out, size,
+    "{\"jsonrpc\":\"2.0\",\"id\":%s,\"error\":{\"code\":%d,\"message\":\"%s\"}}",
+    id, code, msg);
+}
+
+static void handle_initialize(char *out, size_t size, const char *id) {
+  const char *result = "{"
+    "\"protocolVersion\":\"2024-11-05\","
+    "\"capabilities\":{\"tools\":{}},"
+    "\"serverInfo\":{\"name\":\"simple-mcp\",\"version\":\"1.0.0\"}"
+  "}";
+  build_response(out, size, id, result);
+}
+
+static void handle_tools_list(char *out, size_t size, const char *id) {
+  const char *result = "{"
+    "\"tools\":["
+      "{"
+        "\"name\":\"get_time\","
+        "\"description\":\"Get current Unix timestamp\","
+        "\"inputSchema\":{\"type\":\"object\",\"properties\":{}}"
+      "},"
+      "{"
+        "\"name\":\"get_counter\","
+        "\"description\":\"Get and increment a counter\","
+        "\"inputSchema\":{\"type\":\"object\",\"properties\":{}}"
+      "}"
+    "]"
+  "}";
+  build_response(out, size, id, result);
+}
+
+static void handle_tools_call(char *out, size_t size, const char *id, Dowa_JSON_Entry *json) {
+  Dowa_JSON_Value *params_val = Dowa_JSON_Get(json, "params");
+  if (!params_val || params_val->type != DOWA_JSON_OBJECT)
+  {
+    build_error(out, size, id, -32602, "Missing params");
+    return;
+  }
+
+  Dowa_JSON_Entry *params = (Dowa_JSON_Entry *)params_val->object_val;
+  char *tool_name = Dowa_JSON_Get_String(params, "name");
+
+  if (!tool_name) {
+    build_error(out, size, id, -32602, "Missing tool name");
+    return;
+  }
+
+  char result[256];
+  if (strcmp(tool_name, "get_time") == 0) {
+    time_t now = time(NULL);
+    snprintf(result, sizeof(result),
+      "{\"content\":[{\"type\":\"text\",\"text\":\"Current timestamp: %ld\"}]}",
+      (long)now);
+  } else if (strcmp(tool_name, "get_counter") == 0) {
+    uint32_t val = ++counter;
+    snprintf(result, sizeof(result),
+      "{\"content\":[{\"type\":\"text\",\"text\":\"Counter value: %u\"}]}",
+      val);
+  } else {
+    build_error(out, size, id, -32601, "Unknown tool");
+    return;
+  }
+
+  build_response(out, size, id, result);
+}
+
+Seobeo_Request_Entry* HandleMCP(Seobeo_Request_Entry *req, Dowa_Arena *arena)
+{
+  Seobeo_Request_Entry *resp = NULL;
+
+  void *body_kv = Dowa_HashMap_Get_Ptr(req, "Body");
+  if (!body_kv)
+  {
+    char *err = "{\"jsonrpc\":\"2.0\",\"id\":null,\"error\":{\"code\":-32700,\"message\":\"No body\"}}";
+    Dowa_HashMap_Push_Arena(resp, "status", "400", arena);
+    Dowa_HashMap_Push_Arena(resp, "content-type", "application/json", arena);
+    Dowa_HashMap_Push_Arena(resp, "body", err, arena);
+    return resp;
+  }
+
+  const char *body = ((Seobeo_Request_Entry*)body_kv)->value;
+  int32 body_len = strlen(body);
+
+  Dowa_JSON_Value parsed = Dowa_JSON_Parse(body, body_len, arena);
+  if (parsed.type != DOWA_JSON_OBJECT || !parsed.object_val)
+  {
+    char *err = "{\"jsonrpc\":\"2.0\",\"id\":null,\"error\":{\"code\":-32700,\"message\":\"Parse error\"}}";
+    Dowa_HashMap_Push_Arena(resp, "status", "400", arena);
+    Dowa_HashMap_Push_Arena(resp, "content-type", "application/json", arena);
+    Dowa_HashMap_Push_Arena(resp, "body", err, arena);
+    return resp;
+  }
+
+  Dowa_JSON_Entry *json = (Dowa_JSON_Entry *)parsed.object_val;
+  char *method = Dowa_JSON_Get_String(json, "method");
+  Dowa_JSON_Value *id_val = Dowa_JSON_Get(json, "id");
+  char id_buf[32] = "null";
+  if (id_val)
+  {
+    if (id_val->type == DOWA_JSON_NUMBER)
+      snprintf(id_buf, sizeof(id_buf), "%.0f", id_val->num_val);
+    else if (id_val->type == DOWA_JSON_STRING)
+      snprintf(id_buf, sizeof(id_buf), "\"%s\"", id_val->str_val);
+  }
+
+  char *response = Dowa_Arena_Allocate(arena, 2048);
+
+  if (!method)
+    build_error(response, 2048, id_buf, -32600, "Missing method");
+  else if (strcmp(method, "initialize") == 0)
+    handle_initialize(response, 2048, id_buf);
+  else if (strcmp(method, "tools/list") == 0)
+    handle_tools_list(response, 2048, id_buf);
+  else if (strcmp(method, "tools/call") == 0)
+    handle_tools_call(response, 2048, id_buf, json);
+  else if (strcmp(method, "notifications/initialized") == 0)
+    snprintf(response, 2048, "{\"jsonrpc\":\"2.0\",\"id\":%s,\"result\":{}}", id_buf);
+  else
+    build_error(response, 2048, id_buf, -32601, "Method not found");
+
+  Dowa_HashMap_Push_Arena(resp, "status", "200", arena);
+  Dowa_HashMap_Push_Arena(resp, "content-type", "application/json", arena);
+  Dowa_HashMap_Push_Arena(resp, "body", response, arena);
+  return resp;
+}
+
+int main(void) {
+  Seobeo_Router_Init();
+  Seobeo_Router_Register("POST", "/mcp", HandleMCP);
+
+  Seobeo_Log(SEOBEO_INFO, "MCP server running on http://localhost:8080/mcp\n");
+  Seobeo_Web_Server_Start(NULL, "8080", SEOBEO_MODE_FORK, 0);
+  return 0;
+}
--- a/playground/main.c	Fri Jan 23 22:20:35 2026 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-int main()
-{
-  int a = 0;
-  a += 1;
-  return a;
-}
--- a/tags	Fri Jan 23 22:20:35 2026 -0800
+++ b/tags	Fri Jan 23 22:22:30 2026 -0800
@@ -127,6 +127,10 @@
 AccessFlags	third_party/libuv/src/win/winapi.h	/^  ACCESS_MASK AccessFlags;$/;"	m	struct:_FILE_ACCESS_INFORMATION	typeref:typename:ACCESS_MASK
 AccessInformation	third_party/libuv/src/win/winapi.h	/^  FILE_ACCESS_INFORMATION    AccessInformation;$/;"	m	struct:_FILE_ALL_INFORMATION	typeref:typename:FILE_ACCESS_INFORMATION
 ActualAvailableAllocationUnits	third_party/libuv/src/win/winapi.h	/^  LARGE_INTEGER ActualAvailableAllocationUnits;$/;"	m	struct:_FILE_FS_FULL_SIZE_INFORMATION	typeref:typename:LARGE_INTEGER
+AddPadding	third_party/raylib/custom.h	/^Rectangle AddPadding(Rectangle rect, float padding);$/;"	p	typeref:typename:Rectangle
+AddPaddingAll	third_party/raylib/custom.h	/^Rectangle AddPaddingAll(Rectangle rect, float top, float right, float down, float left);$/;"	p	typeref:typename:Rectangle
+AddPaddingHorizontal	third_party/raylib/custom.h	/^Rectangle AddPaddingHorizontal(Rectangle rect, float padding);$/;"	p	typeref:typename:Rectangle
+AddPaddingVertical	third_party/raylib/custom.h	/^Rectangle AddPaddingVertical(Rectangle rect, float padding);$/;"	p	typeref:typename:Rectangle
 Address	third_party/libuv/src/win/winsock.h	/^    struct sockaddr* Address;$/;"	m	struct:_AFD_RECV_DATAGRAM_INFO	typeref:struct:sockaddr *
 AddressLength	third_party/libuv/src/win/winsock.h	/^    int* AddressLength;$/;"	m	struct:_AFD_RECV_DATAGRAM_INFO	typeref:typename:int *
 AfdFlags	third_party/libuv/src/win/winsock.h	/^    ULONG AfdFlags;$/;"	m	struct:_AFD_RECV_DATAGRAM_INFO	typeref:typename:ULONG
@@ -557,6 +561,7 @@
 ColorNormalize	third_party/raylib/raylib-5.5_linux_amd64/include/raylib.h	/^RLAPI Vector4 ColorNormalize(Color color);                                  \/\/ Get Color norma/;"	p	typeref:typename:RLAPI Vector4
 ColorNormalize	third_party/raylib/raylib-5.5_macos/include/raylib.h	/^RLAPI Vector4 ColorNormalize(Color color);                                  \/\/ Get Color norma/;"	p	typeref:typename:RLAPI Vector4
 ColorNormalize	third_party/raylib/raylib-5.5_win64/include/raylib.h	/^RLAPI Vector4 ColorNormalize(Color color);                                  \/\/ Get Color norma/;"	p	typeref:typename:RLAPI Vector4
+ColorScheme	third_party/raylib/custom.h	/^} ColorScheme;$/;"	t	typeref:struct:__anon7f8247c10108
 ColorTint	third_party/raylib/include/raylib.h	/^RLAPI Color ColorTint(Color color, Color tint);                             \/\/ Get color multi/;"	p	typeref:typename:RLAPI Color
 ColorTint	third_party/raylib/raylib-5.5_linux_amd64/include/raylib.h	/^RLAPI Color ColorTint(Color color, Color tint);                             \/\/ Get color multi/;"	p	typeref:typename:RLAPI Color
 ColorTint	third_party/raylib/raylib-5.5_macos/include/raylib.h	/^RLAPI Color ColorTint(Color color, Color tint);                             \/\/ Get color multi/;"	p	typeref:typename:RLAPI Color
@@ -674,8 +679,8 @@
 DecompressData	third_party/raylib/raylib-5.5_linux_amd64/include/raylib.h	/^RLAPI unsigned char *DecompressData(const unsigned char *compData, int compDataSize, int *dataSi/;"	p	typeref:typename:RLAPI unsigned char *
 DecompressData	third_party/raylib/raylib-5.5_macos/include/raylib.h	/^RLAPI unsigned char *DecompressData(const unsigned char *compData, int compDataSize, int *dataSi/;"	p	typeref:typename:RLAPI unsigned char *
 DecompressData	third_party/raylib/raylib-5.5_win64/include/raylib.h	/^RLAPI unsigned char *DecompressData(const unsigned char *compData, int compDataSize, int *dataSi/;"	p	typeref:typename:RLAPI unsigned char *
-DecreaseFontSize	third_party/raylib/custom.h	/^void DecreaseFontSize();$/;"	p	typeref:typename:void
-DefaultBehaviours	third_party/raylib/custom.h	/^void DefaultBehaviours();$/;"	p	typeref:typename:void
+DecreaseFontSize	third_party/raylib/custom.h	/^void DecreaseFontSize(void);$/;"	p	typeref:typename:void
+DefaultBehaviours	third_party/raylib/custom.h	/^void DefaultBehaviours(void);$/;"	p	typeref:typename:void
 DefaultQuotaLimit	third_party/libuv/src/win/winapi.h	/^  LARGE_INTEGER DefaultQuotaLimit;$/;"	m	struct:_FILE_FS_CONTROL_INFORMATION	typeref:typename:LARGE_INTEGER
 DefaultQuotaThreshold	third_party/libuv/src/win/winapi.h	/^  LARGE_INTEGER DefaultQuotaThreshold;$/;"	m	struct:_FILE_FS_CONTROL_INFORMATION	typeref:typename:LARGE_INTEGER
 Deita_Column_Type	deita/deita.h	/^} Deita_Column_Type;$/;"	t	typeref:enum:__anonce31f2d80203
@@ -1012,6 +1017,8 @@
 DrawRectangleRoundedLinesEx	third_party/raylib/raylib-5.5_linux_amd64/include/raylib.h	/^RLAPI void DrawRectangleRoundedLinesEx(Rectangle rec, float roundness, int segments, float lineT/;"	p	typeref:typename:RLAPI void
 DrawRectangleRoundedLinesEx	third_party/raylib/raylib-5.5_macos/include/raylib.h	/^RLAPI void DrawRectangleRoundedLinesEx(Rectangle rec, float roundness, int segments, float lineT/;"	p	typeref:typename:RLAPI void
 DrawRectangleRoundedLinesEx	third_party/raylib/raylib-5.5_win64/include/raylib.h	/^RLAPI void DrawRectangleRoundedLinesEx(Rectangle rec, float roundness, int segments, float lineT/;"	p	typeref:typename:RLAPI void
+DrawRectangleSelectiveRounded	third_party/raylib/custom.h	/^void DrawRectangleSelectiveRounded(Rectangle rec, float radius, int segments, Color color,$/;"	p	typeref:typename:void
+DrawRectangleSelectiveRoundedLines	third_party/raylib/custom.h	/^void DrawRectangleSelectiveRoundedLines(Rectangle rec, float radius, int segments, Color color,$/;"	p	typeref:typename:void
 DrawRectangleV	third_party/raylib/include/raylib.h	/^RLAPI void DrawRectangleV(Vector2 position, Vector2 size, Color color);                         /;"	p	typeref:typename:RLAPI void
 DrawRectangleV	third_party/raylib/raylib-5.5_linux_amd64/include/raylib.h	/^RLAPI void DrawRectangleV(Vector2 position, Vector2 size, Color color);                         /;"	p	typeref:typename:RLAPI void
 DrawRectangleV	third_party/raylib/raylib-5.5_macos/include/raylib.h	/^RLAPI void DrawRectangleV(Vector2 position, Vector2 size, Color color);                         /;"	p	typeref:typename:RLAPI void
@@ -1147,6 +1154,7 @@
 DriverInPath	third_party/libuv/src/win/winapi.h	/^  BOOLEAN DriverInPath;$/;"	m	struct:_FILE_FS_DRIVER_PATH_INFORMATION	typeref:typename:BOOLEAN
 DriverName	third_party/libuv/src/win/winapi.h	/^  WCHAR   DriverName[1];$/;"	m	struct:_FILE_FS_DRIVER_PATH_INFORMATION	typeref:typename:WCHAR[1]
 DriverNameLength	third_party/libuv/src/win/winapi.h	/^  ULONG   DriverNameLength;$/;"	m	struct:_FILE_FS_DRIVER_PATH_INFORMATION	typeref:typename:ULONG
+DropdownTextBoxConfig	third_party/raylib/custom.h	/^} DropdownTextBoxConfig;$/;"	t	typeref:struct:__anon7f8247c10308
 ENABLE_EXTENDED_FLAGS	third_party/libuv/src/win/winapi.h	/^# define ENABLE_EXTENDED_FLAGS /;"	d
 ENABLE_INSERT_MODE	third_party/libuv/src/win/winapi.h	/^# define ENABLE_INSERT_MODE /;"	d
 ENABLE_QUICK_EDIT_MODE	third_party/libuv/src/win/winapi.h	/^# define ENABLE_QUICK_EDIT_MODE /;"	d
@@ -3093,7 +3101,7 @@
 ImageToPOT	third_party/raylib/raylib-5.5_macos/include/raylib.h	/^RLAPI void ImageToPOT(Image *image, Color fill);                                                /;"	p	typeref:typename:RLAPI void
 ImageToPOT	third_party/raylib/raylib-5.5_win64/include/raylib.h	/^RLAPI void ImageToPOT(Image *image, Color fill);                                                /;"	p	typeref:typename:RLAPI void
 InboundQuota	third_party/libuv/src/win/winapi.h	/^  ULONG InboundQuota;$/;"	m	struct:_FILE_PIPE_LOCAL_INFORMATION	typeref:typename:ULONG
-IncreaseFontSize	third_party/raylib/custom.h	/^void IncreaseFontSize();$/;"	p	typeref:typename:void
+IncreaseFontSize	third_party/raylib/custom.h	/^void IncreaseFontSize(void);$/;"	p	typeref:typename:void
 IndexNumber	third_party/libuv/src/win/winapi.h	/^  LARGE_INTEGER IndexNumber;$/;"	m	struct:_FILE_INTERNAL_INFORMATION	typeref:typename:LARGE_INTEGER
 Information	third_party/libuv/src/win/winapi.h	/^  ULONG_PTR Information;$/;"	m	struct:_IO_STATUS_BLOCK	typeref:typename:ULONG_PTR
 InheritedFromUniqueProcessId	third_party/libuv/src/win/winapi.h	/^  ULONG_PTR InheritedFromUniqueProcessId;$/;"	m	struct:_PROCESS_BASIC_INFORMATION	typeref:typename:ULONG_PTR
@@ -4719,6 +4727,15 @@
 PollInputEvents	third_party/raylib/raylib-5.5_macos/include/raylib.h	/^RLAPI void PollInputEvents(void);                                 \/\/ Register all input events$/;"	p	typeref:typename:RLAPI void
 PollInputEvents	third_party/raylib/raylib-5.5_win64/include/raylib.h	/^RLAPI void PollInputEvents(void);                                 \/\/ Register all input events$/;"	p	typeref:typename:RLAPI void
 PositionInformation	third_party/libuv/src/win/winapi.h	/^  FILE_POSITION_INFORMATION  PositionInformation;$/;"	m	struct:_FILE_ALL_INFORMATION	typeref:typename:FILE_POSITION_INFORMATION
+PostDog_DarkColorScheme	third_party/raylib/custom.h	/^ColorScheme PostDog_DarkColorScheme(void);$/;"	p	typeref:typename:ColorScheme
+PostDog_DefaultColorScheme	third_party/raylib/custom.h	/^ColorScheme PostDog_DefaultColorScheme(void);$/;"	p	typeref:typename:ColorScheme
+PostDog_DropdownTextBox	third_party/raylib/custom.h	/^boolean PostDog_DropdownTextBox(Rectangle bounds, DropdownTextBoxConfig config);$/;"	p	typeref:typename:boolean
+PostDog_InitColorScheme	third_party/raylib/custom.h	/^void PostDog_InitColorScheme(void);$/;"	p	typeref:typename:void
+PostDog_SetColorScheme	third_party/raylib/custom.h	/^void PostDog_SetColorScheme(ColorScheme scheme);$/;"	p	typeref:typename:void
+PostDog_SplitPanel	third_party/raylib/custom.h	/^void PostDog_SplitPanel(Rectangle bounds, SplitPanelConfig config,$/;"	p	typeref:typename:void
+PostDog_SplitPanelDraw	third_party/raylib/custom.h	/^void PostDog_SplitPanelDraw(Rectangle bounds, SplitPanelConfig config);$/;"	p	typeref:typename:void
+PostDog_TabBar	third_party/raylib/custom.h	/^boolean PostDog_TabBar(Rectangle bounds, TabConfig config);$/;"	p	typeref:typename:boolean
+PostDog_TabBarSimple	third_party/raylib/custom.h	/^boolean PostDog_TabBarSimple(Rectangle bounds, const char **labels, int count, int *active_tab);$/;"	p	typeref:typename:boolean
 PrintNameLength	third_party/libuv/src/win/winapi.h	/^      USHORT PrintNameLength;$/;"	m	struct:_REPARSE_DATA_BUFFER::__anon941c3301010a::__anon941c33010208	typeref:typename:USHORT
 PrintNameLength	third_party/libuv/src/win/winapi.h	/^      USHORT PrintNameLength;$/;"	m	struct:_REPARSE_DATA_BUFFER::__anon941c3301010a::__anon941c33010308	typeref:typename:USHORT
 PrintNameOffset	third_party/libuv/src/win/winapi.h	/^      USHORT PrintNameOffset;$/;"	m	struct:_REPARSE_DATA_BUFFER::__anon941c3301010a::__anon941c33010208	typeref:typename:USHORT
@@ -7423,6 +7440,7 @@
 Seobeo_WebSocket_Close	seobeo/seobeo_internal.h	/^extern int32                     Seobeo_WebSocket_Close(Seobeo_WebSocket *p_ws, uint16 code, con/;"	p	typeref:typename:int32
 Seobeo_WebSocket_Connect	seobeo/seobeo.h	/^extern Seobeo_WebSocket         *Seobeo_WebSocket_Connect(const char *url);$/;"	p	typeref:typename:Seobeo_WebSocket *
 Seobeo_WebSocket_Connect	seobeo/seobeo_internal.h	/^extern Seobeo_WebSocket         *Seobeo_WebSocket_Connect(const char *url);$/;"	p	typeref:typename:Seobeo_WebSocket *
+Seobeo_WebSocket_Connect_With_Headers	seobeo/seobeo.h	/^extern Seobeo_WebSocket         *Seobeo_WebSocket_Connect_With_Headers(const char *url, const ch/;"	p	typeref:typename:Seobeo_WebSocket *
 Seobeo_WebSocket_Destroy	seobeo/seobeo.h	/^extern void                      Seobeo_WebSocket_Destroy(Seobeo_WebSocket *p_ws);$/;"	p	typeref:typename:void
 Seobeo_WebSocket_Destroy	seobeo/seobeo_internal.h	/^extern void                      Seobeo_WebSocket_Destroy(Seobeo_WebSocket *p_ws);$/;"	p	typeref:typename:void
 Seobeo_WebSocket_Mask_Data	seobeo/seobeo_internal.h	/^extern void                      Seobeo_WebSocket_Mask_Data(uint8 *data, size_t length, const ui/;"	p	typeref:typename:void
@@ -7724,6 +7742,7 @@
 Sound	third_party/raylib/raylib-5.5_macos/include/raylib.h	/^} Sound;$/;"	t	typeref:struct:Sound
 Sound	third_party/raylib/raylib-5.5_win64/include/raylib.h	/^typedef struct Sound {$/;"	s
 Sound	third_party/raylib/raylib-5.5_win64/include/raylib.h	/^} Sound;$/;"	t	typeref:struct:Sound
+SplitPanelConfig	third_party/raylib/custom.h	/^} SplitPanelConfig;$/;"	t	typeref:struct:__anon7f8247c10408
 StandardInformation	third_party/libuv/src/win/winapi.h	/^  FILE_STANDARD_INFORMATION  StandardInformation;$/;"	m	struct:_FILE_ALL_INFORMATION	typeref:typename:FILE_STANDARD_INFORMATION
 StartAutomationEventRecording	third_party/raylib/include/raylib.h	/^RLAPI void StartAutomationEventRecording(void);                                         \/\/ Sta/;"	p	typeref:typename:RLAPI void
 StartAutomationEventRecording	third_party/raylib/raylib-5.5_linux_amd64/include/raylib.h	/^RLAPI void StartAutomationEventRecording(void);                                         \/\/ Sta/;"	p	typeref:typename:RLAPI void
@@ -7878,6 +7897,7 @@
 TRACELOGD	third_party/raylib/raylib-5.5_macos/include/rlgl.h	/^    #define TRACELOGD(/;"	d
 TRACELOGD	third_party/raylib/raylib-5.5_win64/include/rlgl.h	/^    #define TRACELOGD(/;"	d
 TRUE	dowa/dowa.h	/^#define TRUE /;"	d
+TabConfig	third_party/raylib/custom.h	/^} TabConfig;$/;"	t	typeref:struct:__anon7f8247c10208
 TakeScreenshot	third_party/raylib/include/raylib.h	/^RLAPI void TakeScreenshot(const char *fileName);                  \/\/ Takes a screenshot of cur/;"	p	typeref:typename:RLAPI void
 TakeScreenshot	third_party/raylib/raylib-5.5_linux_amd64/include/raylib.h	/^RLAPI void TakeScreenshot(const char *fileName);                  \/\/ Takes a screenshot of cur/;"	p	typeref:typename:RLAPI void
 TakeScreenshot	third_party/raylib/raylib-5.5_macos/include/raylib.h	/^RLAPI void TakeScreenshot(const char *fileName);                  \/\/ Takes a screenshot of cur/;"	p	typeref:typename:RLAPI void
@@ -9174,6 +9194,7 @@
 Vector4Zeros	third_party/raylib/raylib-5.5_linux_amd64/include/raymath.h	/^static constexpr Vector4 Vector4Zeros = { 0, 0, 0, 0 };$/;"	v	typeref:typename:constexpr Vector4
 Vector4Zeros	third_party/raylib/raylib-5.5_macos/include/raymath.h	/^static constexpr Vector4 Vector4Zeros = { 0, 0, 0, 0 };$/;"	v	typeref:typename:constexpr Vector4
 Vector4Zeros	third_party/raylib/raylib-5.5_win64/include/raymath.h	/^static constexpr Vector4 Vector4Zeros = { 0, 0, 0, 0 };$/;"	v	typeref:typename:constexpr Vector4
+VerticalSplit	third_party/raylib/custom.h	/^Rectangle VerticalSplit(Rectangle container, float ratio);$/;"	p	typeref:typename:Rectangle
 VolumeCreationTime	third_party/libuv/src/win/winapi.h	/^  LARGE_INTEGER VolumeCreationTime;$/;"	m	struct:_FILE_FS_VOLUME_INFORMATION	typeref:typename:LARGE_INTEGER
 VolumeLabel	third_party/libuv/src/win/winapi.h	/^  WCHAR         VolumeLabel[1];$/;"	m	struct:_FILE_FS_VOLUME_INFORMATION	typeref:typename:WCHAR[1]
 VolumeLabel	third_party/libuv/src/win/winapi.h	/^  WCHAR VolumeLabel[1];$/;"	m	struct:_FILE_FS_LABEL_INFORMATION	typeref:typename:WCHAR[1]
@@ -9397,6 +9418,10 @@
 __anon7f1219f40408	dowa/stb_ds.h	/^{$/;"	s
 __anon7f1219f40508	dowa/stb_ds.h	/^typedef struct { int key,b,c,d; } stbds_struct;$/;"	s
 __anon7f1219f40608	dowa/stb_ds.h	/^typedef struct { int key[2],b,c,d; } stbds_struct2;$/;"	s
+__anon7f8247c10108	third_party/raylib/custom.h	/^typedef struct {$/;"	s
+__anon7f8247c10208	third_party/raylib/custom.h	/^typedef struct {$/;"	s
+__anon7f8247c10308	third_party/raylib/custom.h	/^typedef struct {$/;"	s
+__anon7f8247c10408	third_party/raylib/custom.h	/^typedef struct {$/;"	s
 __anon82503da00108	dowa/dowa.h	/^typedef struct {$/;"	s
 __anon82503da00203	dowa/dowa.h	/^typedef enum {$/;"	g
 __anon82503da00308	dowa/dowa.h	/^typedef struct {$/;"	s
@@ -9577,8 +9602,11 @@
 activeTextureId	third_party/raylib/raylib-5.5_linux_amd64/include/rlgl.h	/^        unsigned int activeTextureId[RL_DEFAULT_BATCH_MAX_TEXTURE_UNITS];    \/\/ Active texture/;"	m	struct:rlglData::__anon0cdf4ceb0d08	typeref:typename:unsigned int[]
 activeTextureId	third_party/raylib/raylib-5.5_macos/include/rlgl.h	/^        unsigned int activeTextureId[RL_DEFAULT_BATCH_MAX_TEXTURE_UNITS];    \/\/ Active texture/;"	m	struct:rlglData::__anon96c0c2130d08	typeref:typename:unsigned int[]
 activeTextureId	third_party/raylib/raylib-5.5_win64/include/rlgl.h	/^        unsigned int activeTextureId[RL_DEFAULT_BATCH_MAX_TEXTURE_UNITS];    \/\/ Active texture/;"	m	struct:rlglData::__anon9e7796b80d08	typeref:typename:unsigned int[]
+active_color	third_party/raylib/custom.h	/^    Color active_color;       \/\/ Color for active tab$/;"	m	struct:__anon7f8247c10208	typeref:typename:Color
 active_handles	third_party/libuv/include/uv.h	/^  unsigned int active_handles;$/;"	m	struct:uv_loop_s	typeref:typename:unsigned int
 active_reqs	third_party/libuv/include/uv.h	/^  } active_reqs;$/;"	m	struct:uv_loop_s	typeref:union:uv_loop_s::__anon4de24c23190a
+active_tab	third_party/raylib/custom.h	/^    int *active_tab;          \/\/ Pointer to active tab index$/;"	m	struct:__anon7f8247c10208	typeref:typename:int *
+active_text_color	third_party/raylib/custom.h	/^    Color active_text_color;  \/\/ Text color for active tab$/;"	m	struct:__anon7f8247c10208	typeref:typename:Color
 addr	third_party/libuv/src/unix/internal.h	/^  struct sockaddr addr;$/;"	m	union:uv__sockaddr	typeref:struct:sockaddr
 address	third_party/libuv/include/uv.h	/^  } address;$/;"	m	struct:uv_interface_address_s	typeref:union:uv_interface_address_s::__anon4de24c23120a
 address4	third_party/libuv/include/uv.h	/^    struct sockaddr_in address4;$/;"	m	union:uv_interface_address_s::__anon4de24c23120a	typeref:struct:sockaddr_in
@@ -9636,6 +9664,8 @@
 b	third_party/raylib/raylib-5.5_linux_amd64/include/raylib.h	/^    unsigned char b;        \/\/ Color blue value$/;"	m	struct:Color	typeref:typename:unsigned char
 b	third_party/raylib/raylib-5.5_macos/include/raylib.h	/^    unsigned char b;        \/\/ Color blue value$/;"	m	struct:Color	typeref:typename:unsigned char
 b	third_party/raylib/raylib-5.5_win64/include/raylib.h	/^    unsigned char b;        \/\/ Color blue value$/;"	m	struct:Color	typeref:typename:unsigned char
+background	third_party/raylib/custom.h	/^    Color background;     \/\/ Main background (White)$/;"	m	struct:__anon7f8247c10108	typeref:typename:Color
+background_color	third_party/raylib/custom.h	/^    Color background_color;$/;"	m	struct:__anon7f8247c10308	typeref:typename:Color
 base	third_party/libuv/include/uv/unix.h	/^  char* base;$/;"	m	struct:uv_buf_t	typeref:typename:char *
 base	third_party/libuv/include/uv/win.h	/^  char* base;$/;"	m	struct:uv_buf_t	typeref:typename:char *
 baseSize	third_party/raylib/include/raygui.h	/^        int baseSize;           \/\/ Base size (default chars height)$/;"	m	struct:Font	typeref:typename:int
@@ -9686,6 +9716,9 @@
 bones	third_party/raylib/raylib-5.5_win64/include/raylib.h	/^    BoneInfo *bones;        \/\/ Bones information (skeleton)$/;"	m	struct:Model	typeref:typename:BoneInfo *
 bones	third_party/raylib/raylib-5.5_win64/include/raylib.h	/^    BoneInfo *bones;        \/\/ Bones information (skeleton)$/;"	m	struct:ModelAnimation	typeref:typename:BoneInfo *
 boolean	dowa/dowa.h	/^typedef char                 boolean;$/;"	t	typeref:typename:char
+border	third_party/raylib/custom.h	/^    Color border;         \/\/ Border color$/;"	m	struct:__anon7f8247c10108	typeref:typename:Color
+border_color	third_party/raylib/custom.h	/^    Color border_color;$/;"	m	struct:__anon7f8247c10308	typeref:typename:Color
+border_color	third_party/raylib/custom.h	/^    Color border_color;$/;"	m	struct:__anon7f8247c10408	typeref:typename:Color
 bottom	third_party/raylib/include/raylib.h	/^    int bottom;             \/\/ Bottom border offset$/;"	m	struct:NPatchInfo	typeref:typename:int
 bottom	third_party/raylib/raylib-5.5_linux_amd64/include/raylib.h	/^    int bottom;             \/\/ Bottom border offset$/;"	m	struct:NPatchInfo	typeref:typename:int
 bottom	third_party/raylib/raylib-5.5_macos/include/raylib.h	/^    int bottom;             \/\/ Bottom border offset$/;"	m	struct:NPatchInfo	typeref:typename:int
@@ -9782,7 +9815,11 @@
 container_of	third_party/libuv/test/task.h	/^#define container_of(/;"	d
 content	seobeo/seobeo_internal.h	/^  char  *content;$/;"	m	struct:__anon7a4da8400308	typeref:typename:char *
 controlId	third_party/raylib/include/raygui.h	/^    unsigned short controlId;   \/\/ Control identifier$/;"	m	struct:GuiStyleProp	typeref:typename:unsigned short
+corner_radius	third_party/raylib/custom.h	/^    float corner_radius;      \/\/ Corner radius for rounded tabs$/;"	m	struct:__anon7f8247c10208	typeref:typename:float
+corner_radius	third_party/raylib/custom.h	/^    float corner_radius;$/;"	m	struct:__anon7f8247c10308	typeref:typename:float
+corner_radius	third_party/raylib/custom.h	/^    float corner_radius;$/;"	m	struct:__anon7f8247c10408	typeref:typename:float
 count	third_party/libuv/include/uv.h	/^    unsigned int count;$/;"	m	union:uv_loop_s::__anon4de24c23190a	typeref:typename:unsigned int
+count	third_party/raylib/custom.h	/^    int count;                \/\/ Number of tabs$/;"	m	struct:__anon7f8247c10208	typeref:typename:int
 count	third_party/raylib/include/raylib.h	/^    unsigned int count;             \/\/ Events entries count$/;"	m	struct:AutomationEventList	typeref:typename:unsigned int
 count	third_party/raylib/include/raylib.h	/^    unsigned int count;             \/\/ Filepaths entries count$/;"	m	struct:FilePathList	typeref:typename:unsigned int
 count	third_party/raylib/raylib-5.5_linux_amd64/include/raylib.h	/^    unsigned int count;             \/\/ Events entries count$/;"	m	struct:AutomationEventList	typeref:typename:unsigned int
@@ -9927,6 +9964,7 @@
 done	third_party/libuv/include/uv/threadpool.h	/^  void (*done)(struct uv__work *w, int status);$/;"	m	struct:uv__work	typeref:typename:void (*)(struct uv__work * w,int status)
 dowa/dowa.h	deita/deita.h	/^#include "dowa\/dowa.h"/;"	h
 dowa/dowa.h	seobeo/seobeo_internal.h	/^#include "dowa\/dowa.h"/;"	h
+dowa/dowa.h	third_party/raylib/custom.h	/^#include "dowa\/dowa.h"/;"	h
 dowa__array_free	dowa/dowa.h	/^DLAPI void  dowa__array_free(void *p_array);$/;"	p	typeref:typename:DLAPI void
 dowa__array_grow	dowa/dowa.h	/^DLAPI void *dowa__array_grow(void *p_array, size_t element_size, size_t minimum_capacity, Dowa_A/;"	p	typeref:typename:DLAPI void *
 dowa__hash_bytes	dowa/dowa.h	/^DLAPI uint32  dowa__hash_bytes(void *p_key, size_t key_size);$/;"	p	typeref:typename:DLAPI uint32
@@ -9950,6 +9988,10 @@
 draws	third_party/raylib/raylib-5.5_linux_amd64/include/rlgl.h	/^    rlDrawCall *draws;          \/\/ Draw calls array, depends on textureId$/;"	m	struct:rlRenderBatch	typeref:typename:rlDrawCall *
 draws	third_party/raylib/raylib-5.5_macos/include/rlgl.h	/^    rlDrawCall *draws;          \/\/ Draw calls array, depends on textureId$/;"	m	struct:rlRenderBatch	typeref:typename:rlDrawCall *
 draws	third_party/raylib/raylib-5.5_win64/include/rlgl.h	/^    rlDrawCall *draws;          \/\/ Draw calls array, depends on textureId$/;"	m	struct:rlRenderBatch	typeref:typename:rlDrawCall *
+dropdown_active	third_party/raylib/custom.h	/^    int *dropdown_active;           \/\/ Pointer to active dropdown index$/;"	m	struct:__anon7f8247c10308	typeref:typename:int *
+dropdown_edit_mode	third_party/raylib/custom.h	/^    boolean *dropdown_edit_mode;    \/\/ Pointer to dropdown edit mode state$/;"	m	struct:__anon7f8247c10308	typeref:typename:boolean *
+dropdown_items	third_party/raylib/custom.h	/^    const char *dropdown_items;     \/\/ Semicolon-separated items: "GET;POST;PUT;DELETE"$/;"	m	struct:__anon7f8247c10308	typeref:typename:const char *
+dropdown_width	third_party/raylib/custom.h	/^    float dropdown_width;           \/\/ Width of dropdown (ratio 0.0-1.0 or absolute if > 1.0)$/;"	m	struct:__anon7f8247c10308	typeref:typename:float
 elementCount	third_party/raylib/include/rlgl.h	/^    int elementCount;           \/\/ Number of elements in the buffer (QUADS)$/;"	m	struct:rlVertexBuffer	typeref:typename:int
 elementCount	third_party/raylib/raylib-5.5_linux_amd64/include/rlgl.h	/^    int elementCount;           \/\/ Number of elements in the buffer (QUADS)$/;"	m	struct:rlVertexBuffer	typeref:typename:int
 elementCount	third_party/raylib/raylib-5.5_macos/include/rlgl.h	/^    int elementCount;           \/\/ Number of elements in the buffer (QUADS)$/;"	m	struct:rlVertexBuffer	typeref:typename:int
@@ -9967,6 +10009,7 @@
 errno.h	seobeo/seobeo.h	/^#include <errno.h>/;"	h
 errno.h	third_party/libuv/include/uv/errno.h	/^#include <errno.h>/;"	h
 errno.h	third_party/libuv/src/unix/internal.h	/^#include <errno.h>/;"	h
+error	third_party/raylib/custom.h	/^    Color error;          \/\/ Error indicator$/;"	m	struct:__anon7f8247c10108	typeref:typename:Color
 events	third_party/libuv/include/uv.h	/^  uint64_t events;$/;"	m	struct:uv_metrics_s	typeref:typename:uint64_t
 events	third_party/libuv/include/uv/unix.h	/^  unsigned int events;  \/* Current event mask. *\/$/;"	m	struct:uv__io_s	typeref:typename:unsigned int
 events	third_party/libuv/src/unix/os390-syscalls.h	/^  int events;$/;"	m	struct:epoll_event	typeref:typename:int
@@ -10101,6 +10144,7 @@
 g	third_party/raylib/raylib-5.5_linux_amd64/include/raylib.h	/^    unsigned char g;        \/\/ Color green value$/;"	m	struct:Color	typeref:typename:unsigned char
 g	third_party/raylib/raylib-5.5_macos/include/raylib.h	/^    unsigned char g;        \/\/ Color green value$/;"	m	struct:Color	typeref:typename:unsigned char
 g	third_party/raylib/raylib-5.5_win64/include/raylib.h	/^    unsigned char g;        \/\/ Color green value$/;"	m	struct:Color	typeref:typename:unsigned char
+gap	third_party/raylib/custom.h	/^    float gap;                      \/\/ Gap between panels (0 for seamless)$/;"	m	struct:__anon7f8247c10408	typeref:typename:float
 gid	third_party/libuv/include/uv.h	/^  unsigned long gid;$/;"	m	struct:uv_group_s	typeref:typename:unsigned long
 gid	third_party/libuv/include/uv.h	/^  unsigned long gid;$/;"	m	struct:uv_passwd_s	typeref:typename:unsigned long
 gid	third_party/libuv/include/uv.h	/^  uv_gid_t gid;$/;"	m	struct:uv_process_options_s	typeref:typename:uv_gid_t
@@ -10244,6 +10288,7 @@
 height	third_party/raylib/raylib-5.5_win64/include/raylib.h	/^    float height;           \/\/ Rectangle height$/;"	m	struct:Rectangle	typeref:typename:float
 height	third_party/raylib/raylib-5.5_win64/include/raylib.h	/^    int height;             \/\/ Image base height$/;"	m	struct:Image	typeref:typename:int
 height	third_party/raylib/raylib-5.5_win64/include/raylib.h	/^    int height;             \/\/ Texture base height$/;"	m	struct:Texture	typeref:typename:int
+highlight	third_party/raylib/custom.h	/^    Color highlight;      \/\/ Highlight\/hover color$/;"	m	struct:__anon7f8247c10108	typeref:typename:Color
 hit	third_party/raylib/include/raylib.h	/^    bool hit;               \/\/ Did the ray hit something?$/;"	m	struct:RayCollision	typeref:typename:bool
 hit	third_party/raylib/raylib-5.5_linux_amd64/include/raylib.h	/^    bool hit;               \/\/ Did the ray hit something?$/;"	m	struct:RayCollision	typeref:typename:bool
 hit	third_party/raylib/raylib-5.5_macos/include/raylib.h	/^    bool hit;               \/\/ Did the ray hit something?$/;"	m	struct:RayCollision	typeref:typename:bool
@@ -10294,6 +10339,7 @@
 in	third_party/libuv/src/unix/internal.h	/^  struct sockaddr_in in;$/;"	m	union:uv__sockaddr	typeref:struct:sockaddr_in
 in6	third_party/libuv/src/unix/internal.h	/^  struct sockaddr_in6 in6;$/;"	m	union:uv__sockaddr	typeref:struct:sockaddr_in6
 in_flight	third_party/libuv/src/uv-common.h	/^  uint32_t in_flight;$/;"	m	struct:uv__iou	typeref:typename:uint32_t
+inactive_color	third_party/raylib/custom.h	/^    Color inactive_color;     \/\/ Color for inactive tab$/;"	m	struct:__anon7f8247c10208	typeref:typename:Color
 index	dowa/dowa.h	/^  uint32 index[DOWA_HASH_BUCKET_SIZE];$/;"	m	struct:__anon82503da00408	typeref:typename:uint32[]
 index	dowa/stb_ds.h	/^   ptrdiff_t index[STBDS_BUCKET_LENGTH];$/;"	m	struct:__anon7f1219f40308	typeref:typename:ptrdiff_t[]
 indices	third_party/raylib/include/raylib.h	/^    unsigned short *indices;    \/\/ Vertex indices (in case vertex data comes indexed)$/;"	m	struct:Mesh	typeref:typename:unsigned short *
@@ -10349,7 +10395,9 @@
 is_msg	third_party/libuv/src/unix/os390-syscalls.h	/^  int is_msg;$/;"	m	struct:epoll_event	typeref:typename:int
 is_open	deita/deita_internal.h	/^  boolean is_open;$/;"	m	struct:Deita_Connection	typeref:typename:boolean
 itemFocused	postdog/gui_window_file_dialog.h	/^    int itemFocused;$/;"	m	struct:__anoncb6fd9740108	typeref:typename:int
+item_colors	third_party/raylib/custom.h	/^    Color *item_colors;             \/\/ Array of colors matching dropdown items count$/;"	m	struct:__anon7f8247c10308	typeref:typename:Color *
 item_count	dowa/dowa.h	/^  size_t item_count;$/;"	m	struct:__anon82503da00508	typeref:typename:size_t
+item_count	third_party/raylib/custom.h	/^    int item_count;                 \/\/ Number of items (required if item_colors is set)$/;"	m	struct:__anon7f8247c10308	typeref:typename:int
 items	third_party/libuv/src/unix/os390-syscalls.h	/^  struct pollfd* items;$/;"	m	struct:__anonf6e20ee80108	typeref:struct:pollfd *
 kCFStringEncodingUTF8	third_party/libuv/src/unix/darwin-stub.h	/^static const CFStringEncoding kCFStringEncodingUTF8 = 0x8000100;$/;"	v	typeref:typename:const CFStringEncoding
 kFSEventStreamCreateFlagFileEvents	third_party/libuv/src/unix/darwin-stub.h	/^static const int kFSEventStreamCreateFlagFileEvents = 16;$/;"	v	typeref:typename:const int
@@ -10373,6 +10421,7 @@
 kFSEventStreamEventIdSinceNow	third_party/libuv/src/unix/darwin-stub.h	/^static const FSEventStreamEventId kFSEventStreamEventIdSinceNow = -1;$/;"	v	typeref:typename:const FSEventStreamEventId
 key	dowa/stb_ds.h	/^typedef struct { int key,b,c,d; } stbds_struct;$/;"	m	struct:__anon7f1219f40508	typeref:typename:int
 key	dowa/stb_ds.h	/^typedef struct { int key[2],b,c,d; } stbds_struct2;$/;"	m	struct:__anon7f1219f40608	typeref:typename:int[2]
+labels	third_party/raylib/custom.h	/^    const char **labels;      \/\/ Array of tab labels$/;"	m	struct:__anon7f8247c10208	typeref:typename:const char **
 layout	third_party/raylib/include/raylib.h	/^    int layout;             \/\/ Layout of the n-patch: 3x3, 1x3 or 3x1$/;"	m	struct:NPatchInfo	typeref:typename:int
 layout	third_party/raylib/raylib-5.5_linux_amd64/include/raylib.h	/^    int layout;             \/\/ Layout of the n-patch: 3x3, 1x3 or 3x1$/;"	m	struct:NPatchInfo	typeref:typename:int
 layout	third_party/raylib/raylib-5.5_macos/include/raylib.h	/^    int layout;             \/\/ Layout of the n-patch: 3x3, 1x3 or 3x1$/;"	m	struct:NPatchInfo	typeref:typename:int
@@ -10390,6 +10439,7 @@
 leftScreenCenter	third_party/raylib/raylib-5.5_linux_amd64/include/raylib.h	/^    float leftScreenCenter[2];      \/\/ VR left screen center$/;"	m	struct:VrStereoConfig	typeref:typename:float[2]
 leftScreenCenter	third_party/raylib/raylib-5.5_macos/include/raylib.h	/^    float leftScreenCenter[2];      \/\/ VR left screen center$/;"	m	struct:VrStereoConfig	typeref:typename:float[2]
 leftScreenCenter	third_party/raylib/raylib-5.5_win64/include/raylib.h	/^    float leftScreenCenter[2];      \/\/ VR left screen center$/;"	m	struct:VrStereoConfig	typeref:typename:float[2]
+left_color	third_party/raylib/custom.h	/^    Color left_color;$/;"	m	struct:__anon7f8247c10408	typeref:typename:Color
 len	third_party/libuv/include/uv/unix.h	/^  size_t len;$/;"	m	struct:uv_buf_t	typeref:typename:size_t
 len	third_party/libuv/include/uv/win.h	/^  ULONG len;$/;"	m	struct:uv_buf_t	typeref:typename:ULONG
 length	dowa/dowa.h	/^  size_t length;$/;"	m	struct:__anon82503da00308	typeref:typename:size_t
@@ -10709,6 +10759,7 @@
 msg_queue	third_party/libuv/src/unix/os390-syscalls.h	/^  int msg_queue;$/;"	m	struct:__anonf6e20ee80108	typeref:typename:int
 mswsock.h	third_party/libuv/include/uv/win.h	/^#include <mswsock.h>/;"	h
 mswsock.h	third_party/libuv/src/win/winsock.h	/^#include <mswsock.h>/;"	h
+muted	third_party/raylib/custom.h	/^    Color muted;          \/\/ Muted\/disabled elements$/;"	m	struct:__anon7f8247c10108	typeref:typename:Color
 mutex	third_party/libuv/include/uv/unix.h	/^  uv_mutex_t mutex;$/;"	m	struct:_uv_barrier	typeref:typename:uv_mutex_t
 mutex	third_party/libuv/include/uv/win.h	/^  uv_mutex_t mutex;$/;"	m	struct:__anond441abe00408	typeref:typename:uv_mutex_t
 name	postdog/gui_window_file_dialog.h	/^    const char *name;$/;"	m	struct:FileInfo	typeref:typename:const char *
@@ -10805,6 +10856,7 @@
 pad	third_party/libuv/include/uv/unix.h	/^  char pad[sizeof(pthread_barrier_t) - sizeof(struct _uv_barrier*)];$/;"	m	struct:__anon5825c6f60108	typeref:typename:char[]
 pad	third_party/libuv/src/unix/darwin-stub.h	/^  void* pad[3];$/;"	m	struct:FSEventStreamContext	typeref:typename:void * [3]
 pad	third_party/libuv/src/unix/darwin-stub.h	/^  void* pad[7];$/;"	m	struct:CFRunLoopSourceContext	typeref:typename:void * [7]
+padding	third_party/raylib/custom.h	/^    float padding;            \/\/ Padding between tabs$/;"	m	struct:__anon7f8247c10208	typeref:typename:float
 padding_	third_party/libuv/include/uv/win.h	/^  unsigned char padding_[44];$/;"	m	struct:__anond441abe00308	typeref:typename:unsigned char[44]
 padding_	third_party/libuv/include/uv/win.h	/^  unsigned char padding_[72];$/;"	m	struct:__anond441abe00308	typeref:typename:unsigned char[72]
 panOffset	postdog/gui_window_file_dialog.h	/^    Vector2 panOffset;$/;"	m	struct:__anoncb6fd9740108	typeref:typename:Vector2
@@ -10862,6 +10914,7 @@
 position	third_party/raylib/raylib-5.5_win64/include/raylib.h	/^    Vector3 position;       \/\/ Ray position (origin)$/;"	m	struct:Ray	typeref:typename:Vector3
 prev	third_party/libuv/include/uv.h	/^  struct uv__queue* prev;$/;"	m	struct:uv__queue	typeref:struct:uv__queue *
 prevFilesListActive	postdog/gui_window_file_dialog.h	/^    int prevFilesListActive;$/;"	m	struct:__anoncb6fd9740108	typeref:typename:int
+primary	third_party/raylib/custom.h	/^    Color primary;        \/\/ Main accent color (Orange)$/;"	m	struct:__anon7f8247c10108	typeref:typename:Color
 print_lines	third_party/libuv/test/runner.h	/^int print_lines(const char* buffer, size_t size, FILE* stream, int partial);$/;"	p	typeref:typename:int
 print_tests	third_party/libuv/test/runner.h	/^void print_tests(FILE* stream);$/;"	p	typeref:typename:void
 process	third_party/libuv/test/runner-win.h	/^  HANDLE process;$/;"	m	struct:__anon343b4fa90108	typeref:typename:HANDLE
@@ -10956,6 +11009,7 @@
 rightScreenCenter	third_party/raylib/raylib-5.5_linux_amd64/include/raylib.h	/^    float rightScreenCenter[2];     \/\/ VR right screen center$/;"	m	struct:VrStereoConfig	typeref:typename:float[2]
 rightScreenCenter	third_party/raylib/raylib-5.5_macos/include/raylib.h	/^    float rightScreenCenter[2];     \/\/ VR right screen center$/;"	m	struct:VrStereoConfig	typeref:typename:float[2]
 rightScreenCenter	third_party/raylib/raylib-5.5_win64/include/raylib.h	/^    float rightScreenCenter[2];     \/\/ VR right screen center$/;"	m	struct:VrStereoConfig	typeref:typename:float[2]
+right_color	third_party/raylib/custom.h	/^    Color right_color;$/;"	m	struct:__anon7f8247c10408	typeref:typename:Color
 ringfd	third_party/libuv/src/uv-common.h	/^  int ringfd;$/;"	m	struct:uv__iou	typeref:typename:int
 rlActiveDrawBuffers	third_party/raylib/include/rlgl.h	/^RLAPI void rlActiveDrawBuffers(int count);              \/\/ Activate multiple draw color buffer/;"	p	typeref:typename:RLAPI void
 rlActiveDrawBuffers	third_party/raylib/include/rlgl.h	/^void rlActiveDrawBuffers(int count)$/;"	f	typeref:typename:void
@@ -12518,6 +12572,7 @@
 scaleIn	third_party/raylib/raylib-5.5_macos/include/raylib.h	/^    float scaleIn[2];               \/\/ VR distortion scale in$/;"	m	struct:VrStereoConfig	typeref:typename:float[2]
 scaleIn	third_party/raylib/raylib-5.5_win64/include/raylib.h	/^    float scaleIn[2];               \/\/ VR distortion scale in$/;"	m	struct:VrStereoConfig	typeref:typename:float[2]
 scandir	third_party/libuv/src/unix/os390-syscalls.h	/^int scandir(const char* maindir, struct dirent*** namelist,$/;"	p	typeref:typename:int
+secondary	third_party/raylib/custom.h	/^    Color secondary;      \/\/ Secondary background (Beige\/Egg white)$/;"	m	struct:__anon7f8247c10108	typeref:typename:Color
 seed	dowa/stb_ds.h	/^  size_t seed;$/;"	m	struct:__anon7f1219f40408	typeref:typename:size_t
 selectionEnd	third_party/raylib/include/raygui.h	/^    int selectionEnd;     \/\/ End index of selection (-1 if no selection)$/;"	m	struct:JUNE_TextBoxResult	typeref:typename:int
 selectionStart	third_party/raylib/include/raygui.h	/^    int selectionStart;   \/\/ Start index of selection (-1 if no selection)$/;"	m	struct:JUNE_TextBoxResult	typeref:typename:int
@@ -12583,6 +12638,7 @@
 source	third_party/raylib/raylib-5.5_macos/include/raylib.h	/^    Rectangle source;       \/\/ Texture source rectangle$/;"	m	struct:NPatchInfo	typeref:typename:Rectangle
 source	third_party/raylib/raylib-5.5_win64/include/raylib.h	/^    Rectangle source;       \/\/ Texture source rectangle$/;"	m	struct:NPatchInfo	typeref:typename:Rectangle
 speed	third_party/libuv/include/uv.h	/^  int speed;$/;"	m	struct:uv_cpu_info_s	typeref:typename:int
+split_ratio	third_party/raylib/custom.h	/^    float split_ratio;              \/\/ 0.0-1.0, ratio of left panel$/;"	m	struct:__anon7f8247c10408	typeref:typename:float
 sq	third_party/libuv/src/uv-common.h	/^  void* sq;   \/* pointer to munmap() on event loop teardown *\/$/;"	m	struct:uv__iou	typeref:typename:void *
 sqe	third_party/libuv/src/uv-common.h	/^  void* sqe;  \/* pointer to array of struct uv__io_uring_sqe *\/$/;"	m	struct:uv__iou	typeref:typename:void *
 sqelen	third_party/libuv/src/uv-common.h	/^  size_t sqelen;$/;"	m	struct:uv__iou	typeref:typename:size_t
@@ -12879,6 +12935,7 @@
 stx_rdev_minor	third_party/libuv/src/unix/internal.h	/^  uint32_t stx_rdev_minor;$/;"	m	struct:uv__statx	typeref:typename:uint32_t
 stx_size	third_party/libuv/src/unix/internal.h	/^  uint64_t stx_size;$/;"	m	struct:uv__statx	typeref:typename:uint64_t
 stx_uid	third_party/libuv/src/unix/internal.h	/^  uint32_t stx_uid;$/;"	m	struct:uv__statx	typeref:typename:uint32_t
+success	third_party/raylib/custom.h	/^    Color success;        \/\/ Success indicator$/;"	m	struct:__anon7f8247c10108	typeref:typename:Color
 supportDrag	postdog/gui_window_file_dialog.h	/^    bool supportDrag;$/;"	m	struct:__anoncb6fd9740108	typeref:typename:bool
 sys	third_party/libuv/include/uv.h	/^  uint64_t sys; \/* milliseconds *\/$/;"	m	struct:uv_cpu_times_s	typeref:typename:uint64_t
 sys/event.h	third_party/libuv/src/unix/internal.h	/^#include <sys\/event.h>/;"	h
@@ -12990,11 +13047,18 @@
 texcoordy	third_party/raylib/raylib-5.5_linux_amd64/include/rlgl.h	/^        float texcoordx, texcoordy;         \/\/ Current active texture coordinate (added on glV/;"	m	struct:rlglData::__anon0cdf4ceb0d08	typeref:typename:float
 texcoordy	third_party/raylib/raylib-5.5_macos/include/rlgl.h	/^        float texcoordx, texcoordy;         \/\/ Current active texture coordinate (added on glV/;"	m	struct:rlglData::__anon96c0c2130d08	typeref:typename:float
 texcoordy	third_party/raylib/raylib-5.5_win64/include/rlgl.h	/^        float texcoordx, texcoordy;         \/\/ Current active texture coordinate (added on glV/;"	m	struct:rlglData::__anon9e7796b80d08	typeref:typename:float
+text	third_party/raylib/custom.h	/^    Color text;           \/\/ Text color (Black)$/;"	m	struct:__anon7f8247c10108	typeref:typename:Color
 textBoxCursorIndex	third_party/raylib/include/raygui.h	/^static int textBoxCursorIndex = 0;              \/\/ Cursor index, shared by all GuiTextBox*()$/;"	v	typeref:typename:int
 textBoxSelecting	third_party/raylib/include/raygui.h	/^static bool textBoxSelecting = false;           \/\/ Currently selecting with mouse$/;"	v	typeref:typename:bool
 textBoxSelectionEnd	third_party/raylib/include/raygui.h	/^static int textBoxSelectionEnd = -1;            \/\/ Selection end index (-1 if no selection)$/;"	v	typeref:typename:int
 textBoxSelectionStart	third_party/raylib/include/raygui.h	/^static int textBoxSelectionStart = -1;          \/\/ Selection start index (-1 if no selection)$/;"	v	typeref:typename:int
+text_buffer	third_party/raylib/custom.h	/^    char *text_buffer;              \/\/ Text buffer for input$/;"	m	struct:__anon7f8247c10308	typeref:typename:char *
+text_buffer_size	third_party/raylib/custom.h	/^    int text_buffer_size;           \/\/ Size of text buffer$/;"	m	struct:__anon7f8247c10308	typeref:typename:int
+text_color	third_party/raylib/custom.h	/^    Color text_color;         \/\/ Text color$/;"	m	struct:__anon7f8247c10208	typeref:typename:Color
+text_color	third_party/raylib/custom.h	/^    Color text_color;$/;"	m	struct:__anon7f8247c10308	typeref:typename:Color
 text_copy	seobeo/seobeo_internal.h	/^  void        *text_copy;$/;"	m	struct:__anon7a4da8400208	typeref:typename:void *
+text_edit_mode	third_party/raylib/custom.h	/^    boolean *text_edit_mode;        \/\/ Pointer to text edit mode state$/;"	m	struct:__anon7f8247c10308	typeref:typename:boolean *
+text_light	third_party/raylib/custom.h	/^    Color text_light;     \/\/ Light text (White - for dark backgrounds)$/;"	m	struct:__anon7f8247c10108	typeref:typename:Color
 texture	third_party/raylib/include/raygui.h	/^        Texture2D texture;      \/\/ Texture atlas containing the glyphs$/;"	m	struct:Font	typeref:typename:Texture2D
 texture	third_party/raylib/include/raylib.h	/^    Texture texture;        \/\/ Color buffer attachment texture$/;"	m	struct:RenderTexture	typeref:typename:Texture
 texture	third_party/raylib/include/raylib.h	/^    Texture2D texture;      \/\/ Material map texture$/;"	m	struct:MaterialMap	typeref:typename:Texture2D
@@ -13014,6 +13078,7 @@
 textureId	third_party/raylib/raylib-5.5_win64/include/rlgl.h	/^    unsigned int textureId;     \/\/ Texture id to be used on the draw -> Use to create new draw/;"	m	struct:rlDrawCall	typeref:typename:unsigned int
 third_party/raylib/include/raygui.h	postdog/gui_window_file_dialog.h	/^#include "third_party\/raylib\/include\/raygui.h"/;"	h
 third_party/raylib/include/raylib.h	postdog/gui_window_file_dialog.h	/^#include "third_party\/raylib\/include\/raylib.h"/;"	h
+third_party/raylib/include/raylib.h	third_party/raylib/custom.h	/^#include "third_party\/raylib\/include\/raylib.h"/;"	h
 threshold	third_party/libuv/include/uv/unix.h	/^  unsigned threshold;$/;"	m	struct:_uv_barrier	typeref:typename:unsigned
 threshold	third_party/libuv/include/uv/win.h	/^  unsigned threshold;$/;"	m	struct:__anond441abe00408	typeref:typename:unsigned
 timeout	third_party/libuv/test/runner.h	/^  int timeout;$/;"	m	struct:__anona47773ae0108	typeref:typename:int