<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
<meta name="generator" content="AsciiDoc 8.6.10" />
<title>parse-options API</title>
<style type="text/css">
/* Shared CSS for AsciiDoc xhtml11 and html5 backends */

/* Default font. */
body {
  font-family: Georgia,serif;
}

/* Title font. */
h1, h2, h3, h4, h5, h6,
div.title, caption.title,
thead, p.table.header,
#toctitle,
#author, #revnumber, #revdate, #revremark,
#footer {
  font-family: Arial,Helvetica,sans-serif;
}

body {
  margin: 1em 5% 1em 5%;
}

a {
  color: blue;
  text-decoration: underline;
}
a:visited {
  color: fuchsia;
}

em {
  font-style: italic;
  color: navy;
}

strong {
  font-weight: bold;
  color: #083194;
}

h1, h2, h3, h4, h5, h6 {
  color: #527bbd;
  margin-top: 1.2em;
  margin-bottom: 0.5em;
  line-height: 1.3;
}

h1, h2, h3 {
  border-bottom: 2px solid silver;
}
h2 {
  padding-top: 0.5em;
}
h3 {
  float: left;
}
h3 + * {
  clear: left;
}
h5 {
  font-size: 1.0em;
}

div.sectionbody {
  margin-left: 0;
}

hr {
  border: 1px solid silver;
}

p {
  margin-top: 0.5em;
  margin-bottom: 0.5em;
}

ul, ol, li > p {
  margin-top: 0;
}
ul > li     { color: #aaa; }
ul > li > * { color: black; }

.monospaced, code, pre {
  font-family: "Courier New", Courier, monospace;
  font-size: inherit;
  color: navy;
  padding: 0;
  margin: 0;
}
pre {
  white-space: pre-wrap;
}

#author {
  color: #527bbd;
  font-weight: bold;
  font-size: 1.1em;
}
#email {
}
#revnumber, #revdate, #revremark {
}

#footer {
  font-size: small;
  border-top: 2px solid silver;
  padding-top: 0.5em;
  margin-top: 4.0em;
}
#footer-text {
  float: left;
  padding-bottom: 0.5em;
}
#footer-badges {
  float: right;
  padding-bottom: 0.5em;
}

#preamble {
  margin-top: 1.5em;
  margin-bottom: 1.5em;
}
div.imageblock, div.exampleblock, div.verseblock,
div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,
div.admonitionblock {
  margin-top: 1.0em;
  margin-bottom: 1.5em;
}
div.admonitionblock {
  margin-top: 2.0em;
  margin-bottom: 2.0em;
  margin-right: 10%;
  color: #606060;
}

div.content { /* Block element content. */
  padding: 0;
}

/* Block element titles. */
div.title, caption.title {
  color: #527bbd;
  font-weight: bold;
  text-align: left;
  margin-top: 1.0em;
  margin-bottom: 0.5em;
}
div.title + * {
  margin-top: 0;
}

td div.title:first-child {
  margin-top: 0.0em;
}
div.content div.title:first-child {
  margin-top: 0.0em;
}
div.content + div.title {
  margin-top: 0.0em;
}

div.sidebarblock > div.content {
  background: #ffffee;
  border: 1px solid #dddddd;
  border-left: 4px solid #f0f0f0;
  padding: 0.5em;
}

div.listingblock > div.content {
  border: 1px solid #dddddd;
  border-left: 5px solid #f0f0f0;
  background: #f8f8f8;
  padding: 0.5em;
}

div.quoteblock, div.verseblock {
  padding-left: 1.0em;
  margin-left: 1.0em;
  margin-right: 10%;
  border-left: 5px solid #f0f0f0;
  color: #888;
}

div.quoteblock > div.attribution {
  padding-top: 0.5em;
  text-align: right;
}

div.verseblock > pre.content {
  font-family: inherit;
  font-size: inherit;
}
div.verseblock > div.attribution {
  padding-top: 0.75em;
  text-align: left;
}
/* DEPRECATED: Pre version 8.2.7 verse style literal block. */
div.verseblock + div.attribution {
  text-align: left;
}

div.admonitionblock .icon {
  vertical-align: top;
  font-size: 1.1em;
  font-weight: bold;
  text-decoration: underline;
  color: #527bbd;
  padding-right: 0.5em;
}
div.admonitionblock td.content {
  padding-left: 0.5em;
  border-left: 3px solid #dddddd;
}

div.exampleblock > div.content {
  border-left: 3px solid #dddddd;
  padding-left: 0.5em;
}

