You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
cancel 46416a7cf6 Add test osc midi sending 6 years ago
examples Added examples 6 years ago
thirdparty Add WIP timing stuff 6 years ago
.clang-format Add '!' (keys) operator 6 years ago
.gitignore Init with basic test 6 years ago
LICENSE.md Updated examples and README / Added LICENSE 6 years ago
Makefile Update tool and Makefile for separate config/target 6 years ago
README.md Change simulation stepping key to ctrl+f 6 years ago
bank.c Change to use scratch oevent list when predicting ui markers 6 years ago
bank.h Cleanup 6 years ago
base.h Add input mode display in tui hud 6 years ago
cli_main.c Add start of midi events 6 years ago
field.c Clean up resizing logic, make it work with undo history 6 years ago
field.h Clean up resizing logic, make it work with undo history 6 years ago
gbuffer.c Add partial support for resizing grids (WIP) 6 years ago
gbuffer.h Cleanup field.h/.c, move some stuff to gbuffer.h/.c 6 years ago
mark.c Rename Markmap_buffer to Mbuffer 6 years ago
mark.h Add typedef alias for U8 -> Mark 6 years ago
osc_out.c Fix padding math error 6 years ago
osc_out.h Add start of OSC output 6 years ago
sim.c Cleanup 6 years ago
sim.h Add start of midi events 6 years ago
tool Add start of OSC output 6 years ago
tui_main.c Add test osc midi sending 6 years ago

README.md

ORCΛ

Each letter of the alphabet is an operation, lowercase letters typically operate on bang(*), uppercase letters operate on each frame. Bangs can be generated by various operations, such as E colliding with a 0, see the bang.orca example. Watch a music video of ORCΛ in action.

C Port for the ORCΛ programming environment, with a commandline interpreter.

Prerequisites

Core library: A C99 compiler (no VLAs required), plus enough libc for malloc, realloc, free, memcpy, memset, and memmove.

Command-line interpreter: The above, plus POSIX, and enough libc for the common string operations (strlen, strcmp, etc.)

Interactive terminal UI: The above, plus ncurses (or compatible curses library).

Build

The build script is in bash. It should work with gcc (including the musl-gcc wrapper) and clang, and will automatically detect your compiler.

Currently known to build on macOS (gcc, clang) and Linux (gcc, musl-gcc, and clang, optionally with LLD).

Not yet tested on Windows, but it's likely that it already works under cygwin. Further testing will be performed soon.

There is a fire-and-forget make wrapper around the build script.

Make

make debug      # debugging build, binary placed at build/debug/orca
make release    # optimized build, binary placed at build/release/orca
make clean      # removes build/

Build Script

Run ./tool --help to see usage info. Examples:

./tool -c clang-7 build release orca
    # build the terminal ui with a compiler named
    # clang-7, with optimizations enabled.
    # binary placed at build/release/orca

./tool build debug cli
    # debug build of the headless CLI interpreter
    # binary placed at build/debug/cli

./tool clean
    # same as make clean, removes build/

Run

Interactive terminal UI

orca [options] [file]

Run the interactive terminal UI, useful for debugging or observing behavior. Pass -h or --help to see command-line argument usage.

Controls

  • ctrl+q: quit
  • Arrow keys or ctrl+h/j/k/l: move cursor
  • A-Z, a-z, 0-9, and other printable characters: write character to grid at cursor
  • Spacebar: play or pause
  • ctrl+f: step the simulation one tick forward
  • ctrl+u: undo
  • return or enter: change into or out of overwrite/append mode
  • /: change into or out of key-trigger mode (for the ! operator)
  • [ and ]: Adjust cosmetic grid rulers horizontally
  • { and }: Adjust cosmetic grid rulers vertically
  • ( and ): resize grid horizontally
  • _ and +: resize grid vertically

CLI interpreter

The CLI (cli binary) reads from a file and runs the orca simulation for 1 timestep (default) or a specified number (-t option) and writes the resulting state of the grid to stdout.

cli [-t timesteps] infile

You can also make cli read from stdin:

echo -e "...\na34\n..." | cli /dev/stdin

Extras

  • Support this project through Patreon.
  • See the License file for license rights and limitations (MIT).
  • Pull Requests are welcome!