New functions yaz_file_glob2, yaz_xml_include_glob
[yaz-moved-to-github.git] / include / yaz / options.h
index b046364..5cd9510 100644 (file)
@@ -1,5 +1,5 @@
-/*
- * Copyright (c) 1995-2007, Index Data
+/* This file is part of the YAZ toolkit.
+ * Copyright (C) 1995-2013 Index Data.
  * All rights reserved.
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
-/* $Id: options.h,v 1.8 2007-01-03 08:42:14 adam Exp $ */
 
 /**
  * \file options.h
  * \brief Header for command line options parsing utilities
  */
 
-#ifndef OPTIONS_H
-#define OPTIONS_H
+#ifndef YAZ_OPTIONS_H
+#define YAZ_OPTIONS_H
 #include <yaz/yconfig.h>
 
 YAZ_BEGIN_CDECL
 
-YAZ_EXPORT int options (const char *desc, char **argv, int argc, char **arg);
+
+/** \brief command-line options parsing for main
+    \arg desc command argument description (allowed options)
+    \arg argv main argv
+    \arg argc main argc
+    \arg arg returned argument (for options that take an argument).
+    \retval 0 non-option arg (e.g. filename).
+    \retval -1 unknown option (error). arg is name of unknown option
+    \retval -2 no more options (end of options)
+    \retval c option char
+
+    This function is called repeatedly for each option. Both single
+    char options (-x) as well as GNU long options are supported (--long).
+    The description is a sequence specs where each spec is if the form:
+    [a-zA-Z0-9]({[a-zA-Z0-9]*})+:? . For example: h{help}f{filename}{fname}:
+
+    The first char is what is returned when met (single char option char).
+    The second is zero ore more long option values (synonum for single char)
+    If colon is appended, it means the option takes an argument.
+    If argv includes empty long option (--) that means "end of options" :
+    all argv data following that is considered non-options .. (0 returned
+    for each).
+*/
+YAZ_EXPORT int options(const char *desc, char **argv, int argc, char **arg);
+
+#define YAZ_OPTIONS_ERROR (-1)
+#define YAZ_OPTIONS_EOF (-2)
 
 YAZ_END_CDECL
 
 #endif
-        
+
 /*
  * Local variables:
  * c-basic-offset: 4
+ * c-file-style: "Stroustrup"
  * indent-tabs-mode: nil
  * End:
  * vim: shiftwidth=4 tabstop=8 expandtab