]> git.cameronkatri.com Git - bsdgames-darwin.git/commitdiff
cgram: allow providing an input file instead of the random fortune
authorwiz <wiz@NetBSD.org>
Thu, 22 Apr 2021 14:57:36 +0000 (14:57 +0000)
committerCameron Katri <me@cameronkatri.com>
Wed, 28 Apr 2021 20:38:43 +0000 (16:38 -0400)
cgram/cgram.6
cgram/cgram.c

index 9f315804cee6bec3294248409233710aa6d4ba5a..88b6f8e7ec9992818ffcc3cbb3a11a21a043c471 100644 (file)
@@ -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.
 .\" 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
index 3c4ca952d065db8cf0fa045b186a5ea6107e184e..1708afb9524498758500f6a4c2a9aac88ccb239a 100644 (file)
@@ -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();
 }