div.imageblock div.content { padding-left: 0; }
span.image img { border-style: none; vertical-align: text-bottom; }
a.image:visited { color: white; }

dl {
  margin-top: 0.8em;
  margin-bottom: 0.8em;
}
dt {
  margin-top: 0.5em;
  margin-bottom: 0;
  font-style: normal;
  color: navy;
}
dd > *:first-child {
  margin-top: 0.1em;
}

ul, ol {
    list-style-position: outside;
}
ol.arabic {
  list-style-type: decimal;
}
ol.loweralpha {
  list-style-type: lower-alpha;
}
ol.upperalpha {
  list-style-type: upper-alpha;
}
ol.lowerroman {
  list-style-type: lower-roman;
}
ol.upperroman {
  list-style-type: upper-roman;
}

div.compact ul, div.compact ol,
div.compact p, div.compact p,
div.compact div, div.compact div {
  margin-top: 0.1em;
  margin-bottom: 0.1em;
}

tfoot {
  font-weight: bold;
}
td > div.verse {
  white-space: pre;
}

div.hdlist {
  margin-top: 0.8em;
  margin-bottom: 0.8em;
}
div.hdlist tr {
  padding-bottom: 15px;
}
dt.hdlist1.strong, td.hdlist1.strong {
  font-weight: bold;
}
td.hdlist1 {
  vertical-align: top;
  font-style: normal;
  padding-right: 0.8em;
  color: navy;
}
td.hdlist2 {
  vertical-align: top;
}
div.hdlist.compact tr {
  margin: 0;
  padding-bottom: 0;
}

.comment {
  background: yellow;
}

.footnote, .footnoteref {
  font-size: 0.8em;
}

span.footnote, span.footnoteref {
  vertical-align: super;
}

#footnotes {
  margin: 20px 0 20px 0;
  padding: 7px 0 0 0;
}

#footnotes div.footnote {
  margin: 0 0 5px 0;
}

#footnotes hr {
  border: none;
  border-top: 1px solid silver;
  height: 1px;
  text-align: left;
  margin-left: 0;
  width: 20%;
  min-width: 100px;
}

div.colist td {
  padding-right: 0.5em;
  padding-bottom: 0.3em;
  vertical-align: top;
}
div.colist td img {
  margin-top: 0.3em;
}

@media print {
  #footer-badges { display: none; }
}

#toc {
  margin-bottom: 2.5em;
}

#toctitle {
  color: #527bbd;
  font-size: 1.1em;
  font-weight: bold;
  margin-top: 1.0em;
  margin-bottom: 0.1em;
}

div.toclevel0, div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {
  margin-top: 0;
  margin-bottom: 0;
}
div.toclevel2 {
  margin-left: 2em;
  font-size: 0.9em;
}
div.toclevel3 {
  margin-left: 4em;
  font-size: 0.9em;
}
div.toclevel4 {
  margin-left: 6em;
  font-size: 0.9em;
}

span.aqua { color: aqua; }
span.black { color: black; }
span.blue { color: blue; }
span.fuchsia { color: fuchsia; }
span.gray { color: gray; }
span.green { color: green; }
span.lime { color: lime; }
span.maroon { color: maroon; }
span.navy { color: navy; }
span.olive { color: olive; }
span.purple { color: purple; }
span.red { color: red; }
span.silver { color: silver; }
span.teal { color: teal; }
span.white { color: white; }
span.yellow { color: yellow; }

span.aqua-background { background: aqua; }
span.black-background { background: black; }
span.blue-background { background: blue; }
span.fuchsia-background { background: fuchsia; }
span.gray-background { background: gray; }
span.green-background { background: green; }
span.lime-background { background: lime; }
span.maroon-background { background: maroon; }
span.navy-background { background: navy; }
span.olive-background { background: olive; }
span.purple-background { background: purple; }
span.red-background { background: red; }
span.silver-background { background: silver; }
span.teal-background { background: teal; }
span.white-background { background: white; }
span.yellow-background { background: yellow; }

span.big { font-size: 2em; }
span.small { font-size: 0.6em; }

span.underline { text-decoration: underline; }
span.overline { text-decoration: overline; }
span.line-through { text-decoration: line-through; }

div.unbreakable { page-break-inside: avoid; }


/*
 * xhtml11 specific
 *
 * */

