rewrite antirez's kilo in zig
const std = @import("std");
const os = std.os;
const linux = std.os.linux;

var origTermios: os.termios = undefined;

pub fn main() anyerror!void {
    const stdin = std.io.getStdIn();
    try enableRawMode(stdin);
    defer disableRawMode(stdin);
    errdefer disableRawMode(stdin);

    var ch: [1]u8 = undefined;
    while(!std.mem.eql(u8, &ch, &.{'q'})) {
        _ = try stdin.read(&ch);
    }
}

fn enableRawMode(stdin: std.fs.File) anyerror!void {
    origTermios = try os.tcgetattr(stdin.handle);

    var termState = origTermios;
    termState.lflag &= ~@as(linux.tcflag_t, linux.ECHO);
    
    try os.tcsetattr(stdin.handle, linux.TCSA.FLUSH, termState);
}

fn disableRawMode(stdin: std.fs.File) void {
    os.tcsetattr(stdin.handle, linux.TCSA.FLUSH, origTermios) catch |err| {
        std.debug.print("{s}", .{err});
        return;
    };
}