diff options
author | wiz <wiz@NetBSD.org> | 2021-04-22 14:57:36 +0000 |
---|---|---|
committer | Cameron Katri <me@cameronkatri.com> | 2021-04-28 16:38:43 -0400 |
commit | b9f9ac402c70812f3d5c026df36818b288af2aab (patch) | |
tree | 059d4c8e0ed18f5e64cff1645d47572006596247 | |
parent | bedd1da4f697c509582246e285e628844e77e140 (diff) | |
download | bsdgames-darwin-b9f9ac402c70812f3d5c026df36818b288af2aab.tar.gz bsdgames-darwin-b9f9ac402c70812f3d5c026df36818b288af2aab.tar.zst bsdgames-darwin-b9f9ac402c70812f3d5c026df36818b288af2aab.zip |
cgram: allow providing an input file instead of the random fortune
-rw-r--r-- | cgram/cgram.6 | 15 | ||||
-rw-r--r-- | cgram/cgram.c | 48 |
2 files changed, 44 insertions, 19 deletions
diff --git a/cgram/cgram.6 b/cgram/cgram.6 index 9f315804..88b6f8e7 100644 --- a/cgram/cgram.6 +++ b/cgram/cgram.6 @@ -1,4 +1,4 @@ -.\" $NetBSD: cgram.6,v 1.2 2013/08/04 07:55:09 wiz Exp $ +.\" $NetBSD: cgram.6,v 1.3 2021/04/22 14:57:36 wiz Exp $ .\" .\" Copyright (c) 2004, 2013 The NetBSD Foundation, Inc. .\" All rights reserved. @@ -27,21 +27,24 @@ .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE .\" POSSIBILITY OF SUCH DAMAGE. .\" -.Dd August 3, 2013 +.Dd April 22, 2021 .Dt CGRAM 6 .Os .Sh NAME .Nm cgram .Nd solve Sunday-paper cryptograms .Sh SYNOPSIS -.Nm +.Nm Op Ar file .Sh DESCRIPTION .Nm is a curses-based widget for solving Sunday-paper-type cryptograms based on substitution ciphers. -A random cleartext is chosen using -.Xr fortune 6 -and a random substitution key is generated. +If +.Ar file +is given, it is used as cleartext, otherwise a random cleartext is +chosen using +.Xr fortune 6 ; +either way, a random substitution key is generated. .Pp The ciphertext is displayed. Typing a letter changes the key so that the letter under the cursor diff --git a/cgram/cgram.c b/cgram/cgram.c index 3c4ca952..1708afb9 100644 --- a/cgram/cgram.c +++ b/cgram/cgram.c @@ -1,4 +1,4 @@ -/* $NetBSD: cgram.c,v 1.17 2021/02/26 15:18:40 rillig Exp $ */ +/* $NetBSD: cgram.c,v 1.18 2021/04/22 14:57:36 wiz Exp $ */ /*- * Copyright (c) 2013, 2021 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include <sys/cdefs.h> #if defined(__RCSID) && !defined(lint) -__RCSID("$NetBSD: cgram.c,v 1.17 2021/02/26 15:18:40 rillig Exp $"); +__RCSID("$NetBSD: cgram.c,v 1.18 2021/04/22 14:57:36 wiz Exp $"); #endif #include <assert.h> @@ -216,13 +216,7 @@ char_at_cursor(void) return lines.v[cursor_y].s[cursor_x]; } -static void -readquote(void) -{ - FILE *f = popen(_PATH_FORTUNE, "r"); - if (f == NULL) - err(1, "%s", _PATH_FORTUNE); - +static void getquote(FILE *f) { struct string line; string_init(&line); @@ -249,6 +243,30 @@ readquote(void) extent_y = (int)lines.num; for (int i = 0; i < extent_y; i++) extent_x = imax(extent_x, (int)lines.v[i].len); +} + +static void +readfile(const char *name) +{ + FILE *f = fopen(name, "r"); + if (f == NULL) + err(1, "%s", name); + + getquote(f); + + if (fclose(f) != 0) + exit(1); +} + + +static void +readquote(void) +{ + FILE *f = popen(_PATH_FORTUNE, "r"); + if (f == NULL) + err(1, "%s", _PATH_FORTUNE); + + getquote(f); if (pclose(f) != 0) exit(1); /* error message must come from child process */ @@ -535,12 +553,16 @@ handle_key(void) } static void -init(void) +init(const char *filename) { stringarray_init(&lines); stringarray_init(&sollines); srandom((unsigned int)time(NULL)); - readquote(); + if (filename) { + readfile(filename); + } else { + readquote(); + } encode(); initscr(); @@ -573,9 +595,9 @@ clean_up(void) //////////////////////////////////////////////////////////// int -main(void) +main(int argc, char *argv[]) { - init(); + init(argc > 1 ? argv[1] : NULL); loop(); clean_up(); } |