Compare commits

..

1 Commits

Author SHA1 Message Date
33adcfc104
main: print some stuff 2024-08-10 09:15:33 -07:00

View File

@ -3,6 +3,7 @@ const builtin = @import("builtin");
const vaxis = @import("vaxis"); const vaxis = @import("vaxis");
const xev = @import("xev"); const xev = @import("xev");
const Cell = vaxis.Cell;
const networking = @import("./networking.zig"); const networking = @import("./networking.zig");
const rotctl = @import("./rotctl.zig"); const rotctl = @import("./rotctl.zig");
@ -205,8 +206,49 @@ pub const RotInt = struct {
try self.vx.render(self.termbuffer.writer().any()); try self.vx.render(self.termbuffer.writer().any());
try self.termbuffer.flush(); try self.termbuffer.flush();
} }
};
fn terminalEvent( pub fn main() !void {
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
defer _ = gpa.deinit();
const alloc = gpa.allocator();
var tty = try vaxis.Tty.init();
defer tty.deinit();
var vx = try vaxis.init(alloc, .{});
defer vx.deinit(alloc, tty.anyWriter());
var pool = xev.ThreadPool.init(.{});
var loop = try xev.Loop.init(.{
.thread_pool = &pool,
});
defer loop.deinit();
var app: RotInt = .{
.allocator = alloc,
.termbuffer = tty.bufferedWriter(),
.vx = &vx,
.loop = &loop,
.poller = try xev.Timer.init(),
};
try app.initInPlace();
var vx_loop: vaxis.xev.TtyWatcher(RotInt) = undefined;
try vx_loop.init(&tty, &vx, &loop, &app, eventCallback);
try vx.enterAltScreen(tty.anyWriter());
try vx.queryTerminalSend(tty.anyWriter());
// Window size appears to be left uninitialized unless we manually set it here. This
// seems sketchy to me (tty fd should be nonblocking for the event loop)
const size = try vaxis.Tty.getWinsize(tty.fd);
vx.resize(alloc, tty.anyWriter(), size) catch @panic("TODO");
try loop.run(.until_done);
}
fn eventCallback(
self_: ?*RotInt, self_: ?*RotInt,
loop: *xev.Loop, loop: *xev.Loop,
watcher: *vaxis.xev.TtyWatcher(RotInt), watcher: *vaxis.xev.TtyWatcher(RotInt),
@ -261,44 +303,19 @@ pub const RotInt = struct {
} }
return .rearm; return .rearm;
} }
};
pub fn main() !void { fn timerCallback(
var gpa = std.heap.GeneralPurposeAllocator(.{}){}; ud: ?*RotInt,
defer _ = gpa.deinit(); loop: *xev.Loop,
completion: *xev.Completion,
err: xev.Timer.RunError!void,
) xev.CallbackAction {
_ = err catch @panic("timer error");
const alloc = gpa.allocator(); var app = ud orelse return .disarm;
app.draw() catch @panic("couldn't draw");
var tty = try vaxis.Tty.init(); const timer = xev.Timer.init() catch unreachable;
defer tty.deinit(); timer.run(loop, completion, 8, RotInt, app, timerCallback);
return .disarm;
var vx = try vaxis.init(alloc, .{});
defer vx.deinit(alloc, tty.anyWriter());
var pool = xev.ThreadPool.init(.{});
var loop = try xev.Loop.init(.{
.thread_pool = &pool,
});
defer loop.deinit();
var app: RotInt = .{
.allocator = alloc,
.termbuffer = tty.bufferedWriter(),
.vx = &vx,
.loop = &loop,
.poller = try xev.Timer.init(),
};
try app.initInPlace();
var vx_loop: vaxis.xev.TtyWatcher(RotInt) = undefined;
try vx_loop.init(&tty, &vx, &loop, &app, RotInt.terminalEvent);
try vx.enterAltScreen(tty.anyWriter());
try vx.queryTerminalSend(tty.anyWriter());
// Window size appears to be left uninitialized unless we manually set it here. This
// seems sketchy to me (tty fd should be nonblocking for the event loop)
const size = try vaxis.Tty.getWinsize(tty.fd);
vx.resize(alloc, tty.anyWriter(), size) catch @panic("TODO");
try loop.run(.until_done);
} }