[go: up one dir, main page]

Menu

[r5]: / src / op.h  Maximize  Restore  History

Download this file

211 lines (173 with data), 6.0 kB

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
/*
* optparser.h - Definició de la lliberia «op». Parseja els
* arguments d'entrada del programa obtenint el valor
* de les opcions especificades.
*
* Adriŕ Giménez Pastor, 2006. <agimenez@dsic.upv.es>
*
*
* 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
*
*/
#ifndef __OP_H__
#define __OP_H__
#include <stdio.h>
#ifdef __cplusplus
extern "C" {
#endif
/* TIPUS */
typedef struct __op_node __op_node;
struct __op_node_value
{
unsigned char type;
const char *metavar;
const char *help;
union
{
int *i;
float *f;
double *d;
struct
{
const char **list;
int *index;
} e;
char **s;
int *c;
int *fl;
} dest;
};
struct __op_node
{
const char *name;
int sindex;
int n;
int length;
struct __op_node_value value;
struct __op_node *next;
struct __op_node *next2;
};
typedef struct __op_parser
{
const char *__usage; /* Cadena d'ús,
%p és argv[0]. */
const char *__version; /* Cadena de versió,
%p és argv[0]. */
struct __op_node *__lopts; /* Llista d'opcions
llargues. */
struct __op_node *__lopts2; /* Per a parsejar. */
struct __op_node_value *__sopts[52]; /* Llista d'opcions curtes*/
int __unks; /* Permet opcions
desconegudes. */
int __max_length; /* Longitud mŕxima de
NOM_LLARG + METAVAT. */
const char *__prog; /* Nom del programa. */
struct __op_node *__last; /* Últim de la llista. */
struct __op_node *__last2; /* Per a parsejar. */
} op_parser_t;
/* FUNCIONS */
op_parser_t *
op_create (
const char *usage,
const char *version,
int unks
);
void
op_destroy (
op_parser_t *parser
);
void
op_add_int (
op_parser_t *parser,
const char shortopt, /* Nom curt. */
const char *longopt, /* Nom llarg. */
const char *metavar, /* Metavar associada. */
const char *help, /* Cadena d'ajuda. */
int *dest, /* Variable destí. */
int defaultv /* Valor per defecte. */
);
void
op_add_float (
op_parser_t *parser,
const char shortopt, /* Nom curt. */
const char *longopt, /* Nom llarg. */
const char *metavar, /* Metavar associada. */
const char *help, /* Cadena d'ajuda. */
float *dest, /* Variable destí. */
float defaultv /* Valor per defecte. */
);
void
op_add_double (
op_parser_t *parser,
const char shortopt, /* Nom curt. */
const char *longopt, /* Nom llarg. */
const char *metavar, /* Metavar associada. */
const char *help, /* Cadena d'ajuda. */
double *dest, /* Variable destí. */
double defaultv /* Valor per defecte. */
);
void
op_add_enum (
op_parser_t *parser,
const char shortopt, /* Nom curt. */
const char *longopt, /* Nom llarg. */
const char *metavar, /* Metavar associada. */
const char *help, /* Cadena d'ajuda. */
const char **list, /* Llista de tokens.
Amb Sentinela. */
int *dest, /* Variable destí. */
int defaultv /* Valor per defecte. */
);
void
op_add_string (
op_parser_t *parser,
const char shortopt, /* Nom curt. */
const char *longopt, /* Nom llarg. */
const char *metavar, /* Metavar associada. */
const char *help, /* Cadena d'ajuda. */
char **dest, /* Variable destí. */
const char *defaultv /* Valor per defecte. */
);
void
op_add_counter (
op_parser_t *parser,
const char shortopt, /* Nom curt. */
const char *longopt, /* Nom llarg. */
const char *help, /* Cadena d'ajuda. */
int *dest /* Variable destí. */
);
void
op_add_flag (
op_parser_t *parser,
const char shortopt, /* Nom curt. */
const char *longopt, /* Nom llarg. */
const char *help, /* Cadena d'ajuda. */
int *dest /* Variable destí. */
);
void
op_usage (
op_parser_t *parser,
FILE *stream /* Fluxe on imprimir. */
);
int /* Torna el nombre d'arguments. */
op_parse (
op_parser_t *parser,
int argc, /* Nombre d'arguments. */
char *argv[] /* Arguments. */
);
#ifdef __cplusplus
}
#endif
#endif /* __OP_H__ */