return s_copy;
}
+static void printUsage()
+{
+ printf("\n"
+ "Usage: %s [OPTION]... [HOSTNAME [PORT]]\n"
+ "\n"
+ "Options:\n"
+ " -d, --display HOSTNAME[:SCREEN] specify X server display\n"
+ " -b, --basepath DIRECTORY alternative base DIRECTORY\n"
+ " -l, --level DIRECTORY alternative level DIRECTORY\n"
+ " -g, --graphics DIRECTORY alternative graphics DIRECTORY\n"
+ " -s, --sounds DIRECTORY alternative sounds DIRECTORY\n"
+ " -m, --music DIRECTORY alternative music DIRECTORY\n"
+ " -n, --network network multiplayer game\n"
+ " --serveronly only start network server\n"
+ " -v, --verbose verbose mode\n"
+ " --debug display debugging information\n"
+ " -e, --execute COMMAND execute batch COMMAND:\n"
+ "\n"
+ "Valid commands for '--execute' option:\n"
+ " \"print graphicsinfo.conf\" print default graphics config\n"
+ " \"print soundsinfo.conf\" print default sounds config\n"
+ " \"print musicinfo.conf\" print default music config\n"
+ " \"dump tape FILE\" dump tape data from FILE\n"
+ " \"autoplay LEVELDIR\" play level tapes for LEVELDIR\n"
+ "\n",
+ program.command_basename);
+}
+
void GetOptions(char *argv[])
{
char **options_left = &argv[1];
options.graphics_directory = RO_BASE_PATH "/" GRAPHICS_DIRECTORY;
options.sounds_directory = RO_BASE_PATH "/" SOUNDS_DIRECTORY;
options.music_directory = RO_BASE_PATH "/" MUSIC_DIRECTORY;
+ options.execute_command = NULL;
options.serveronly = FALSE;
options.network = FALSE;
options.verbose = FALSE;
options.debug = FALSE;
- options.debug_command = NULL;
while (*options_left)
{
Error(ERR_EXIT_HELP, "unrecognized option '%s'", option);
else if (strncmp(option, "-help", option_len) == 0)
{
- printf("Usage: %s [options] [<server host> [<server port>]]\n"
- "Options:\n"
- " -d, --display <host>[:<scr>] X server display\n"
- " -b, --basepath <directory> alternative base directory\n"
- " -l, --level <directory> alternative level directory\n"
- " -g, --graphics <directory> alternative graphics directory\n"
- " -s, --sounds <directory> alternative sounds directory\n"
- " -m, --music <directory> alternative music directory\n"
- " -n, --network network multiplayer game\n"
- " --serveronly only start network server\n"
- " -v, --verbose verbose mode\n"
- " --debug display debugging information\n",
- program.command_basename);
-
- if (options.debug)
- printf(" --debug-command <command> execute special command\n");
+ printUsage();
exit(0);
}
{
options.debug = TRUE;
}
- else if (strncmp(option, "-debug-command", option_len) == 0)
+ else if (strncmp(option, "-execute", option_len) == 0)
{
if (option_arg == NULL)
Error(ERR_EXIT_HELP, "option '%s' requires an argument", option_str);
- options.debug_command = option_arg;
+ options.execute_command = option_arg;
if (option_arg == next_option)
options_left++;
}
}
if (list_pos != num_file_list_entries - 1)
- Error(ERR_EXIT, "inconsistant config list information -- please fix");
+ Error(ERR_EXIT, "inconsistant config list information (%d != %d) -- please fix", list_pos, num_file_list_entries - 1);
return file_list;
}
static void replaceArtworkListEntry(struct ArtworkListInfo *artwork_info,
struct ListNodeInfo **listnode,
- char *filename)
+ char *basename)
{
+ char *init_text[] =
+ { "",
+ "Loading graphics:",
+ "Loading sounds:",
+ "Loading music:"
+ };
+
ListNode *node;
+ char *filename = getCustomArtworkFilename(basename, artwork_info->type);
+
+ if (filename == NULL)
+ {
+ int error_mode = ERR_WARN;
+
+ /* we can get away without sounds and music, but not without graphics */
+ if (*listnode == NULL && artwork_info->type == ARTWORK_TYPE_GRAPHICS)
+ error_mode = ERR_EXIT;
+
+ Error(error_mode, "cannot find artwork file '%s'", basename);
+ return;
+ }
/* check if the old and the new artwork file are the same */
if (*listnode && strcmp((*listnode)->source_filename, filename) == 0)
*listnode = (struct ListNodeInfo *)node->content;
(*listnode)->num_references++;
+
+ return;
}
- else if ((*listnode = artwork_info->load_artwork(filename)) != NULL)
+
+ DrawInitText(init_text[artwork_info->type], 120, FC_GREEN);
+ DrawInitText(basename, 150, FC_YELLOW);
+
+ if ((*listnode = artwork_info->load_artwork(filename)) != NULL)
{
+#if 0
+ printf("[adding new artwork '%s']\n", filename);
+#endif
+
(*listnode)->num_references = 1;
addNodeToList(&artwork_info->content_list, (*listnode)->source_filename,
*listnode);
}
+ else
+ {
+ int error_mode = ERR_WARN;
+
+ /* we can get away without sounds and music, but not without graphics */
+ if (artwork_info->type == ARTWORK_TYPE_GRAPHICS)
+ error_mode = ERR_EXIT;
+
+ Error(error_mode, "cannot load artwork file '%s'", basename);
+ return;
+ }
}
static void LoadCustomArtwork(struct ArtworkListInfo *artwork_info,
struct ListNodeInfo **listnode,
char *basename)
{
+#if 0
char *filename = getCustomArtworkFilename(basename, artwork_info->type);
+#endif
#if 0
printf("GOT CUSTOM ARTWORK FILE '%s'\n", filename);
return;
}
+#if 0
if (filename == NULL)
{
Error(ERR_WARN, "cannot find artwork file '%s'", basename);
}
replaceArtworkListEntry(artwork_info, listnode, filename);
+#else
+ replaceArtworkListEntry(artwork_info, listnode, basename);
+#endif
}
static void LoadArtworkToList(struct ArtworkListInfo *artwork_info,
void ReloadCustomArtworkList(struct ArtworkListInfo *artwork_info)
{
+#if 0
static struct
{
char *text;
{ "Loading sounds:", TRUE },
{ "Loading music:", TRUE }
};
+#endif
int num_file_list_entries = artwork_info->num_file_list_entries;
struct FileInfo *file_list = artwork_info->file_list;
LoadArtworkConfig(artwork_info);
+#if 0
if (draw_init[artwork_info->type].do_it)
DrawInitText(draw_init[artwork_info->type].text, 120, FC_GREEN);
+#endif
#if 0
printf("DEBUG: reloading %d artwork files ...\n", num_file_list_entries);
for(i=0; i<num_file_list_entries; i++)
{
+#if 0
if (draw_init[artwork_info->type].do_it)
DrawInitText(file_list[i].token, 150, FC_YELLOW);
+#endif
LoadArtworkToList(artwork_info, file_list[i].filename, i);
+
+#if 0
+ printf("DEBUG: loading artwork file '%s'...\n", file_list[i].filename);
+#endif
}
+#if 0
draw_init[artwork_info->type].do_it = FALSE;
+#endif
/*
printf("list size == %d\n", getNumNodes(artwork_info->content_list));
{
int i;
- if (artwork_info->artwork_list == NULL)
+ if (artwork_info == NULL || artwork_info->artwork_list == NULL)
return;
#if 0
#endif
+/* ========================================================================= */
+/* some generic helper functions */
+/* ========================================================================= */
+
+void printf_line(char line_char, int line_length)
+{
+ int i;
+
+ for (i=0; i<line_length; i++)
+ printf("%c", line_char);
+
+ printf("\n");
+}
+
+
/* ========================================================================= */
/* the following is only for debugging purpose and normally not used */
/* ========================================================================= */