.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
.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
.SH SYNOPSIS
.B sfrotz
-.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 invocatio
.SH DESCRIPTION
int err_report_mode;
char *story_file;
+ char *blorb_file;
char *story_name;
char *story_base;
char *script_name;
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) {
} while (c != EOF);
- if (zoptind != argc - 1) {
+ if ((argv[zoptind] == NULL)) {
printf("FROTZ V%s\tCurses interface. ", VERSION);
#ifndef NO_SOUND
f_setup.story_file = strdup(argv[zoptind]);
f_setup.story_name = strdup(basename(argv[zoptind]));
+ if (argv[zoptind+1] != NULL)
+ f_setup.blorb_file = strdup(argv[zoptind+1]);
+
/* Now strip off the extension */
p = strrchr(f_setup.story_name, '.');
if ( p != NULL )
f_setup.err_report_mode = ERR_DEFAULT_REPORT_MODE;
f_setup.restore_mode = 0;
+ f_setup.blorb_file = NULL;
+ f_setup.story_file = NULL;
+ f_setup.story_name = NULL;
+ f_setup.story_base = NULL;
+ f_setup.script_name = NULL;
+ f_setup.command_name = NULL;
+ f_setup.save_name = NULL;
+ f_setup.tmp_save_name = NULL;
+ f_setup.aux_name = NULL;
+ f_setup.story_path = NULL;
+ f_setup.zcode_path = NULL;
+ f_setup.restricted_path = NULL;
+
f_setup.use_blorb = 0;
f_setup.exec_in_blorb = 0;
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. */
}
} while (c != EOF);
- if (((argc - zoptind) != 1) && ((argc - zoptind) != 2)) {
+ if ((argv[zoptind] == NULL)) {
printf("FROTZ V%s\tDumb interface.\n", VERSION);
puts(INFORMATION);
puts(INFO2);
f_setup.story_file = strdup(argv[zoptind]);
f_setup.story_name = strdup(basename(argv[zoptind]));
+ if (argv[zoptind+1] != NULL)
+ f_setup.blorb_file = strdup(argv[zoptind+1]);
+
/* Now strip off the extension */
p = strrchr(f_setup.story_name, '.');
if ( p != NULL )
f_setup.sound = 1;
f_setup.err_report_mode = ERR_DEFAULT_REPORT_MODE;
f_setup.restore_mode = 0;
+
+ f_setup.blorb_file = NULL;
+ f_setup.story_file = NULL;
+ f_setup.story_name = NULL;
+ f_setup.story_base = NULL;
+ f_setup.script_name = NULL;
+ f_setup.command_name = NULL;
+ f_setup.save_name = NULL;
+ f_setup.tmp_save_name = NULL;
+ f_setup.aux_name = NULL;
+ f_setup.story_path = NULL;
+ f_setup.zcode_path = NULL;
+ f_setup.restricted_path = NULL;
}
static void print_version(void)
zsize = ftell(f);
zoffset = 0;
- // try loading a corresponding blorb, but without complaining...
- p = strrchr(buf,'.');
- if (p){
- strcpy(p,".blb");
- tryloadblorb(buf);
+ // See if the user explicitly provided a blorb file
+ if (f_setup.blorb_file != NULL) {
+ tryloadblorb(f_setup.blorb_file);
+ } else {
+ // No? Let's see if we can find one.
+ p = malloc(strlen(f_setup.story_name) + strlen(EXT_BLORB4) * sizeof(char));
+ strncpy(p, f_setup.story_name, strlen(f_setup.story_name));
+ strncat(p, EXT_BLORB3, strlen(EXT_BLORB3)+1);
+
+ if (tryloadblorb(p) != bb_err_None) { /* Trying foo.blorb */
+ free(p);
+ p = malloc(strlen(f_setup.story_name) + strlen(EXT_BLORB4) * sizeof(char));
+ strncpy(p, f_setup.story_name, strlen(f_setup.story_name));
+ strncat(p, EXT_BLORB, strlen(EXT_BLORB)+1);
+ tryloadblorb(p); /* Trying foo.blb */
}
-
+ }
return 0;
}
f_setup.err_report_mode = ERR_DEFAULT_REPORT_MODE;
f_setup.restore_mode = 0;
+ f_setup.blorb_file = NULL;
+ f_setup.story_file = NULL;
+ f_setup.story_name = NULL;
+ f_setup.story_base = NULL;
+ f_setup.script_name = NULL;
+ f_setup.command_name = NULL;
+ f_setup.save_name = NULL;
+ f_setup.tmp_save_name = NULL;
+ f_setup.aux_name = NULL;
+ f_setup.story_path = NULL;
+ f_setup.zcode_path = NULL;
+ f_setup.restricted_path = NULL;
+
sdl_active = FALSE;
}
sf_readsettings();
parse_options(argc, argv);
- if (optind != argc - 1)
+ if (argv[optind] == NULL)
{
usage();
exit (EXIT_FAILURE);
}
f_setup.story_file = strdup(argv[optind]);
- // it's useless to test the retval, as in case of error it does not return
- sf_load_resources( f_setup.story_file);
+ if(argv[optind+1] != NULL)
+ f_setup.blorb_file = argv[optind+1];
/* Strip path and extension off the story file name */
-
- f_setup.story_name = new_basename(argv[optind]);
+ f_setup.story_name = new_basename(f_setup.story_file);
/* Now strip off the extension. */
p = strrchr(f_setup.story_name, '.');
else
// blorb_ext = strdup(EXT_BLORB);
-
/* Get rid of extensions with 1 to 6 character extensions. */
/* This will take care of an extension like ".zblorb". */
/* More than that, there might be something weird going on */
if (user_foreground != -1) m_defaultFore = sf_GetColour(user_foreground);
if (user_tandy_bit != -1) m_tandy = user_tandy_bit;
+ // it's useless to test the retval, as in case of error it does not return
+ sf_load_resources( f_setup.story_file);
+
sf_initfonts();
}/* os_process_arguments */