const std = @import("std"); var stdout_buffer: [1024]u8 = undefined; var stdout_writer = std.fs.File.stdout().writer(&stdout_buffer); const stdout = &stdout_writer.interface; pub fn main() !void { var gpa = std.heap.GeneralPurposeAllocator(.{}){}; defer _ = gpa.deinit(); const allocator = gpa.allocator(); const args = try std.process.argsAlloc(allocator); defer std.process.argsFree(allocator, args); if (args.len < 3) { std.debug.print("Usage: {s} \n", .{args[0]}); std.process.exit(1); } const database_file_path: []const u8 = args[1]; const command: []const u8 = args[2]; if (std.mem.eql(u8, command, ".dbinfo")) { var file = try std.fs.cwd().openFile(database_file_path, .{}); defer file.close(); var buf: [2]u8 = undefined; _ = try file.seekTo(16); _ = try file.read(&buf); const page_size = std.mem.readInt(u16, &buf, .big); try stdout.print("database page size: {}\n", .{page_size}); _ = try file.seekTo(103); _ = try file.read(&buf); const num_tables = std.mem.readInt(u16, &buf, .big); try stdout.print("number of tables: {}\n", .{num_tables}); try stdout.flush(); } }