From c817170a0423fa65ef28aa15e512db9284edeaa9 Mon Sep 17 00:00:00 2001 From: Luna Date: Wed, 27 Apr 2022 20:01:09 -0300 Subject: [PATCH] port to latest zig: use std.log --- build.zig | 6 +++--- src/bmp_valid.zig | 5 ++--- src/custom.zig | 3 ++- src/image.zig | 41 +++++++++++++++++++++-------------------- src/lang.zig | 13 +++++++------ src/lv2_helpers.zig | 8 +++++--- src/magick.zig | 7 ++++--- src/main.zig | 18 ++++++++++-------- src/plugin.zig | 5 +++-- src/printer.zig | 2 ++ src/runner.zig | 16 +++++++++------- 11 files changed, 68 insertions(+), 56 deletions(-) diff --git a/build.zig b/build.zig index 467240c..f7b08f9 100644 --- a/build.zig +++ b/build.zig @@ -24,19 +24,19 @@ fn setupLinks(step: *builds.LibExeObjStep) void { for (possible_lilv_include_dirs) |possible_lilv_dir| { var possible_dir = std.fs.cwd().openDir(possible_lilv_dir, .{}) catch |err| { - std.debug.warn("possible lilv {s} fail: {s}\n", .{ possible_lilv_dir, err }); + std.debug.print("possible lilv {s} fail: {s}\n", .{ possible_lilv_dir, err }); continue; }; possible_dir.close(); found_any_lilv = true; - std.debug.warn("found lilv at '{s}'\n", .{possible_lilv_dir}); + std.debug.print("found lilv at '{s}'\n", .{possible_lilv_dir}); step.addIncludeDir(possible_lilv_dir); } if (!found_any_lilv) { - std.debug.warn("No LILV library was found :(\n", .{}); + std.debug.print("No LILV library was found :(\n", .{}); @panic("no lilv found"); } } diff --git a/src/bmp_valid.zig b/src/bmp_valid.zig index 6468658..55970b8 100644 --- a/src/bmp_valid.zig +++ b/src/bmp_valid.zig @@ -1,11 +1,10 @@ const std = @import("std"); - +const log = std.log.scoped(.scritcher_bmp); pub const BMPValidError = error{InvalidMagic}; const VALID_MAGICS = [_][]const u8{ "BM", "BA", - "CI", "CP", "IC", @@ -20,7 +19,7 @@ pub fn magicValid(magic: []const u8) !void { } if (!valid) { - std.debug.warn("\tINVALID HEADER: '{s}'\n", .{magic}); + log.debug("\tINVALID HEADER: '{s}'\n", .{magic}); return BMPValidError.InvalidMagic; } } diff --git a/src/custom.zig b/src/custom.zig index 03120f0..401b39f 100644 --- a/src/custom.zig +++ b/src/custom.zig @@ -4,6 +4,7 @@ const lv2 = @import("lv2_helpers.zig"); const plugins = @import("plugin.zig"); const image = @import("image.zig"); +const log = std.log.scoped(.scritcher_custom); const c = lv2.c; const RunBuffers = plugins.RunBuffers; @@ -174,7 +175,7 @@ pub const Embed = struct { if (read_bytes < 0) { const st: i32 = c.sf_error(self.sndfile); - std.debug.warn("Failed to read {s} ({s})\n", .{ + log.debug("Failed to read {s} ({s})\n", .{ self.filepath, c.sf_error_number(st), }); diff --git a/src/image.zig b/src/image.zig index b6e13ae..4a01845 100644 --- a/src/image.zig +++ b/src/image.zig @@ -3,6 +3,7 @@ const lv2 = @import("lv2_helpers.zig"); const c = lv2.c; const bmp = @import("bmp_valid.zig"); +const log = std.log.scoped(.scritcher_image); const plugins = @import("plugin.zig"); /// Buffer size for main image copying. @@ -32,7 +33,7 @@ pub fn sopen( const st: i32 = c.sf_error(file); if (st != 0) { - std.debug.warn("Failed to open {s} ({s})\n", .{ + log.debug("Failed to open {s} ({s})\n", .{ path, c.sf_error_number(st), }); @@ -47,7 +48,7 @@ pub fn sopen( const frames_on_end_by_end = c.sf_seek(file, frames_on_end, c.SEEK_SET); std.testing.expectEqual(frames_on_end, frames_on_end_by_end); - std.debug.warn("frames on end: {}, frame on end (2): {}\n", .{ frames_on_end, frames_on_end_by_end }); + log.debug("frames on end: {}, frame on end (2): {}\n", .{ frames_on_end, frames_on_end_by_end }); return file.?; } @@ -56,7 +57,7 @@ pub fn swrite(file: *c.SNDFILE, buf: [*]f32, frames: i64) !void { const count = c.sf_writef_float(file, buf, frames); if (count != frames) { - std.debug.warn("Wanted to write {}, got {}\n", .{ frames, count }); + log.debug("Wanted to write {}, got {}\n", .{ frames, count }); return ImageError.WriteFail; } } @@ -68,7 +69,7 @@ pub fn sseek(file: *c.SNDFILE, offset: usize) void { std.testing.expectEqual(frames, frames_current); if (frames != offset_i64) { - std.debug.warn("failed to seek to {} (seeked {} frames, offset_i64={})\n", .{ offset, frames, offset_i64 }); + log.debug("failed to seek to {} (seeked {} frames, offset_i64={})\n", .{ offset, frames, offset_i64 }); } } @@ -181,7 +182,7 @@ pub const Image = struct { pub fn close(self: *Image) void { var st: i32 = c.sf_close(self.sndfile); if (st != 0) { - std.debug.warn("Failed to close {s} ({s})\n", .{ + log.debug("Failed to close {s} ({s})\n", .{ self.path, c.sf_error_number(st), }); @@ -228,7 +229,7 @@ pub const Image = struct { sseek(out_file, start); while (i <= end) : (i += buf.len) { - std.debug.warn("\t\ti={d}, buf.len={d}, end={d}\n", .{ i, buf.len, end }); + log.debug("\t\ti={d}, buf.len={d}, end={d}\n", .{ i, buf.len, end }); sseek(self.sndfile, i); sseek(out_file, i); @@ -254,7 +255,7 @@ pub const Image = struct { fn getSeekPos(self: *Image, position: plugins.Position) plugins.SeekPos { const file_end = self.frames; var seek_pos = position.seekPos(file_end); - std.debug.warn("\tstart {d} end {d}\n", .{ seek_pos.start, seek_pos.end }); + log.debug("\tstart {d} end {d}\n", .{ seek_pos.start, seek_pos.end }); return seek_pos; } @@ -267,7 +268,7 @@ pub const Image = struct { self.curpath = path; self.frames = @intCast(usize, in_fmt.frames); - std.debug.warn("\timage: reopened on '{s}' (frames={d}, fmt.frames={d})\n", .{ + log.debug("\timage: reopened on '{s}' (frames={d}, fmt.frames={d})\n", .{ self.curpath, self.frames, in_fmt.frames, @@ -310,12 +311,12 @@ pub const Image = struct { defer ctx.allocator.free(ports); if (ctx.n_audio_in > 2) { - std.debug.warn("plugin <{s}> has more than two inputs.\n", .{plugin_uri}); + log.debug("plugin <{s}> has more than two inputs.\n", .{plugin_uri}); return ImageError.InvalidPlugin; } if (ctx.n_audio_out > 2) { - std.debug.warn("plugin <{s}> has more than two outputs.\n", .{plugin_uri}); + log.debug("plugin <{s}> has more than two outputs.\n", .{plugin_uri}); return ImageError.InvalidPlugin; } @@ -327,14 +328,14 @@ pub const Image = struct { var sym = c.lilv_new_string(ctx.world, sym_cstr.ptr); const port = c.lilv_plugin_get_port_by_symbol(ctx.plugin, sym) orelse { - std.debug.warn("assert fail: symbol {s} not found on port\n", .{param.sym}); + log.debug("assert fail: symbol {s} not found on port\n", .{param.sym}); return ImageError.InvalidSymbol; }; c.lilv_node_free(sym); var idx = c.lilv_port_get_index(ctx.plugin, port); - std.debug.warn("\tset sym={s}, idx={d} to val={}\n", .{ + log.debug("\tset sym={s}, idx={d} to val={}\n", .{ param.sym, idx, param.value, @@ -345,7 +346,7 @@ pub const Image = struct { // now we need to generate a temporary file and put the output of // running the plugin on that file var tmpnam = try temporaryName(self.allocator); - std.debug.warn("\trunning plugin from '{s}' to '{s}'\n", .{ self.curpath, tmpnam }); + log.debug("\trunning plugin from '{s}' to '{s}'\n", .{ self.curpath, tmpnam }); var out_fmt = mkSfInfo(); var out_file = try sopen(self.allocator, tmpnam, c.SFM_WRITE, &out_fmt); @@ -378,7 +379,7 @@ pub const Image = struct { sseek(self.sndfile, seek_pos.start); var i: usize = seek_pos.start; - std.debug.warn("\tseek pos start: {d} end: {d}\n", .{ seek_pos.start, seek_pos.end }); + log.debug("\tseek pos start: {d} end: {d}\n", .{ seek_pos.start, seek_pos.end }); var inbuf = &rctx.buffers.in; var outbuf = &rctx.buffers.out; @@ -389,7 +390,7 @@ pub const Image = struct { const read_bytes = c.sf_readf_float(self.sndfile, inbuf, 1); if (read_bytes == 0) { - std.debug.warn("WARN! reached EOF at idx={d}\n", .{i}); + log.debug("WARN! reached EOF at idx={d}\n", .{i}); break; } @@ -418,11 +419,11 @@ pub const Image = struct { try self.checkValid(); var time_taken = timer.read(); - std.debug.warn("\ttook {d:.2}ms running plugin\n", .{time_taken / std.time.us_per_ms}); + log.debug("\ttook {d:.2}ms running plugin\n", .{time_taken / std.time.us_per_ms}); } pub fn saveTo(self: *Image, out_path: []const u8) !void { - std.debug.warn("\timg: copy from '{s}' to '{s}'\n", .{ self.curpath, out_path }); + log.debug("\timg: copy from '{s}' to '{s}'\n", .{ self.curpath, out_path }); try std.fs.copyFileAbsolute(self.curpath, out_path, .{}); } @@ -450,7 +451,7 @@ pub const Image = struct { // the code here is a copypaste of runPlugin() without the specific // lilv things. var tmpnam = try temporaryName(self.allocator); - std.debug.warn("\trunning CUSTOM plugin from '{s}' to '{s}'\n", .{ self.curpath, tmpnam }); + log.debug("\trunning CUSTOM plugin from '{s}' to '{s}'\n", .{ self.curpath, tmpnam }); var out_fmt = mkSfInfo(); var out_file = try sopen(self.allocator, tmpnam, c.SFM_WRITE, &out_fmt); @@ -477,7 +478,7 @@ pub const Image = struct { sseek(self.sndfile, seek_pos.start); var i: usize = seek_pos.start; - std.debug.warn("\tseek pos start: {d} end: {d}\n", .{ seek_pos.start, seek_pos.end }); + log.debug("\tseek pos start: {d} end: {d}\n", .{ seek_pos.start, seek_pos.end }); var inbuf = &bufs.in; var outbuf = &bufs.out; @@ -485,7 +486,7 @@ pub const Image = struct { while (i <= seek_pos.end) : (i += 1) { const read_bytes = c.sf_readf_float(self.sndfile, inbuf, 1); if (read_bytes == 0) { - std.debug.warn("WARN! reached EOF at idx={d}\n", .{i}); + log.debug("WARN! reached EOF at idx={d}\n", .{i}); break; } diff --git a/src/lang.zig b/src/lang.zig index f465895..4c4f8f5 100644 --- a/src/lang.zig +++ b/src/lang.zig @@ -3,6 +3,7 @@ const std = @import("std"); const plugin = @import("plugin.zig"); const custom = @import("custom.zig"); +const log = std.log.scoped(.scritcher_lang); pub const ParseError = error{ParseFail}; pub const CommandType = enum { @@ -146,7 +147,7 @@ pub const Command = struct { } pub fn print(base: *const @This()) void { - std.debug.warn("tag: {s}\n", .{base.tag}); + log.debug("tag: {s}\n", .{base.tag}); } pub const Noop = struct { @@ -524,9 +525,9 @@ pub const Lang = struct { } fn doError(self: *Lang, comptime fmt: []const u8, args: anytype) void { - std.debug.warn("ERROR! at line {}: ", .{self.line}); - std.debug.warn(fmt, args); - std.debug.warn("\n", .{}); + log.debug("ERROR! at line {}: ", .{self.line}); + log.debug(fmt, args); + log.debug("\n", .{}); self.has_error = true; } @@ -605,7 +606,7 @@ pub const Lang = struct { else => @compileError("Invalid parameter type (" ++ @typeName(cmd_field.field_type) ++ ") left on command struct " ++ @typeName(command_struct) ++ "."), }; - std.debug.warn("parsing {s}, arg of type {s} => {any}\n", .{ + log.debug("parsing {s}, arg of type {s} => {any}\n", .{ @typeName(command_struct), @typeName(@TypeOf(argument_value)), argument_value, @@ -617,7 +618,7 @@ pub const Lang = struct { cmd.base.tag = command_struct.base_tag; const command = cmd.base.cast(command_struct).?; - std.debug.warn("cmd: {s}\n", .{command}); + log.debug("cmd: {s}\n", .{command}); } pub fn parse(self: *Lang, data: []const u8) !CommandList { diff --git a/src/lv2_helpers.zig b/src/lv2_helpers.zig index 599370c..62570df 100644 --- a/src/lv2_helpers.zig +++ b/src/lv2_helpers.zig @@ -1,6 +1,8 @@ const std = @import("std"); const plugin = @import("plugin.zig"); +const log = std.log.scoped(.scritcher_lv2); + pub const c = @cImport({ @cInclude("sndfile.h"); @cInclude("lilv/lilv.h"); @@ -21,7 +23,7 @@ const LV2_CORE__connectionOptional = Lv2Core("#connectionOptional"); pub fn lilv_instance_connect_port( instance: [*c]c.LilvInstance, port_index: u32, - data_location: ?*c_void, + data_location: ?*anyopaque, ) void { instance.?.*.lv2_descriptor.?.*.connect_port.?(instance.?.*.lv2_handle, port_index, data_location); } @@ -118,7 +120,7 @@ pub fn setupPorts(ctx: *plugin.Context) ![]Port { if (c.lilv_port_is_a(ctx.plugin, lport, lv2_InputPort)) { port.is_input = true; } else if (!c.lilv_port_is_a(ctx.plugin, lport, lv2_OutputPort) and !port.optional) { - std.debug.warn("Port {d} is neither input or output\n", .{i}); + log.debug("Port {d} is neither input or output\n", .{i}); return error.UnassignedIOPort; } @@ -134,7 +136,7 @@ pub fn setupPorts(ctx: *plugin.Context) ![]Port { ctx.n_audio_out += 1; } } else if (!port.optional) { - std.debug.warn("Port {d} has unsupported type\n", .{i}); + log.debug("Port {d} has unsupported type\n", .{i}); return error.UnsupportedPortType; } } diff --git a/src/magick.zig b/src/magick.zig index dd5f295..21f6d2d 100644 --- a/src/magick.zig +++ b/src/magick.zig @@ -2,6 +2,7 @@ const std = @import("std"); const images = @import("image.zig"); +const log = std.log.scoped(.scritcher_magick); const Image = images.Image; const mc = @cImport({ @@ -39,7 +40,7 @@ fn magickLoad(image: *Image) !MagickContext { var curpath = try std.cstr.addNullByte(image.allocator, image.curpath); defer image.allocator.free(curpath); - std.debug.warn("loading '{s}'\n", .{curpath}); + log.debug("loading '{s}'\n", .{curpath}); if (mc.MagickReadImage(mctx.wand, curpath.ptr) != 1) return error.MagickReadFail; @@ -54,12 +55,12 @@ fn magickSave(image: *Image, wand: *mc.MagickWand) !void { var c_tmpnam = try std.cstr.addNullByte(allocator, tmpnam); defer allocator.free(c_tmpnam); - std.debug.warn("\tmagick: saving to '{s}'..", .{c_tmpnam}); + log.debug("\tmagick: saving to '{s}'..", .{c_tmpnam}); if (mc.MagickWriteImage(wand, c_tmpnam.ptr) != 1) return error.MagickWriteFail; - std.debug.warn("OK\n", .{}); + log.debug("OK\n", .{}); try image.reopen(tmpnam); } diff --git a/src/main.zig b/src/main.zig index 005100b..c41d2e4 100644 --- a/src/main.zig +++ b/src/main.zig @@ -3,6 +3,8 @@ const langs = @import("lang.zig"); const runners = @import("runner.zig"); const printer = @import("printer.zig"); +const log = std.log.scoped(.scritcher); + test "scritcher" { _ = @import("lang.zig"); _ = @import("runner.zig"); @@ -132,7 +134,7 @@ pub fn doRepl(allocator: *std.mem.Allocator, args_it: anytype) !void { var rd_line = readline.readline("> "); if (rd_line == null) { - std.debug.warn("leaving from eof\n", .{}); + log.debug("leaving from eof\n", .{}); break; } readline.add_history(rd_line); @@ -200,14 +202,14 @@ pub fn doRepl(allocator: *std.mem.Allocator, args_it: anytype) !void { try printer.printList(cmds, stream); continue; } else if (std.mem.eql(u8, line, "quit") or std.mem.eql(u8, line, "q")) { - std.debug.warn("leaving\n", .{}); + log.debug("leaving\n", .{}); break; } else if (std.mem.startsWith(u8, line, "#")) { continue; } var cmds_parsed = lang.parse(line) catch |err| { - std.debug.warn("repl: error while parsing: {}\n", .{err}); + log.debug("repl: error while parsing: {}\n", .{err}); continue; }; @@ -231,10 +233,10 @@ pub fn doRepl(allocator: *std.mem.Allocator, args_it: anytype) !void { } fn doHelp() void { - std.debug.warn("scritcher!\n", .{}); - std.debug.warn("usage: scritcher [run|help|repl]\n", .{}); - std.debug.warn("\tscritcher run path_to_script.scri path_to_input_file.bmp\n", .{}); - std.debug.warn("\tscritcher repl path_to_script.scri path_to_input_file.bmp\n", .{}); + log.debug("scritcher!\n", .{}); + log.debug("usage: scritcher [run|help|repl]\n", .{}); + log.debug("\tscritcher run path_to_script.scri path_to_input_file.bmp\n", .{}); + log.debug("\tscritcher repl path_to_script.scri path_to_input_file.bmp\n", .{}); } fn doRun(allocator: *std.mem.Allocator, args_it: anytype) !void { @@ -288,7 +290,7 @@ pub fn main() !void { } else if (std.mem.eql(u8, cli_command, "run")) { return try doRun(allocator, &args_it); } else { - std.debug.warn("unknown command: '{s}'\n", .{cli_command}); + log.debug("unknown command: '{s}'\n", .{cli_command}); return error.UnknownCommand; } } diff --git a/src/plugin.zig b/src/plugin.zig index cb8c64a..d046edb 100644 --- a/src/plugin.zig +++ b/src/plugin.zig @@ -3,6 +3,7 @@ const std = @import("std"); const lv2 = @import("lv2_helpers.zig"); const c = lv2.c; +const log = std.log.scoped(.scritcher_plugin); const ImageError = @import("image.zig").ImageError; /// Control port @@ -137,7 +138,7 @@ pub fn makeContext(allocator: *std.mem.Allocator, plugin_uri: []const u8) !Conte c.lilv_world_load_all(world); var uri: *c.LilvNode = c.lilv_new_uri(world, cstr_plugin_uri.ptr) orelse { - std.debug.warn("Invalid plugin URI <{s}>\n", .{plugin_uri}); + log.debug("Invalid plugin URI <{s}>\n", .{plugin_uri}); return ImageError.InvalidPlugin; }; defer c.lilv_node_free(uri); @@ -145,7 +146,7 @@ pub fn makeContext(allocator: *std.mem.Allocator, plugin_uri: []const u8) !Conte const plugins: *const c.LilvPlugins = c.lilv_world_get_all_plugins(world).?; var plugin: *const c.LilvPlugin = c.lilv_plugins_get_by_uri(plugins, uri) orelse { - std.debug.warn("Plugin <{s}> not found\n", .{plugin_uri}); + log.debug("Plugin <{s}> not found\n", .{plugin_uri}); return ImageError.UnknownPlugin; }; diff --git a/src/printer.zig b/src/printer.zig index c1fab31..a851602 100644 --- a/src/printer.zig +++ b/src/printer.zig @@ -1,6 +1,8 @@ const std = @import("std"); const langs = @import("lang.zig"); +const log = std.log.scoped(.scritcher_printer); + fn printCommandWithParams(stream: anytype, command: anytype) !void { const Parameters = @TypeOf(command.parameters); try stream.print(" {d} {d}", .{ command.split, command.index }); diff --git a/src/runner.zig b/src/runner.zig index 16bbc12..40684a3 100644 --- a/src/runner.zig +++ b/src/runner.zig @@ -5,6 +5,8 @@ const plugin = @import("plugin.zig"); const custom = @import("custom.zig"); const magick = @import("magick.zig"); +const log = std.log.scoped(.scritcher_runner); + const Position = plugin.Position; const ParamList = plugin.ParamList; const ParamMap = plugin.ParamMap; @@ -65,12 +67,12 @@ pub const Runner = struct { // 'scritcher repl ./script ./image' // ':0' should ALWAYS point to the image. - if (self.repl) index += 4 else index += 3; + if (self.repl) index += 3 else index += 3; for (self.args) |arg, idx| { - std.debug.warn("arg{d} = {s}\n", .{ idx, arg }); + log.debug("arg{d} = {s}\n", .{ idx, arg }); } - std.debug.warn("fetch arg idx={d}, val={s}\n", .{ index, self.args[index] }); + log.debug("fetch arg idx={d}, val={s}\n", .{ index, self.args[index] }); return self.args[index]; } else { return load_path; @@ -90,7 +92,7 @@ pub const Runner = struct { fn loadCmd(self: *Runner, path_or_argidx: []const u8) !void { const load_path = try self.resolveArgPath(path_or_argidx); - std.debug.warn("\tload path: {s}\n", .{load_path}); + log.debug("\tload path: {s}\n", .{load_path}); // we could use ImageMagick to convert from X to BMP // but i can't find an easy way to do things in memory. @@ -100,7 +102,7 @@ pub const Runner = struct { // krita/gimp and make it export a bmp and while in the program you can // apply filters, etc. if (!std.mem.endsWith(u8, load_path, ".bmp") and !std.mem.endsWith(u8, load_path, ".ppm")) { - std.debug.warn("Only BMP files are allowed to be loaded. Got path '{s}'\n", .{load_path}); + log.debug("Only BMP files are allowed to be loaded. Got path '{s}'\n", .{load_path}); return RunError.NoBMP; } @@ -115,7 +117,7 @@ pub const Runner = struct { if (self.image) |image| { return image; } else { - std.debug.warn("image is required!\n", .{}); + log.debug("image is required!\n", .{}); return RunError.ImageRequired; } } @@ -201,7 +203,7 @@ pub const Runner = struct { ); defer proc.deinit(); - std.debug.warn("running '{s} {s}'\n", .{ runqs.program, out_path }); + log.debug("running '{s} {s}'\n", .{ runqs.program, out_path }); _ = try proc.spawnAndWait(); }