div.tableblock {
  margin-top: 1.0em;
  margin-bottom: 1.5em;
}
div.tableblock > table {
  border: 3px solid #527bbd;
}
thead, p.table.header {
  font-weight: bold;
  color: #527bbd;
}
p.table {
  margin-top: 0;
}
/* Because the table frame attribute is overriden by CSS in most browsers. */
div.tableblock > table[frame="void"] {
  border-style: none;
}
div.tableblock > table[frame="hsides"] {
  border-left-style: none;
  border-right-style: none;
}
div.tableblock > table[frame="vsides"] {
  border-top-style: none;
  border-bottom-style: none;
}


/*
 * html5 specific
 *
 * */

table.tableblock {
  margin-top: 1.0em;
  margin-bottom: 1.5em;
}
thead, p.tableblock.header {
  font-weight: bold;
  color: #527bbd;
}
p.tableblock {
  margin-top: 0;
}
table.tableblock {
  border-width: 3px;
  border-spacing: 0px;
  border-style: solid;
  border-color: #527bbd;
  border-collapse: collapse;
}
th.tableblock, td.tableblock {
  border-width: 1px;
  padding: 4px;
  border-style: solid;
  border-color: #527bbd;
}

table.tableblock.frame-topbot {
  border-left-style: hidden;
  border-right-style: hidden;
}
table.tableblock.frame-sides {
  border-top-style: hidden;
  border-bottom-style: hidden;
}
table.tableblock.frame-none {
  border-style: hidden;
}

th.tableblock.halign-left, td.tableblock.halign-left {
  text-align: left;
}
th.tableblock.halign-center, td.tableblock.halign-center {
  text-align: center;
}
th.tableblock.halign-right, td.tableblock.halign-right {
  text-align: right;
}

th.tableblock.valign-top, td.tableblock.valign-top {
  vertical-align: top;
}
th.tableblock.valign-middle, td.tableblock.valign-middle {
  vertical-align: middle;
}
th.tableblock.valign-bottom, td.tableblock.valign-bottom {
  vertical-align: bottom;
}


/*
 * manpage specific
 *
 * */

body.manpage h1 {
  padding-top: 0.5em;
  padding-bottom: 0.5em;
  border-top: 2px solid silver;
  border-bottom: 2px solid silver;
}
body.manpage h2 {
  border-style: none;
}
body.manpage div.sectionbody {
  margin-left: 3em;
}

@media print {
  body.manpage div#toc { display: none; }
}


