74 lines
2.6 KiB
Zig
74 lines
2.6 KiB
Zig
//! Help overlay for the TUI.
|
|
|
|
const vaxis = @import("vaxis");
|
|
const vxfw = vaxis.vxfw;
|
|
const draw = @import("draw.zig");
|
|
const C = draw.C;
|
|
|
|
pub fn drawHelp(surface: *vxfw.Surface, width: u16, height: u16) void {
|
|
for (0..height) |r| {
|
|
draw.fillRow(surface, @intCast(r), ' ', .{});
|
|
}
|
|
|
|
var row: u16 = 1;
|
|
draw.writeStr(surface, row, 2, "Tally - Help", .{ .fg = C.cyan, .bold = true });
|
|
row += 2;
|
|
|
|
draw.writeStr(surface, row, 2, "Keybindings", .{ .fg = C.purple, .bold = true });
|
|
row += 1;
|
|
const keys = [_][2][]const u8{
|
|
.{ "Enter", "Evaluate expression" },
|
|
.{ "Tab", "Switch mode (Standard/Programmer)" },
|
|
.{ "Ctrl-C/D", "Quit" },
|
|
.{ "Ctrl-L", "Clear history" },
|
|
.{ "Up/Down", "Browse history" },
|
|
.{ "?", "Toggle this help" },
|
|
};
|
|
for (keys) |kv| {
|
|
draw.writeStr(surface, row, 4, kv[0], .{ .fg = C.yellow });
|
|
draw.writeStr(surface, row, 18, kv[1], .{ .fg = C.fg });
|
|
row += 1;
|
|
}
|
|
row += 1;
|
|
|
|
draw.writeStr(surface, row, 2, "Programmer Mode", .{ .fg = C.purple, .bold = true });
|
|
row += 1;
|
|
const prog_keys = [_][2][]const u8{
|
|
.{ "`", "Toggle input / value zone" },
|
|
.{ "Ctrl-W", "Cycle bit width (8/16/32/64/128)" },
|
|
.{ "Ctrl-E", "Toggle endianness (BE / LE)" },
|
|
.{ "Ctrl-F", "IEEE 754 float view (Ctrl-W: f32/f64)" },
|
|
.{ "Space", "Toggle bit (in grid)" },
|
|
.{ "Arrows", "Navigate fields and bits (value zone)" },
|
|
};
|
|
for (prog_keys) |kv| {
|
|
if (row >= height -| 4) break;
|
|
draw.writeStr(surface, row, 4, kv[0], .{ .fg = C.yellow });
|
|
draw.writeStr(surface, row, 18, kv[1], .{ .fg = C.fg });
|
|
row += 1;
|
|
}
|
|
row += 1;
|
|
|
|
if (row < height -| 6) {
|
|
draw.writeStr(surface, row, 2, "Functions", .{ .fg = C.purple, .bold = true });
|
|
row += 1;
|
|
draw.writeStr(surface, row, 4, "sin cos tan asin acos atan log ln sqrt abs", .{ .fg = C.fg });
|
|
row += 1;
|
|
draw.writeStr(surface, row, 4, "ceil floor round factorial max min exp", .{ .fg = C.fg });
|
|
row += 1;
|
|
}
|
|
|
|
if (row < height -| 4) {
|
|
row += 1;
|
|
draw.writeStr(surface, row, 2, "Operators", .{ .fg = C.purple, .bold = true });
|
|
row += 1;
|
|
draw.writeStr(surface, row, 4, "Standard: + - * / % ^ (power)", .{ .fg = C.fg });
|
|
row += 1;
|
|
draw.writeStr(surface, row, 4, "Programmer: & | ~ << >> >>> ^/** (pow) and or xor not rol ror", .{ .fg = C.fg });
|
|
row += 1;
|
|
}
|
|
|
|
draw.fillRow(surface, height -| 1, ' ', .{ .fg = C.muted });
|
|
draw.writeStr(surface, height -| 1, 1, "Press any key to return", .{ .fg = C.muted });
|
|
_ = width;
|
|
}
|