Allow for alternative Blorb file at command line for dumb and curses.
authorDavid Griffith <dave@661.org>
Fri, 5 Jul 2019 00:43:12 +0000 (17:43 -0700)
committerDavid Griffith <dave@661.org>
Fri, 5 Jul 2019 00:43:12 +0000 (17:43 -0700)
Doing this for the SDL interface is proving troublesome because it's not
very clear where stuff is being set and where not.  After the audio
overhaul release, I want to overhaul the SDL interface code to make it
as closely resemble as feasible that of the curses interface.

doc/dfrotz.6
doc/frotz.6
src/common/setup.h
src/curses/ux_blorb.c
src/curses/ux_init.c
src/dumb/dumb_blorb.c
src/dumb/dumb_init.c

index d401bb81dec0be2a935ce6c24ec0cda330694e12..f5226e8fc15df2bdfc03fee04e734e66bcf68c93 100644 (file)
@@ -6,7 +6,30 @@ dfrotz \- interpreter for Infocom and other Z-Machine games (dumb interface)
 
 .SH SYNOPSIS
 .B dfrotz
-.RI [ options "] " file
+.RI [ options "] " "file " [ blorbfile "]"
+
+At least one file must be specified on the command line.  This can be
+either a plain Z-code file or a Blorb file.  A Z-code file is a compiled
+executable for the Z-Machine.  A Blorb file contains audio, graphics,
+and other things in addition to the game wrapped up into a single file.
+It can also optionally contain the Z-Machine executable.  If a plain
+Z-code file is supplied, then
+.B Frotz
+will check for a Blorb file with the same base name but an extension of
+.B .blb,
+.B .blorb,
+or
+.B .zblorb
+and load it if found.
+
+If the file supplied on the command line is a Blorb file, then
+.B Frotz
+will check to see if a Z-code file is contained within.  If not found, then
+.B Frotz
+will complain and exit.
+
+An alternatively-named Blorb file can be supplied as the optional second
+parameter to the command line invocation.
 
 
 .SH DESCRIPTION
index 58d543637a842b5a074639b96bda22747943ecf2..e8865b47dd1603d6fb79378cac33b08223065433 100644 (file)
@@ -6,7 +6,30 @@ frotz \- interpreter for Infocom and other Z-Machine games
 
 .SH SYNOPSIS
 .B frotz
-.RI [ options "] " file
+.RI [ options "] " "file " [ blorbfile "]"
+
+At least one file must be specified on the command line.  This can be
+either a plain Z-code file or a Blorb file.  A Z-code file is a compiled
+executable for the Z-Machine.  A Blorb file contains audio, graphics,
+and other things in addition to the game wrapped up into a single file.
+It can also optionally contain the Z-Machine executable.  If a plain
+Z-code file is supplied, then
+.B Frotz
+will check for a Blorb file with the same base name but an extension of
+.B .blb,
+.B .blorb,
+or
+.B .zblorb
+and load it if found.
+
+If the file supplied on the command line is a Blorb file, then
+.B Frotz
+will check to see if a Z-code file is contained within.  If not found, then
+.B Frotz
+will complain and exit.
+
+An alternatively-named Blorb file can be supplied as the optional second
+parameter to the command line invocation.
 
 
 .SH DESCRIPTION
index 0c1ab35df7e8bee023389984190741934e9d1c62..06c3e69a36a0fa6a62396deb6ae1e0faf54b1d9e 100644 (file)
@@ -23,6 +23,7 @@ typedef struct frotz_setup_struct {
        int err_report_mode;
 
        char *story_file;
+       char *blorb_file;
         char *story_name;
         char *story_base;
         char *script_name;
index 9c85027241aa13591bccbcffd2dbe0c83a5acf03..34a1ffc986dd5c769f7ae388c5f4e3999dcf0b84 100644 (file)
@@ -84,16 +84,19 @@ bb_err_t ux_blorb_init(char *filename)
         blorb_fp = fp;
     } else {
         fclose(fp);
-       len1 = strlen(filename) + strlen(EXT_BLORB);
-       len2 = strlen(filename) + strlen(EXT_BLORB3);
 
-       mystring = malloc(len2 * sizeof(char) + 1);
-        strncpy(mystring, filename, len1 * sizeof(char));
-       p = strrchr(mystring, '.');
-       if (p != NULL)
-           *p = '\0';
-
-        strncat(mystring, EXT_BLORB, len1 * sizeof(char));
+       if (f_setup.blorb_file != NULL)
+           mystring = strdup(f_setup.blorb_file);
+       else {
+           len1 = strlen(filename) + strlen(EXT_BLORB);
+           len2 = strlen(filename) + strlen(EXT_BLORB3);
+           mystring = malloc(len2 * sizeof(char) + 1);
+            strncpy(mystring, filename, len1 * sizeof(char));
+           p = strrchr(mystring, '.');
+           if (p != NULL)
+               *p = '\0';
+           strncat(mystring, EXT_BLORB, len1 * sizeof(char));
+       }
 
        /* Check if foo.blb is there. */
         if ((fp = os_path_open(mystring, "rb")) == NULL) {
index 5e09769d7ec2184e43944e4c7681a7eba0e056b7..6dfad156e1afe6c68b27c9ac40df833779db113d 100644 (file)
@@ -316,7 +316,7 @@ void os_process_arguments (int argc, char *argv[])
 
     } while (c != EOF);
 
-    if (zoptind != argc - 1) {
+    if (argc < 2) {
        printf("FROTZ V%s\tCurses interface.  ", VERSION);
 
 #ifndef NO_SOUND
@@ -340,6 +340,9 @@ void os_process_arguments (int argc, char *argv[])
     f_setup.story_file = strdup(argv[zoptind]);
     f_setup.story_name = strdup(basename(argv[zoptind]));
 
+    if (argv[3] != NULL)
+       f_setup.blorb_file = strdup(argv[3]);
+
     /* Now strip off the extension */
     p = strrchr(f_setup.story_name, '.');
     if ( p != NULL )
index 1cf77bc80f4617a6d52136c8e52494570330afed..4227c9c7049bd5da4ae570ab7e4890fcc87a99ac 100644 (file)
@@ -95,12 +95,16 @@ bb_err_t dumb_blorb_init(char *filename)
        fp = NULL;
 
        /* Check if foo.blb is there. */
-        if ((blorb_fp = fopen(mystring, "rb")) == NULL) {
-           p = strrchr(mystring, '.');
-           if (p != NULL)
-               *p = '\0';
-            strncat(mystring, EXT_BLORB3, len2 * sizeof(char));
-           blorb_fp = fopen(mystring, "rb");
+       if (f_setup.blorb_file != NULL)
+           mystring = strdup(f_setup.blorb_file);
+       else {
+           if ((blorb_fp = fopen(mystring, "rb")) == NULL) {
+               p = strrchr(mystring, '.');
+               if (p != NULL)
+                   *p = '\0';
+               strncat(mystring, EXT_BLORB3, len2 * sizeof(char));
+               blorb_fp = fopen(mystring, "rb");
+           }
        }
 
        if (blorb_fp == NULL || !isblorb(fp))   /* No matching blorbs found. */
index 713b8bcb37c220d53efce4561ea057eb7eefa74b..b528439d7eb9199bbc10d40ee3d2fca6238a8aa7 100644 (file)
@@ -138,7 +138,7 @@ void os_process_arguments(int argc, char *argv[])
        }
     } while (c != EOF);
 
-    if (((argc - zoptind) != 1) && ((argc - zoptind) != 2)) {
+    if (argc < 2) {
        printf("FROTZ V%s\tDumb interface.\n", VERSION);
        puts(INFORMATION);
        puts(INFO2);
@@ -150,6 +150,9 @@ void os_process_arguments(int argc, char *argv[])
     f_setup.story_file = strdup(argv[zoptind]);
     f_setup.story_name = strdup(basename(argv[zoptind]));
 
+    if (argv[3] != NULL)
+       f_setup.blorb_file = strdup(argv[3]);
+
     /* Now strip off the extension */
     p = strrchr(f_setup.story_name, '.');
     if ( p != NULL )