+5
-3
build.zig
+5
-3
build.zig
···
17
17
18
18
const exe = b.addExecutable(.{
19
19
.name = "DOOM-fire",
20
-
.root_source_file = b.path("src/main.zig"),
21
-
.target = target,
22
-
.optimize = optimize,
20
+
.root_module = b.createModule(.{
21
+
.root_source_file = b.path("src/main.zig"),
22
+
.target = target,
23
+
.optimize = optimize,
24
+
}),
23
25
});
24
26
25
27
//libc linking
+2
-2
build.zig.zon
+2
-2
build.zig.zon
···
10
10
11
11
// This is a [Semantic Version](https://semver.org/).
12
12
// In a future version of Zig it will be used for package deduplication.
13
-
.version = "0.14.0",
13
+
.version = "0.16.0-dev.1364+f0a3df98d",
14
14
15
15
// Together with name, this represents a globally unique package
16
16
// identifier. This field is generated by the Zig toolchain when the
···
28
28
29
29
// Tracks the earliest Zig version that the package considers to be a
30
30
// supported use case.
31
-
.minimum_zig_version = "0.14.0",
31
+
.minimum_zig_version = "0.16.0-dev.1364+f0a3df98d",
32
32
33
33
// This field is optional.
34
34
// Each dependency must either provide a `url` and `hash`, or a `path`.
+19
-25
src/main.zig
+19
-25
src/main.zig
···
8
8
9
9
const allocator = std.heap.page_allocator;
10
10
11
-
var stdout: std.fs.File.Writer = undefined;
12
-
var stdin: std.fs.File.Reader = undefined;
11
+
var stdout_file: std.fs.File = undefined;
12
+
var stdin_file: std.fs.File = undefined;
13
13
var g_tty_win: win32.HANDLE = undefined;
14
14
15
15
///////////////////////////////////
···
117
117
}
118
118
return;
119
119
} else {
120
-
const sz = try stdout.write(s);
121
-
if (sz == 0) {
122
-
return;
123
-
} // cauze I c
120
+
const sz = try stdout_file.writeAll(s);
121
+
_ = sz; // ignore return value
124
122
return;
125
123
}
126
124
}
···
211
209
212
210
pub fn getTermSzWin() !TermSz {
213
211
//Microsoft Windows Case
214
-
var info: win32.CONSOLE_SCREEN_BUFFER_INFO = .{ .dwSize = .{ .X = 0, .Y = 0 },
215
-
.dwCursorPosition = .{.X= 0, .Y= 0},
216
-
.wAttributes= 0,
217
-
.srWindow = .{ .Left = 0, .Top = 0, .Right = 0, .Bottom = 0},
218
-
.dwMaximumWindowSize = .{.X = 0, .Y = 0} };
212
+
var info: win32.CONSOLE_SCREEN_BUFFER_INFO = .{ .dwSize = .{ .X = 0, .Y = 0 }, .dwCursorPosition = .{ .X = 0, .Y = 0 }, .wAttributes = 0, .srWindow = .{ .Left = 0, .Top = 0, .Right = 0, .Bottom = 0 }, .dwMaximumWindowSize = .{ .X = 0, .Y = 0 } };
219
213
220
214
if (0 == win32.GetConsoleScreenBufferInfo(g_tty_win, &info)) switch (std.os.windows.kernel32.GetLastError()) {
221
215
else => |e| return std.os.windows.unexpectedError(e),
···
231
225
//Linux-MacOS Case
232
226
233
227
//base case - invoked from cmd line
234
-
const tty_nix = stdout.context.handle;
228
+
const tty_nix = std.fs.File.stdout().handle;
235
229
var winsz = std.c.winsize{ .col = 0, .row = 0, .xpixel = 0, .ypixel = 0 };
236
230
const rv = std.c.ioctl(tty_nix, TIOCGWINSZ, @intFromPtr(&winsz));
237
231
const err = std.posix.errno(rv);
···
338
332
339
333
try emit(color_reset);
340
334
try emit("Press return to continue...");
341
-
var b: u8 = undefined;
342
-
b = stdin.readByte() catch undefined;
335
+
var buffer: [1]u8 = undefined;
336
+
_ = stdin_file.read(buffer[0..]) catch undefined;
337
+
const b = buffer[0];
343
338
344
339
if (b == 'q') {
345
340
//exit cleanly
···
576
571
try emit(line_clear_to_eol);
577
572
try emit(nl);
578
573
579
-
std.time.sleep(10 * std.time.ns_per_ms);
574
+
std.posix.nanosleep(0, 10 * std.time.ns_per_ms);
580
575
}
581
576
582
577
//let quote chill for a second
583
-
std.time.sleep(1000 * std.time.ns_per_ms);
578
+
std.posix.nanosleep(1, 0);
584
579
585
580
//fade out
586
581
fade_idx = fade_len - 1;
···
598
593
try emit(txt[txt_idx * 2 + 1]);
599
594
try emit(line_clear_to_eol);
600
595
try emit(nl);
601
-
std.time.sleep(10 * std.time.ns_per_ms);
596
+
std.posix.nanosleep(0, 10 * std.time.ns_per_ms);
602
597
}
603
598
try emit(nl);
604
599
}
···
631
626
var bs_sz_max: u64 = 0;
632
627
var bs_sz_avg: u64 = 0;
633
628
var bs_frame_tic: u64 = 0;
634
-
var t_start: i64 = 0;
635
-
var t_now: i64 = 0;
629
+
var timer: std.time.Timer = undefined;
636
630
var t_dur: f64 = 0.0;
637
631
var fps: f64 = 0.0;
638
632
···
646
640
const bs_sz: u64 = screen_sz + overflow_sz;
647
641
648
642
bs = try allocator.alloc(u8, bs_sz * 2);
649
-
t_start = std.time.milliTimestamp();
643
+
timer = try std.time.Timer.start();
650
644
resetBuf();
651
645
}
652
646
···
668
662
//print buffer to string...can be a decent amount of text!
669
663
pub fn paintBuf() !void {
670
664
try emit(bs[0 .. bs_len - 1]);
671
-
t_now = std.time.milliTimestamp();
665
+
const elapsed_ns = timer.read();
672
666
bs_frame_tic += 1;
673
667
if (bs_sz_min == 0) {
674
668
//first frame
···
685
679
bs_sz_avg = bs_sz_avg * (bs_frame_tic - 1) / bs_frame_tic + bs_len / bs_frame_tic;
686
680
}
687
681
688
-
t_dur = @as(f64, @floatFromInt(t_now - t_start)) / 1000.0;
682
+
t_dur = @as(f64, @floatFromInt(elapsed_ns)) / @as(f64, std.time.ns_per_s);
689
683
fps = @as(f64, @floatFromInt(bs_frame_tic)) / t_dur;
690
684
691
685
try emit(fg[0]);
692
-
try emitFmt("mem: {s:.2} min / {s:.2} avg / {s:.2} max [ {d:.2} fps ]", .{ std.fmt.fmtIntSizeBin(bs_sz_min), std.fmt.fmtIntSizeBin(bs_sz_avg), std.fmt.fmtIntSizeBin(bs_sz_max), fps });
686
+
try emitFmt("mem: {d} min / {d} avg / {d} max [ {d:.2} fps ]", .{ bs_sz_min, bs_sz_avg, bs_sz_max, fps });
693
687
}
694
688
695
689
// initBuf(); defer freeBuf();
···
835
829
///////////////////////////////////
836
830
837
831
pub fn main() anyerror!void {
838
-
stdout = std.io.getStdOut().writer();
839
-
stdin = std.io.getStdIn().reader();
832
+
stdout_file = std.fs.File.stdout();
833
+
stdin_file = std.fs.File.stdin();
840
834
841
835
try initTerm();
842
836
defer complete() catch {};