source: trunk/gsdl/packages/yaz/util/options.c@ 1343

Last change on this file since 1343 was 1343, checked in by johnmcp, 24 years ago

Added the YAZ toolkit source to the packages directory (for z39.50 stuff)

  • Property svn:keywords set to Author Date Id Revision
File size: 2.9 KB
Line 
1/*
2 * Copyright (c) 1995-2000, Index Data
3 * See the file LICENSE for details.
4 * Sebastian Hammer, Adam Dickmeiss
5 *
6 * $Log$
7 * Revision 1.1 2000/08/03 03:12:09 johnmcp
8 * Added the YAZ toolkit source to the packages directory (for z39.50 stuff)
9 *
10 * Revision 1.8 2000/02/29 13:44:55 adam
11 * Check for config.h (currently not generated).
12 *
13 * Revision 1.7 1999/11/30 13:47:12 adam
14 * Improved installation. Moved header files to include/yaz.
15 *
16 * Revision 1.6 1997/09/01 08:54:13 adam
17 * New windows NT/95 port using MSV5.0. Made prefix query handling
18 * thread safe. The function options ignores empty arguments when met.
19 *
20 * Revision 1.5 1995/12/06 13:00:19 adam
21 * Minus alone not treated as an option.
22 *
23 * Revision 1.4 1995/09/29 17:12:35 quinn
24 * Smallish
25 *
26 * Revision 1.3 1995/09/27 15:03:03 quinn
27 * Modified function heads & prototypes.
28 *
29 * Revision 1.2 1995/05/16 08:51:13 quinn
30 * License, documentation, and memory fixes
31 *
32 * Revision 1.1 1995/03/27 08:35:18 quinn
33 * Created util library
34 * Added memory debugging module. Imported options-manager
35 *
36 * Revision 1.2 1994/10/04 17:47:10 adam
37 * Function options now returns arg with error option.
38 *
39 * Revision 1.1 1994/08/16 15:57:22 adam
40 * The first utility modules.
41 *
42 */
43#if HAVE_CONFIG_H
44#include <config.h>
45#endif
46
47#include <stdlib.h>
48
49#include <yaz/options.h>
50
51static int arg_no = 1;
52static int arg_off = 0;
53
54int options (const char *desc, char **argv, int argc, char **arg)
55{
56 int ch, i = 0;
57
58 if (arg_no >= argc)
59 return -2;
60 if (arg_off == 0)
61 {
62 while (argv[arg_no][0] == '\0')
63 {
64 arg_no++;
65 if (arg_no >= argc)
66 return -2;
67 }
68 if (argv[arg_no][0] != '-' || argv[arg_no][1] == '\0')
69 {
70 *arg = argv[arg_no++];
71 return 0;
72 }
73 arg_off++;
74 }
75 ch = argv[arg_no][arg_off++];
76 while (desc[i])
77 {
78 int desc_char = desc[i++];
79 int type = 0;
80 if (desc[i] == ':')
81 { /* string argument */
82 type = desc[i++];
83 }
84 if (desc_char == ch)
85 { /* option with argument */
86 if (type)
87 {
88 if (argv[arg_no][arg_off])
89 {
90 *arg = argv[arg_no]+arg_off;
91 arg_no++;
92 arg_off = 0;
93 }
94 else
95 {
96 arg_no++;
97 arg_off = 0;
98 if (arg_no < argc)
99 *arg = argv[arg_no++];
100 else
101 *arg = "";
102 }
103 }
104 else /* option with no argument */
105 {
106 if (argv[arg_no][arg_off])
107 arg_off++;
108 else
109 {
110 arg_off = 0;
111 arg_no++;
112 }
113 }
114 return ch;
115 }
116 }
117 *arg = argv[arg_no]+arg_off-1;
118 arg_no = arg_no + 1;
119 arg_off = 0;
120 return -1;
121}
Note: See TracBrowser for help on using the repository browser.