elks-enhanced
public
Read
Owner: themaster
Branch: master
Commits: 6893
Updated: 2026-04-19 00:15
Git CLI clone URL
git clone https://www.xt-emporium.com/git/elks-enhanced.git
Fullscreen desktop URL
Code
Commits
History
Branches
Bug Reports
Discussions
Compare
Settings
elks-enhanced
/
elks
/
tools
/
mfs
/
getoptx.c
File editor
/* * From: gwyn@brl-tgr.ARPA (Doug Gwyn <gwyn>) Newsgroups: net.sources * Subject: getopt library routine Date: 30 Mar 85 04:45:33 GMT */ /* * getoptX -- public domain version of standard System V routine * * Strictly enforces the System V Command Syntax Standard; provided by D A * Gwyn of BRL for generic ANSI C implementations * * #define STRICT to prevent acceptance of clustered options with arguments * and ommision of whitespace between option and arg. */ #include <stdio.h> #include <string.h> int opterr = 1; /* error => print message */ int optind = 1; /* next argv[] index */ char *optarg = NULL; /* option parameter if any */ static int Err(char *name, char *mess, int c) /* program name argv[0] */ /* specific message */ /* defective option letter */ { if (opterr) { (void) fprintf(stderr, "%s: %s -- %c\n", name, mess, c); } return '?'; /* erroneous-option marker */ } int getoptX(int argc, char *const *argv, const char *optstring) /* argument count from main */ /* argument vector from main */ /* allowed args, e.g. "ab:c" */ { static int sp = 1; /* position within argument */ #ifndef STRICT register int oind; /* saved `optind' for param test */ #else register int osp; /* saved `sp' for param test */ #endif register int c; /* option letter */ register char *cp; /* -> option in `optstring' */ optarg = NULL; if (sp == 1) { /* fresh argument */ if (optind >= argc /* no more arguments */ || argv[optind][0] != '-' /* no more options */ || argv[optind][1] == '\0' /* not option; stdin */ ) return EOF; else if (strcmp(argv[optind], "--") == 0) { ++optind; /* skip over "--" */ return EOF; /* "--" marks end of options */ } } c = argv[optind][sp]; /* option letter */ #ifdef STRICT osp = sp; #endif sp++; /* get ready for next letter */ #ifndef STRICT oind = optind; /* save optind for param test */ #endif if (argv[optind][sp] == '\0')/* end of argument */ { ++optind; /* get ready for next try */ sp = 1; /* beginning of next argument */ } if (c == ':' || c == '?' /* optstring syntax conflict */ || (cp = strchr(optstring, c)) == NULL /* not found */ ) return Err(argv[0], "illegal option", c); if (cp[1] == ':') /* option takes parameter */ { #ifdef STRICT if (osp != 1) return Err(argv[0], "option must not be clustered", c); if (sp != 1) /* reset by end of argument */ return Err(argv[0], "option must be followed by white space", c); #else if (oind == optind) /* argument w/o whitespace */ { optarg = &argv[optind][sp]; sp = 1; /* beginning of next argument */ } else #endif if (optind >= argc) { return Err(argv[0], "option requires an argument", c); } else /* argument w/ whitespace */ { optarg = argv[optind]; } ++optind; /* skip over parameter */ } return c; }
Commit message
This repository is read-only for this account.
Repository snapshot
Current branch
master
Visibility
public
Your access
Read
Remote
Configured
File activity
View file history