-/* $NetBSD: cgram.c,v 1.17 2021/02/26 15:18:40 rillig Exp $ */
+/* $NetBSD: cgram.c,v 1.19 2021/04/25 20:14:29 rillig Exp $ */
/*-
* Copyright (c) 2013, 2021 The NetBSD Foundation, Inc.
#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.19 2021/04/25 20:14:29 rillig Exp $");
#endif
#include <assert.h>
}
static void
-readquote(void)
+getquote(FILE *f)
{
- FILE *f = popen(_PATH_FORTUNE, "r");
- if (f == NULL)
- err(1, "%s", _PATH_FORTUNE);
-
struct string line;
string_init(&line);
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)
+ err(1, "%s", name);
+}
+
+
+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 */
}
static void
-init(void)
+init(const char *filename)
{
stringarray_init(&lines);
stringarray_init(&sollines);
srandom((unsigned int)time(NULL));
- readquote();
+ if (filename != NULL) {
+ readfile(filename);
+ } else {
+ readquote();
+ }
encode();
initscr();
////////////////////////////////////////////////////////////
int
-main(void)
+main(int argc, char *argv[])
{
- init();
+ init(argc > 1 ? argv[1] : NULL);
loop();
clean_up();
}