Compare commits

...

2 commits

4 changed files with 64 additions and 1 deletions

2
.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
/target/

View file

@ -6,6 +6,53 @@ A no-nonsense, user-extensible `fortune-mod` replacement.
## Goals ## Goals
- Sensible: I'm fed up with fortunes about men hating their wives. - Sensible: I'm fed up with fortunes about men hating their wives.
- Straightforward: No weird formats. Plain text with `\n` escape sequences. - Straightforward: No weird formats. Plain text with `\n` escape sequences; easy to add or remove content.
This project was originally built in Rust, and I migrated it to C# primarily to
test out [bflat](https://github.com/bflattened/bflat).
## Installation
### Application
<details>
<summary>Release Binary</summary>
Copy the compiled binary from the [releases page](https://git.vwolfe.io/valerie/fortune-cs/releases)
to a directory in `$PATH`, such as `/usr/bin/`.
</details>
<details>
<summary>From Source</summary>
Clone the source repository and either use the prewritten [just](https://github.com/casey/just)
recipe with the command `just build`, or run `bflat build ./src/Program.cs` if
you'd rather set your build options manually.
</details>
### Base Fortunes
<details>
<summary>Release Tarball</summary>
Copy the `base-fortunes.tar.gz` tarball from the [releases page](https://git.vwolfe.io/valerie/fortune-cs/releases),
extract the archive using `tar xzf base-fortunes.tar.gz`, and move the
resulting `.txt` files to `/usr/share/fortune-cs/`.
</details>
<details>
<summary>From Source</summary>
Clone the source repository and copy the files from the `data/` directory to
`/usr/share/fortune-cs`.
</details>
## Dependencies
- [bflat](https://github.com/bflattened/bflat): Compiler
- [just](https://github.com/casey/just): Build recipe

7
justfile Normal file
View file

@ -0,0 +1,7 @@
build:
bflat build -o ./target/fortune-cs --no-reflection --no-stacktrace-data --no-globalization --no-debug-info --no-pie
fortunes:
cd data & tar czf ../target/base-fortunes.tar.gz ./*.txt

View file

@ -2,22 +2,29 @@ using System;
using System.IO; using System.IO;
using System.Security.Cryptography; using System.Security.Cryptography;
// make sure fortune directory exists
var resourcePath = "/usr/share/fortune-cs/"; var resourcePath = "/usr/share/fortune-cs/";
if(!Directory.Exists(resourcePath)) { if(!Directory.Exists(resourcePath)) {
Console.WriteLine("fortune-cs: directory '/usr/share/fortune-cs/' does not exist"); Console.WriteLine("fortune-cs: directory '/usr/share/fortune-cs/' does not exist");
return 1; return 1;
} }
// pull file list
var files = Directory.GetFiles(resourcePath, "*.txt"); var files = Directory.GetFiles(resourcePath, "*.txt");
var prng = RandomNumberGenerator.Create(); var prng = RandomNumberGenerator.Create();
// choose a file and line
var file = files[RandomNumberGenerator.GetInt32(files.Length)]; var file = files[RandomNumberGenerator.GetInt32(files.Length)];
var lines = File.ReadAllLines(file); var lines = File.ReadAllLines(file);
var line = lines[RandomNumberGenerator.GetInt32(lines.Length)]; var line = lines[RandomNumberGenerator.GetInt32(lines.Length)];
prng.Dispose(); prng.Dispose();
// process escape codes
line = line.Replace("\\n", "\n");
// write
Console.WriteLine(line); Console.WriteLine(line);
return 0; return 0;