diff --git a/doc/src/sgml/ref/ecpg-ref.sgml b/doc/src/sgml/ref/ecpg-ref.sgml index 2840d38c733a5889f7b1f6a16a5361e678f1c412..83128c23648b7978a61a4bb311b5e6d698194da6 100644 --- a/doc/src/sgml/ref/ecpg-ref.sgml +++ b/doc/src/sgml/ref/ecpg-ref.sgml @@ -1,5 +1,5 @@ <!-- -$Header: /cvsroot/pgsql/doc/src/sgml/ref/ecpg-ref.sgml,v 1.8 2001/07/11 03:43:52 momjian Exp $ +$Header: /cvsroot/pgsql/doc/src/sgml/ref/ecpg-ref.sgml,v 1.9 2001/08/24 22:37:36 petere Exp $ Postgres documentation --> @@ -116,7 +116,7 @@ ecpg [ -v ] [ -t ] [ -I include-path ] [ -o outfile ] file1 [ file2 ] [ ... ] <term><replaceable>return value</replaceable></term> <listitem> <para> - <application>ecpg</application> returns 0 to the shell on successful completion, -1 + <application>ecpg</application> returns 0 to the shell on successful completion, non-zero for errors. </para> </listitem> diff --git a/src/interfaces/ecpg/preproc/ecpg.c b/src/interfaces/ecpg/preproc/ecpg.c index e2eccf41fd71ca3e02177438098e0cef56ba9d47..bf0dd18d68055e236f4a4c1588c0a2e96d717246 100644 --- a/src/interfaces/ecpg/preproc/ecpg.c +++ b/src/interfaces/ecpg/preproc/ecpg.c @@ -1,6 +1,8 @@ +/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/ecpg.c,v 1.47 2001/08/24 22:37:36 petere Exp $ */ + /* New main for ecpg, the PostgreSQL embedded SQL precompiler. */ /* (C) Michael Meskes <meskes@postgresql.org> Feb 5th, 1998 */ -/* Placed under the same copyright as PostgresSQL */ +/* Placed under the same license as PostgresSQL */ #include "postgres_fe.h" @@ -10,9 +12,12 @@ #include "getopt.h" #endif +extern int optind; +extern char *optarg; + #include "extern.h" -int ret_value = OK, +int ret_value = 0, autocommit = 0; struct _include_path *include_paths = NULL; struct cursor *cur = NULL; @@ -20,14 +25,29 @@ struct typedefs *types = NULL; struct _defines *defines = NULL; static void -usage(char *progname) +help(const char *progname) { - fprintf(stderr, "ecpg - the postgresql preprocessor, version: %d.%d.%d\n", MAJOR_VERSION, MINOR_VERSION, PATCHLEVEL); - fprintf(stderr, "Usage: %s: " + printf("%s is the PostgreSQL embedded SQL preprocessor for C programs.\n\n", + progname); + printf("Usage:\n" + " %s %s[-I DIRECTORY] [-o OUTFILE] [-t] file1 [file2...]\n\n", + progname, +#ifdef YYDEBUG + "[-d] " +#else + "" +#endif + ); + printf("Options:\n"); #ifdef YYDEBUG - "[-d]" + printf(" -d generate parser debug output\n"); #endif - " [-v] [-t] [-I include path] [ -o output file name] [-D define name] file1 [file2] ...\n", progname); + printf(" -I DIRECTORY search DIRECTORY for include files\n"); + printf(" -o OUTFILE write result to OUTFILE\n"); + printf(" -t turn on autocommit of transactions\n"); + printf("\nIf no output file is specified, the name is formed by adding .c\n" + "to the input file name, after stripping off .pgc if present.\n"); + printf("\nReport bugs to <pgsql-bugs@postgresql.org>.\n"); } static void @@ -60,9 +80,27 @@ main(int argc, char *const argv[]) verbose = false, out_option = 0; struct _include_path *ip; + char *progname; - extern int optind; - extern char *optarg; + if (!strrchr(argv[0], '/')) + progname = argv[0]; + else + progname = strrchr(argv[0], '/') + 1; + + if (argc > 1) + { + if (strcmp(argv[1], "--help")==0 || strcmp(argv[1], "-?")==0) + { + help(progname); + exit(0); + } + else if (strcmp(argv[1], "--version")==0) + { + printf("ecpg (PostgreSQL %s) %d.%d.%d\n", PG_VERSION, + MAJOR_VERSION, MINOR_VERSION, PATCHLEVEL); + exit(0); + } + } add_include_path("/usr/include"); add_include_path(INCLUDE_PATH); @@ -90,32 +128,38 @@ main(int argc, char *const argv[]) verbose = true; break; case 'D': + /* XXX not documented */ add_preprocessor_define(optarg); break; -#ifdef YYDEBUG case 'd': +#ifdef YYDEBUG yydebug = 1; - break; +#else + fprintf(stderr, "%s: parser debug support (-d) not available\n", + progname); #endif + break; default: - usage(argv[0]); + fprintf(stderr, "Try '%s --help' for more information.\n", argv[0]); return ILLEGAL_OPTION; } } if (verbose) { - fprintf(stderr, "ecpg - the postgresql preprocessor, version: %d.%d.%d\n", MAJOR_VERSION, MINOR_VERSION, PATCHLEVEL); + fprintf(stderr, "%s, the PostgreSQL embedded C preprocessor, version %d.%d.%d\n", + progname, MAJOR_VERSION, MINOR_VERSION, PATCHLEVEL); fprintf(stderr, "exec sql include ... search starts here:\n"); for (ip = include_paths; ip != NULL; ip = ip->next) fprintf(stderr, " %s\n", ip->path); - fprintf(stderr, "End of search list.\n"); - return OK; + fprintf(stderr, "end of search list\n"); + return 0; } if (optind >= argc) /* no files specified */ { - usage(argv[0]); + fprintf(stderr, "%s: no input files specified\n", progname); + fprintf(stderr, "Try '%s --help' for more information.\n", argv[0]); return (ILLEGAL_OPTION); } else diff --git a/src/interfaces/ecpg/preproc/extern.h b/src/interfaces/ecpg/preproc/extern.h index a6813c23795804a8926edb37be0a360a62aa3743..43cfd086c5a5b38bd6914bc7b79ffb9f9dd1af82 100644 --- a/src/interfaces/ecpg/preproc/extern.h +++ b/src/interfaces/ecpg/preproc/extern.h @@ -80,10 +80,8 @@ extern ScanKeyword *ScanKeywordLookup(char *text); /* return codes */ -#define OK 0 -#define PARSE_ERROR -1 -#define ILLEGAL_OPTION -2 -#define INDICATOR_NOT_ARRAY -3 - -#define NO_INCLUDE_FILE ENOENT -#define OUT_OF_MEMORY ENOMEM +#define ILLEGAL_OPTION 1 +#define NO_INCLUDE_FILE 2 +#define PARSE_ERROR 3 +#define INDICATOR_NOT_ARRAY 4 +#define OUT_OF_MEMORY 5