Compare commits
3 commits
main
...
specify-fi
Author | SHA1 | Date | |
---|---|---|---|
348f59b44d | |||
dec2f6ff19 | |||
3902f5e3b7 |
2 changed files with 62 additions and 9 deletions
|
@ -2,8 +2,34 @@ using System;
|
|||
using System.IO;
|
||||
using System.Security.Cryptography;
|
||||
|
||||
// get resource path from var or default
|
||||
string resourcePath = Environment.GetEnvironmentVariable("FORTUNE_CS_DIR");
|
||||
if(resourcePath == "" || !Directory.Exists(resourcePath))
|
||||
resourcePath = "/usr/share/fortune-cs/";
|
||||
|
||||
// pull file arg if 1 argument is provided
|
||||
string file = null;
|
||||
if(args.Length == 1) {
|
||||
file = args[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;
|
||||
}
|
||||
}
|
||||
}
|
||||
// run merge if more than 1 argument is provided
|
||||
else if(args.Length > 0) {
|
||||
Utilities.Merge(args);
|
||||
return 0;
|
||||
}
|
||||
|
||||
// make sure fortune directory exists
|
||||
var resourcePath = "/usr/share/fortune-cs/";
|
||||
if(!Directory.Exists(resourcePath)) {
|
||||
Console.WriteLine("fortune-cs: directory '/usr/share/fortune-cs/' does not exist");
|
||||
return 1;
|
||||
|
@ -12,19 +38,17 @@ if(!Directory.Exists(resourcePath)) {
|
|||
// pull file list
|
||||
var files = Directory.GetFiles(resourcePath, "*.txt");
|
||||
|
||||
var prng = RandomNumberGenerator.Create();
|
||||
|
||||
// choose a file and line
|
||||
var file = files[RandomNumberGenerator.GetInt32(files.Length)];
|
||||
// choose file if no arg 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)];
|
||||
|
||||
prng.Dispose();
|
||||
|
||||
// process escape codes
|
||||
// process line breaks
|
||||
line = line.Replace("\\n", "\n");
|
||||
|
||||
// write
|
||||
// write the fortune
|
||||
Console.WriteLine(line);
|
||||
|
||||
return 0;
|
||||
|
|
29
src/Util.cs
Normal file
29
src/Util.cs
Normal file
|
@ -0,0 +1,29 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
|
||||
public static class Utilities {
|
||||
|
||||
public static void Merge(params string[] files) {
|
||||
// hashset to prevent duplicates
|
||||
var members = new HashSet<string>();
|
||||
// iterate over all paths given
|
||||
foreach(var file in files) {
|
||||
// skip nonexistent files gracefully
|
||||
if(!File.Exists(file))
|
||||
continue;
|
||||
// iterate over lines
|
||||
var lines = File.ReadAllLines(file);
|
||||
foreach(var line in lines) {
|
||||
// prevent duplicates
|
||||
if(members.Contains(line))
|
||||
continue;
|
||||
members.Add(line);
|
||||
// emit to stdout
|
||||
Console.WriteLine(line);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in a new issue