Fix command line parsing
"gpsim -p p12f675 file.hex" did ignore the arguments.
Three patches cherry-picked from development trunk fix it. The second patch
fixes the actual issue, while the first and the last fix up the compilation.
borutr (3):
* gpsim/main.h.in: added to source control
* gpsim/main.cc, gpsim/Makefile.am, set_cl_revision.sh: fixed mess with --help and --version commnd line options, show svn revision number in --version
- reintroduced gpsim_version()
From dd2bd633fd3fe936ebeed3ce804fbe7aa1fa5294 Mon Sep 17 00:00:00 2001
From: borutr <borutr@c0b0687f-f210-0410-a348-de8ada4243c3>
Date: Sat, 26 Oct 2013 06:48:14 +0000
Subject: [PATCH 1/3] * gpsim/main.h.in: added to source control
git-svn-id: svn://svn.code.sf.net/p/gpsim/code/trunk@2251 c0b0687f-f210-0410-a348-de8ada4243c3
Conflicts:
ChangeLog
---
ChangeLog | 3 +++
gpsim/gpsim.h.in | 27 +++++++++++++++++++++++++++
2 files changed, 30 insertions(+)
create mode 100644 gpsim/gpsim.h.in
diff --git a/ChangeLog b/ChangeLog
index 580a770..192f51d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,6 @@
+2013-10-26 Borut Razem <borutr@users.sourceforge.net>
+ * gpsim/main.h.in: added to source control
+
2013-09-02 Roy Rankin <rrankin@ihug.com.au>
* configure.ac: Version 0.27.0
* ANNOUNCE: 0.27.0 release highlights
diff --git a/gpsim/gpsim.h.in b/gpsim/gpsim.h.in
new file mode 100644
index 0000000..ac10eb9
--- /dev/null
+++ b/gpsim/gpsim.h.in
@@ -0,0 +1,27 @@
+/* Common definitions for gpsim
+ Copyright (C) 2013
+ Borut Razem
+
+This file is part of gpsim.
+
+gpsim 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, or (at your option)
+any later version.
+
+gpsim 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 gpsim; see the file COPYING. If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#ifndef __GPSIM_H__
+#define __GPSIM_H__
+
+#define GPSIM_VERSION_STRING ("gpsim-" VERSION " #" @REVISION@ " (" __DATE__ ")")
+
+#endif
--
2.1.0
From d3f144e559f93c5f01f320bbed58222382eede35 Mon Sep 17 00:00:00 2001
From: borutr <borutr@c0b0687f-f210-0410-a348-de8ada4243c3>
Date: Tue, 22 Oct 2013 12:43:56 +0000
Subject: [PATCH 2/3] * gpsim/main.cc, gpsim/Makefile.am, set_cl_revision.sh:
fixed mess with --help and --version commnd line options, show svn revision
number in --version
git-svn-id: svn://svn.code.sf.net/p/gpsim/code/trunk@2249 c0b0687f-f210-0410-a348-de8ada4243c3
Conflicts:
ChangeLog
---
ChangeLog | 5 ++
get_cl_revision.sh | 43 ++++++++++++++
gpsim/Makefile.am | 11 +++-
gpsim/main.cc | 164 +++++++++++++++++++++--------------------------------
4 files changed, 122 insertions(+), 101 deletions(-)
create mode 100755 get_cl_revision.sh
diff --git a/ChangeLog b/ChangeLog
index 192f51d..f88a139 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2013-10-22 Borut Razem <borutr@users.sourceforge.net>
+ * gpsim/main.cc, gpsim/Makefile.am, set_cl_revision.sh:
+ fixed mess with --help and --version commnd line options,
+ show svn revision number in --version
+
2013-10-26 Borut Razem <borutr@users.sourceforge.net>
* gpsim/main.h.in: added to source control
diff --git a/get_cl_revision.sh b/get_cl_revision.sh
new file mode 100755
index 0000000..07d088b
--- /dev/null
+++ b/get_cl_revision.sh
@@ -0,0 +1,43 @@
+# get_cl_revision.sh
+#
+# Extraxts the source control revision number from the ChangeLog file.
+# the $Revision$ keyword should be in the last line of the file
+
+VERSION=1.0
+AS_STRING=0
+
+usage ()
+{
+ echo "usage: $0 [options] <ChangeLog_file_name>"
+ echo "options:"
+ echo " -s, --string return the revision number as double quoted string"
+ echo " -V, --version output version information and exit"
+ echo " -h, --help display this help and exit"
+ echo "arguments:"
+ echo " <ChangeLog_file_name> ChangeLog file name"
+}
+
+while true
+do
+ case "$1" in
+ -s|--string) AS_STRING=1; shift;;
+ -h|--help) usage; exit 0;;
+ -V|--version) echo $(basename $0) $VERSION; exit 0;;
+ --) shift; break;;
+ -*|--*) echo "unknown option $1"; usage; exit 1;;
+ ''|*) break;;
+ esac
+done
+
+if [ "$#" != 1 ]
+then
+ echo "too many arguments"; usage; exit 1;
+else
+ REV=$(expr "$(tail -1 $1)" : '\$Revision: *\([0-9]*\) *\$') || REV=0
+ if [ "$AS_STRING" != 0 ]
+ then
+ echo "\"$REV\""
+ else
+ echo $REV
+ fi
+fi
diff --git a/gpsim/Makefile.am b/gpsim/Makefile.am
index 5e56e7a..4c1c978 100644
--- a/gpsim/Makefile.am
+++ b/gpsim/Makefile.am
@@ -6,11 +6,20 @@ AM_CPPFLAGS = @X_CFLAGS@ @Y_CFLAGS@
bin_PROGRAMS = gpsim
-gpsim_SOURCES = main.cc
+gpsim_SOURCES = main.cc \
+ gpsim.h.in
#gpsim_LDFLAGS = $(shell gtk-config --cflags)
gpsim_LDADD = ../src/libgpsim.la ../cli/libgpsimcli.la ../gui/libgpsimgui.la \
../eXdbm/libgpsim_eXdbm.la @GTK@ @GDK@ @GLIB@ -lstdc++ -lpopt @LIBDL@ \
@X_LDFLAGS@ @Y_LDFLAGS@ @LIBREADLINE@
+# Make sure we have parse.h when compiling other sources
+BUILT_SOURCES = gpsim.h
+
+CLEANFILES = gpsim.h
+
EXTRA_DIST = makefile.mingw
+
+gpsim.h: gpsim.h.in
+ sed -e "s/@REVISION@/$$(${top_srcdir}\/get_cl_revision.sh -s ${top_srcdir}\/ChangeLog)/g" "$<" > "$@"
diff --git a/gpsim/main.cc b/gpsim/main.cc
index ba89961..e2ff068 100644
--- a/gpsim/main.cc
+++ b/gpsim/main.cc
@@ -37,6 +37,7 @@ Boston, MA 02111-1307, USA. */
using namespace std;
#include "../config.h"
+#include "gpsim.h"
#include "../cli/input.h"
#include "../src/interface.h"
#include "../src/gpsim_interface.h"
@@ -71,11 +72,6 @@ extern int abort_gpsim;
char szBuild[] = "Release";
#endif
-void gpsim_version(void)
-{
- printf("%s %s\n", szBuild, VERSION);
-}
-
// from ui_gpsim.cc
void initialize_ConsoleUI();
@@ -85,24 +81,28 @@ void initialize_ConsoleUI();
// Here are the variables that popt (the command line invocation parsing
// library) will assign values to:
-static const char *startup_name = "";
-static const char *include_startup_name = "";
-static const char *processor_name = "";
-static const char *cod_name = "";
-static const char *hex_name = "";
-static const char *search_path = "";
-static const char *icd_port = "";
-static const char *defineSymbol = "";
-static const char *sExitOn = "";
-static const char *sourceEnabled = "";
+static const char *startup_name = NULL;
+static const char *include_startup_name = NULL;
+static const char *processor_name = NULL;
+static const char *cod_name = NULL;
+static const char *hex_name = NULL;
+static const char *search_path = NULL;
+static const char *icd_port = NULL;
+static const char *defineSymbol = NULL;
+static const char *sExitOn = NULL;
+static const char *sourceEnabled = NULL;
-#define POPT_MYEXAMPLES { NULL, '\0', POPT_ARG_INCLUDE_TABLE, poptHelpOptions, \
+
+struct poptOption myHelpOptions[] = {
+ POPT_TABLEEND
+} ;
+
+#define POPT_MYEXAMPLES { NULL, '\0', POPT_ARG_INCLUDE_TABLE, myHelpOptions, \
0, "Examples:\n\
- gpsim myprog.cod <-- loads a symbol file\n\
- gpsim -p p16f877 myprog.hex <-- select processor and load hex\n\
- gpsim myscript.stc <-- loads a script\n\
-\nHelp options:", NULL },
+ gpsim myprog.cod <-- loads a symbol file\n\
+ gpsim -p p16f877 myprog.hex <-- select processor and load hex\n\
+ gpsim myscript.stc <-- loads a script\n", NULL },
//------------------------------------------------------------------------
// see popt documentation about how the poptOption structure is defined.
@@ -117,76 +117,42 @@ static const char *sourceEnabled = "";
// gpsim to interpret and further parse the option.
struct poptOption optionsTable[] = {
- // { "help", 'h', 0, 0, 'h',
- // "this help list" },
+ { "cli", 'i', POPT_ARG_NONE, 0, 'i',
+ "command line mode only", NULL },
+ { "command", 'c', POPT_ARG_STRING, &startup_name, 0,
+ "startup command file (-c optional)", NULL },
+ { "define", 'D', POPT_ARG_STRING, &defineSymbol, 'D',
+ "define symbol with value that is added to the gpsim symbol table. "
+ "Define any number of symbols.", NULL },
+ { "echo", 'E', POPT_ARG_NONE, 0, 'E',
+ "Echo lines from a command file to the console.", NULL },
+ { "help", 'h', 0, 0, 'h',
+ "display this help and exit" },
+ { "icd", 'd', POPT_ARG_STRING, &icd_port, 0,
+ "use ICD (e.g. -d /dev/ttyS0).", NULL },
+ { "include", 'I', POPT_ARG_STRING, &include_startup_name, 0,
+ "startup command file - does not change directories", NULL },
{ "processor", 'p', POPT_ARG_STRING, &processor_name, 0,
"processor (e.g. -pp16c84 for the 'c84)","<processor name>" },
- { "command", 'c', POPT_ARG_STRING, &startup_name, 0,
- "startup command file (-c optional)",0 },
- { "symbol", 's', POPT_ARG_STRING, &cod_name, 0,
- ".cod symbol file (-s optional)",0 } ,
- { "sourcepath", 'L',POPT_ARG_STRING, &search_path, 'L',
- "colon separated list of directories to search.", 0},
- { "include", 'I',POPT_ARG_STRING, &include_startup_name, 0,
- "startup command file - does not change directories", 0},
- { "version",'v',0,0,'v',
- "gpsim version",0},
- { "echo",'E',POPT_ARG_NONE,0,'E',
- "Echo lines from a command file to the console.",0},
- { "cli",'i',POPT_ARG_NONE,0,'i',
- "command line mode only",0},
- { "source",'S',POPT_ARG_STRING,&sourceEnabled,'S',
+ { "source", 'S', POPT_ARG_STRING, &sourceEnabled, 'S',
"'enable' or 'disable' the loading of source code. Default is 'enable'. "
- "Useful for running faster regression tests.",0},
- { "icd", 'd',POPT_ARG_STRING, &icd_port, 0,
- "use ICD (e.g. -d /dev/ttyS0).",0 },
- { "define",'D',POPT_ARG_STRING, &defineSymbol,'D',
- "define symbol with value that is added to the gpsim symbol table. "
- "Define any number of symbols.",0},
- { "exit", 'e',POPT_ARG_STRING, &sExitOn, 'e',
- "Causes gpsim to auto exit on a condition. Specifying onbreak will cause "
- "gpsim to exit when the simulation halts, but not until after the current "
- "command script completes.",0 },
+ "Useful for running faster regression tests.", NULL },
+ { "sourcepath", 'L', POPT_ARG_STRING, &search_path, 'L',
+ "colon separated list of directories to search.", NULL },
+ { "symbol", 's', POPT_ARG_STRING, &cod_name, 0,
+ ".cod symbol file (-s optional)", 0 } ,
+ { "version", 'v', 0, 0, 'v',
+ "gpsim version", NULL },
+ POPT_AUTOHELP
POPT_MYEXAMPLES
POPT_TABLEEND
};
-// copied the format of this from the popt.h include file:
-
-
-void
-helpme (char *iam)
-{
- printf ("\n\nuseage:\n%s [-h] [[-p <device> [<hex_file>]] | [[-s] <cod_file>]] [[-c] <stc_file>]\n", iam);
- printf ("\t-h : this help list\n");
- printf ("\t-p <device> : processor (e.g. -pp16c84 for the 'c84)\n");
- printf ("\t<hex_file> : input file in \"intelhex16\" format\n");
- printf ("\t-c <stc_file> : startup command file (-c optional)\n");
- printf ("\t-s <cod_file> : .cod symbol file (-s optional)\n");
- printf ("\t-L <path list> : colon separated list of directories to search.\n");
- printf ("\t-d <port> : Use ICD with serial port <port>\n");
- printf ("\t-D <symbol>=<value> : Define a symbol that will exist in the gpsim\n"
- "\t symbol table\n You may define any number.\n");
- printf ("\n\t-v : gpsim version\n");
- printf ("\n Long options:\n\n");
- printf ("\t--cli : command line mode only\n");
- printf ("\n\texamples:\n\n");
- printf ("%s myprog.cod <-- loads a symbol file\n",iam);
- printf ("%s -p p16f877 myprog.hex <-- select processor and load hex\n",iam);
- printf ("%s myscript.stc <-- loads a script\n",iam);
-
-}
-
-
-
-
void welcome(void)
{
printf("\ngpsim - the GNUPIC simulator\nversion: %s %s\n",
szBuild, VERSION);
printf("\n\ntype help for help\n");
-
- return;
}
void exit_gpsim(int ret)
@@ -200,7 +166,7 @@ main (int argc, char *argv[])
{
bool bEcho = false;
bool bSourceEnabled = true;
- int c,usage=0;
+ int c, usage = 0;
bool bUseGUI = true; // assume that we want to use the gui
char command_str[256];
poptContext optCon; // context for parsing command-line options
@@ -208,8 +174,6 @@ main (int argc, char *argv[])
// Perform basic initialization before parsing invocation arguments
- welcome();
-
InitSourceSearchAsSymbol();
initialize_ConsoleUI();
initialize_gpsim_core();
@@ -217,12 +181,11 @@ main (int argc, char *argv[])
initialize_commands();
optCon = poptGetContext(0, argc, (const char **)argv, optionsTable, 0);
- if(argc>=2) {
+ if (argc >= 2) {
while ((c = poptGetNextOpt(optCon)) >= 0 && !usage) {
-
- const char * optArg = poptGetOptArg(optCon);
+ const char * optArg = poptGetOptArg(optCon);
#ifndef _WIN32
- free((char *)optArg);
+ free((char *)optArg);
#endif
switch (c) {
@@ -245,7 +208,8 @@ main (int argc, char *argv[])
break;
case 'v':
- gpsim_version();
+ fprintf(stderr, "%s\n", GPSIM_VERSION_STRING);
+ return 0;
break;
case 'i':
@@ -261,7 +225,6 @@ main (int argc, char *argv[])
#ifndef _WIN32
free((char *)defineSymbol);
#endif
- defineSymbol = "";
break;
case 'S':
@@ -299,15 +262,15 @@ main (int argc, char *argv[])
if (usage)
break;
-
}
- poptFreeContext(optCon);
}
if (usage) {
- helpme(argv[0]);
+ poptPrintHelp(optCon, stdout, 0);
exit (1);
- }
+ }
+
+ welcome();
if(bEcho) {
for(int index = 0; index < argc; index++) {
@@ -316,8 +279,9 @@ main (int argc, char *argv[])
printf("\n");
}
if(poptPeekArg(optCon))
- hex_name=strdup(poptPeekArg(optCon));
+ hex_name=strdup(poptGetArg(optCon));
+ poptFreeContext(optCon);
initialize_readline();
@@ -356,12 +320,12 @@ main (int argc, char *argv[])
try {
// Convert the remaining command line options into gpsim commands
- if(*cod_name) {
+ if(cod_name) {
- if(*processor_name)
+ if(processor_name)
cout << "WARNING: command line processor named \"" << processor_name <<
"\" is being ignored\nsince the .cod file specifies the processor\n";
- if(*hex_name)
+ if(hex_name)
cout << "WARNING: Ignoring the hex file \"" << hex_name <<
"\"\nsince the .cod file specifies the hex code\n";
@@ -369,28 +333,28 @@ main (int argc, char *argv[])
"load s \"%s\"\n",cod_name);
parse_string(command_str);
- } else if(*processor_name) {
+ } else if(processor_name) {
- if(*hex_name){
+ if(hex_name){
snprintf(command_str, sizeof(command_str),
"load %s \"%s\"\n",processor_name, hex_name);
parse_string(command_str);
}
}
- if(*icd_port) {
+ if(icd_port) {
snprintf(command_str, sizeof(command_str),
"icd open \"%s\"\n",icd_port);
parse_string(command_str);
}
- if(*startup_name) {
+ if(startup_name) {
snprintf(command_str, sizeof(command_str),
"load c \"%s\"\n",startup_name);
parse_string(command_str);
}
- if(*include_startup_name) {
+ if(include_startup_name) {
snprintf(command_str, sizeof(command_str),
"load i \"%s\"\n",include_startup_name);
parse_string(command_str);
--
2.1.0
From ee5456159bd207b426a8ecade74daa9304e55f28 Mon Sep 17 00:00:00 2001
From: borutr <borutr@c0b0687f-f210-0410-a348-de8ada4243c3>
Date: Tue, 22 Oct 2013 18:37:33 +0000
Subject: [PATCH 3/3] - reintroduced gpsim_version()
git-svn-id: svn://svn.code.sf.net/p/gpsim/code/trunk@2250 c0b0687f-f210-0410-a348-de8ada4243c3
---
gpsim/main.cc | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/gpsim/main.cc b/gpsim/main.cc
index e2ff068..c2f3fdd 100644
--- a/gpsim/main.cc
+++ b/gpsim/main.cc
@@ -72,6 +72,11 @@ extern int abort_gpsim;
char szBuild[] = "Release";
#endif
+void gpsim_version(void)
+{
+ printf("%s %s\n", szBuild, VERSION);
+}
+
// from ui_gpsim.cc
void initialize_ConsoleUI();
--
2.1.0
From 26d9a996843c942d901cb1f3c394ab8ff1954324 Mon Sep 17 00:00:00 2001
From: Lubomir Rintel <lkundrak@v3.sk>
Date: Tue, 28 Oct 2014 17:15:30 +0100
Subject: [PATCH] automake
So that gpsim.h gets created
---
gpsim/Makefile.in | 26 ++++++++++++++++++++------
1 file changed, 20 insertions(+), 6 deletions(-)
diff --git a/gpsim/Makefile.in b/gpsim/Makefile.in
index dfa43b8..f7d916b 100644
--- a/gpsim/Makefile.in
+++ b/gpsim/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.13.4 from Makefile.am.
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
@@ -306,15 +306,22 @@ top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
AM_CPPFLAGS = @X_CFLAGS@ @Y_CFLAGS@
-gpsim_SOURCES = main.cc
+gpsim_SOURCES = main.cc \
+ gpsim.h.in
+
#gpsim_LDFLAGS = $(shell gtk-config --cflags)
gpsim_LDADD = ../src/libgpsim.la ../cli/libgpsimcli.la ../gui/libgpsimgui.la \
../eXdbm/libgpsim_eXdbm.la @GTK@ @GDK@ @GLIB@ -lstdc++ -lpopt @LIBDL@ \
@X_LDFLAGS@ @Y_LDFLAGS@ @LIBREADLINE@
+
+# Make sure we have parse.h when compiling other sources
+BUILT_SOURCES = gpsim.h
+CLEANFILES = gpsim.h
EXTRA_DIST = makefile.mingw
-all: all-am
+all: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) all-am
.SUFFIXES:
.SUFFIXES: .cc .lo .o .obj
@@ -520,13 +527,15 @@ distdir: $(DISTFILES)
fi; \
done
check-am: all-am
-check: check-am
+check: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) check-am
all-am: Makefile $(PROGRAMS)
installdirs:
for dir in "$(DESTDIR)$(bindir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
-install: install-am
+install: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
@@ -548,6 +557,7 @@ install-strip:
mostlyclean-generic:
clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
@@ -556,6 +566,7 @@ distclean-generic:
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
clean: clean-am
clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am
@@ -626,7 +637,7 @@ ps-am:
uninstall-am: uninstall-binPROGRAMS
-.MAKE: install-am install-strip
+.MAKE: all check install install-am install-strip
.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \
clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \
@@ -643,6 +654,9 @@ uninstall-am: uninstall-binPROGRAMS
tags tags-am uninstall uninstall-am uninstall-binPROGRAMS
+gpsim.h: gpsim.h.in
+ sed -e "s/@REVISION@/$$(${top_srcdir}\/get_cl_revision.sh -s ${top_srcdir}\/ChangeLog)/g" "$<" > "$@"
+
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
--
2.1.0