new arg.h version by frign

master
Aaron Marcher 9 years ago
parent 4b4b2ac079
commit 999cf00490
No known key found for this signature in database
GPG Key ID: 74B048E5C2474F9A

@ -1,6 +1,7 @@
ISC License ISC License
Copyright (C) 2016-2017 Aaron Marcher Copyright (C) 2016-2017 Aaron Marcher <me@drkhsh.at>
Copyright (C) 2017 Laslo Hunhold <dev@frign.de>
Permission to use, copy, modify, and/or distribute this software for any purpose Permission to use, copy, modify, and/or distribute this software for any purpose
with or without fee is hereby granted, provided that the above copyright notice with or without fee is hereby granted, provided that the above copyright notice

69
arg.h

@ -1,55 +1,34 @@
/* /* See LICENSE file for copyright and license details. */
* Copy me if you can.
* by 20h
*/
#ifndef __ARG_H__ #ifndef ARG_H
#define __ARG_H__ #define ARG_H
extern char *argv0; extern char *argv0;
#define USED(x) ((void)(x)) /* int main(int argc, char *argv[]) */
#define ARGBEGIN for (argv0 = *argv, *argv ? (argc--, argv++) : ((void *)0); \
/* use main(int argc, char *argv[]) */ *argv && (*argv)[0] == '-' && (*argv)[1]; argc--, argv++) { \
#define ARGBEGIN for (argv0 = *argv, argv++, argc--;\ int i_, argused_; \
argv[0] && argv[0][1]\ if ((*argv)[1] == '-' && !(*argv)[2]) { \
&& argv[0][0] == '-';\ argc--, argv++; \
argc--, argv++) {\
char _argc;\
char **_argv;\
int brk;\
if (argv[0][1] == '-' && argv[0][2] == '\0') {\
argv++;\
argc--;\
break; \ break; \
} \ } \
for (brk = 0, argv[0]++, _argv = argv;\ for (i_ = 1, argused_ = 0; (*argv)[i_]; i_++) { \
argv[0][0] && !brk;\ switch((*argv)[i_])
argv[0]++) {\ #define ARGEND if (argused_) { \
if (_argv != argv)\ if ((*argv)[i_ + 1]) { \
break; \
} else { \
argc--, argv++; \
break; \ break; \
_argc = argv[0][0];\
switch (_argc)
#define ARGEND }\
USED(_argc);\
} \ } \
USED(argv);\ } \
USED(argc); } \
}
#define ARGC() _argc #define ARGC() ((*argv)[i_])
#define ARGF_(x) (((*argv)[i_ + 1]) ? (argused_ = 1, &((*argv)[i_ + 1])) : \
#define EARGF(x) ((argv[0][1] == '\0' && argv[1] == NULL)?\ (*(argv + 1)) ? (argused_ = 1, *(argv + 1)) : (x))
((x), abort(), (char *)0) :\ #define EARGF(x) ARGF_(((x), exit(1), (char *)0))
(brk = 1, (argv[0][1] != '\0')?\ #define ARGF() ARGF_((char *)0)
(&argv[0][1]) :\
(argc--, argv++, argv[0])))
#define ARGF() ((argv[0][1] == '\0' && argv[1] == NULL)?\
(char *)0 :\
(brk = 1, (argv[0][1] != '\0')?\
(&argv[0][1]) :\
(argc--, argv++, argv[0])))
#endif #endif

Loading…
Cancel
Save