https://github.com/zbanks/optim
Immediate-mode command line option parsing for C
https://github.com/zbanks/optim
c options
Last synced: 4 months ago
JSON representation
Immediate-mode command line option parsing for C
- Host: GitHub
- URL: https://github.com/zbanks/optim
- Owner: zbanks
- License: mit
- Created: 2017-04-14T18:05:33.000Z (about 9 years ago)
- Default Branch: master
- Last Pushed: 2017-05-09T00:51:16.000Z (about 9 years ago)
- Last Synced: 2025-05-29T16:40:36.706Z (about 1 year ago)
- Topics: c, options
- Language: C
- Homepage:
- Size: 10.7 KB
- Stars: 5
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[](https://travis-ci.org/zbanks/optim)
# `optim`
Immediate-mode command line option parsing for C.
## Features
- Immediate-mode: declare, read, and validate locally
- Auto-generated usage message (``--help``)
- Options parsing can be split over multiple functions
- Supports long and short options, with and without arguments
- Supports positional arguments and `--`
- Supports repeated arguments
- Plays nice with `help2man`
- Doesn't rely on macros or preprocessor trickery
- Opinionated only when it makes things simpler
### Example Generated Usage
See ``test/main.c``
```
Usage: optim_test [-a] [-b]
My test optim program
Options:
-h, --help Print this help message
-v, --verbose Increase verbosity
Section Two:
-a, --alpha=ARG Alpha parameter. This usage has a lot to say, so
the usage spans over multiple lines
Newlines are also handled fine
-b, --beta Beta flag
-c C flag without longform
--delta=diff Delta parameter without short form
-e exarg Extra option with an arg but no longopt
```
### Supported Formats
Each line shows options that are parsed equivalently by `optim`.
- `-v`, `--verbose`
- `-vvv`, `-v -v -v`, `--verbose -vv`
- `-a ARG`, `--alpha ARG`, `--alpha=ARG`
- `-va ARG`, `-v -a ARG`, `--verbose --alpha ARG`
### Unsupported Formats
The following examples are *not* parsed correctly by `optim`.
- `-aARG`
- `-a=ARG`
- `-beta`
- `--alpha -ARG`, use `--alpha=-ARG` if your argument could begin with a `-`
Also, `optim` does not currently support:
- Optional arguments (`--alpha[=ARG]`)
- Suboptions (`-o,rw`)
- Subcommands (`git show`)
## Example
```
int main(int argc, char ** argv) {
optim_t * o = optim_start(argc, argv, "%s [-a] [-b|-c] ");
if (o == NULL) exit(EXIT_FAILURE);
optim_usage(o, "My test optim program\n");
optim_version(o, "optim_test Version 1.0\nAuthor: Zach Banks\n");
optim_flag(o, 'v', "verbose", "Increase verbosity");
int verbosity = optim_get_count(o);
optim_usage(o, "\nSection Two:\n");
optim_arg(o, 'a', "alpha", NULL, "Alpha parameter");
long alpha = optim_get_long(o, 0);
optim_flag(o, 'b', "beta", "Beta flag");
bool beta = optim_get_count(o) > 0;
optim_flag(o, 'c', NULL, "C flag without longform");
bool cflag = optim_get_count(o) > 0;
if (cflag && beta)
optim_error("cannot specify both -b and -c flags");
optim_positionals(o);
char * path = optim_get_string(o, NULL);
if (path == NULL)
optim_error(o, "must specify path");
int rc = optim_finish(&o);
if (rc < 0) exit(EXIT_FAILURE);
// ...
}
```
## About
`optim` is licensed under the MIT license. Copyright (c) 2017 Zach Banks.