Browse Source

new arg.h version by frign

master
Aaron Marcher 7 years ago
parent
commit
999cf00490
No known key found for this signature in database GPG Key ID: 74B048E5C2474F9A
2 changed files with 30 additions and 50 deletions
  1. +2
    -1
      LICENSE
  2. +28
    -49
      arg.h

+ 2
- 1
LICENSE View File

@@ -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


+ 28
- 49
arg.h View File

@@ -1,55 +1,34 @@
/*
* Copy me if you can.
* by 20h
*/
/* See LICENSE file for copyright and license details. */


#ifndef __ARG_H__
#define __ARG_H__
#ifndef ARG_H
#define ARG_H


extern char *argv0; extern char *argv0;


#define USED(x) ((void)(x))

/* use main(int argc, char *argv[]) */
#define ARGBEGIN for (argv0 = *argv, argv++, argc--;\
argv[0] && argv[0][1]\
&& argv[0][0] == '-';\
argc--, argv++) {\
char _argc;\
char **_argv;\
int brk;\
if (argv[0][1] == '-' && argv[0][2] == '\0') {\
argv++;\
argc--;\
break;\
}\
for (brk = 0, argv[0]++, _argv = argv;\
argv[0][0] && !brk;\
argv[0]++) {\
if (_argv != argv)\
break;\
_argc = argv[0][0];\
switch (_argc)

#define ARGEND }\
USED(_argc);\
}\
USED(argv);\
USED(argc);

#define ARGC() _argc

#define EARGF(x) ((argv[0][1] == '\0' && argv[1] == NULL)?\
((x), abort(), (char *)0) :\
(brk = 1, (argv[0][1] != '\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])))
/* int main(int argc, char *argv[]) */
#define ARGBEGIN for (argv0 = *argv, *argv ? (argc--, argv++) : ((void *)0); \
*argv && (*argv)[0] == '-' && (*argv)[1]; argc--, argv++) { \
int i_, argused_; \
if ((*argv)[1] == '-' && !(*argv)[2]) { \
argc--, argv++; \
break; \
} \
for (i_ = 1, argused_ = 0; (*argv)[i_]; i_++) { \
switch((*argv)[i_])
#define ARGEND if (argused_) { \
if ((*argv)[i_ + 1]) { \
break; \
} else { \
argc--, argv++; \
break; \
} \
} \
} \
}
#define ARGC() ((*argv)[i_])
#define ARGF_(x) (((*argv)[i_ + 1]) ? (argused_ = 1, &((*argv)[i_ + 1])) : \
(*(argv + 1)) ? (argused_ = 1, *(argv + 1)) : (x))
#define EARGF(x) ARGF_(((x), exit(1), (char *)0))
#define ARGF() ARGF_((char *)0)


#endif #endif


Loading…
Cancel
Save