diff options
author | jozan <jozan@noemail.net> | 2020-11-02 23:32:11 +0000 |
---|---|---|
committer | jozan <jozan@noemail.net> | 2020-11-02 23:32:11 +0000 |
commit | 72a390eadb1fc670132c4d6324b45a7b8266ce79 (patch) | |
tree | c56cd1d88dea8a277afbb853029b7151c0f6070f | |
parent | Makefile now working (diff) | |
download | unixize-72a390eadb1fc670132c4d6324b45a7b8266ce79.tar.gz unixize-72a390eadb1fc670132c4d6324b45a7b8266ce79.tar.bz2 unixize-72a390eadb1fc670132c4d6324b45a7b8266ce79.tar.xz unixize-72a390eadb1fc670132c4d6324b45a7b8266ce79.tar.zst unixize-72a390eadb1fc670132c4d6324b45a7b8266ce79.zip |
Learning getopt(3)
FossilOrigin-Name: 6eb65942ab3572141b56e2f5cf0e1487c7d0745c3dff9545c8219b1027769f29
-rw-r--r-- | Makefile | 1 | ||||
-rw-r--r-- | src/c_opts.c | 83 | ||||
-rw-r--r-- | src/c_opts.h | 60 | ||||
-rw-r--r-- | src/c_unixize.c | 23 | ||||
-rw-r--r-- | src/c_unixize.h | 9 |
5 files changed, 171 insertions, 5 deletions
@@ -34,6 +34,7 @@ RM = rm -rf MKDIR = mkdir -p SRCS_NAME = c_unixize +SRCS_NAME += c_opts SRCS = $(addprefix ${SRCS_DIR}, $(addsuffix .c, ${SRCS_NAME})) INCS = $(addprefix ${SRCS_DIR}, $(addsuffix .h, ${SRCS_NAME})) diff --git a/src/c_opts.c b/src/c_opts.c new file mode 100644 index 0000000..886c10e --- /dev/null +++ b/src/c_opts.c @@ -0,0 +1,83 @@ +/* + * ======================== + * ===== =============== + * ====== ================ + * ====== ================ + * ====== ==== ==== == + * ====== === == = = + * ====== === = == = + * = === === = == ==== + * = === === = == = = + * == ===== ==== == + * ======================== + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Copyright (c) 2020 Joe + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the organization nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY JOE ''AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL JOE BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * unixize: src/c_opts.c + * 2020-11-02 23:37 + * Joe + * + * This is where we handle command line options + */ + +#include <stdlib.h> +#include <unistd.h> +#include <stdio.h> + +#include "c_opts.h" + +void +c_opts +(struct opts_s* opts, + int argc, + const char* argv[]) +{ + int opt; + + opts->recursive = FALSE; + opts->verbose = FALSE; + while ((opt = getopt(argc, (char *const *)argv, C_OPTS)) != -1) { + if (opt == 'R') { + opts->recursive = TRUE; + } + else if (opt == 'v') { + opts->verbose = TRUE; + } + else if (opt == '?') { + dprintf( + STDERR_FILENO, + "unixize: %c: unknown option\n", + optopt + ); + exit(1); + } + } + if (optind < argc && argv[optind] != NULL) { + printf("arg: %s\n", argv[optind]); + } +} diff --git a/src/c_opts.h b/src/c_opts.h new file mode 100644 index 0000000..a63e898 --- /dev/null +++ b/src/c_opts.h @@ -0,0 +1,60 @@ +/* + * ======================== + * ===== =============== + * ====== ================ + * ====== ================ + * ====== ==== ==== == + * ====== === == = = + * ====== === = == = + * = === === = == ==== + * = === === = == = = + * == ===== ==== == + * ======================== + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Copyright (c) 2020 Joe + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the organization nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY JOE ''AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL JOE BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * unixize: src/c_opts.h + * 2020-11-02 23:37 + * Joe + * + * This is where we handle command line options + */ + +#ifndef __C_OPTS_H__ +#define __C_OPTS_H__ value + +#include "c_unixize.h" + +struct opts_s { + bool_t recursive; + bool_t verbose; +}; + +void c_opts(struct opts_s*, int, const char*[]); + +#endif /* ifndef __C_OPTS_H__ */ diff --git a/src/c_unixize.c b/src/c_unixize.c index 84985b8..3e16ecd 100644 --- a/src/c_unixize.c +++ b/src/c_unixize.c @@ -45,11 +45,27 @@ * This is the main function and entrypoint of the program. */ +/* #ifdef __linux__ */ +/* # include <linux/limits.h> */ +/* #else */ +/* # include <limits.h> */ +/* #endif */ +#include <stdio.h> + +#include "c_opts.h" + int -main(int argc, const char *argv[]) +main +(int argc, + const char* argv[]) { - (void)argc; - (void)argv; + struct opts_s opts; + + c_opts(&opts, argc, argv); + if (opts.recursive == TRUE) + printf("Recursive\n"); + if (opts.verbose == TRUE) + printf("Verbose\n"); return (0); } @@ -57,5 +73,4 @@ main(int argc, const char *argv[]) * Files prefixes index * -------------------- * c_ -> core program related - * */ diff --git a/src/c_unixize.h b/src/c_unixize.h index c7de6cb..4447c81 100644 --- a/src/c_unixize.h +++ b/src/c_unixize.h @@ -39,11 +39,18 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * unixize: src/c_unixize.h - * 2020-11-02 22:14 + * 2020-11-02 23:07 * Joe */ #ifndef __C_UNIXIZE_H__ #define __C_UNIXIZE_H__ +#define C_OPTS ":Rv" + +typedef enum bool_e { + FALSE, + TRUE +} bool_t; + #endif /* ifndef __C_UNIXIZE_H__ */ |