</style>
<script type="text/javascript">
/*<![CDATA[*/
var asciidoc = {  // Namespace.

/////////////////////////////////////////////////////////////////////
// Table Of Contents generator
/////////////////////////////////////////////////////////////////////

/* Author: Mihai Bazon, September 2002
 * http://students.infoiasi.ro/~mishoo
 *
 * Table Of Content generator
 * Version: 0.4
 *
 * Feel free to use this script under the terms of the GNU General Public
 * License, as long as you do not remove or alter this notice.
 */

 /* modified by Troy D. Hanson, September 2006. License: GPL */
 /* modified by Stuart Rackham, 2006, 2009. License: GPL */

// toclevels = 1..4.
toc: function (toclevels) {

  function getText(el) {
    var text = "";
    for (var i = el.firstChild; i != null; i = i.nextSibling) {
      if (i.nodeType == 3 /* Node.TEXT_NODE */) // IE doesn't speak constants.
        text += i.data;
      else if (i.firstChild != null)
        text += getText(i);
    }
    return text;
  }

  function TocEntry(el, text, toclevel) {
    this.element = el;
    this.text = text;
    this.toclevel = toclevel;
  }

  function tocEntries(el, toclevels) {
    var result = new Array;
    var re = new RegExp('[hH]([1-'+(toclevels+1)+'])');
    // Function that scans the DOM tree for header elements (the DOM2
    // nodeIterator API would be a better technique but not supported by all
    // browsers).
    var iterate = function (el) {
      for (var i = el.firstChild; i != null; i = i.nextSibling) {
        if (i.nodeType == 1 /* Node.ELEMENT_NODE */) {
          var mo = re.exec(i.tagName);
          if (mo && (i.getAttribute("class") || i.getAttribute("className")) != "float") {
            result[result.length] = new TocEntry(i, getText(i), mo[1]-1);
          }
          iterate(i);
        }
      }
    }
    iterate(el);
    return result;
  }

  var toc = document.getElementById("toc");
  if (!toc) {
    return;
  }

  // Delete existing TOC entries in case we're reloading the TOC.
  var tocEntriesToRemove = [];
  var i;
  for (i = 0; i < toc.childNodes.length; i++) {
    var entry = toc.childNodes[i];
    if (entry.nodeName.toLowerCase() == 'div'
     && entry.getAttribute("class")
     && entry.getAttribute("class").match(/^toclevel/))
      tocEntriesToRemove.push(entry);
  }
  for (i = 0; i < tocEntriesToRemove.length; i++) {
    toc.removeChild(tocEntriesToRemove[i]);
  }

  // Rebuild TOC entries.
  var entries = tocEntries(document.getElementById("content"), toclevels);
  for (var i = 0; i < entries.length; ++i) {
    var entry = entries[i];
    if (entry.element.id == "")
      entry.element.id = "_toc_" + i;
    var a = document.createElement("a");
    a.href = "#" + entry.element.id;
    a.appendChild(document.createTextNode(entry.text));
    var div = document.createElement("div");
    div.appendChild(a);
    div.className = "toclevel" + entry.toclevel;
    toc.appendChild(div);
  }
  if (entries.length == 0)
    toc.parentNode.removeChild(toc);
},


/////////////////////////////////////////////////////////////////////
// Footnotes generator
/////////////////////////////////////////////////////////////////////

/* Based on footnote generation code from:
 * http://www.brandspankingnew.net/archive/2005/07/format_footnote.html
 */

footnotes: function () {
  // Delete existing footnote entries in case we're reloading the footnodes.
  var i;
  var noteholder = document.getElementById("footnotes");
  if (!noteholder) {
    return;
  }
  var entriesToRemove = [];
  for (i = 0; i < noteholder.childNodes.length; i++) {
    var entry = noteholder.childNodes[i];
    if (entry.nodeName.toLowerCase() == 'div' && entry.getAttribute("class") == "footnote")
      entriesToRemove.push(entry);
  }
  for (i = 0; i < entriesToRemove.length; i++) {
    noteholder.removeChild(entriesToRemove[i]);
  }

  // Rebuild footnote entries.
  var cont = document.getElementById("content");
  var spans = cont.getElementsByTagName("span");
  var refs = {};
  var n = 0;
  for (i=0; i<spans.length; i++) {
    if (spans[i].className == "footnote") {
      n++;
      var note = spans[i].getAttribute("data-note");
      if (!note) {
        // Use [\s\S] in place of . so multi-line matches work.
        // Because JavaScript has no s (dotall) regex flag.
        note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];
        spans[i].innerHTML =
          "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +
          "' title='View footnote' class='footnote'>" + n + "</a>]";
        spans[i].setAttribute("data-note", note);
      }
      noteholder.innerHTML +=
        "<div class='footnote' id='_footnote_" + n + "'>" +
        "<a href='#_footnoteref_" + n + "' title='Return to text'>" +
        n + "</a>. " + note + "</div>";
      var id =spans[i].getAttribute("id");
      if (id != null) refs["#"+id] = n;
    }
  }
  if (n == 0)
    noteholder.parentNode.removeChild(noteholder);
  else {
    // Process footnoterefs.
    for (i=0; i<spans.length; i++) {
      if (spans[i].className == "footnoteref") {
        var href = spans[i].getElementsByTagName("a")[0].getAttribute("href");
        href = href.match(/#.*/)[0];  // Because IE return full URL.
        n = refs[href];
        spans[i].innerHTML =
          "[<a href='#_footnote_" + n +
          "' title='View footnote' class='footnote'>" + n + "</a>]";
      }
    }
  }
},

install: function(toclevels) {
  var timerId;

  function reinstall() {
    asciidoc.footnotes();
    if (toclevels) {
      asciidoc.toc(toclevels);
    }
  }

  function reinstallAndRemoveTimer() {
    clearInterval(timerId);
    reinstall();
  }

  timerId = setInterval(reinstall, 500);
  if (document.addEventListener)
    document.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer, false);
  else
    window.onload = reinstallAndRemoveTimer;
}

}
asciidoc.install();
/*]]>*/
</script>
</head>
<body class="article">
<div id="header">
<h1>parse-options API</h1>
</div>
<div id="content">
<div id="preamble">
<div class="sectionbody">
<div class="paragraph"><p>The parse-options API is used to parse and massage options in Git
and to provide a usage help with consistent look.</p></div>
</div>
</div>
<div class="sect1">
<h2 id="_basics">Basics</h2>
<div class="sectionbody">
<div class="paragraph"><p>The argument vector <code>argv[]</code> may usually contain mandatory or optional
<em>non-option arguments</em>, e.g. a filename or a branch, and <em>options</em>.
Options are optional arguments that start with a dash and
that allow to change the behavior of a command.</p></div>
<div class="ulist"><ul>
<li>
<p>
There are basically three types of options:
  <em>boolean</em> options,
  options with (mandatory) <em>arguments</em> and
  options with <em>optional arguments</em>
  (i.e. a boolean option that can be adjusted).
