From e258c6aeb6cd3ee8ea5dce769a5c6314a61dca8c Mon Sep 17 00:00:00 2001
From: oharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Date: Sun, 24 Feb 2008 21:11:09 +0000
Subject: [PATCH] move options handling to separate file to better support
 embedded implementations of OpenOCD

git-svn-id: svn://svn.berlios.de/openocd/trunk@334 b42882b7-edfa-0310-969c-e2dbd0fdcd60
---
 src/helper/Makefile.am     |   2 +-
 src/helper/configuration.c |  90 ---------------------------
 src/helper/options.c       | 123 +++++++++++++++++++++++++++++++++++++
 3 files changed, 124 insertions(+), 91 deletions(-)
 create mode 100644 src/helper/options.c

diff --git a/src/helper/Makefile.am b/src/helper/Makefile.am
index f65a1d234..35695d699 100644
--- a/src/helper/Makefile.am
+++ b/src/helper/Makefile.am
@@ -2,7 +2,7 @@ INCLUDES = $(all_includes)
 METASOURCES = AUTO
 AM_CPPFLAGS = -DPKGDATADIR=\"$(pkgdatadir)\" -DPKGLIBDIR=\"$(pkglibdir)\" @CPPFLAGS@
 noinst_LIBRARIES = libhelper.a
-libhelper_a_SOURCES = binarybuffer.c configuration.c log.c interpreter.c command.c time_support.c \
+libhelper_a_SOURCES = binarybuffer.c configuration.c options.c log.c interpreter.c command.c time_support.c \
 	replacements.c fileio.c
 noinst_HEADERS = binarybuffer.h configuration.h types.h log.h command.h \
 	interpreter.h time_support.h replacements.h fileio.h
diff --git a/src/helper/configuration.c b/src/helper/configuration.c
index d9300e9dc..0a7bf1801 100644
--- a/src/helper/configuration.c
+++ b/src/helper/configuration.c
@@ -28,7 +28,6 @@
 
 #include <stdio.h>
 #include <stdlib.h>
-#include <getopt.h>
 #include <string.h>
 
 static size_t num_config_files;
@@ -37,21 +36,6 @@ static char** config_file_names;
 static size_t num_script_dirs;
 static char** script_search_dirs;
 
-static int help_flag;
-
-static struct option long_options[] =
-{
-	{"help",			no_argument,	&help_flag, 1},
-
-	{"debug",			optional_argument,	0, 'd'},
-	{"file", 			required_argument,	0, 'f'},
-	{"search",			required_argument,	0, 's'},
-	{"log_output",		required_argument,	0, 'l'},
-	{"command",			required_argument,	0, 'c'},
-	
-	{0, 0, 0, 0}
-};
-
 int configuration_output_handler(struct command_context_s *context, char* line)
 {
 	INFO(line);
@@ -77,80 +61,6 @@ void add_config_file_name (const char *cfg)
 	config_file_names[num_config_files] = NULL;
 }
 
