summaryrefslogtreecommitdiffstats
path: root/db_demo/getopt.c
diff options
context:
space:
mode:
Diffstat (limited to 'db_demo/getopt.c')
-rw-r--r--db_demo/getopt.c169
1 files changed, 169 insertions, 0 deletions
diff --git a/db_demo/getopt.c b/db_demo/getopt.c
new file mode 100644
index 0000000..2c65f00
--- /dev/null
+++ b/db_demo/getopt.c
@@ -0,0 +1,169 @@
+
+
+/*
+* Disktest
+* Copyright (c) International Business Machines Corp., 2001
+*
+*
+* 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.
+*
+* Please send e-mail to yardleyb@us.ibm.com if you have
+* questions or comments.
+*
+* Project Website: TBD
+*
+*
+* $Id: Getopt.c,v 1.4 2005/05/04 17:54:00 mridge Exp $
+* $Log: Getopt.c,v $
+* Revision 1.4 2005/05/04 17:54:00 mridge
+* Update to version 1.2.8
+*
+* Revision 1.4 2002/03/30 01:32:14 yardleyb
+* Major Changes:
+*
+* Added Dumping routines for
+* data miscompares,
+*
+* Updated performance output
+* based on command line. Gave
+* one decimal in MB/s output.
+*
+* Rewrote -pL IO routine to show
+* correct stats. Now show pass count
+* when using -C.
+*
+* Minor Changes:
+*
+* Code cleanup to remove the plethera
+* if #ifdef for windows/unix functional
+* differences.
+*
+* Revision 1.3 2002/02/21 21:32:19 yardleyb
+* Added more unix compatability
+* ifdef'd function out when
+* compiling for unix env. that
+* have getopt
+*
+* Revision 1.2 2002/02/04 20:35:38 yardleyb
+* Changed max. number of threads to 64k.
+* Check for max threads in parsing.
+* Fixed windows getopt to return correctly
+* when a bad option is given.
+* Update time output to be in the format:
+* YEAR/MONTH/DAY-HOUR:MIN:SEC
+* instead of epoch time.
+*
+* Revision 1.1 2001/12/04 18:57:36 yardleyb
+* This source add for windows compatability only.
+*
+*/
+
+#ifdef WINDOWS
+
+#include <stdio.h>
+#include <stddef.h>
+#include <ctype.h>
+#include <string.h>
+#include "getopt.h"
+
+/*
+ *
+ * FUNCTION: getopt()
+ *
+ * Get next command line option and parameter
+ * source gathered from MS examples and modified
+ * to conform with unix like getopt.
+ *
+ */
+
+/* Global Exportable */
+int optind;
+char *optarg;
+
+int getopt (int argc, char** argv, char* pszValidOpts) {
+ char chOpt;
+ char* psz = NULL;
+ char* pszParam = NULL;
+ static int iArg = 1;
+
+ if (iArg < argc) {
+ psz = &(argv[iArg][0]);
+ if (*psz == '-' || *psz == '/') {
+ /* we have an option specifier */
+ chOpt = argv[iArg][1];
+ if (isalnum(chOpt) || ispunct(chOpt)) {
+ /* we have an option character */
+ psz = strchr(pszValidOpts, chOpt);
+ if (psz != NULL) {
+ /* option is valid, we want to return chOpt */
+ if (psz[1] == ':') {
+ /* option can have a parameter */
+ psz = &(argv[iArg][2]);
+ if (*psz == '\0') {
+ /* must look at next argv for param */
+ if (iArg+1 < argc) {
+ psz = &(argv[iArg+1][0]);
+ if (*psz == '-' || *psz == '/') {
+ /* next argv is a new option, so param
+ * not given for current option
+ */
+ fprintf(stderr, "-%c option requires an argument.\n", chOpt);
+ chOpt = '?';
+ pszParam = NULL;
+ } else {
+ /* next argv is the param */
+ iArg++;
+ pszParam = psz;
+ }
+ } else {
+ /* reached end of args looking for param */
+ }
+ } else {
+ /* param is attached to option */
+ pszParam = psz;
+ }
+ } else {
+ /* option is alone, has no parameter */
+ }
+ } else {
+ /* option specified is not in list of valid options */
+ fprintf(stderr, "Invalid option -- %c\n", chOpt);
+ chOpt = '?';
+ pszParam = NULL;
+ }
+ } else {
+ /* though option specifier was given, option character
+ * is not alpha or was was not specified
+ */
+ chOpt = 0;
+ pszParam = &(argv[iArg][0]);
+ }
+ } else {
+ /* standalone arg given with no option specifier */
+ chOpt = -1;
+ pszParam = &(argv[iArg][0]);
+ }
+ } else {
+ /* end of argument list */
+ chOpt = -1;
+ }
+
+ optind = iArg++;
+ optarg = pszParam;
+ return (chOpt);
+}
+
+#endif /* defined WINDOWS */
+