diff --git a/build.zig.zon b/build.zig.zon index c476690..2ae1585 100644 --- a/build.zig.zon +++ b/build.zig.zon @@ -1,66 +1,10 @@ .{ - // This is the default name used by packages depending on this one. For - // example, when a user runs `zig fetch --save `, this field is used - // as the key in the `dependencies` table. Although the user can choose a - // different name, most users will stick with this provided value. - // - // It is redundant to include "zig" in this name because it is already - // within the Zig package namespace. - .name = "lister", + .name = .lister, - // This is a [Semantic Version](https://semver.org/). - // In a future version of Zig it will be used for package deduplication. - .version = "0.1.0", + .fingerprint=0xd6253bb2c7545428, - // This field is optional. - // This is currently advisory only; Zig does not yet do anything - // with this value. - //.minimum_zig_version = "0.11.0", + .version = "0.2.0", - // This field is optional. - // Each dependency must either provide a `url` and `hash`, or a `path`. - // `zig build --fetch` can be used to fetch all dependencies of a package, recursively. - // Once all dependencies are fetched, `zig build` no longer requires - // internet connectivity. - .dependencies = .{ - // See `zig fetch --save ` for a command-line interface for adding dependencies. - //.example = .{ - // // When updating this field to a new URL, be sure to delete the corresponding - // // `hash`, otherwise you are communicating that you expect to find the old hash at - // // the new URL. - // .url = "https://example.com/foo.tar.gz", - // - // // This is computed from the file contents of the directory of files that is - // // obtained after fetching `url` and applying the inclusion rules given by - // // `paths`. - // // - // // This field is the source of truth; packages do not come from a `url`; they - // // come from a `hash`. `url` is just one of many possible mirrors for how to - // // obtain a package matching this `hash`. - // // - // // Uses the [multihash](https://multiformats.io/multihash/) format. - // .hash = "...", - // - // // When this is provided, the package is found in a directory relative to the - // // build root. In this case the package's hash is irrelevant and therefore not - // // computed. This field and `url` are mutually exclusive. - // .path = "foo", - - // // When this is set to `true`, a package is declared to be lazily - // // fetched. This makes the dependency only get fetched if it is - // // actually used. - // .lazy = false, - //}, - }, - - // Specifies the set of files and directories that are included in this package. - // Only files and directories listed here are included in the `hash` that - // is computed for this package. Only files listed here will remain on disk - // when using the zig package manager. As a rule of thumb, one should list - // files required for compilation plus any license(s). - // Paths are relative to the build root. Use the empty string (`""`) to refer to - // the build root itself. - // A directory listed here means that all files within, recursively, are included. .paths = .{ "build.zig", "build.zig.zon", diff --git a/main.zig b/main.zig new file mode 100644 index 0000000..19961a6 --- /dev/null +++ b/main.zig @@ -0,0 +1,67 @@ +const std = @import("std"); +const eql = std.mem.eql; + + +pub fn main() !void { + var gpa = std.heap.GeneralPurposeAllocator(.{}){}; + defer _ = gpa.deinit(); + const allocator = gpa.allocator(); + + const stdin = std.io.getStdIn().reader(); + const stdout = std.io.getStdOut().writer(); + + const args = try std.process.argsAlloc(allocator); + defer std.process.argsFree(allocator, args); + + var path: []const u8 = undefined; + + if (args.len > 2) { + if (eql(u8, args[1], "-c")) { + path = args[2]; + } + } + else if (args.len == 2) { + if (eql(u8, args[1], "-h") or eql(u8, args[1], "help")) { + try stdout.print("(opt) -c /path/to/json_file\n", .{}); + try stdout.print("(opt) help / -h", .{}); + std.posix.exit(1); + } + } + + const env = try std.process.getEnvVarOwned(allocator, "USER"); + defer allocator.free(env); + + path = try std.fmt.allocPrint(allocator, "/home/{s}/.config/lister/data.json", .{env}); + defer allocator.free(path); + + const file = try std.fs.cwd().openFile(path, .{}); + defer file.close(); + + const data = try file.reader().readAllAlloc(allocator, 32768); + defer allocator.free(data); + + const Smth = struct { + name: []const u8, + desc: []const u8, + }; + + const Smths = []Smth; + + const json = try std.json.parseFromSlice(Smths, allocator, data, .{}); + defer json.deinit(); + + var buff: [256]u8 = undefined; + try stdout.print("Enter name: ", .{}); + const inp_wthd = try stdin.readUntilDelimiter(buff[0..], '\n'); + + var found = false; + for (json.value) |smth| { + if (eql(u8, smth.name, inp_wthd)) { + try stdout.print("{s} -> {s}\n", .{smth.name, smth.desc}); + found = true; + } + } + if (!found) { + try stdout.print("Bad value :(", .{}); + } +} diff --git a/src/main.zig b/src/main.zig index d460eb8..19961a6 100644 --- a/src/main.zig +++ b/src/main.zig @@ -1,4 +1,5 @@ const std = @import("std"); +const eql = std.mem.eql; pub fn main() !void { @@ -6,10 +7,31 @@ pub fn main() !void { defer _ = gpa.deinit(); const allocator = gpa.allocator(); + const stdin = std.io.getStdIn().reader(); + const stdout = std.io.getStdOut().writer(); + + const args = try std.process.argsAlloc(allocator); + defer std.process.argsFree(allocator, args); + + var path: []const u8 = undefined; + + if (args.len > 2) { + if (eql(u8, args[1], "-c")) { + path = args[2]; + } + } + else if (args.len == 2) { + if (eql(u8, args[1], "-h") or eql(u8, args[1], "help")) { + try stdout.print("(opt) -c /path/to/json_file\n", .{}); + try stdout.print("(opt) help / -h", .{}); + std.posix.exit(1); + } + } + const env = try std.process.getEnvVarOwned(allocator, "USER"); defer allocator.free(env); - const path = try std.fmt.allocPrint(allocator, "/home/{s}/.config/lister/data.json", .{env}); + path = try std.fmt.allocPrint(allocator, "/home/{s}/.config/lister/data.json", .{env}); defer allocator.free(path); const file = try std.fs.cwd().openFile(path, .{}); @@ -27,8 +49,19 @@ pub fn main() !void { const json = try std.json.parseFromSlice(Smths, allocator, data, .{}); defer json.deinit(); - + + var buff: [256]u8 = undefined; + try stdout.print("Enter name: ", .{}); + const inp_wthd = try stdin.readUntilDelimiter(buff[0..], '\n'); + + var found = false; for (json.value) |smth| { - std.debug.print("{s} -> {s}\n", .{smth.name, smth.desc}); + if (eql(u8, smth.name, inp_wthd)) { + try stdout.print("{s} -> {s}\n", .{smth.name, smth.desc}); + found = true; + } + } + if (!found) { + try stdout.print("Bad value :(", .{}); } } diff --git a/zig-0.13.0-build.patch b/zig-0.13.0-build.patch new file mode 100644 index 0000000..ae8cac2 --- /dev/null +++ b/zig-0.13.0-build.patch @@ -0,0 +1,11 @@ +--- build.zig.zon 2025-04-20 15:27:21.145626049 +0200 ++++ build.zig.zon.13 2025-04-20 15:28:05.406763225 +0200 +@@ -1,7 +1,5 @@ + .{ +- .name = .lister, +- +- .fingerprint=0xd6253bb2c7545428, ++ .name = "lister", + + .version = "0.2.0", +