From 2d9fe803955da398481109da1eab1070eedb4220 Mon Sep 17 00:00:00 2001 From: Luna Date: Wed, 10 Jul 2019 21:43:23 -0300 Subject: [PATCH] add runqs command --- src/lang.zig | 2 ++ src/runner.zig | 24 +++++++++++++++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/lang.zig b/src/lang.zig index c2e475d..d15e657 100644 --- a/src/lang.zig +++ b/src/lang.zig @@ -12,6 +12,7 @@ pub const CommandType = enum { Noop, Load, Quicksave, + RunQS, Amp, RFlanger, @@ -125,6 +126,7 @@ pub const Lang = struct { _ = try self.keywords.put("noop", .Noop); _ = try self.keywords.put("load", .Load); _ = try self.keywords.put("quicksave", .Quicksave); + _ = try self.keywords.put("runqs", .RunQS); _ = try self.keywords.put("amp", .Amp); _ = try self.keywords.put("rflanger", .RFlanger); diff --git a/src/runner.zig b/src/runner.zig index 3d62267..d272fac 100644 --- a/src/runner.zig +++ b/src/runner.zig @@ -91,7 +91,7 @@ pub const Runner = struct { } } - fn quicksaveCmd(self: *Runner) !void { + fn makeGlitchedPath(self: *Runner) ![]const u8 { // we want to transform basename, if it is "x.bmp" to "x_gN.bmp", where // N is the maximum non-used integer. var image = try self.getImage(); @@ -149,9 +149,30 @@ pub const Runner = struct { extension, ); + return out_path; + } + + fn quicksaveCmd(self: *Runner) !void { + var image = try self.getImage(); + const out_path = try self.makeGlitchedPath(); try image.saveTo(out_path); } + fn runQSCmd(self: *Runner, program: []const u8) !void { + var image = try self.getImage(); + const out_path = try self.makeGlitchedPath(); + try image.saveTo(out_path); + + var proc = try std.ChildProcess.init( + [_][]const u8{ program, out_path }, + self.allocator, + ); + defer proc.deinit(); + + std.debug.warn("running '{} {}'", program, out_path); + _ = try proc.spawnAndWait(); + } + /// Run the http://lv2plug.in/plugins/eg-amp plugin over the file. fn ampCmd(self: *Runner, pos: Position, params: ParamList) !void { var image = try self.getImage(); @@ -221,6 +242,7 @@ pub const Runner = struct { break :blk; }, .Quicksave => try self.quicksaveCmd(), + .RunQS => try self.runQSCmd(cmd.args.at(0)), .Amp => blk: { const pos = try cmd.consumePosition();