summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwiz <wiz@NetBSD.org>2021-04-22 14:57:36 +0000
committerCameron Katri <me@cameronkatri.com>2021-04-28 16:38:43 -0400
commitb9f9ac402c70812f3d5c026df36818b288af2aab (patch)
tree059d4c8e0ed18f5e64cff1645d47572006596247
parentbedd1da4f697c509582246e285e628844e77e140 (diff)
downloadbsdgames-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.615
-rw-r--r--cgram/cgram.c48
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();
}