diff --git a/src/Program.cs b/src/Program.cs index d4d6087..129deb0 100644 --- a/src/Program.cs +++ b/src/Program.cs @@ -14,14 +14,38 @@ if(Utilities.HasFlags(args, "-v", "--version")) { return 0; } +// collect nonflag args for merge or file selection +var arguments = Utilities.CollectArgs(args); + // handle merge flag if(Utilities.HasFlags(args, "-m", "--merge")) { - Utilities.Merge(args); + Utilities.Merge(arguments); return 0; } +// get resource path from var or default +string resourcePath = Environment.GetEnvironmentVariable("FORTUNE_CS_DIR"); +if(resourcePath == "" || !Directory.Exists(resourcePath)) + resourcePath = Globals.DEFAULT_PATH; + +// pull file arg if provided +string file = null; +if(arguments.Count == 1) { + file = arguments[0]; + // if the file doens't exist, see if it's in `resourcePath` + if(!File.Exists(file)) { + if(!file.EndsWith(".txt")) + file = file + ".txt"; + file = resourcePath + file; + if(!File.Exists(file)) { + // don't try to read a file that doesn't exist + Console.WriteLine($"fortune-cs: no file '{file}' found."); + return 2; + } + } +} + // make sure fortune directory exists -var resourcePath = Globals.DEFAULT_PATH; if(!Directory.Exists(resourcePath)) { Console.WriteLine($"fortune-cs: directory '${resourcePath}' does not exist"); return 1; @@ -36,15 +60,17 @@ if(Utilities.HasFlags(args, "-l", "--list")) { return 0; } -// choose a file and line -var file = files[RandomNumberGenerator.GetInt32(files.Length)]; +// choose file if not provided +if(file == null) + file = files[RandomNumberGenerator.GetInt32(files.Length)]; +// read the file and choose a line var lines = File.ReadAllLines(file); var line = lines[RandomNumberGenerator.GetInt32(lines.Length)]; -// process escape codes +// process line breaks line = line.Replace("\\n", "\n"); -// write +// write the fortune Console.WriteLine(line); return 0; diff --git a/src/Util.cs b/src/Util.cs index 27f7596..5e89b28 100644 --- a/src/Util.cs +++ b/src/Util.cs @@ -27,10 +27,9 @@ public static class Utilities { } /// - /// outputs all unique lines from all files in `args` to stdout + /// outputs all unique lines from all files in `files` to stdout /// - public static void Merge(string[] args) { - var files = CollectArgs(args); + public static void Merge(List files) { // hashset to prevent duplicates var members = new HashSet(); // iterate over all paths given