port to latest zig: use std.log
This commit is contained in:
parent
268be1074c
commit
c817170a04
11 changed files with 68 additions and 56 deletions
|
@ -24,19 +24,19 @@ fn setupLinks(step: *builds.LibExeObjStep) void {
|
||||||
|
|
||||||
for (possible_lilv_include_dirs) |possible_lilv_dir| {
|
for (possible_lilv_include_dirs) |possible_lilv_dir| {
|
||||||
var possible_dir = std.fs.cwd().openDir(possible_lilv_dir, .{}) catch |err| {
|
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;
|
continue;
|
||||||
};
|
};
|
||||||
|
|
||||||
possible_dir.close();
|
possible_dir.close();
|
||||||
found_any_lilv = true;
|
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);
|
step.addIncludeDir(possible_lilv_dir);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!found_any_lilv) {
|
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");
|
@panic("no lilv found");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
const std = @import("std");
|
const std = @import("std");
|
||||||
|
const log = std.log.scoped(.scritcher_bmp);
|
||||||
pub const BMPValidError = error{InvalidMagic};
|
pub const BMPValidError = error{InvalidMagic};
|
||||||
|
|
||||||
const VALID_MAGICS = [_][]const u8{
|
const VALID_MAGICS = [_][]const u8{
|
||||||
"BM",
|
"BM",
|
||||||
"BA",
|
"BA",
|
||||||
|
|
||||||
"CI",
|
"CI",
|
||||||
"CP",
|
"CP",
|
||||||
"IC",
|
"IC",
|
||||||
|
@ -20,7 +19,7 @@ pub fn magicValid(magic: []const u8) !void {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!valid) {
|
if (!valid) {
|
||||||
std.debug.warn("\tINVALID HEADER: '{s}'\n", .{magic});
|
log.debug("\tINVALID HEADER: '{s}'\n", .{magic});
|
||||||
return BMPValidError.InvalidMagic;
|
return BMPValidError.InvalidMagic;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@ const lv2 = @import("lv2_helpers.zig");
|
||||||
const plugins = @import("plugin.zig");
|
const plugins = @import("plugin.zig");
|
||||||
const image = @import("image.zig");
|
const image = @import("image.zig");
|
||||||
|
|
||||||
|
const log = std.log.scoped(.scritcher_custom);
|
||||||
const c = lv2.c;
|
const c = lv2.c;
|
||||||
|
|
||||||
const RunBuffers = plugins.RunBuffers;
|
const RunBuffers = plugins.RunBuffers;
|
||||||
|
@ -174,7 +175,7 @@ pub const Embed = struct {
|
||||||
|
|
||||||
if (read_bytes < 0) {
|
if (read_bytes < 0) {
|
||||||
const st: i32 = c.sf_error(self.sndfile);
|
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,
|
self.filepath,
|
||||||
c.sf_error_number(st),
|
c.sf_error_number(st),
|
||||||
});
|
});
|
||||||
|
|
|
@ -3,6 +3,7 @@ const lv2 = @import("lv2_helpers.zig");
|
||||||
const c = lv2.c;
|
const c = lv2.c;
|
||||||
const bmp = @import("bmp_valid.zig");
|
const bmp = @import("bmp_valid.zig");
|
||||||
|
|
||||||
|
const log = std.log.scoped(.scritcher_image);
|
||||||
const plugins = @import("plugin.zig");
|
const plugins = @import("plugin.zig");
|
||||||
|
|
||||||
/// Buffer size for main image copying.
|
/// Buffer size for main image copying.
|
||||||
|
@ -32,7 +33,7 @@ pub fn sopen(
|
||||||
const st: i32 = c.sf_error(file);
|
const st: i32 = c.sf_error(file);
|
||||||
|
|
||||||
if (st != 0) {
|
if (st != 0) {
|
||||||
std.debug.warn("Failed to open {s} ({s})\n", .{
|
log.debug("Failed to open {s} ({s})\n", .{
|
||||||
path,
|
path,
|
||||||
c.sf_error_number(st),
|
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);
|
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.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.?;
|
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);
|
const count = c.sf_writef_float(file, buf, frames);
|
||||||
|
|
||||||
if (count != 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;
|
return ImageError.WriteFail;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -68,7 +69,7 @@ pub fn sseek(file: *c.SNDFILE, offset: usize) void {
|
||||||
std.testing.expectEqual(frames, frames_current);
|
std.testing.expectEqual(frames, frames_current);
|
||||||
|
|
||||||
if (frames != offset_i64) {
|
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 {
|
pub fn close(self: *Image) void {
|
||||||
var st: i32 = c.sf_close(self.sndfile);
|
var st: i32 = c.sf_close(self.sndfile);
|
||||||
if (st != 0) {
|
if (st != 0) {
|
||||||
std.debug.warn("Failed to close {s} ({s})\n", .{
|
log.debug("Failed to close {s} ({s})\n", .{
|
||||||
self.path,
|
self.path,
|
||||||
c.sf_error_number(st),
|
c.sf_error_number(st),
|
||||||
});
|
});
|
||||||
|
@ -228,7 +229,7 @@ pub const Image = struct {
|
||||||
sseek(out_file, start);
|
sseek(out_file, start);
|
||||||
|
|
||||||
while (i <= end) : (i += buf.len) {
|
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(self.sndfile, i);
|
||||||
sseek(out_file, i);
|
sseek(out_file, i);
|
||||||
|
|
||||||
|
@ -254,7 +255,7 @@ pub const Image = struct {
|
||||||
fn getSeekPos(self: *Image, position: plugins.Position) plugins.SeekPos {
|
fn getSeekPos(self: *Image, position: plugins.Position) plugins.SeekPos {
|
||||||
const file_end = self.frames;
|
const file_end = self.frames;
|
||||||
var seek_pos = position.seekPos(file_end);
|
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;
|
return seek_pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -267,7 +268,7 @@ pub const Image = struct {
|
||||||
self.curpath = path;
|
self.curpath = path;
|
||||||
self.frames = @intCast(usize, in_fmt.frames);
|
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.curpath,
|
||||||
self.frames,
|
self.frames,
|
||||||
in_fmt.frames,
|
in_fmt.frames,
|
||||||
|
@ -310,12 +311,12 @@ pub const Image = struct {
|
||||||
defer ctx.allocator.free(ports);
|
defer ctx.allocator.free(ports);
|
||||||
|
|
||||||
if (ctx.n_audio_in > 2) {
|
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;
|
return ImageError.InvalidPlugin;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ctx.n_audio_out > 2) {
|
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;
|
return ImageError.InvalidPlugin;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -327,14 +328,14 @@ pub const Image = struct {
|
||||||
|
|
||||||
var sym = c.lilv_new_string(ctx.world, sym_cstr.ptr);
|
var sym = c.lilv_new_string(ctx.world, sym_cstr.ptr);
|
||||||
const port = c.lilv_plugin_get_port_by_symbol(ctx.plugin, sym) orelse {
|
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;
|
return ImageError.InvalidSymbol;
|
||||||
};
|
};
|
||||||
|
|
||||||
c.lilv_node_free(sym);
|
c.lilv_node_free(sym);
|
||||||
|
|
||||||
var idx = c.lilv_port_get_index(ctx.plugin, port);
|
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,
|
param.sym,
|
||||||
idx,
|
idx,
|
||||||
param.value,
|
param.value,
|
||||||
|
@ -345,7 +346,7 @@ pub const Image = struct {
|
||||||
// now we need to generate a temporary file and put the output of
|
// now we need to generate a temporary file and put the output of
|
||||||
// running the plugin on that file
|
// running the plugin on that file
|
||||||
var tmpnam = try temporaryName(self.allocator);
|
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_fmt = mkSfInfo();
|
||||||
var out_file = try sopen(self.allocator, tmpnam, c.SFM_WRITE, &out_fmt);
|
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);
|
sseek(self.sndfile, seek_pos.start);
|
||||||
|
|
||||||
var i: usize = 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 inbuf = &rctx.buffers.in;
|
||||||
var outbuf = &rctx.buffers.out;
|
var outbuf = &rctx.buffers.out;
|
||||||
|
@ -389,7 +390,7 @@ pub const Image = struct {
|
||||||
|
|
||||||
const read_bytes = c.sf_readf_float(self.sndfile, inbuf, 1);
|
const read_bytes = c.sf_readf_float(self.sndfile, inbuf, 1);
|
||||||
if (read_bytes == 0) {
|
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;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -418,11 +419,11 @@ pub const Image = struct {
|
||||||
try self.checkValid();
|
try self.checkValid();
|
||||||
|
|
||||||
var time_taken = timer.read();
|
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 {
|
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, .{});
|
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
|
// the code here is a copypaste of runPlugin() without the specific
|
||||||
// lilv things.
|
// lilv things.
|
||||||
var tmpnam = try temporaryName(self.allocator);
|
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_fmt = mkSfInfo();
|
||||||
var out_file = try sopen(self.allocator, tmpnam, c.SFM_WRITE, &out_fmt);
|
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);
|
sseek(self.sndfile, seek_pos.start);
|
||||||
|
|
||||||
var i: usize = 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 inbuf = &bufs.in;
|
||||||
var outbuf = &bufs.out;
|
var outbuf = &bufs.out;
|
||||||
|
@ -485,7 +486,7 @@ pub const Image = struct {
|
||||||
while (i <= seek_pos.end) : (i += 1) {
|
while (i <= seek_pos.end) : (i += 1) {
|
||||||
const read_bytes = c.sf_readf_float(self.sndfile, inbuf, 1);
|
const read_bytes = c.sf_readf_float(self.sndfile, inbuf, 1);
|
||||||
if (read_bytes == 0) {
|
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;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
13
src/lang.zig
13
src/lang.zig
|
@ -3,6 +3,7 @@ const std = @import("std");
|
||||||
const plugin = @import("plugin.zig");
|
const plugin = @import("plugin.zig");
|
||||||
const custom = @import("custom.zig");
|
const custom = @import("custom.zig");
|
||||||
|
|
||||||
|
const log = std.log.scoped(.scritcher_lang);
|
||||||
pub const ParseError = error{ParseFail};
|
pub const ParseError = error{ParseFail};
|
||||||
|
|
||||||
pub const CommandType = enum {
|
pub const CommandType = enum {
|
||||||
|
@ -146,7 +147,7 @@ pub const Command = struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn print(base: *const @This()) void {
|
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 {
|
pub const Noop = struct {
|
||||||
|
@ -524,9 +525,9 @@ pub const Lang = struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn doError(self: *Lang, comptime fmt: []const u8, args: anytype) void {
|
fn doError(self: *Lang, comptime fmt: []const u8, args: anytype) void {
|
||||||
std.debug.warn("ERROR! at line {}: ", .{self.line});
|
log.debug("ERROR! at line {}: ", .{self.line});
|
||||||
std.debug.warn(fmt, args);
|
log.debug(fmt, args);
|
||||||
std.debug.warn("\n", .{});
|
log.debug("\n", .{});
|
||||||
self.has_error = true;
|
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) ++ "."),
|
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(command_struct),
|
||||||
@typeName(@TypeOf(argument_value)),
|
@typeName(@TypeOf(argument_value)),
|
||||||
argument_value,
|
argument_value,
|
||||||
|
@ -617,7 +618,7 @@ pub const Lang = struct {
|
||||||
|
|
||||||
cmd.base.tag = command_struct.base_tag;
|
cmd.base.tag = command_struct.base_tag;
|
||||||
const command = cmd.base.cast(command_struct).?;
|
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 {
|
pub fn parse(self: *Lang, data: []const u8) !CommandList {
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
const std = @import("std");
|
const std = @import("std");
|
||||||
const plugin = @import("plugin.zig");
|
const plugin = @import("plugin.zig");
|
||||||
|
|
||||||
|
const log = std.log.scoped(.scritcher_lv2);
|
||||||
|
|
||||||
pub const c = @cImport({
|
pub const c = @cImport({
|
||||||
@cInclude("sndfile.h");
|
@cInclude("sndfile.h");
|
||||||
@cInclude("lilv/lilv.h");
|
@cInclude("lilv/lilv.h");
|
||||||
|
@ -21,7 +23,7 @@ const LV2_CORE__connectionOptional = Lv2Core("#connectionOptional");
|
||||||
pub fn lilv_instance_connect_port(
|
pub fn lilv_instance_connect_port(
|
||||||
instance: [*c]c.LilvInstance,
|
instance: [*c]c.LilvInstance,
|
||||||
port_index: u32,
|
port_index: u32,
|
||||||
data_location: ?*c_void,
|
data_location: ?*anyopaque,
|
||||||
) void {
|
) void {
|
||||||
instance.?.*.lv2_descriptor.?.*.connect_port.?(instance.?.*.lv2_handle, port_index, data_location);
|
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)) {
|
if (c.lilv_port_is_a(ctx.plugin, lport, lv2_InputPort)) {
|
||||||
port.is_input = true;
|
port.is_input = true;
|
||||||
} else if (!c.lilv_port_is_a(ctx.plugin, lport, lv2_OutputPort) and !port.optional) {
|
} 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;
|
return error.UnassignedIOPort;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -134,7 +136,7 @@ pub fn setupPorts(ctx: *plugin.Context) ![]Port {
|
||||||
ctx.n_audio_out += 1;
|
ctx.n_audio_out += 1;
|
||||||
}
|
}
|
||||||
} else if (!port.optional) {
|
} 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;
|
return error.UnsupportedPortType;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
const std = @import("std");
|
const std = @import("std");
|
||||||
const images = @import("image.zig");
|
const images = @import("image.zig");
|
||||||
|
|
||||||
|
const log = std.log.scoped(.scritcher_magick);
|
||||||
const Image = images.Image;
|
const Image = images.Image;
|
||||||
|
|
||||||
const mc = @cImport({
|
const mc = @cImport({
|
||||||
|
@ -39,7 +40,7 @@ fn magickLoad(image: *Image) !MagickContext {
|
||||||
var curpath = try std.cstr.addNullByte(image.allocator, image.curpath);
|
var curpath = try std.cstr.addNullByte(image.allocator, image.curpath);
|
||||||
defer image.allocator.free(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)
|
if (mc.MagickReadImage(mctx.wand, curpath.ptr) != 1)
|
||||||
return error.MagickReadFail;
|
return error.MagickReadFail;
|
||||||
|
@ -54,12 +55,12 @@ fn magickSave(image: *Image, wand: *mc.MagickWand) !void {
|
||||||
var c_tmpnam = try std.cstr.addNullByte(allocator, tmpnam);
|
var c_tmpnam = try std.cstr.addNullByte(allocator, tmpnam);
|
||||||
defer allocator.free(c_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)
|
if (mc.MagickWriteImage(wand, c_tmpnam.ptr) != 1)
|
||||||
return error.MagickWriteFail;
|
return error.MagickWriteFail;
|
||||||
|
|
||||||
std.debug.warn("OK\n", .{});
|
log.debug("OK\n", .{});
|
||||||
|
|
||||||
try image.reopen(tmpnam);
|
try image.reopen(tmpnam);
|
||||||
}
|
}
|
||||||
|
|
18
src/main.zig
18
src/main.zig
|
@ -3,6 +3,8 @@ const langs = @import("lang.zig");
|
||||||
const runners = @import("runner.zig");
|
const runners = @import("runner.zig");
|
||||||
const printer = @import("printer.zig");
|
const printer = @import("printer.zig");
|
||||||
|
|
||||||
|
const log = std.log.scoped(.scritcher);
|
||||||
|
|
||||||
test "scritcher" {
|
test "scritcher" {
|
||||||
_ = @import("lang.zig");
|
_ = @import("lang.zig");
|
||||||
_ = @import("runner.zig");
|
_ = @import("runner.zig");
|
||||||
|
@ -132,7 +134,7 @@ pub fn doRepl(allocator: *std.mem.Allocator, args_it: anytype) !void {
|
||||||
|
|
||||||
var rd_line = readline.readline("> ");
|
var rd_line = readline.readline("> ");
|
||||||
if (rd_line == null) {
|
if (rd_line == null) {
|
||||||
std.debug.warn("leaving from eof\n", .{});
|
log.debug("leaving from eof\n", .{});
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
readline.add_history(rd_line);
|
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);
|
try printer.printList(cmds, stream);
|
||||||
continue;
|
continue;
|
||||||
} else if (std.mem.eql(u8, line, "quit") or std.mem.eql(u8, line, "q")) {
|
} 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;
|
break;
|
||||||
} else if (std.mem.startsWith(u8, line, "#")) {
|
} else if (std.mem.startsWith(u8, line, "#")) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
var cmds_parsed = lang.parse(line) catch |err| {
|
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;
|
continue;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -231,10 +233,10 @@ pub fn doRepl(allocator: *std.mem.Allocator, args_it: anytype) !void {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn doHelp() void {
|
fn doHelp() void {
|
||||||
std.debug.warn("scritcher!\n", .{});
|
log.debug("scritcher!\n", .{});
|
||||||
std.debug.warn("usage: scritcher [run|help|repl]\n", .{});
|
log.debug("usage: scritcher [run|help|repl]\n", .{});
|
||||||
std.debug.warn("\tscritcher run path_to_script.scri path_to_input_file.bmp\n", .{});
|
log.debug("\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("\tscritcher repl path_to_script.scri path_to_input_file.bmp\n", .{});
|
||||||
}
|
}
|
||||||
|
|
||||||
fn doRun(allocator: *std.mem.Allocator, args_it: anytype) !void {
|
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")) {
|
} else if (std.mem.eql(u8, cli_command, "run")) {
|
||||||
return try doRun(allocator, &args_it);
|
return try doRun(allocator, &args_it);
|
||||||
} else {
|
} else {
|
||||||
std.debug.warn("unknown command: '{s}'\n", .{cli_command});
|
log.debug("unknown command: '{s}'\n", .{cli_command});
|
||||||
return error.UnknownCommand;
|
return error.UnknownCommand;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@ const std = @import("std");
|
||||||
const lv2 = @import("lv2_helpers.zig");
|
const lv2 = @import("lv2_helpers.zig");
|
||||||
const c = lv2.c;
|
const c = lv2.c;
|
||||||
|
|
||||||
|
const log = std.log.scoped(.scritcher_plugin);
|
||||||
const ImageError = @import("image.zig").ImageError;
|
const ImageError = @import("image.zig").ImageError;
|
||||||
|
|
||||||
/// Control port
|
/// Control port
|
||||||
|
@ -137,7 +138,7 @@ pub fn makeContext(allocator: *std.mem.Allocator, plugin_uri: []const u8) !Conte
|
||||||
c.lilv_world_load_all(world);
|
c.lilv_world_load_all(world);
|
||||||
|
|
||||||
var uri: *c.LilvNode = c.lilv_new_uri(world, cstr_plugin_uri.ptr) orelse {
|
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;
|
return ImageError.InvalidPlugin;
|
||||||
};
|
};
|
||||||
defer c.lilv_node_free(uri);
|
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).?;
|
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 {
|
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;
|
return ImageError.UnknownPlugin;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
const std = @import("std");
|
const std = @import("std");
|
||||||
const langs = @import("lang.zig");
|
const langs = @import("lang.zig");
|
||||||
|
|
||||||
|
const log = std.log.scoped(.scritcher_printer);
|
||||||
|
|
||||||
fn printCommandWithParams(stream: anytype, command: anytype) !void {
|
fn printCommandWithParams(stream: anytype, command: anytype) !void {
|
||||||
const Parameters = @TypeOf(command.parameters);
|
const Parameters = @TypeOf(command.parameters);
|
||||||
try stream.print(" {d} {d}", .{ command.split, command.index });
|
try stream.print(" {d} {d}", .{ command.split, command.index });
|
||||||
|
|
|
@ -5,6 +5,8 @@ const plugin = @import("plugin.zig");
|
||||||
const custom = @import("custom.zig");
|
const custom = @import("custom.zig");
|
||||||
const magick = @import("magick.zig");
|
const magick = @import("magick.zig");
|
||||||
|
|
||||||
|
const log = std.log.scoped(.scritcher_runner);
|
||||||
|
|
||||||
const Position = plugin.Position;
|
const Position = plugin.Position;
|
||||||
const ParamList = plugin.ParamList;
|
const ParamList = plugin.ParamList;
|
||||||
const ParamMap = plugin.ParamMap;
|
const ParamMap = plugin.ParamMap;
|
||||||
|
@ -65,12 +67,12 @@ pub const Runner = struct {
|
||||||
// 'scritcher repl ./script ./image'
|
// 'scritcher repl ./script ./image'
|
||||||
|
|
||||||
// ':0' should ALWAYS point to the 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| {
|
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];
|
return self.args[index];
|
||||||
} else {
|
} else {
|
||||||
return load_path;
|
return load_path;
|
||||||
|
@ -90,7 +92,7 @@ pub const Runner = struct {
|
||||||
|
|
||||||
fn loadCmd(self: *Runner, path_or_argidx: []const u8) !void {
|
fn loadCmd(self: *Runner, path_or_argidx: []const u8) !void {
|
||||||
const load_path = try self.resolveArgPath(path_or_argidx);
|
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
|
// we could use ImageMagick to convert from X to BMP
|
||||||
// but i can't find an easy way to do things in memory.
|
// 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
|
// krita/gimp and make it export a bmp and while in the program you can
|
||||||
// apply filters, etc.
|
// apply filters, etc.
|
||||||
if (!std.mem.endsWith(u8, load_path, ".bmp") and !std.mem.endsWith(u8, load_path, ".ppm")) {
|
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;
|
return RunError.NoBMP;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -115,7 +117,7 @@ pub const Runner = struct {
|
||||||
if (self.image) |image| {
|
if (self.image) |image| {
|
||||||
return image;
|
return image;
|
||||||
} else {
|
} else {
|
||||||
std.debug.warn("image is required!\n", .{});
|
log.debug("image is required!\n", .{});
|
||||||
return RunError.ImageRequired;
|
return RunError.ImageRequired;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -201,7 +203,7 @@ pub const Runner = struct {
|
||||||
);
|
);
|
||||||
defer proc.deinit();
|
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();
|
_ = try proc.spawnAndWait();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue