Skip to content

Instantly share code, notes, and snippets.

Avatar
🦀
Ascending from a Rust hater to a Rust advocate

Qix Qix-

🦀
Ascending from a Rust hater to a Rust advocate
View GitHub Profile
@Qix-
Qix- / order-of-includes.md
Last active Dec 10, 2021
Order of includes
View order-of-includes.md

C/C++ Order of Includes

The order in which I group my header includes is as follows. Each section is separated by exactly one blank line, even if the section only has one include.

  1. "" Internal headers
  2. "" Internal generated headers (e.g. from version.h.in; okay to use from include path)
  3. "" Internal third-party headers (vendored into project)
  4. "" Private API headers (always relative paths)
  5. "" Public API headers
  6. <> Build-system level third party headers (e.g. from CMake's add_subdirectory(); always from include path)
@Qix-
Qix- / coro.cpp
Created Sep 29, 2020
C++20 coroutines + LibUV sample, v2
View coro.cpp
// Thank you to the folks at the C++ slack channel,
// along with @lewissbaker for the excellent literature
// (even though it took me a few days to be convinced
// it really was so).
#include <uv.h>
#include <iostream>
#include <experimental/coroutine>
@Qix-
Qix- / coroutine.cc
Created Aug 30, 2020
Actually working minimal test of coroutines in C++
View coroutine.cc
/*
I couldn't find a good example of a simplistic, *working*
program using coroutines without a bunch of dependencies
or bloat. Further, most of the code examples didn't work
or missed some detail.
As of this writing, this is a working example in Clang 12.
Public domain.
Written with the help of https://blog.panicsoftware.com/your-first-coroutine/.
@Qix-
Qix- / aseprite.ksy
Last active Jul 25, 2020
Aseprite Kaitai definition file
View aseprite.ksy
meta:
id: aseprite
endian: le
file-extension:
- aseprite
- ase
seq:
- id: header
type: header
- id: frames
@Qix-
Qix- / libuv.zig
Created Mar 26, 2020
Simplistic libuv wrapper example in Zig
View libuv.zig
const std = @import("std");
const warn = @import("std").debug.warn; // XXX DEBUG
const assert = std.debug.assert;
const c = @cImport({
@cInclude("uv.h");
});
pub const UVError = error{ E2BIG, EACCES, EADDRINUSE, EADDRNOTAVAIL, EAFNOSUPPORT, EAGAIN, EAI_ADDRFAMILY, EAI_AGAIN, EAI_BADFLAGS, EAI_BADHINTS, EAI_CANCELED, EAI_FAIL, EAI_FAMILY, EAI_MEMORY, EAI_NODATA, EAI_NONAME, EAI_OVERFLOW, EAI_PROTOCOL, EAI_SERVICE, EAI_SOCKTYPE, EALREADY, EBADF, EBUSY, ECANCELED, ECHARSET, ECONNABORTED, ECONNREFUSED, ECONNRESET, EDESTADDRREQ, EEXIST, EFAULT, EFBIG, EHOSTUNREACH, EINTR, EINVAL, EIO, EISCONN, EISDIR, ELOOP, EMFILE, EMSGSIZE, ENAMETOOLONG, ENETDOWN, ENETUNREACH, ENFILE, ENOBUFS, ENODEV, ENOENT, ENOMEM, ENONET, ENOPROTOOPT, ENOSPC, ENOSYS, ENOTCONN, ENOTDIR, ENOTEMPTY, ENOTSOCK, ENOTSUP, EPERM, EPIPE, EPROTO, EPROTONOSUPPORT, EPROTOTYPE, ERANGE, EROFS, ESHUTDOWN, ESPIPE, ESRCH, ETIMEDOUT, ETXTBSY, EXDEV, UNKNOWN, EOF, ENXIO, EMLINK };
@Qix-
Qix- / uv_pipe.c
Created Jan 21, 2020
Tests the ability to pipe between multiple processes uving libuv and without a dedicated read/write buffer copy
View uv_pipe.c
#include <uv.h>
#include <unistd.h>
extern char *environ[];
static int uv_perror(int r, const char *msg) {
printf("%s: %s (%s)\n", msg, uv_strerror(r), uv_err_name(r));
return 1;
}
@Qix-
Qix- / isatty.c
Last active Jan 21, 2020
Test openpty() (pseudo-terminal) integration with libuv
View isatty.c
/*
Simple testbed for checking TTY status. Use with the other program if you'd like.
*/
#include <unistd.h>
#include <stdio.h>
static void check(const char *name, int fd) {
if (isatty(fd)) {
printf("%s IS a tty: %s\n", name, ttyname(fd));
} else {
@Qix-
Qix- / Makefile
Last active Feb 15, 2019
Example of how syscall support could be added to Terra without any dependencies
View Makefile
.PHONY: all
all: bin/test-syscall
bin/test-syscall: test-syscall.t syscall-macos-x64.t
@mkdir -p bin
terra $<
.PHONY: clean
clean:
rm -rf bin
@Qix-
Qix- / icns.cmake
Created Jan 26, 2019
Build an ICNS based off a single PNG (ImageMagick) or SVG image (Inkscape)
View icns.cmake
# LICENSE: CC0 - go nuts.
# Hi :) This is what I used to generate the ICNS for my game, Tide.
# Both input formats (SVG vs PNG) work just fine, but in my experience
# the SVG came out with noticeably better results (although PNG wasn't
# a catastrophe either). The logo for the game was simple enough that
# SVG was indeed an option.
# To use:
#