</p>
</li>
<li>
<p>
There are basically two forms of options:
  <em>Short options</em> consist of one dash (<code>-</code>) and one alphanumeric
  character.
  <em>Long options</em> begin with two dashes (<code>--</code>) and some
  alphanumeric characters.
</p>
</li>
<li>
<p>
Options are case-sensitive.
  Please define <em>lower-case long options</em> only.
</p>
</li>
</ul></div>
<div class="paragraph"><p>The parse-options API allows:</p></div>
<div class="ulist"><ul>
<li>
<p>
<em>stuck</em> and <em>separate form</em> of options with arguments.
  <code>-oArg</code> is stuck, <code>-o Arg</code> is separate form.
  <code>--option=Arg</code> is stuck, <code>--option Arg</code> is separate form.
</p>
</li>
<li>
<p>
Long options may be <em>abbreviated</em>, as long as the abbreviation
  is unambiguous.
</p>
</li>
<li>
<p>
Short options may be bundled, e.g. <code>-a -b</code> can be specified as <code>-ab</code>.
</p>
</li>
<li>
<p>
Boolean long options can be <em>negated</em> (or <em>unset</em>) by prepending
  <code>no-</code>, e.g. <code>--no-abbrev</code> instead of <code>--abbrev</code>. Conversely,
  options that begin with <code>no-</code> can be <em>negated</em> by removing it.
  Other long options can be unset (e.g., set string to NULL, set
  integer to 0) by prepending <code>no-</code>.
</p>
</li>
<li>
<p>
Options and non-option arguments can clearly be separated using the <code>--</code>
  option, e.g. <code>-a -b --option -- --this-is-a-file</code> indicates that
  <code>--this-is-a-file</code> must not be processed as an option.
</p>
</li>
</ul></div>
</div>
</div>
<div class="sect1">
<h2 id="_steps_to_parse_options">Steps to parse options</h2>
<div class="sectionbody">
<div class="olist arabic"><ol class="arabic">
<li>
<p>
<code>#include "parse-options.h"</code>
</p>
</li>
<li>
<p>
define a NULL-terminated
  <code>static const char * const builtin_foo_usage[]</code> array
  containing alternative usage strings
</p>
</li>
<li>
<p>
define <code>builtin_foo_options</code> array as described below
  in section <em>Data Structure</em>.
</p>
</li>
<li>
<p>
in <code>cmd_foo(int argc, const char **argv, const char *prefix)</code>
  call
</p>
<div class="literalblock">
<div class="content">
<pre><code>argc = parse_options(argc, argv, prefix, builtin_foo_options, builtin_foo_usage, flags);</code></pre>
</div></div>
<div class="paragraph"><p><code>parse_options()</code> will filter out the processed options of <code>argv[]</code> and leave the
non-option arguments in <code>argv[]</code>.
<code>argc</code> is updated appropriately because of the assignment.</p></div>
<div class="paragraph"><p>You can also pass NULL instead of a usage array as the fifth parameter of
parse_options(), to avoid displaying a help screen with usage info and
option list.  This should only be done if necessary, e.g. to implement
a limited parser for only a subset of the options that needs to be run
before the full parser, which in turn shows the full help message.</p></div>
<div class="paragraph"><p>Flags are the bitwise-or of:</p></div>
<div class="dlist"><dl>
<dt class="hdlist1">
<code>PARSE_OPT_KEEP_DASHDASH</code>
</dt>
<dd>
<p>
        Keep the <code>--</code> that usually separates options from
        non-option arguments.
</p>
</dd>
<dt class="hdlist1">
<code>PARSE_OPT_STOP_AT_NON_OPTION</code>
</dt>
<dd>
<p>
        Usually the whole argument vector is massaged and reordered.
        Using this flag, processing is stopped at the first non-option
        argument.
</p>
</dd>
<dt class="hdlist1">
<code>PARSE_OPT_KEEP_ARGV0</code>
</dt>
<dd>
<p>
        Keep the first argument, which contains the program name.  It&#8217;s
        removed from argv[] by default.