-int parse_cmdline_args(struct command_context_s *cmd_ctx, int argc, char *argv[])
-{
-	int c;
-	char command_buffer[128];
-
-	while (1)
-	{	
-		/* getopt_long stores the option index here. */
-		int option_index = 0;
-		
-		c = getopt_long(argc, argv, "hd::l:f:s:c:", long_options, &option_index);
-		
-		/* Detect the end of the options. */
-		if (c == -1)
-			break;
-		
-		switch (c)
-		{
-			case 0:
-				break;
-			case 'h':	/* --help | -h */
-				help_flag = 1;
-				break;
-			case 'f':	/* --file | -f */
-				snprintf(command_buffer, 128, "script %s", optarg);
-				add_config_file_name(command_buffer);
-				break;
-			case 's':	/* --search | -s */
-				add_script_search_dir(optarg);
-				break;
-			case 'd':	/* --debug | -d */
-				if (optarg)
-					snprintf(command_buffer, 128, "debug_level %s", optarg);
-				else
-					snprintf(command_buffer, 128, "debug_level 3");
-				command_run_line(cmd_ctx, command_buffer);
-				break;
-			case 'l':	/* --log_output | -l */
-				if (optarg)
-				{
-					snprintf(command_buffer, 128, "log_output %s", optarg);
-					command_run_line(cmd_ctx, command_buffer);
-				}	
-				break;
-			case 'c':	/* --command | -c */
-				if (optarg)
-				{
-					add_config_file_name(optarg);
-				}	
-				break;
-				
-		}
-	}
-
-	if (help_flag)
-	{
-		printf("Open On-Chip Debugger\n(c) 2005 by Dominic Rath\n\n");
-		printf("--help       | -h\tdisplay this help\n");
-		printf("--file       | -f\tuse configuration file <name>\n");
-		printf("--search     | -s\tdir to search for config files and scripts.\n");
-		printf("--debug      | -d\tset debug level <0-3>\n");
-		printf("--log_output | -l\tredirect log output to file <name>\n");
-		printf("--command    | -c\trun <command>\n");
-		exit(-1);
-	}	
-
-	/* Add dir for openocd supplied scripts last so that user can over
-	   ride those scripts if desired. */
-	add_script_search_dir(PKGDATADIR);
-	add_script_search_dir(PKGLIBDIR);
-
-	return ERROR_OK;
-}
-
 FILE *open_file_from_path (command_context_t *cmd_ctx, char *file, char *mode)
 {
 	FILE *fp = NULL;
diff --git a/src/helper/options.c b/src/helper/options.c
new file mode 100644
index 000000000..908748ddb
--- /dev/null
+++ b/src/helper/options.c
@@ -0,0 +1,123 @@
+/***************************************************************************
+ *   Copyright (C) 2004, 2005 by Dominic Rath                              *
+ *   Dominic.Rath@gmx.de                                                   *
+ *                                                                         *
+ *   This program is free software; you can redistribute it and/or modify  *
+ *   it under the terms of the GNU General Public License as published by  *
+ *   the Free Software Foundation; either version 2 of the License, or     *
+ *   (at your option) any later version.                                   *
+ *                                                                         *
+ *   This program is distributed in the hope that it will be useful,       *
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
+ *   GNU General Public License for more details.                          *
+ *                                                                         *
+ *   You should have received a copy of the GNU General Public License     *
+ *   along with this program; if not, write to the                         *
+ *   Free Software Foundation, Inc.,                                       *
+ *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
+ ***************************************************************************/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "types.h"
+#include "command.h"
+#include "configuration.h"
+#include "log.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <getopt.h>
+#include <string.h>
+
+
+static int help_flag;
+
+static struct option long_options[] =
+{
+	{"help",			no_argument,	&help_flag, 1},
+
+	{"debug",			optional_argument,	0, 'd'},
+	{"file", 			required_argument,	0, 'f'},
+	{"search",			required_argument,	0, 's'},
+	{"log_output",		required_argument,	0, 'l'},
+	{"command",			required_argument,	0, 'c'},
+	
+	{0, 0, 0, 0}
+};
+
+
+int parse_cmdline_args(struct command_context_s *cmd_ctx, int argc, char *argv[])
+{
+	int c;
+	char command_buffer[128];
+
+	while (1)
+	{	
+		/* getopt_long stores the option index here. */
+		int option_index = 0;
+		
+		c = getopt_long(argc, argv, "hd::l:f:s:c:", long_options, &option_index);
+		
+		/* Detect the end of the options. */
+		if (c == -1)
+			break;
+		
+		switch (c)
+		{
+			case 0:
+				break;
+			case 'h':	/* --help | -h */
+				help_flag = 1;
+				break;
+			case 'f':	/* --file | -f */
+				snprintf(command_buffer, 128, "script %s", optarg);
+				add_config_file_name(command_buffer);
+				break;
+			case 's':	/* --search | -s */
+				add_script_search_dir(optarg);
+				break;
+			case 'd':	/* --debug | -d */
+				if (optarg)
+					snprintf(command_buffer, 128, "debug_level %s", optarg);
+				else
+					snprintf(command_buffer, 128, "debug_level 3");
+				command_run_line(cmd_ctx, command_buffer);
+				break;
+			case 'l':	/* --log_output | -l */
+				if (optarg)
+				{
+					snprintf(command_buffer, 128, "log_output %s", optarg);
+					command_run_line(cmd_ctx, command_buffer);
+				}	
+				break;
+			case 'c':	/* --command | -c */
+				if (optarg)
+				{
+					add_config_file_name(optarg);
+				}	
+				break;
+				
+		}
+	}
+
+	if (help_flag)
+	{
+		printf("Open On-Chip Debugger\n(c) 2005 by Dominic Rath\n\n");
+		printf("--help       | -h\tdisplay this help\n");
+		printf("--file       | -f\tuse configuration file <name>\n");
+		printf("--search     | -s\tdir to search for config files and scripts.\n");
+		printf("--debug      | -d\tset debug level <0-3>\n");
+		printf("--log_output | -l\tredirect log output to file <name>\n");
+		printf("--command    | -c\trun <command>\n");
+		exit(-1);
+	}	
+
+	/* Add dir for openocd supplied scripts last so that user can over
+	   ride those scripts if desired. */
+	add_script_search_dir(PKGDATADIR);
+	add_script_search_dir(PKGLIBDIR);
+
+	return ERROR_OK;
+}
-- 
GitLab