summaryrefslogtreecommitdiff
path: root/prbs.c
diff options
context:
space:
mode:
authorpryazha <pryadeiniv@mail.ru>2025-10-12 15:24:30 +0500
committerpryazha <pryadeiniv@mail.ru>2025-10-12 15:24:30 +0500
commit223b1056273f5d48d1c0bbfee75be7b82374d4eb (patch)
tree2b2003aad9c26af7006c5a5c7e2baf1a63ad89e7 /prbs.c
parent7e73843ac5873833c707687cd0ada0a3034e600c (diff)
change identation, maybe will change back, add own gl functions loading, and glx example
Diffstat (limited to 'prbs.c')
-rw-r--r--prbs.c219
1 files changed, 133 insertions, 86 deletions
diff --git a/prbs.c b/prbs.c
index 818a110..0c6bd8a 100644
--- a/prbs.c
+++ b/prbs.c
@@ -1,132 +1,179 @@
#include "prbs.h"
#include "macros.h"
+#include "sys.h"
#include <string.h>
#include <stdio.h>
-i32 cstrings_equal(const char *s1, const char *s2)
+i32
+cstrings_equal(const char *s1, const char *s2)
{
- assert(s1 && s2);
- while (*s1++ == *s2++)
- if (!*s1)
- return 1;
- return 0;
+ assert(s1 && s2);
+ while (*s1++ == *s2++)
+ if (!*s1)
+ return 1;
+ return 0;
}
-char *string_to_cstring(struct arena *arena, struct string str)
+char *
+string_to_cstring(struct arena *arena, struct string str)
{
- u64 len = str.len + 1;
- char *cstr = push_arena(arena, len);
- memmove(cstr, str.ptr, len);
- cstr[str.len] = 0;
- return cstr;
+ u64 len = str.len + 1;
+ char *cstr = push_arena(arena, len);
+ memmove(cstr, str.ptr, len);
+ cstr[str.len] = 0;
+ return cstr;
}
-i32 strings_equal(struct string str1, struct string str2)
+struct string
+string_from_cstring(struct arena *arena, const char *cstr)
{
- if (str1.len != str2.len)
- return 0;
- for (u64 i = 0; i < str1.len; ++i)
- if (str1.ptr[i] != str2.ptr[i])
- return 0;
- return 1;
+ u64 len = 0;
+ while (cstr[len++])
+ ;
+ len--;
+ u8 *ptr = push_arena(arena, len);
+ for (i32 i = 0; i < len; i++)
+ ptr[i] = cstr[i];
+ return (struct string){ptr, len};
}
-u8 *find_char(struct string str, i32 c)
+i32
+strings_equal(struct string str1, struct string str2)
{
- for (u64 i = 0; i < str.len; ++i)
- if (str.ptr[i] == c)
- return str.ptr + i;
- return 0;
+ if (str1.len != str2.len)
+ return 0;
+ for (u64 i = 0; i < str1.len; ++i)
+ if (str1.ptr[i] != str2.ptr[i])
+ return 0;
+ return 1;
}
-u8 *find_last_char(struct string str, i32 c)
+u8 *
+find_char(struct string str, i32 c)
{
- for (u64 i = str.len - 1; i > 0; --i)
- if (str.ptr[i] == c)
- return str.ptr + i;
- return 0;
+ for (u64 i = 0; i < str.len; ++i)
+ if (str.ptr[i] == c)
+ return str.ptr + i;
+ return 0;
}
-struct string string_from_range(u8 *start, u8 *end)
+u8 *
+find_last_char(struct string str, i32 c)
{
- assert(start);
- assert(end);
- assert(start < end);
- return (struct string){start, end - start};
+ for (u64 i = str.len - 1; i > 0; --i)
+ if (str.ptr[i] == c)
+ return str.ptr + i;
+ return 0;
}
-struct string get_dirname(struct string str)
+struct string
+string_from_range(u8 *start, u8 *end)
{
- assert(str.len);
- u8 *slash = find_last_char(str, '/');
- if (!slash)
- return str;
- return string_from_range(str.ptr, slash);
+ assert(start);
+ assert(end);
+ assert(start < end);
+ return (struct string){start, end - start};
}
-struct string push_fstringv(struct arena *arena, const char *format, va_list args)
+struct string
+get_dirname(struct string str)
{
- char tmp[kilobytes(4) + 1];
- i32 len = vsnprintf(tmp, kilobytes(4), format, args);
- struct string str = {0};
- if (len < 0)
- return str;
- u8 *ptr = push_arena(arena, len);
- memmove(ptr, tmp, len);
- return (struct string){ptr, len};
+ assert(str.len);
+ u8 *dot = find_char(str, '.');
+ u8 *slash = find_last_char(str, '/');
+ if (!slash)
+ return str;
+ return string_from_range(str.ptr, slash);
}
-struct string push_fstring(struct arena *arena, const char *format, ...)
+struct string
+push_string(struct arena *arena, struct string str)
{
- va_list args;
- va_start(args, format);
- struct string str = push_fstringv(arena, format, args);
- va_end(args);
- return str;
+ assert(str.ptr && str.len);
+ u8 *ptr = push_arena(arena, str.len);
+ memmove(ptr, str.ptr, str.len);
+ return (struct string){ptr, str.len};
}
-void print_string(struct string str)
+static struct string
+push_fstringv(struct arena *arena, const char *format, va_list args)
{
- assert(str.ptr && str.len);
- printf("%.*s", str.len, str.ptr);
+ char tmp[kilobytes(4) + 1];
+ i32 len = vsnprintf(tmp, kilobytes(4), format, args);
+ struct string str = {0};
+ if (len < 0)
+ return str;
+ u8 *ptr = push_arena(arena, len);
+ memmove(ptr, tmp, len);
+ return (struct string){ptr, len};
}
-void push_string_to_list(struct arena *arena, struct string_list *list, i32 front, struct string str)
+struct string
+push_fstring(struct arena *arena, const char *format, ...)
{
- struct string_node *node = push_arena(arena, sizeof(struct string_node));
- node->str = str;
- if (front)
- dllpushfront(list->first, list->last, node);
- else
- dllpushback(list->first, list->last, node);
- list->len += str.len;
- list->cnt++;
+ va_list args;
+ va_start(args, format);
+ struct string str = push_fstringv(arena, format, args);
+ va_end(args);
+ return str;
}
-void push_fstring_to_list(struct arena *arena, struct string_list *list, i32 front, const char *format, ...)
+void
+print_string(struct string str)
{
- va_list args;
- va_start(args, format);
- struct string str = push_fstringv(arena, format, args);
- va_end(args);
- push_string_to_list(arena, list, front, str);
+ assert(str.ptr && str.len);
+ printf("%.*s", str.len, str.ptr);
}
-struct string join_string_list(struct arena *arena, struct string_list *list)
+void
+print_stringnl(struct string str)
{
- assert(arena);
- assert(list);
- struct string str = {arena->memory + arena->used, 0};
- for (struct string_node *node = list->first; node; node = node->next) {
- u8 *ptr = push_arena(arena, node->str.len);
- memmove(ptr, node->str.ptr, node->str.len);
- str.len += node->str.len;
- }
- return str;
+ print_string(str);
+ printf("\n");
}
-void print_string_list(struct string_list *list)
+void
+push_string_to_list(struct arena *arena, struct string_list *list,
+ i32 front, struct string str)
{
- for (struct string_node *node = list->first; node; node = node->next)
- print_string(node->str);
+ struct string_node *node = push_arena(arena, sizeof(struct string_node));
+ node->str = str;
+ if (front)
+ dllpushfront(list->first, list->last, node);
+ else
+ dllpushback(list->first, list->last, node);
+ list->len += str.len;
+ list->cnt++;
+}
+
+void
+push_fstring_to_list(struct arena *arena, struct string_list *list,
+ i32 front, const char *format, ...)
+{
+ va_list args;
+ va_start(args, format);
+ struct string str = push_fstringv(arena, format, args);
+ va_end(args);
+ push_string_to_list(arena, list, front, str);
+}
+
+struct string
+join_string_list(struct arena *arena, struct string_list *list)
+{
+ assert(arena);
+ assert(list);
+ struct string str = {arena->memory + arena->used, 0};
+ for (struct string_node *node = list->first; node; node = node->next) {
+ u8 *ptr = push_arena(arena, node->str.len);
+ memmove(ptr, node->str.ptr, node->str.len);
+ str.len += node->str.len;
+ }
+ return str;
+}
+
+void
+print_string_list(struct string_list *list)
+{
+ for (struct string_node *node = list->first; node; node = node->next)
+ print_string(node->str);
}