</p>
</dd>
<dt class="hdlist1">
<code>PARSE_OPT_KEEP_UNKNOWN</code>
</dt>
<dd>
<p>
        Keep unknown arguments instead of erroring out.  This doesn&#8217;t
        work for all combinations of arguments as users might expect
        it to do.  E.g. if the first argument in <code>--unknown --known</code>
        takes a value (which we can&#8217;t know), the second one is
        mistakenly interpreted as a known option.  Similarly, if
        <code>PARSE_OPT_STOP_AT_NON_OPTION</code> is set, the second argument in
        <code>--unknown value</code> will be mistakenly interpreted as a
        non-option, not as a value belonging to the unknown option,
        the parser early.  That&#8217;s why parse_options() errors out if
        both options are set.
</p>
</dd>
<dt class="hdlist1">
<code>PARSE_OPT_NO_INTERNAL_HELP</code>
</dt>
<dd>
<p>
        By default, parse_options() handles <code>-h</code>, <code>--help</code> and
        <code>--help-all</code> internally, by showing a help screen.  This option
        turns it off and allows one to add custom handlers for these
        options, or to just leave them unknown.
</p>
</dd>
</dl></div>
</li>
</ol></div>
</div>
</div>
<div class="sect1">
<h2 id="_data_structure">Data Structure</h2>
<div class="sectionbody">
<div class="paragraph"><p>The main data structure is an array of the <code>option</code> struct,
say <code>static struct option builtin_add_options[]</code>.
There are some macros to easily define options:</p></div>
<div class="dlist"><dl>
<dt class="hdlist1">
<code>OPT__ABBREV(&amp;int_var)</code>
</dt>
<dd>
<p>
        Add <code>--abbrev[=&lt;n&gt;]</code>.
</p>
</dd>
<dt class="hdlist1">
<code>OPT__COLOR(&amp;int_var, description)</code>
</dt>
<dd>
<p>
        Add <code>--color[=&lt;when&gt;]</code> and <code>--no-color</code>.
</p>
</dd>
<dt class="hdlist1">
<code>OPT__DRY_RUN(&amp;int_var, description)</code>
</dt>
<dd>
<p>
        Add <code>-n, --dry-run</code>.
</p>
</dd>
<dt class="hdlist1">
<code>OPT__FORCE(&amp;int_var, description)</code>
</dt>
<dd>
<p>
        Add <code>-f, --force</code>.
</p>
</dd>
<dt class="hdlist1">
<code>OPT__QUIET(&amp;int_var, description)</code>
</dt>
<dd>
<p>
        Add <code>-q, --quiet</code>.
</p>
</dd>
<dt class="hdlist1">
<code>OPT__VERBOSE(&amp;int_var, description)</code>
</dt>
<dd>
<p>
        Add <code>-v, --verbose</code>.
</p>
</dd>
<dt class="hdlist1">
<code>OPT_GROUP(description)</code>
</dt>
<dd>
<p>
        Start an option group. <code>description</code> is a short string that
        describes the group or an empty string.
        Start the description with an upper-case letter.
</p>
</dd>
<dt class="hdlist1">
<code>OPT_BOOL(short, long, &amp;int_var, description)</code>
</dt>
<dd>
<p>
        Introduce a boolean option. <code>int_var</code> is set to one with
        <code>--option</code> and set to zero with <code>--no-option</code>.
</p>
</dd>
<dt class="hdlist1">
<code>OPT_COUNTUP(short, long, &amp;int_var, description)</code>
</dt>
<dd>
<p>
        Introduce a count-up option.
        Each use of <code>--option</code> increments <code>int_var</code>, starting from zero
        (even if initially negative), and <code>--no-option</code> resets it to
        zero. To determine if <code>--option</code> or <code>--no-option</code> was encountered at
        all, initialize <code>int_var</code> to a negative value, and if it is still
        negative after parse_options(), then neither <code>--option</code> nor
        <code>--no-option</code> was seen.
</p>
</dd>
<dt class="hdlist1">
<code>OPT_BIT(short, long, &amp;int_var, description, mask)</code>
</dt>
<dd>
<p>
        Introduce a boolean option.
        If used, <code>int_var</code> is bitwise-ored with <code>mask</code>.
</p>
</dd>
<dt class="hdlist1">
<code>OPT_NEGBIT(short, long, &amp;int_var, description, mask)</code>
</dt>
<dd>
<p>
        Introduce a boolean option.
        If used, <code>int_var</code> is bitwise-anded with the inverted <code>mask</code>.
</p>
</dd>
<dt class="hdlist1">
<code>OPT_SET_INT(short, long, &amp;int_var, description, integer)</code>
</dt>
<dd>
<p>
        Introduce an integer option.
        <code>int_var</code> is set to <code>integer</code> with <code>--option</code>, and
        reset to zero with <code>--no-option</code>.
</p>
</dd>
<dt class="hdlist1">
<code>OPT_STRING(short, long, &amp;str_var, arg_str, description)</code>
</dt>
<dd>
<p>
        Introduce an option with string argument.
        The string argument is put into <code>str_var</code>.
</p>
</dd>
<dt class="hdlist1">
<code>OPT_STRING_LIST(short, long, &amp;struct string_list, arg_str, description)</code>
</dt>
<dd>
<p>
        Introduce an option with string argument.
        The string argument is stored as an element in <code>string_list</code>.
        Use of <code>--no-option</code> will clear the list of preceding values.
</p>
</dd>
<dt class="hdlist1">
<code>OPT_INTEGER(short, long, &amp;int_var, description)</code>
</dt>
<dd>
<p>
        Introduce an option with integer argument.
        The integer is put into <code>int_var</code>.
</p>
</dd>
<dt class="hdlist1">
<code>OPT_MAGNITUDE(short, long, &amp;unsigned_long_var, description)</code>
</dt>
<dd>
<p>
        Introduce an option with a size argument. The argument must be a
        non-negative integer and may include a suffix of <em>k</em>, <em>m</em> or <em>g</em> to
        scale the provided value by 1024, 1024<sup>2 or 1024</sup>3 respectively.
        The scaled value is put into <code>unsigned_long_var</code>.
</p>
</dd>
<dt class="hdlist1">
<code>OPT_EXPIRY_DATE(short, long, &amp;timestamp_t_var, description)</code>
</dt>
<dd>
<p>
        Introduce an option with expiry date argument, see <code>parse_expiry_date()</code>.
        The timestamp is put into <code>timestamp_t_var</code>.
</p>
</dd>
<dt class="hdlist1">
<code>OPT_CALLBACK(short, long, &amp;var, arg_str, description, func_ptr)</code>
</dt>
<dd>
<p>
        Introduce an option with argument.
        The argument will be fed into the function given by <code>func_ptr</code>
        and the result will be put into <code>var</code>.
        See <em>Option Callbacks</em> below for a more elaborate description.
</p>
</dd>
<dt class="hdlist1">
<code>OPT_FILENAME(short, long, &amp;var, description)</code>
</dt>
<dd>
<p>
        Introduce an option with a filename argument.
        The filename will be prefixed by passing the filename along with
        the prefix argument of <code>parse_options()</code> to <code>prefix_filename()</code>.
</p>
</dd>
<dt class="hdlist1">
<code>OPT_ARGUMENT(long, description)</code>
</dt>
<dd>
<p>
        Introduce a long-option argument that will be kept in <code>argv[]</code>.
</p>
</dd>
<dt class="hdlist1">
<code>OPT_NUMBER_CALLBACK(&amp;var, description, func_ptr)</code>
</dt>
<dd>
<p>
        Recognize numerical options like -123 and feed the integer as
        if it was an argument to the function given by <code>func_ptr</code>.
        The result will be put into <code>var</code>.  There can be only one such
        option definition.  It cannot be negated and it takes no
        arguments.  Short options that happen to be digits take
        precedence over it.
</p>
</dd>
<dt class="hdlist1">
<code>OPT_COLOR_FLAG(short, long, &amp;int_var, description)</code>
</dt>
<dd>
<p>
        Introduce an option that takes an optional argument that can
        have one of three values: "always", "never", or "auto".  If the
        argument is not given, it defaults to "always".  The <code>--no-</code> form
        works like <code>--long=never</code>; it cannot take an argument.  If
        "always", set <code>int_var</code> to 1; if "never", set <code>int_var</code> to 0; if
        "auto", set <code>int_var</code> to 1 if stdout is a tty or a pager,
        0 otherwise.
</p>
</dd>
<dt class="hdlist1">
<code>OPT_NOOP_NOARG(short, long)</code>
</dt>
<dd>
<p>
        Introduce an option that has no effect and takes no arguments.
        Use it to hide deprecated options that are still to be recognized
        and ignored silently.
</p>
</dd>
<dt class="hdlist1">
<code>OPT_PASSTHRU(short, long, &amp;char_var, arg_str, description, flags)</code>
</dt>
<dd>
<p>
        Introduce an option that will be reconstructed into a char* string,
        which must be initialized to NULL. This is useful when you need to
        pass the command-line option to another command. Any previous value
        will be overwritten, so this should only be used for options where
        the last one specified on the command line wins.
</p>
</dd>
<dt class="hdlist1">
<code>OPT_PASSTHRU_ARGV(short, long, &amp;argv_array_var, arg_str, description, flags)</code>
</dt>
<dd>
<p>
        Introduce an option where all instances of it on the command-line will
        be reconstructed into an argv_array. This is useful when you need to
        pass the command-line option, which can be specified multiple times,
        to another command.
</p>
</dd>
<dt class="hdlist1">
<code>OPT_CMDMODE(short, long, &amp;int_var, description, enum_val)</code>
</dt>
<dd>
<p>
        Define an "operation mode" option, only one of which in the same
        group of "operating mode" options that share the same <code>int_var</code>
        can be given by the user. <code>enum_val</code> is set to <code>int_var</code> when the
        option is used, but an error is reported if other "operating mode"
        option has already set its value to the same <code>int_var</code>.
</p>
</dd>
</dl></div>
<div class="paragraph"><p>The last element of the array must be <code>OPT_END()</code>.</p></div>
<div class="paragraph"><p>If not stated otherwise, interpret the arguments as follows:</p></div>
<div class="ulist"><ul>
<li>
<p>
<code>short</code> is a character for the short option
  (e.g. <code>'e'</code> for <code>-e</code>, use <code>0</code> to omit),
</p>
</li>
<li>
<p>
<code>long</code> is a string for the long option
  (e.g. <code>"example"</code> for <code>--example</code>, use <code>NULL</code> to omit),
</p>
</li>
<li>
<p>
<code>int_var</code> is an integer variable,
</p>
</li>
<li>
<p>
<code>str_var</code> is a string variable (<code>char *</code>),
</p>
</li>
<li>
<p>
<code>arg_str</code> is the string that is shown as argument
  (e.g. <code>"branch"</code> will result in <code>&lt;branch&gt;</code>).
  If set to <code>NULL</code>, three dots (<code>...</code>) will be displayed.
</p>
</li>
<li>
<p>
<code>description</code> is a short string to describe the effect of the option.
  It shall begin with a lower-case letter and a full stop (<code>.</code>) shall be
  omitted at the end.
</p>
</li>
</ul></div>
</div>
</div>
<div class="sect1">
<h2 id="_option_callbacks">Option Callbacks</h2>
<div class="sectionbody">
<div class="paragraph"><p>The function must be defined in this form:</p></div>
<div class="literalblock">
<div class="content">
<pre><code>int func(const struct option *opt, const char *arg, int unset)</code></pre>
</div></div>
<div class="paragraph"><p>The callback mechanism is as follows:</p></div>
<div class="ulist"><ul>
<li>
<p>
Inside <code>func</code>, the only interesting member of the structure
  given by <code>opt</code> is the void pointer <code>opt-&gt;value</code>.
  <code>*opt-&gt;value</code> will be the value that is saved into <code>var</code>, if you
  use <code>OPT_CALLBACK()</code>.
  For example, do <code>*(unsigned long *)opt-&gt;value = 42;</code> to get 42
  into an <code>unsigned long</code> variable.
</p>
</li>
<li>
<p>
Return value <code>0</code> indicates success and non-zero return
  value will invoke <code>usage_with_options()</code> and, thus, die.
</p>
</li>
<li>
<p>
If the user negates the option, <code>arg</code> is <code>NULL</code> and <code>unset</code> is 1.
</p>
</li>
</ul></div>
</div>
</div>
<div class="sect1">
<h2 id="_sophisticated_option_parsing">Sophisticated option parsing</h2>
<div class="sectionbody">
<div class="paragraph"><p>If you need, for example, option callbacks with optional arguments
or without arguments at all, or if you need other special cases,
that are not handled by the macros above, you need to specify the
members of the <code>option</code> structure manually.</p></div>
<div class="paragraph"><p>This is not covered in this document, but well documented
in <code>parse-options.h</code> itself.</p></div>
</div>
</div>
<div class="sect1">
<h2 id="_examples">Examples</h2>
<div class="sectionbody">
<div class="paragraph"><p>See <code>test-parse-options.c</code> and
<code>builtin/add.c</code>,
<code>builtin/clone.c</code>,
<code>builtin/commit.c</code>,
<code>builtin/fetch.c</code>,
<code>builtin/fsck.c</code>,
<code>builtin/rm.c</code>
for real-world examples.</p></div>
</div>
</div>
</div>
<div id="footnotes"><hr /></div>
<div id="footer">
<div id="footer-text">
Last updated
 2018-11-18 21:41:21 JST
</div>
</div>
</body>
</html>
