12 releases (5 breaking)
0.6.2 | Apr 18, 2024 |
---|---|
0.6.1 | Apr 18, 2024 |
0.5.0 | Apr 12, 2024 |
0.4.0 | Apr 11, 2024 |
0.1.4 | Apr 10, 2024 |
#97 in Command line utilities
995 downloads per month
33KB
798 lines
Hexo | 10110
Tiny binary writer utility, just enough for you
Installation
cargo install hexo
CLI
build
Takes source
file in hexo format and compiles it to binary file output
hexo build --source <path to source> --output <path to output>
watch
Takes source
file in hexo format and compiles it to binary file output
. Will recompile on source
file change
hexo watch --source <path to source> --output <path to output>
Syntax
Emitter
To emit a byte use glyph '>' fallowed by byte value:
> 0a // by default numbers are interpreted as hexadecimal, will emit decimal 10
> 'HelloWorld' // will emit utf-8 bytes of 'HelloWorld' string
> 10x22 // you can specifiy arbitrary radix in range 2..36, will emit decimal 22
Constants
To declare a constant use glyph '$' fallowed by constant name and value:
$ class_name 'HelloWorld'
Then you can use it as if you used hex or binary string by prefixing it with '$':
> $class_name
Declaring Functions
You can declare arbitrary functions using glyph '#' fallowed by function name and body:
# class_declaration {
> 0100
> #len($0)
> $0
}
Function arguments are referenced by their index: $0
, $1
, $2
, ...
Calling Functions
To call a function use glyph '#' fallowed by function name and arguments:
> #len('HelloWorld') // will emit length of 'HelloWorld' in bytes (0a)
> #pad_left(0x2, 0a) // will emit '00 0a'
> #pad_right(0x2, 0a) // will emit '0a 00'
Example
Let's write 'HelloWorld' Java class bytecode:
$ class_name 'HelloWorld'
$ object_superclass_name 'java/lang/Object'
# class_declaration {
> 0100
> #len($0)
> $0
}
> cafe babe // Magic number
> 0000 0034 // Java Bytecode version
> 0005 // Constant pool size
> 0700 02 // Class at index 2
> #class_declaration($class_name)
> 0700 04 // Class at index 4
> #class_declaration($object_superclass_name)
> 0021 // Supper public
> 0001 0003 // Class pointers
> 0000 0000 0000 0000 // No interfaces, fields, methods, attributes
Dependencies
~4–13MB
~136K SLoC