aboutsummaryrefslogtreecommitdiff
path: root/kscurses/utils.jai
diff options
context:
space:
mode:
Diffstat (limited to 'kscurses/utils.jai')
-rw-r--r--kscurses/utils.jai53
1 files changed, 53 insertions, 0 deletions
diff --git a/kscurses/utils.jai b/kscurses/utils.jai
new file mode 100644
index 0000000..2b88e85
--- /dev/null
+++ b/kscurses/utils.jai
@@ -0,0 +1,53 @@
+// array_slice :: (array : []$T, left : int, right : int) -> []T {
+// assert(left <= right && left >= 0 && right <= array.count);
+// result : []T;
+// result.data, result.count = array.data + left, right - left;
+// return result;
+// }
+
+length_code :: inline (c : u64) -> u8 {
+ for 0..7 {
+ if !c return xx it;
+ c >>= 8;
+ }
+ return 8;
+}
+utf8 :: (str : string) -> u32 {
+ code : u32;
+ assert(str.count <= 4);
+ memcpy(*code, str.data, str.count);
+ return code;
+}
+byteswap_64 :: (c : u64) -> u64 {
+ c = ((0xFFFFFFFF00000000 & c) >> 32) | ((0x00000000FFFFFFFF & c) << 32);
+ c = ((0xFFFF0000FFFF0000 & c) >> 16) | ((0x0000FFFF0000FFFF & c) << 16);
+ c = ((0xFF00FF00FF00FF00 & c) >> 8) | ((0x00FF00FF00FF00FF & c) << 8);
+ return c;
+}
+byteswap_32 :: (c : u32) -> u32 {
+ c = ((0xFFFF0000 & c) >> 16) | ((0x0000FFFF & c) << 16);
+ c = ((0xFF00FF00 & c) >> 8) | ((0x00FF00FF & c) << 8);
+ return c;
+}
+char_bs :: (code : u32) -> u32 {
+ l := length_code(code);
+ return byteswap_32(code) >> ((8 - l) * 8);
+}
+utf8_bs :: (str : string) -> u32 {
+ return char_bs(utf8(str));
+}
+arrow_code_to_ivec2 :: (key : Key, $swap_y := true) -> ivec2 {
+ #if swap_y {
+ return ifx key == .UP ivec2.{ 0, -1}
+ else ifx key == .RIGHT ivec2.{ 1, 0}
+ else ifx key == .DOWN ivec2.{ 0, 1}
+ else ifx key == .LEFT ivec2.{-1, 0}
+ else ivec2.{};
+ } else {
+ return ifx key == .UP ivec2.{ 0, 1}
+ else ifx key == .RIGHT ivec2.{ 1, 0}
+ else ifx key == .DOWN ivec2.{ 0, -1}
+ else ifx key == .LEFT ivec2.{-1, 0}
+ else ivec2.{};
+ }
+}