Graphics frame
import "../src/stdlib/graphics.stasis";
function render(): i32 {
begin_frame();
clear(0.05, 0.05, 0.10, 1.0);
fill_rect(20.0, 20.0, 80.0, 24.0, 1.0, 1.0, 1.0, 1.0);
end_frame();
return 0;
}Exact signatures from the 15 public top-level modules. Internal and testing modules are excluded.
15 modules · 253 top-level function declarations
This generated snapshot normalizes whitespace only. Annotations, extern identities, effects, asset paths, and receiver self parameters remain visible. sdl_scancodes contributes the Scancode enum and no functions.
Small compositions using the public APIs above.
import "../src/stdlib/graphics.stasis";
function render(): i32 {
begin_frame();
clear(0.05, 0.05, 0.10, 1.0);
fill_rect(20.0, 20.0, 80.0, 24.0, 1.0, 1.0, 1.0, 1.0);
end_frame();
return 0;
}import "../src/stdlib/collision.stasis"; let hit = aabb_intersects( player.x, player.y, player.x + 16.0, player.y + 16.0, goal.x, goal.y, goal.x + 16.0, goal.y + 16.0 );
import "../src/stdlib/storage.stasis";
let saved = storage_save_i32("profile", "score", state.score);
let best = storage_load_i32("profile", "score", 0);Fixed-layout asset handles and asynchronous loading state.
function reset(self: LoadingProgress): void
function advance(self: LoadingProgress, total_count: i32, loaded_count: i32, failed_count: i32): i32
function complete(self: LoadingProgress): bool
function successful(self: LoadingProgress): bool
function @effects(graphics)@extern("stasis_jit_asset_request_sprite") asset_request_sprite(path: string, width: i32, height: i32): i32
function @effects(audio)@extern("stasis_jit_asset_request_audio") asset_request_audio(path: string): i32
function @effects(platform)@extern("stasis_jit_asset_task_poll") asset_task_state(request: i32): AssetState
function @effects(platform)@extern("stasis_jit_asset_task_take_handle") asset_task_take_handle(request: i32): i32
function @effects(platform)@extern("stasis_jit_asset_task_cancel") asset_task_cancel(request: i32): void
function @effects(graphics)@extern("stasis_jit_gfx_release_sprite") gfx_release_sprite(handle: i32): void
extern function @effects(audio) audio_release(asset_handle: i32): void
function reset_image(self: ImageAsset): void
function reset_audio(self: AudioAsset): void
function release(self: ImageAsset): void
function release(self: AudioAsset): void
function release(self: Sprite): void
function @asset_path(path) load_image(self: ImageAsset, path: string, width: i32, height: i32): bool
function @asset_path(path) load_audio(self: AudioAsset, path: string): bool
function status(self: ImageAsset): AssetState
function status(self: AudioAsset): AssetState
function ready(self: ImageAsset): bool
function ready(self: AudioAsset): bool
function failed(self: ImageAsset): bool
function failed(self: AudioAsset): boolAudio playback, handles, and the host audio boundary.
function play(self: AudioAsset, loop: bool, volume: f32, pan: f32): i32
function play_effect(self: AudioAsset, volume: f32): bool
function play_music(self: AudioAsset, loop: bool, volume: f32): bool
function stop_music(self: AudioAsset): void
function pause_music(self: AudioAsset, paused: bool): void
function set_music_volume(self: AudioAsset, volume: f32): void
extern function @effects(audio) audio_init(sample_rate: i32, channels: i32, target_latency_frames: i32): bool
extern function @effects(audio) audio_shutdown(): void
extern function @effects(audio) audio_is_available(): bool
extern function @effects(audio) audio_get_sample_rate(): i32
extern function @effects(audio) audio_get_channels(): i32
extern function @effects(audio) audio_get_queued_frames(): i32
extern function @effects(audio) audio_get_underruns(): i32
extern function @effects(audio) audio_push_f32_interleaved(samples: f32[], frame_count: i32): i32
extern function @effects(audio)@asset_path(path) audio_load_wav(path: string): i32
extern function @effects(audio) audio_play(asset_handle: i32, loop: bool, volume: f32, pan: f32): i32
extern function @effects(audio) audio_stop(voice_handle: i32): void
extern function @effects(audio) audio_voice_is_playing(voice_handle: i32): bool
extern function @effects(audio) audio_voice_set_paused(voice_handle: i32, paused: bool): void
extern function @effects(audio) audio_voice_set_volume_pan(voice_handle: i32, volume: f32, pan: f32): void
function @effects(audio)@asset_path(path)@extern("stasis_jit_audio_load_music") audio_load_music(path: string): i32
function @effects(audio)@asset_path(path)@extern("stasis_jit_audio_load_effect") audio_load_effect(path: string): i32
function @effects(audio)@extern("stasis_jit_audio_play_music") audio_play_music(asset_handle: i32, loop: bool, volume: f32): bool
function @effects(audio)@extern("stasis_jit_audio_stop_music") audio_stop_music(asset_handle: i32): void
function @effects(audio)@extern("stasis_jit_audio_pause_music") audio_pause_music(asset_handle: i32, paused: bool): void
function @effects(audio)@extern("stasis_jit_audio_set_music_volume") audio_set_music_volume(asset_handle: i32, volume: f32): void
function @effects(audio)@extern("stasis_jit_audio_play_effect") audio_play_effect(asset_handle: i32, volume: f32): boolSmall clipboard read/write helpers for host integrations.
function @effects(platform)@extern("stasis_jit_clipboard_load_ascii") clipboard_load_ascii_raw(out: ascii[], capacity: i32): i32
function @effects(platform)@extern("stasis_jit_clipboard_save_ascii") clipboard_save_ascii_raw(value: ascii[], length: i32): i32
function clipboard_load_ascii(out: ascii[]): i32
function clipboard_save_ascii(value: ascii[]): boolDeterministic rectangle and primitive collision helpers.
function @inline aabb_intersects(
minimum_x: f32,
minimum_y: f32,
maximum_x: f32,
maximum_y: f32,
other_minimum_x: f32,
other_minimum_y: f32,
other_maximum_x: f32,
other_maximum_y: f32
): bool
function @inline aabb_contains_point(minimum_x: f32, minimum_y: f32, maximum_x: f32, maximum_y: f32, point_x: f32, point_y: f32): bool
function @inline circle_intersects(x: f32, y: f32, radius: f32, other_x: f32, other_y: f32, other_radius: f32): bool
function @inline circle_contains_point(x: f32, y: f32, radius: f32, point_x: f32, point_y: f32): boolBounded flex-style layout calculations for UI composition.
function flex_max_f32(a: f32, b: f32): f32
function flex_min_i32(a: i32, b: i32): i32
function flex_rect_set(rect: f32[], x: f32, y: f32, w: f32, h: f32): void
function flex_rect_set_at(rects: f32[], index: i32, x: f32, y: f32, w: f32, h: f32): void
function flex_rect_x(rects: f32[], index: i32): f32
function flex_rect_y(rects: f32[], index: i32): f32
function flex_rect_w(rects: f32[], index: i32): f32
function flex_rect_h(rects: f32[], index: i32): f32
function flex_measure_box(out_size: f32[], inner_w: f32, inner_h: f32, pad_x: f32, pad_y: f32): void
function flex_measure_text_box(out_size: f32[], font: i32, text: string, line_h: f32, pad_x: f32, pad_y: f32): void
function flex_measure_text_run_box(out_size: f32[], run: TextRun, line_h: f32, pad_x: f32, pad_y: f32): void
function flex_main_total(item_main: f32[], count: i32, gap: f32): f32
function flex_row(out_rects: f32[], parent: f32[], item_w: f32[], item_h: f32[], count: i32, gap: f32, justify: i32, align: i32): void
function flex_column(out_rects: f32[], parent: f32[], item_w: f32[], item_h: f32[], count: i32, gap: f32, justify: i32, align: i32): void
function flex_grid(out_rects: f32[], parent: f32[], item_w: f32[], item_h: f32[], count: i32, columns: i32, col_gap: f32, row_gap: f32): voidA fixed-size frame sample window for simple timing diagnostics.
function frame_timer_reset_index(): i32
function frame_timer_init(samples_ms: i32[120]): void
function frame_timer_push(samples_ms: i32[120], sample_index: i32, value_ms: i32): i32
function frame_timer_avg_tenths(samples_ms: i32[120]): i32
function frame_timer_max(samples_ms: i32[120]): i32Window, input, drawing, sprites, text, and animation primitives.
extern function @effects(nondeterministic) sleep_ms(ms: i32): void
function get_time_ms(): i32
function get_time_us(): i32
extern function @effects(graphics) gfx_poll_reload(handle: i32): bool
extern function @effects(graphics, storage) gfx_dump_bmp(path: string): i32
extern function @effects(graphics, storage) gfx_dump_png(path: string): i32
extern function @effects(graphics)@asset_path(path) load_font(path: string, size: i32): i32
extern function @effects(graphics) measure_text(font: i32, text: string): f32
function @effects(graphics)@asset_path(path)@extern("stasis_jit_sprite_load_from") load_sprite_from(
self: Sprite,
path: string,
width: i32,
height: i32
): bool
function @effects(graphics)@extern("stasis_jit_sprite_load_from") load_sprite_sheet_asset_from(
self: SpriteSheet,
path: string,
width: i32,
height: i32
): bool
function publish(self: ImageAsset, target: Sprite): bool
function draw(self: Sprite, x: f32, y: f32, alpha: i32, rotation: i32): void
function load_sprite_sheet_from(self: SpriteSheet, path: string, columns: i32, rows: i32, cell_width: i32, cell_height: i32): bool
function draw_frame(self: SpriteSheet, frame: i32, x: f32, y: f32, alpha: i32, rotation: i32): void
function animation_frame_at(first_frame: i32, frame_count: i32, ticks_per_frame: i32, playback_mode: i32, elapsed_ticks: i32): i32
function animation_finished(frame_count: i32, ticks_per_frame: i32, playback_mode: i32, elapsed_ticks: i32): bool
function frame_at(self: AnimationClip, elapsed_ticks: i32): i32
function finished(self: AnimationClip, elapsed_ticks: i32): bool
function @effects(graphics)@extern("stasis_jit_text_run_load_from") load_text_from(self: TextRun, font: i32, text: string): bool
function draw(self: TextRun, x: f32, y: f32, r: f32, g: f32, b: f32, a: f32): void
function get_desktop_size(out_w: i32[], out_h: i32[]): void
function init_window(width: i32, height: i32, title: string): bool
function set_window_size(width: i32, height: i32): void
function set_fullscreen(enabled: i32): i32
function set_maximized(enabled: i32): i32
function set_maximized_canvas(width: i32, height: i32): i32
function begin_frame(): void
function end_frame(): void
function clear(r: f32, g: f32, b: f32, a: f32): void
function draw_line(x1: f32, y1: f32, x2: f32, y2: f32, r: f32, g: f32, b: f32, a: f32): void
function fill_rect(x: f32, y: f32, w: f32, h: f32, r: f32, g: f32, b: f32, a: f32): void
function draw_lines(lines: f32[], count: i32): void
function gfx_draw_sprites(cmd_i32: i32[], cmd_f32: f32[], count: i32): void
function gfx_window_resized(): bool
function gfx_logical_width(): f32
function gfx_logical_height(): f32
function gfx_native_width_px(): i32
function gfx_native_height_px(): i32
function gfx_drawable_width_px(): i32
function gfx_drawable_height_px(): i32
function gfx_safe_viewport_x(): f32
function gfx_safe_viewport_y(): f32
function gfx_safe_viewport_width(): f32
function gfx_safe_viewport_height(): f32
function gfx_content_scale(): f32
function gfx_raster_scale(): f32
function gfx_display_generation(): i32
function gfx_density_generation(): i32
function is_key_down(scancode: i32): bool
function should_quit(): bool
function input_pointer_count(): i32
function input_pointer_id(index: i32): i32
function input_pointer_is_down(index: i32): bool
function input_pointer_went_down(index: i32): bool
function input_pointer_went_up(index: i32): bool
function input_pointer_x_logical(index: i32): f32
function input_pointer_y_logical(index: i32): f32
function input_pointer_dx_logical(index: i32): f32
function input_pointer_dy_logical(index: i32): f32
function input_pointer_x_n(index: i32): f32
function input_pointer_y_n(index: i32): f32
function input_dropped_pointers(): i32Compact table layout helpers for heads-up displays.
function hud_clamp(value: i32, minimum: i32, maximum: i32): i32
function hud_rect_set(out_r: f32[], x: f32, y: f32, w: f32, h: f32): void
function hud_table_width(col_w: f32[], col_count: i32, col_gap: f32): f32
function hud_table_height(row_count: i32, row_h: f32, row_gap: f32): f32
function hud_table_place(out_table: f32[], parent: f32[], table_w: f32, table_h: f32, anchor: i32, pad_x: f32, pad_y: f32): void
function hud_table_cell_x(table: f32[], col_w: f32[], col_count: i32, col_gap: f32, col: i32): f32
function hud_table_cell_w(col_w: f32[], col_count: i32, col: i32): f32
function hud_table_cell_y(table: f32[], row_h: f32, row_gap: f32, row: i32): f32
function hud_table_cell_h(row_h: f32): f32
function hud_table_cell_rect(
out_cell: f32[],
table: f32[],
col_w: f32[],
col_count: i32,
col_gap: f32,
row_h: f32,
row_gap: f32,
col: i32,
row: i32
): voidChecked fixed-array copy, move, set, and zero operations.
extern function @effects(memory) sys_memcpy_u8(dst: u8[], dst_index: i32, src: u8[], src_index: i32, count: i32): void
extern function @effects(memory) sys_memcpy_i32(dst: i32[], dst_index: i32, src: i32[], src_index: i32, count: i32): void
extern function @effects(memory) sys_memcpy_f32(dst: f32[], dst_index: i32, src: f32[], src_index: i32, count: i32): void
extern function @effects(memory) sys_memmove_u8(dst: u8[], dst_index: i32, src: u8[], src_index: i32, count: i32): void
extern function @effects(memory) sys_memmove_i32(dst: i32[], dst_index: i32, src: i32[], src_index: i32, count: i32): void
extern function @effects(memory) sys_memmove_f32(dst: f32[], dst_index: i32, src: f32[], src_index: i32, count: i32): void
function mem_copy_u8(dst: u8[], dst_cap: i32, dst_index: i32, src: u8[], src_cap: i32, src_index: i32, count: i32): i32
function mem_copy_u8_checked(dst: u8[], dst_cap: i32, dst_index: i32, src: u8[], src_cap: i32, src_index: i32, count: i32): bool
function mem_set_u8(dst: u8[], dst_cap: i32, dst_index: i32, value: u8, count: i32): i32
function mem_zero_u8(dst: u8[], dst_cap: i32, dst_index: i32, count: i32): i32
function mem_copy_i32(dst: i32[], dst_cap: i32, dst_index: i32, src: i32[], src_cap: i32, src_index: i32, count: i32): i32
function mem_copy_i32_checked(dst: i32[], dst_cap: i32, dst_index: i32, src: i32[], src_cap: i32, src_index: i32, count: i32): bool
function mem_set_i32(dst: i32[], dst_cap: i32, dst_index: i32, value: i32, count: i32): i32
function mem_zero_i32(dst: i32[], dst_cap: i32, dst_index: i32, count: i32): i32
function mem_copy_f32(dst: f32[], dst_cap: i32, dst_index: i32, src: f32[], src_cap: i32, src_index: i32, count: i32): i32
function mem_copy_f32_checked(dst: f32[], dst_cap: i32, dst_index: i32, src: f32[], src_cap: i32, src_index: i32, count: i32): bool
function mem_set_f32(dst: f32[], dst_cap: i32, dst_index: i32, value: f32, count: i32): i32
function mem_zero_f32(dst: f32[], dst_cap: i32, dst_index: i32, count: i32): i32The Scancode enum used by keyboard input functions; representative values include Left, Right, Space, and Escape.
Core character, ASCII, UTF-8, conversion, and utility functions.
extern function @effects(code_swap) reject_code_swap(): void
function print(value: i32): void
function print(value: string): void
function to_i32(value: u8): i32
function to_u8_trunc(value: i32): u8
function char_is_digit(b: u8): bool
function char_is_upper(b: u8): bool
function char_is_lower(b: u8): bool
function char_is_alpha(b: u8): bool
function char_is_alnum(b: u8): bool
function char_is_space(b: u8): bool
function char_is_hex(b: u8): bool
function char_is_print(b: u8): bool
function char_is_ascii(b: u8): bool
function char_to_upper(b: u8): u8
function char_to_lower(b: u8): u8
function char_to_digit(b: u8): i32
function char_from_digit(d: i32): u8
function char_to_hex(b: u8): i32
function char_from_hex(d: i32): u8
function length(s: ascii[]): i32
function ascii_max_length(s: ascii[]): i32
function ascii_scan_limit(s: ascii[]): i32
function ascii_set_len(s: ascii[], len: i32)
function ascii_is_empty(s: ascii[]): bool
function ascii_get(s: ascii[], index: i32): u8
function ascii_set(s: ascii[], index: i32, b: u8)
function ascii_recount(s: ascii[]): i32
function ascii_clear(s: ascii[])
function ascii_copy(dst: ascii[], src: ascii[]): i32
function ascii_append(dst: ascii[], src: ascii[]): i32
function ascii_push(dst: ascii[], b: u8): i32
function ascii_push_i32(dst: ascii[], value: i32): void
function ascii_cmp(a: ascii[], b: ascii[]): i32
function ascii_eq(a: ascii[], b: ascii[]): bool
function ascii_find_byte(s: ascii[], b: u8): i32
function ascii_find_last_byte(s: ascii[], b: u8): i32
function ascii_starts_with(s: ascii[], prefix: ascii[]): bool
function ascii_ends_with(s: ascii[], suffix: ascii[]): bool
function ascii_find(s: ascii[], needle: ascii[]): i32
function ascii_contains(s: ascii[], needle: ascii[]): bool
function utf8_max_length(s: utf8[]): i32
function length_bytes(s: utf8[]): i32
function length_chars(s: utf8[]): i32
function utf8_set_byte_len(s: utf8[], len: i32): void
function utf8_set_char_len(s: utf8[], len: i32): void
function utf8_set_len_ascii(s: utf8[], len: i32): void
function utf8_clear_ascii(s: utf8[]): void
function utf8_from_ascii(dst: utf8[], src: ascii[], dst_max: i32): i32Scoped persistent storage for integers and fixed ASCII values.
extern function @effects(storage) storage_load_i32(scope: string, key: string, fallback: i32): i32
extern function @effects(storage) storage_save_i32(scope: string, key: string, value: i32): bool
function @effects(storage)@extern("stasis_jit_storage_load_ascii") storage_load_ascii_raw(scope: string, key: string, out: ascii[], capacity: i32): i32
function @effects(storage)@extern("stasis_jit_storage_save_ascii") storage_save_ascii_raw(scope: string, key: string, value: ascii[], length: i32): i32
function storage_load_ascii(scope: string, key: string, out: ascii[]): i32
function storage_save_ascii(scope: string, key: string, value: ascii[]): boolAxis alignment enums and placement helpers.
function @inline ui_place_x(parent_x: f32, parent_width: f32, child_width: f32, horizontal: UiHorizontal): f32
function @inline ui_place_y(parent_y: f32, parent_height: f32, child_height: f32, vertical: UiVertical): f32Nine-slice button geometry and row placement helpers.
function ui_draw_sprite(handle: i32, x: f32, y: f32, w: f32, h: f32, a: i32): void
function ui_row_button_width(available_w: f32, count: i32, gap: f32): f32
function ui_row_button_x(start_x: f32, index: i32, button_w: f32, gap: f32): f32
function ui_draw_9slice(
top_left: i32,
top: i32,
top_right: i32,
left: i32,
center: i32,
right: i32,
bottom_left: i32,
bottom: i32,
bottom_right: i32,
slice_w: f32,
slice_h: f32,
x: f32,
y: f32,
w: f32,
h: f32
): void
function ui_draw_button_9slice(
top_left: i32,
top: i32,
top_right: i32,
left: i32,
center: i32,
right: i32,
bottom_left: i32,
bottom: i32,
bottom_right: i32,
slice_w: f32,
slice_h: f32,
x: f32,
y: f32,
w: f32,
h: f32,
label: string,
font_handle: i32,
text_r: f32,
text_g: f32,
text_b: f32,
text_a: f32,
icon_handle: i32,
icon_aspect: f32,
icon_pad: f32,
text_pad: f32
): voidAssertions and measurements for checking UI geometry.
function ui_audit_abs(value: f32): f32
function ui_audit_center_delta_x(parent_x: f32, parent_width: f32, child_x: f32, child_width: f32): f32
function ui_audit_center_delta_y(parent_y: f32, parent_height: f32, child_y: f32, child_height: f32): f32
function ui_audit_left_gap(parent_x: f32, child_x: f32): f32
function ui_audit_right_gap(parent_x: f32, parent_width: f32, child_x: f32, child_width: f32): f32
function ui_audit_top_gap(parent_y: f32, child_y: f32): f32
function ui_audit_bottom_gap(parent_y: f32, parent_height: f32, child_y: f32, child_height: f32): f32
function ui_audit_equal(a: f32, b: f32, tolerance: f32): bool
function ui_audit_centered_x(parent_x: f32, parent_width: f32, child_x: f32, child_width: f32, tolerance: f32): bool
function ui_audit_centered_y(parent_y: f32, parent_height: f32, child_y: f32, child_height: f32, tolerance: f32): bool
function ui_audit_contains_axis(parent_start: f32, parent_length: f32, child_start: f32, child_length: f32, tolerance: f32): bool
function ui_audit_overlap_x(first_x: f32, first_width: f32, second_x: f32, second_width: f32): f32
function ui_audit_overlap_y(first_y: f32, first_height: f32, second_y: f32, second_height: f32): f32
function ui_audit_rects_overlap(
first_x: f32,
first_y: f32,
first_width: f32,
first_height: f32,
second_x: f32,
second_y: f32,
second_width: f32,
second_height: f32
): bool
function ui_audit_milli(value: f32): i32
function ui_audit_print_bool(value: bool): void
function ui_audit_rect(id: string, role: string, x: f32, y: f32, width: f32, height: f32): void
function ui_audit_text(id: string, x: f32, y: f32, width: f32, height: f32, font_size: i32): void
function ui_audit_baseline_check(first_id: string, second_id: string, first_y: f32, second_y: f32, tolerance: f32): void
function ui_audit_center_check(axis: string, child_id: string, parent_id: string, delta: f32, tolerance: f32): void
function ui_audit_padding_axis(
axis: string,
id: string,
parent_id: string,
parent_start: f32,
parent_length: f32,
child_start: f32,
child_length: f32,
tolerance: f32
): void
function ui_audit_overlap_axis(
axis: string,
first_id: string,
second_id: string,
first_start: f32,
first_length: f32,
second_start: f32,
second_length: f32,
overlap_expected: bool
): void