Blob Blame History Raw
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