doc/doxygen/html/TestMasterMicroMod_2getopt_8c-source.html
author etisserant
Mon, 02 Jul 2007 18:22:58 +0200
changeset 236 905677ed00f3
parent 215 f49e5a6b7804
child 240 34654679f262
permissions -rw-r--r--
Full preliminary implementation of TPDO transmit type:
- SYNC (N) (1-240)
- RTR only + SYNC (252)
- RTR only (253)
- EVENT, with timer and inhibit time (254 and 255)

User app have to call sendPDOevent(d) to eventually signal mapped data changes.
Callbacks added to 0x140N, TPDO comm parameters for on the fly timers values change.
TestMasterSlave updated.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>CanFestival: examples/TestMasterMicroMod/getopt.c Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.1 -->
<div class="tabs">
  <ul>
    <li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
    <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
    <li id="current"><a href="files.html"><span>Files</span></a></li>
    <li><a href="dirs.html"><span>Directories</span></a></li>
  </ul></div>
<div class="tabs">
  <ul>
    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
    <li><a href="globals.html"><span>Globals</span></a></li>
  </ul></div>
<div class="nav">
<a class="el" href="dir_fc8d77725c328f9de5a130dceab5a508.html">examples</a>&nbsp;&raquo&nbsp;<a class="el" href="dir_a7260e1e7d8c32b9634bb52472535efa.html">TestMasterMicroMod</a></div>
<h1>getopt.c</h1><a href="TestMasterMicroMod_2getopt_8c.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* from http://www.pwilson.net/getopt.html */</span>
<a name="l00002"></a>00002 
<a name="l00003"></a>00003 <span class="comment">/* Getopt for GNU.</span>
<a name="l00004"></a>00004 <span class="comment">   NOTE: getopt is now part of the C library, so if you don't know what</span>
<a name="l00005"></a>00005 <span class="comment">   "Keep this file name-space clean" means, talk to drepper@gnu.org</span>
<a name="l00006"></a>00006 <span class="comment">   before changing it!</span>
<a name="l00007"></a>00007 <span class="comment">   Copyright (C) 1987,88,89,90,91,92,93,94,95,96,98,99,2000,2001</span>
<a name="l00008"></a>00008 <span class="comment">        Free Software Foundation, Inc.</span>
<a name="l00009"></a>00009 <span class="comment">   This file is part of the GNU C Library.</span>
<a name="l00010"></a>00010 <span class="comment"></span>
<a name="l00011"></a>00011 <span class="comment">   The GNU C Library is free software; you can redistribute it and/or</span>
<a name="l00012"></a>00012 <span class="comment">   modify it under the terms of the GNU Lesser General Public</span>
<a name="l00013"></a>00013 <span class="comment">   License as published by the Free Software Foundation; either</span>
<a name="l00014"></a>00014 <span class="comment">   version 2.1 of the License, or (at your option) any later version.</span>
<a name="l00015"></a>00015 <span class="comment"></span>
<a name="l00016"></a>00016 <span class="comment">   The GNU C Library is distributed in the hope that it will be useful,</span>
<a name="l00017"></a>00017 <span class="comment">   but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<a name="l00018"></a>00018 <span class="comment">   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
<a name="l00019"></a>00019 <span class="comment">   Lesser General Public License for more details.</span>
<a name="l00020"></a>00020 <span class="comment"></span>
<a name="l00021"></a>00021 <span class="comment">   You should have received a copy of the GNU Lesser General Public</span>
<a name="l00022"></a>00022 <span class="comment">   License along with the GNU C Library; if not, write to the Free</span>
<a name="l00023"></a>00023 <span class="comment">   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA</span>
<a name="l00024"></a>00024 <span class="comment">   02111-1307 USA.  */</span>
<a name="l00025"></a>00025 
<a name="l00026"></a>00026 <span class="comment">/* This tells Alpha OSF/1 not to define a getopt prototype in &lt;stdio.h&gt;.</span>
<a name="l00027"></a>00027 <span class="comment">   Ditto for AIX 3.2 and &lt;stdlib.h&gt;.  */</span>
<a name="l00028"></a>00028 <span class="preprocessor">#ifndef _NO_PROTO</span>
<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor"># define _NO_PROTO</span>
<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00031"></a>00031 <span class="preprocessor"></span>
<a name="l00032"></a>00032 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
<a name="l00033"></a>00033 <span class="preprocessor"></span><span class="preprocessor"># include &lt;config.h&gt;</span>
<a name="l00034"></a>00034 <span class="preprocessor">#endif</span>
<a name="l00035"></a>00035 <span class="preprocessor"></span>
<a name="l00036"></a>00036 <span class="preprocessor">#if !defined __STDC__ || !__STDC__</span>
<a name="l00037"></a>00037 <span class="preprocessor"></span><span class="comment">/* This is a separate conditional since some stdc systems</span>
<a name="l00038"></a>00038 <span class="comment">   reject `defined (const)'.  */</span>
<a name="l00039"></a>00039 <span class="preprocessor"># ifndef const</span>
<a name="l00040"></a>00040 <span class="preprocessor"></span><span class="preprocessor">#  define const</span>
<a name="l00041"></a>00041 <span class="preprocessor"></span><span class="preprocessor"># endif</span>
<a name="l00042"></a>00042 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00043"></a>00043 <span class="preprocessor"></span>
<a name="l00044"></a>00044 <span class="preprocessor">#include &lt;stdio.h&gt;</span>
<a name="l00045"></a>00045 
<a name="l00046"></a>00046 <span class="comment">/* Comment out all this code if we are using the GNU C Library, and are not</span>
<a name="l00047"></a>00047 <span class="comment">   actually compiling the library itself.  This code is part of the GNU C</span>
<a name="l00048"></a>00048 <span class="comment">   Library, but also included in many other GNU distributions.  Compiling</span>
<a name="l00049"></a>00049 <span class="comment">   and linking in this code is a waste when using the GNU C library</span>
<a name="l00050"></a>00050 <span class="comment">   (especially if it is a shared library).  Rather than having every GNU</span>
<a name="l00051"></a>00051 <span class="comment">   program understand `configure --with-gnu-libc' and omit the object files,</span>
<a name="l00052"></a>00052 <span class="comment">   it is simpler to just do this in the source for each such file.  */</span>
<a name="l00053"></a>00053 
<a name="l00054"></a><a class="code" href="TestMasterMicroMod_2getopt_8c.html#5325c715897861c318d3ae312ac452cc">00054</a> <span class="preprocessor">#define GETOPT_INTERFACE_VERSION 2</span>
<a name="l00055"></a>00055 <span class="preprocessor"></span><span class="preprocessor">#if !defined _LIBC &amp;&amp; defined __GLIBC__ &amp;&amp; __GLIBC__ &gt;= 2</span>
<a name="l00056"></a>00056 <span class="preprocessor"></span><span class="preprocessor"># include &lt;gnu-versions.h&gt;</span>
<a name="l00057"></a>00057 <span class="preprocessor"># if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION</span>
<a name="l00058"></a>00058 <span class="preprocessor"></span><span class="preprocessor">#  define ELIDE_CODE</span>
<a name="l00059"></a>00059 <span class="preprocessor"></span><span class="preprocessor"># endif</span>
<a name="l00060"></a>00060 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00061"></a>00061 <span class="preprocessor"></span>
<a name="l00062"></a>00062 <span class="preprocessor">#ifndef ELIDE_CODE</span>
<a name="l00063"></a>00063 <span class="preprocessor"></span>
<a name="l00064"></a>00064 
<a name="l00065"></a>00065 <span class="comment">/* This needs to come after some library #include</span>
<a name="l00066"></a>00066 <span class="comment">   to get __GNU_LIBRARY__ defined.  */</span>
<a name="l00067"></a>00067 <span class="preprocessor">#ifdef  __GNU_LIBRARY__</span>
<a name="l00068"></a>00068 <span class="preprocessor"></span><span class="comment">/* Don't include stdlib.h for non-GNU C libraries because some of them</span>
<a name="l00069"></a>00069 <span class="comment">   contain conflicting prototypes for getopt.  */</span>
<a name="l00070"></a>00070 <span class="preprocessor"># include &lt;stdlib.h&gt;</span>
<a name="l00071"></a>00071 <span class="preprocessor"># include &lt;unistd.h&gt;</span>
<a name="l00072"></a>00072 <span class="preprocessor">#endif  </span><span class="comment">/* GNU C library.  */</span>
<a name="l00073"></a>00073 
<a name="l00074"></a>00074 <span class="preprocessor">#ifdef VMS</span>
<a name="l00075"></a>00075 <span class="preprocessor"></span><span class="preprocessor"># include &lt;unixlib.h&gt;</span>
<a name="l00076"></a>00076 <span class="preprocessor"># if HAVE_STRING_H - 0</span>
<a name="l00077"></a>00077 <span class="preprocessor"></span><span class="preprocessor">#  include &lt;string.h&gt;</span>
<a name="l00078"></a>00078 <span class="preprocessor"># endif</span>
<a name="l00079"></a>00079 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00080"></a>00080 <span class="preprocessor"></span>
<a name="l00081"></a>00081 <span class="preprocessor">#ifndef _</span>
<a name="l00082"></a>00082 <span class="preprocessor"></span><span class="comment">/* This is for other GNU distributions with internationalized messages.  */</span>
<a name="l00083"></a>00083 <span class="preprocessor"># if (HAVE_LIBINTL_H &amp;&amp; ENABLE_NLS) || defined _LIBC</span>
<a name="l00084"></a>00084 <span class="preprocessor"></span><span class="preprocessor">#  include &lt;libintl.h&gt;</span>
<a name="l00085"></a>00085 <span class="preprocessor">#  ifndef _</span>
<a name="l00086"></a>00086 <span class="preprocessor"></span><span class="preprocessor">#   define _(msgid)     gettext (msgid)</span>
<a name="l00087"></a>00087 <span class="preprocessor"></span><span class="preprocessor">#  endif</span>
<a name="l00088"></a>00088 <span class="preprocessor"></span><span class="preprocessor"># else</span>
<a name="l00089"></a><a class="code" href="TestMasterMicroMod_2getopt_8c.html#86a239addea586602343007a370bf8ad">00089</a> <span class="preprocessor"></span><span class="preprocessor">#  define _(msgid)      (msgid)</span>
<a name="l00090"></a>00090 <span class="preprocessor"></span><span class="preprocessor"># endif</span>
<a name="l00091"></a>00091 <span class="preprocessor"></span><span class="preprocessor"># if defined _LIBC &amp;&amp; defined USE_IN_LIBIO</span>
<a name="l00092"></a>00092 <span class="preprocessor"></span><span class="preprocessor">#  include &lt;wchar.h&gt;</span>
<a name="l00093"></a>00093 <span class="preprocessor"># endif</span>
<a name="l00094"></a>00094 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00095"></a>00095 <span class="preprocessor"></span>
<a name="l00096"></a>00096 <span class="comment">/* This version of `getopt' appears to the caller like standard Unix `getopt'</span>
<a name="l00097"></a>00097 <span class="comment">   but it behaves differently for the user, since it allows the user</span>
<a name="l00098"></a>00098 <span class="comment">   to intersperse the options with the other arguments.</span>
<a name="l00099"></a>00099 <span class="comment"></span>
<a name="l00100"></a>00100 <span class="comment">   As `getopt' works, it permutes the elements of ARGV so that,</span>
<a name="l00101"></a>00101 <span class="comment">   when it is done, all the options precede everything else.  Thus</span>
<a name="l00102"></a>00102 <span class="comment">   all application programs are extended to handle flexible argument order.</span>
<a name="l00103"></a>00103 <span class="comment"></span>
<a name="l00104"></a>00104 <span class="comment">   Setting the environment variable POSIXLY_CORRECT disables permutation.</span>
<a name="l00105"></a>00105 <span class="comment">   Then the behavior is completely standard.</span>
<a name="l00106"></a>00106 <span class="comment"></span>
<a name="l00107"></a>00107 <span class="comment">   GNU application programs can use a third alternative mode in which</span>
<a name="l00108"></a>00108 <span class="comment">   they can distinguish the relative order of options and other arguments.  */</span>
<a name="l00109"></a>00109 
<a name="l00110"></a>00110 <span class="preprocessor">#include "<a class="code" href="TestMasterMicroMod_2getopt_8h.html">getopt.h</a>"</span>
<a name="l00111"></a>00111 
<a name="l00112"></a>00112 <span class="comment">/* For communication from `getopt' to the caller.</span>
<a name="l00113"></a>00113 <span class="comment">   When `getopt' finds an option that takes an argument,</span>
<a name="l00114"></a>00114 <span class="comment">   the argument value is returned here.</span>
<a name="l00115"></a>00115 <span class="comment">   Also, when `ordering' is RETURN_IN_ORDER,</span>
<a name="l00116"></a>00116 <span class="comment">   each non-option ARGV-element is returned here.  */</span>
<a name="l00117"></a>00117 
<a name="l00118"></a><a class="code" href="TestMasterMicroMod_2getopt_8c.html#db50a0eab9fed92fc3bfc7dfa4f2c410">00118</a> <span class="keywordtype">char</span> *<a class="code" href="TestMasterSlave_2getopt_8c.html#db50a0eab9fed92fc3bfc7dfa4f2c410">optarg</a>;
<a name="l00119"></a>00119 
<a name="l00120"></a>00120 <span class="comment">/* Index in ARGV of the next element to be scanned.</span>
<a name="l00121"></a>00121 <span class="comment">   This is used for communication to and from the caller</span>
<a name="l00122"></a>00122 <span class="comment">   and for communication between successive calls to `getopt'.</span>
<a name="l00123"></a>00123 <span class="comment"></span>
<a name="l00124"></a>00124 <span class="comment">   On entry to `getopt', zero means this is the first call; initialize.</span>
<a name="l00125"></a>00125 <span class="comment"></span>
<a name="l00126"></a>00126 <span class="comment">   When `getopt' returns -1, this is the index of the first of the</span>
<a name="l00127"></a>00127 <span class="comment">   non-option elements that the caller should itself scan.</span>
<a name="l00128"></a>00128 <span class="comment"></span>
<a name="l00129"></a>00129 <span class="comment">   Otherwise, `optind' communicates from one call to the next</span>
<a name="l00130"></a>00130 <span class="comment">   how much of ARGV has been scanned so far.  */</span>
<a name="l00131"></a>00131 
<a name="l00132"></a>00132 <span class="comment">/* 1003.2 says this must be 1 before any call.  */</span>
<a name="l00133"></a><a class="code" href="TestMasterMicroMod_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">00133</a> <span class="keywordtype">int</span> <a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a> = 1;
<a name="l00134"></a>00134 
<a name="l00135"></a>00135 <span class="comment">/* Formerly, initialization of getopt depended on optind==0, which</span>
<a name="l00136"></a>00136 <span class="comment">   causes problems with re-calling getopt as programs generally don't</span>
<a name="l00137"></a>00137 <span class="comment">   know that. */</span>
<a name="l00138"></a>00138 
<a name="l00139"></a><a class="code" href="TestMasterMicroMod_2getopt_8c.html#28286be757527aeb1db951b5da9aeec1">00139</a> <span class="keywordtype">int</span> <a class="code" href="TestMasterSlave_2getopt_8c.html#28286be757527aeb1db951b5da9aeec1">__getopt_initialized</a>;
<a name="l00140"></a>00140 
<a name="l00141"></a>00141 <span class="comment">/* The next char to be scanned in the option-element</span>
<a name="l00142"></a>00142 <span class="comment">   in which the last option character we returned was found.</span>
<a name="l00143"></a>00143 <span class="comment">   This allows us to pick up the scan where we left off.</span>
<a name="l00144"></a>00144 <span class="comment"></span>
<a name="l00145"></a>00145 <span class="comment">   If this is zero, or a null string, it means resume the scan</span>
<a name="l00146"></a>00146 <span class="comment">   by advancing to the next ARGV-element.  */</span>
<a name="l00147"></a>00147 
<a name="l00148"></a>00148 <span class="keyword">static</span> <span class="keywordtype">char</span> *nextchar;
<a name="l00149"></a>00149 
<a name="l00150"></a>00150 <span class="comment">/* Callers store zero here to inhibit the error message</span>
<a name="l00151"></a>00151 <span class="comment">   for unrecognized options.  */</span>
<a name="l00152"></a>00152 
<a name="l00153"></a><a class="code" href="TestMasterMicroMod_2getopt_8c.html#e30f05ee1e2e5652f174a35c7875d25e">00153</a> <span class="keywordtype">int</span> <a class="code" href="TestMasterSlave_2getopt_8c.html#e30f05ee1e2e5652f174a35c7875d25e">opterr</a> = 1;
<a name="l00154"></a>00154 
<a name="l00155"></a>00155 <span class="comment">/* Set to an option character which was unrecognized.</span>
<a name="l00156"></a>00156 <span class="comment">   This must be initialized on some systems to avoid linking in the</span>
<a name="l00157"></a>00157 <span class="comment">   system's own getopt implementation.  */</span>
<a name="l00158"></a>00158 
<a name="l00159"></a><a class="code" href="TestMasterMicroMod_2getopt_8c.html#475b8db98445da73e5f62a1ef6324b95">00159</a> <span class="keywordtype">int</span> <a class="code" href="TestMasterSlave_2getopt_8c.html#475b8db98445da73e5f62a1ef6324b95">optopt</a> = <span class="charliteral">'?'</span>;
<a name="l00160"></a>00160 
<a name="l00161"></a>00161 <span class="comment">/* Describe how to deal with options that follow non-option ARGV-elements.</span>
<a name="l00162"></a>00162 <span class="comment"></span>
<a name="l00163"></a>00163 <span class="comment">   If the caller did not specify anything,</span>
<a name="l00164"></a>00164 <span class="comment">   the default is REQUIRE_ORDER if the environment variable</span>
<a name="l00165"></a>00165 <span class="comment">   POSIXLY_CORRECT is defined, PERMUTE otherwise.</span>
<a name="l00166"></a>00166 <span class="comment"></span>
<a name="l00167"></a>00167 <span class="comment">   REQUIRE_ORDER means don't recognize them as options;</span>
<a name="l00168"></a>00168 <span class="comment">   stop option processing when the first non-option is seen.</span>
<a name="l00169"></a>00169 <span class="comment">   This is what Unix does.</span>
<a name="l00170"></a>00170 <span class="comment">   This mode of operation is selected by either setting the environment</span>
<a name="l00171"></a>00171 <span class="comment">   variable POSIXLY_CORRECT, or using `+' as the first character</span>
<a name="l00172"></a>00172 <span class="comment">   of the list of option characters.</span>
<a name="l00173"></a>00173 <span class="comment"></span>
<a name="l00174"></a>00174 <span class="comment">   PERMUTE is the default.  We permute the contents of ARGV as we scan,</span>
<a name="l00175"></a>00175 <span class="comment">   so that eventually all the non-options are at the end.  This allows options</span>
<a name="l00176"></a>00176 <span class="comment">   to be given in any order, even with programs that were not written to</span>
<a name="l00177"></a>00177 <span class="comment">   expect this.</span>
<a name="l00178"></a>00178 <span class="comment"></span>
<a name="l00179"></a>00179 <span class="comment">   RETURN_IN_ORDER is an option available to programs that were written</span>
<a name="l00180"></a>00180 <span class="comment">   to expect options and other ARGV-elements in any order and that care about</span>
<a name="l00181"></a>00181 <span class="comment">   the ordering of the two.  We describe each non-option ARGV-element</span>
<a name="l00182"></a>00182 <span class="comment">   as if it were the argument of an option with character code 1.</span>
<a name="l00183"></a>00183 <span class="comment">   Using `-' as the first character of the list of option characters</span>
<a name="l00184"></a>00184 <span class="comment">   selects this mode of operation.</span>
<a name="l00185"></a>00185 <span class="comment"></span>
<a name="l00186"></a>00186 <span class="comment">   The special argument `--' forces an end of option-scanning regardless</span>
<a name="l00187"></a>00187 <span class="comment">   of the value of `ordering'.  In the case of RETURN_IN_ORDER, only</span>
<a name="l00188"></a>00188 <span class="comment">   `--' can cause `getopt' to return -1 with `optind' != ARGC.  */</span>
<a name="l00189"></a>00189 
<a name="l00190"></a>00190 <span class="keyword">static</span> <span class="keyword">enum</span>
<a name="l00191"></a>00191 {
<a name="l00192"></a>00192   <a class="code" href="TestMasterSlave_2getopt_8c.html#06fc87d81c62e9abb8790b6e5713c55b0e73a0691c110b1442d8364d1d12eccc">REQUIRE_ORDER</a>, <a class="code" href="TestMasterSlave_2getopt_8c.html#06fc87d81c62e9abb8790b6e5713c55bcfdde4b47c27f4efbd832e1ac7f8a8fc">PERMUTE</a>, <a class="code" href="TestMasterSlave_2getopt_8c.html#06fc87d81c62e9abb8790b6e5713c55b3c56550bfafe809d9214b863b69c31c5">RETURN_IN_ORDER</a>
<a name="l00193"></a>00193 } ordering;
<a name="l00194"></a>00194 
<a name="l00195"></a>00195 <span class="comment">/* Value of POSIXLY_CORRECT environment variable.  */</span>
<a name="l00196"></a>00196 <span class="keyword">static</span> <span class="keywordtype">char</span> *posixly_correct;
<a name="l00197"></a>00197 
<a name="l00198"></a>00198 <span class="preprocessor">#ifdef  __GNU_LIBRARY__</span>
<a name="l00199"></a>00199 <span class="preprocessor"></span><span class="comment">/* We want to avoid inclusion of string.h with non-GNU libraries</span>
<a name="l00200"></a>00200 <span class="comment">   because there are many ways it can cause trouble.</span>
<a name="l00201"></a>00201 <span class="comment">   On some systems, it contains special magic macros that don't work</span>
<a name="l00202"></a>00202 <span class="comment">   in GCC.  */</span>
<a name="l00203"></a>00203 <span class="preprocessor"># include &lt;string.h&gt;</span>
<a name="l00204"></a>00204 <span class="preprocessor"># define my_index       strchr</span>
<a name="l00205"></a>00205 <span class="preprocessor"></span><span class="preprocessor">#else</span>
<a name="l00206"></a>00206 <span class="preprocessor"></span>
<a name="l00207"></a>00207 <span class="preprocessor"># if HAVE_STRING_H || WIN32 </span><span class="comment">/* Pete Wilson mod 7/28/02 */</span>
<a name="l00208"></a>00208 <span class="preprocessor">#  include &lt;string.h&gt;</span>
<a name="l00209"></a>00209 <span class="preprocessor"># else</span>
<a name="l00210"></a>00210 <span class="preprocessor"></span><span class="preprocessor">#  include &lt;strings.h&gt;</span>
<a name="l00211"></a>00211 <span class="preprocessor"># endif</span>
<a name="l00212"></a>00212 <span class="preprocessor"></span>
<a name="l00213"></a>00213 <span class="comment">/* Avoid depending on library functions or files</span>
<a name="l00214"></a>00214 <span class="comment">   whose names are inconsistent.  */</span>
<a name="l00215"></a>00215 
<a name="l00216"></a>00216 <span class="preprocessor">#ifndef getenv</span>
<a name="l00217"></a>00217 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">char</span> *<a class="code" href="TestMasterSlave_2getopt_8c.html#ee28fd8a0e40b6d958f7d20348e45368">getenv</a> ();
<a name="l00218"></a>00218 <span class="preprocessor">#endif</span>
<a name="l00219"></a>00219 <span class="preprocessor"></span>
<a name="l00220"></a>00220 <span class="keyword">static</span> <span class="keywordtype">char</span> *
<a name="l00221"></a>00221 my_index (str, chr)
<a name="l00222"></a>00222      const <span class="keywordtype">char</span> *str;
<a name="l00223"></a>00223      <span class="keywordtype">int</span> chr;
<a name="l00224"></a>00224 {
<a name="l00225"></a>00225   <span class="keywordflow">while</span> (*str)
<a name="l00226"></a>00226     {
<a name="l00227"></a>00227       <span class="keywordflow">if</span> (*str == chr)
<a name="l00228"></a>00228         <span class="keywordflow">return</span> (<span class="keywordtype">char</span> *) str;
<a name="l00229"></a>00229       str++;
<a name="l00230"></a>00230     }
<a name="l00231"></a>00231   <span class="keywordflow">return</span> 0;
<a name="l00232"></a>00232 }
<a name="l00233"></a>00233 
<a name="l00234"></a>00234 <span class="comment">/* If using GCC, we can safely declare strlen this way.</span>
<a name="l00235"></a>00235 <span class="comment">   If not using GCC, it is ok not to declare it.  */</span>
<a name="l00236"></a>00236 <span class="preprocessor">#ifdef __GNUC__</span>
<a name="l00237"></a>00237 <span class="preprocessor"></span><span class="comment">/* Note that Motorola Delta 68k R3V7 comes with GCC but not stddef.h.</span>
<a name="l00238"></a>00238 <span class="comment">   That was relevant to code that was here before.  */</span>
<a name="l00239"></a>00239 <span class="preprocessor"># if (!defined __STDC__ || !__STDC__) &amp;&amp; !defined strlen</span>
<a name="l00240"></a>00240 <span class="preprocessor"></span><span class="comment">/* gcc with -traditional declares the built-in strlen to return int,</span>
<a name="l00241"></a>00241 <span class="comment">   and has done so at least since version 2.4.5. -- rms.  */</span>
<a name="l00242"></a>00242 <span class="keyword">extern</span> <span class="keywordtype">int</span> strlen (<span class="keyword">const</span> <span class="keywordtype">char</span> *);
<a name="l00243"></a>00243 <span class="preprocessor"># endif </span><span class="comment">/* not __STDC__ */</span>
<a name="l00244"></a>00244 <span class="preprocessor">#endif </span><span class="comment">/* __GNUC__ */</span>
<a name="l00245"></a>00245 
<a name="l00246"></a>00246 <span class="preprocessor">#endif </span><span class="comment">/* not __GNU_LIBRARY__ */</span>
<a name="l00247"></a>00247 
<a name="l00248"></a>00248 <span class="comment">/* Handle permutation of arguments.  */</span>
<a name="l00249"></a>00249 
<a name="l00250"></a>00250 <span class="comment">/* Describe the part of ARGV that contains non-options that have</span>
<a name="l00251"></a>00251 <span class="comment">   been skipped.  `first_nonopt' is the index in ARGV of the first of them;</span>
<a name="l00252"></a>00252 <span class="comment">   `last_nonopt' is the index after the last of them.  */</span>
<a name="l00253"></a>00253 
<a name="l00254"></a>00254 <span class="keyword">static</span> <span class="keywordtype">int</span> first_nonopt;
<a name="l00255"></a>00255 <span class="keyword">static</span> <span class="keywordtype">int</span> last_nonopt;
<a name="l00256"></a>00256 
<a name="l00257"></a>00257 <span class="preprocessor">#ifdef _LIBC</span>
<a name="l00258"></a>00258 <span class="preprocessor"></span><span class="comment">/* Stored original parameters.</span>
<a name="l00259"></a>00259 <span class="comment">   XXX This is no good solution.  We should rather copy the args so</span>
<a name="l00260"></a>00260 <span class="comment">   that we can compare them later.  But we must not use malloc(3).  */</span>
<a name="l00261"></a>00261 <span class="keyword">extern</span> <span class="keywordtype">int</span> __libc_argc;
<a name="l00262"></a>00262 <span class="keyword">extern</span> <span class="keywordtype">char</span> **__libc_argv;
<a name="l00263"></a>00263 
<a name="l00264"></a>00264 <span class="comment">/* Bash 2.0 gives us an environment variable containing flags</span>
<a name="l00265"></a>00265 <span class="comment">   indicating ARGV elements that should not be considered arguments.  */</span>
<a name="l00266"></a>00266 
<a name="l00267"></a>00267 <span class="preprocessor"># ifdef USE_NONOPTION_FLAGS</span>
<a name="l00268"></a>00268 <span class="preprocessor"></span><span class="comment">/* Defined in getopt_init.c  */</span>
<a name="l00269"></a>00269 <span class="keyword">extern</span> <span class="keywordtype">char</span> *__getopt_nonoption_flags;
<a name="l00270"></a>00270 
<a name="l00271"></a>00271 <span class="keyword">static</span> <span class="keywordtype">int</span> nonoption_flags_max_len;
<a name="l00272"></a>00272 <span class="keyword">static</span> <span class="keywordtype">int</span> nonoption_flags_len;
<a name="l00273"></a>00273 <span class="preprocessor"># endif</span>
<a name="l00274"></a>00274 <span class="preprocessor"></span>
<a name="l00275"></a>00275 <span class="preprocessor"># ifdef USE_NONOPTION_FLAGS</span>
<a name="l00276"></a>00276 <span class="preprocessor"></span><span class="preprocessor">#  define SWAP_FLAGS(ch1, ch2) \</span>
<a name="l00277"></a>00277 <span class="preprocessor">  if (nonoption_flags_len &gt; 0)                                                \</span>
<a name="l00278"></a>00278 <span class="preprocessor">    {                                                                         \</span>
<a name="l00279"></a>00279 <span class="preprocessor">      char __tmp = __getopt_nonoption_flags[ch1];                             \</span>
<a name="l00280"></a>00280 <span class="preprocessor">      __getopt_nonoption_flags[ch1] = __getopt_nonoption_flags[ch2];          \</span>
<a name="l00281"></a>00281 <span class="preprocessor">      __getopt_nonoption_flags[ch2] = __tmp;                                  \</span>
<a name="l00282"></a>00282 <span class="preprocessor">    }</span>
<a name="l00283"></a>00283 <span class="preprocessor"></span><span class="preprocessor"># else</span>
<a name="l00284"></a>00284 <span class="preprocessor"></span><span class="preprocessor">#  define SWAP_FLAGS(ch1, ch2)</span>
<a name="l00285"></a>00285 <span class="preprocessor"></span><span class="preprocessor"># endif</span>
<a name="l00286"></a>00286 <span class="preprocessor"></span><span class="preprocessor">#else   </span><span class="comment">/* !_LIBC */</span>
<a name="l00287"></a><a class="code" href="TestMasterMicroMod_2getopt_8c.html#6e06e56c5fa96faaf47f3b231e015e35">00287</a> <span class="preprocessor"># define SWAP_FLAGS(ch1, ch2)</span>
<a name="l00288"></a>00288 <span class="preprocessor"></span><span class="preprocessor">#endif  </span><span class="comment">/* _LIBC */</span>
<a name="l00289"></a>00289 
<a name="l00290"></a>00290 <span class="comment">/* Exchange two adjacent subsequences of ARGV.</span>
<a name="l00291"></a>00291 <span class="comment">   One subsequence is elements [first_nonopt,last_nonopt)</span>
<a name="l00292"></a>00292 <span class="comment">   which contains all the non-options that have been skipped so far.</span>
<a name="l00293"></a>00293 <span class="comment">   The other is elements [last_nonopt,optind), which contains all</span>
<a name="l00294"></a>00294 <span class="comment">   the options processed since those non-options were skipped.</span>
<a name="l00295"></a>00295 <span class="comment"></span>
<a name="l00296"></a>00296 <span class="comment">   `first_nonopt' and `last_nonopt' are relocated so that they describe</span>
<a name="l00297"></a>00297 <span class="comment">   the new indices of the non-options in ARGV after they are moved.  */</span>
<a name="l00298"></a>00298 
<a name="l00299"></a>00299 <span class="preprocessor">#if defined __STDC__ &amp;&amp; __STDC__</span>
<a name="l00300"></a>00300 <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">void</span> exchange (<span class="keywordtype">char</span> **);
<a name="l00301"></a>00301 <span class="preprocessor">#endif</span>
<a name="l00302"></a>00302 <span class="preprocessor"></span>
<a name="l00303"></a>00303 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l00304"></a>00304 exchange (argv)
<a name="l00305"></a>00305      char **argv;
<a name="l00306"></a>00306 {
<a name="l00307"></a>00307   <span class="keywordtype">int</span> bottom = first_nonopt;
<a name="l00308"></a>00308   <span class="keywordtype">int</span> middle = last_nonopt;
<a name="l00309"></a>00309   <span class="keywordtype">int</span> top = <a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>;
<a name="l00310"></a>00310   <span class="keywordtype">char</span> *tem;
<a name="l00311"></a>00311 
<a name="l00312"></a>00312   <span class="comment">/* Exchange the shorter segment with the far end of the longer segment.</span>
<a name="l00313"></a>00313 <span class="comment">     That puts the shorter segment into the right place.</span>
<a name="l00314"></a>00314 <span class="comment">     It leaves the longer segment in the right place overall,</span>
<a name="l00315"></a>00315 <span class="comment">     but it consists of two parts that need to be swapped next.  */</span>
<a name="l00316"></a>00316 
<a name="l00317"></a>00317 <span class="preprocessor">#if defined _LIBC &amp;&amp; defined USE_NONOPTION_FLAGS</span>
<a name="l00318"></a>00318 <span class="preprocessor"></span>  <span class="comment">/* First make sure the handling of the `__getopt_nonoption_flags'</span>
<a name="l00319"></a>00319 <span class="comment">     string can work normally.  Our top argument must be in the range</span>
<a name="l00320"></a>00320 <span class="comment">     of the string.  */</span>
<a name="l00321"></a>00321   <span class="keywordflow">if</span> (nonoption_flags_len &gt; 0 &amp;&amp; top &gt;= nonoption_flags_max_len)
<a name="l00322"></a>00322     {
<a name="l00323"></a>00323       <span class="comment">/* We must extend the array.  The user plays games with us and</span>
<a name="l00324"></a>00324 <span class="comment">         presents new arguments.  */</span>
<a name="l00325"></a>00325       <span class="keywordtype">char</span> *new_str = malloc (top + 1);
<a name="l00326"></a>00326       <span class="keywordflow">if</span> (new_str == NULL)
<a name="l00327"></a>00327         nonoption_flags_len = nonoption_flags_max_len = 0;
<a name="l00328"></a>00328       <span class="keywordflow">else</span>
<a name="l00329"></a>00329         {
<a name="l00330"></a>00330           memset (__mempcpy (new_str, __getopt_nonoption_flags,
<a name="l00331"></a>00331                              nonoption_flags_max_len),
<a name="l00332"></a>00332                   <span class="charliteral">'\0'</span>, top + 1 - nonoption_flags_max_len);
<a name="l00333"></a>00333           nonoption_flags_max_len = top + 1;
<a name="l00334"></a>00334           __getopt_nonoption_flags = new_str;
<a name="l00335"></a>00335         }
<a name="l00336"></a>00336     }
<a name="l00337"></a>00337 <span class="preprocessor">#endif</span>
<a name="l00338"></a>00338 <span class="preprocessor"></span>
<a name="l00339"></a>00339   <span class="keywordflow">while</span> (top &gt; middle &amp;&amp; middle &gt; bottom)
<a name="l00340"></a>00340     {
<a name="l00341"></a>00341       <span class="keywordflow">if</span> (top - middle &gt; middle - bottom)
<a name="l00342"></a>00342         {
<a name="l00343"></a>00343           <span class="comment">/* Bottom segment is the short one.  */</span>
<a name="l00344"></a>00344           <span class="keywordtype">int</span> len = middle - bottom;
<a name="l00345"></a>00345           <span class="keyword">register</span> <span class="keywordtype">int</span> i;
<a name="l00346"></a>00346 
<a name="l00347"></a>00347           <span class="comment">/* Swap it with the top part of the top segment.  */</span>
<a name="l00348"></a>00348           <span class="keywordflow">for</span> (i = 0; i &lt; len; i++)
<a name="l00349"></a>00349             {
<a name="l00350"></a>00350               tem = argv[bottom + i];
<a name="l00351"></a>00351               argv[bottom + i] = argv[top - (middle - bottom) + i];
<a name="l00352"></a>00352               argv[top - (middle - bottom) + i] = tem;
<a name="l00353"></a>00353               <a class="code" href="TestMasterSlave_2getopt_8c.html#6e06e56c5fa96faaf47f3b231e015e35">SWAP_FLAGS</a> (bottom + i, top - (middle - bottom) + i);
<a name="l00354"></a>00354             }
<a name="l00355"></a>00355           <span class="comment">/* Exclude the moved bottom segment from further swapping.  */</span>
<a name="l00356"></a>00356           top -= len;
<a name="l00357"></a>00357         }
<a name="l00358"></a>00358       <span class="keywordflow">else</span>
<a name="l00359"></a>00359         {
<a name="l00360"></a>00360           <span class="comment">/* Top segment is the short one.  */</span>
<a name="l00361"></a>00361           <span class="keywordtype">int</span> len = top - middle;
<a name="l00362"></a>00362           <span class="keyword">register</span> <span class="keywordtype">int</span> i;
<a name="l00363"></a>00363 
<a name="l00364"></a>00364           <span class="comment">/* Swap it with the bottom part of the bottom segment.  */</span>
<a name="l00365"></a>00365           <span class="keywordflow">for</span> (i = 0; i &lt; len; i++)
<a name="l00366"></a>00366             {
<a name="l00367"></a>00367               tem = argv[bottom + i];
<a name="l00368"></a>00368               argv[bottom + i] = argv[middle + i];
<a name="l00369"></a>00369               argv[middle + i] = tem;
<a name="l00370"></a>00370               <a class="code" href="TestMasterSlave_2getopt_8c.html#6e06e56c5fa96faaf47f3b231e015e35">SWAP_FLAGS</a> (bottom + i, middle + i);
<a name="l00371"></a>00371             }
<a name="l00372"></a>00372           <span class="comment">/* Exclude the moved top segment from further swapping.  */</span>
<a name="l00373"></a>00373           bottom += len;
<a name="l00374"></a>00374         }
<a name="l00375"></a>00375     }
<a name="l00376"></a>00376 
<a name="l00377"></a>00377   <span class="comment">/* Update records for the slots the non-options now occupy.  */</span>
<a name="l00378"></a>00378 
<a name="l00379"></a>00379   first_nonopt += (<a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a> - last_nonopt);
<a name="l00380"></a>00380   last_nonopt = <a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>;
<a name="l00381"></a>00381 }
<a name="l00382"></a>00382 
<a name="l00383"></a>00383 <span class="comment">/* Initialize the internal data when the first call is made.  */</span>
<a name="l00384"></a>00384 
<a name="l00385"></a>00385 <span class="preprocessor">#if defined __STDC__ &amp;&amp; __STDC__</span>
<a name="l00386"></a>00386 <span class="preprocessor"></span><span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *_getopt_initialize (<span class="keywordtype">int</span>, <span class="keywordtype">char</span> *<span class="keyword">const</span> *, <span class="keyword">const</span> <span class="keywordtype">char</span> *);
<a name="l00387"></a>00387 <span class="preprocessor">#endif</span>
<a name="l00388"></a>00388 <span class="preprocessor"></span><span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *
<a name="l00389"></a>00389 _getopt_initialize (argc, argv, optstring)
<a name="l00390"></a>00390      int argc;
<a name="l00391"></a>00391      <span class="keywordtype">char</span> *const *argv;
<a name="l00392"></a>00392      const <span class="keywordtype">char</span> *optstring;
<a name="l00393"></a>00393 {
<a name="l00394"></a>00394   <span class="comment">/* Start processing options with ARGV-element 1 (since ARGV-element 0</span>
<a name="l00395"></a>00395 <span class="comment">     is the program name); the sequence of previously skipped</span>
<a name="l00396"></a>00396 <span class="comment">     non-option ARGV-elements is empty.  */</span>
<a name="l00397"></a>00397 
<a name="l00398"></a>00398   first_nonopt = last_nonopt = <a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>;
<a name="l00399"></a>00399 
<a name="l00400"></a>00400   nextchar = NULL;
<a name="l00401"></a>00401 
<a name="l00402"></a>00402   posixly_correct = <a class="code" href="TestMasterSlave_2getopt_8c.html#ee28fd8a0e40b6d958f7d20348e45368">getenv</a> (<span class="stringliteral">"POSIXLY_CORRECT"</span>);
<a name="l00403"></a>00403 
<a name="l00404"></a>00404   <span class="comment">/* Determine how to handle the ordering of options and nonoptions.  */</span>
<a name="l00405"></a>00405 
<a name="l00406"></a>00406   <span class="keywordflow">if</span> (optstring[0] == <span class="charliteral">'-'</span>)
<a name="l00407"></a>00407     {
<a name="l00408"></a>00408       ordering = <a class="code" href="TestMasterSlave_2getopt_8c.html#06fc87d81c62e9abb8790b6e5713c55b3c56550bfafe809d9214b863b69c31c5">RETURN_IN_ORDER</a>;
<a name="l00409"></a>00409       ++optstring;
<a name="l00410"></a>00410     }
<a name="l00411"></a>00411   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (optstring[0] == <span class="charliteral">'+'</span>)
<a name="l00412"></a>00412     {
<a name="l00413"></a>00413       ordering = <a class="code" href="TestMasterSlave_2getopt_8c.html#06fc87d81c62e9abb8790b6e5713c55b0e73a0691c110b1442d8364d1d12eccc">REQUIRE_ORDER</a>;
<a name="l00414"></a>00414       ++optstring;
<a name="l00415"></a>00415     }
<a name="l00416"></a>00416   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (posixly_correct != NULL)
<a name="l00417"></a>00417     ordering = <a class="code" href="TestMasterSlave_2getopt_8c.html#06fc87d81c62e9abb8790b6e5713c55b0e73a0691c110b1442d8364d1d12eccc">REQUIRE_ORDER</a>;
<a name="l00418"></a>00418   <span class="keywordflow">else</span>
<a name="l00419"></a>00419     ordering = <a class="code" href="TestMasterSlave_2getopt_8c.html#06fc87d81c62e9abb8790b6e5713c55bcfdde4b47c27f4efbd832e1ac7f8a8fc">PERMUTE</a>;
<a name="l00420"></a>00420 
<a name="l00421"></a>00421 <span class="preprocessor">#if defined _LIBC &amp;&amp; defined USE_NONOPTION_FLAGS</span>
<a name="l00422"></a>00422 <span class="preprocessor"></span>  <span class="keywordflow">if</span> (posixly_correct == NULL
<a name="l00423"></a>00423       &amp;&amp; argc == __libc_argc &amp;&amp; argv == __libc_argv)
<a name="l00424"></a>00424     {
<a name="l00425"></a>00425       <span class="keywordflow">if</span> (nonoption_flags_max_len == 0)
<a name="l00426"></a>00426         {
<a name="l00427"></a>00427           <span class="keywordflow">if</span> (__getopt_nonoption_flags == NULL
<a name="l00428"></a>00428               || __getopt_nonoption_flags[0] == <span class="charliteral">'\0'</span>)
<a name="l00429"></a>00429             nonoption_flags_max_len = -1;
<a name="l00430"></a>00430           <span class="keywordflow">else</span>
<a name="l00431"></a>00431             {
<a name="l00432"></a>00432               <span class="keyword">const</span> <span class="keywordtype">char</span> *orig_str = __getopt_nonoption_flags;
<a name="l00433"></a>00433               <span class="keywordtype">int</span> len = nonoption_flags_max_len = strlen (orig_str);
<a name="l00434"></a>00434               <span class="keywordflow">if</span> (nonoption_flags_max_len &lt; argc)
<a name="l00435"></a>00435                 nonoption_flags_max_len = argc;
<a name="l00436"></a>00436               __getopt_nonoption_flags =
<a name="l00437"></a>00437                 (<span class="keywordtype">char</span> *) malloc (nonoption_flags_max_len);
<a name="l00438"></a>00438               <span class="keywordflow">if</span> (__getopt_nonoption_flags == NULL)
<a name="l00439"></a>00439                 nonoption_flags_max_len = -1;
<a name="l00440"></a>00440               <span class="keywordflow">else</span>
<a name="l00441"></a>00441                 memset (__mempcpy (__getopt_nonoption_flags, orig_str, len),
<a name="l00442"></a>00442                         <span class="charliteral">'\0'</span>, nonoption_flags_max_len - len);
<a name="l00443"></a>00443             }
<a name="l00444"></a>00444         }
<a name="l00445"></a>00445       nonoption_flags_len = nonoption_flags_max_len;
<a name="l00446"></a>00446     }
<a name="l00447"></a>00447   <span class="keywordflow">else</span>
<a name="l00448"></a>00448     nonoption_flags_len = 0;
<a name="l00449"></a>00449 <span class="preprocessor">#endif</span>
<a name="l00450"></a>00450 <span class="preprocessor"></span>
<a name="l00451"></a>00451   <span class="keywordflow">return</span> optstring;
<a name="l00452"></a>00452 }
<a name="l00453"></a>00453 
<a name="l00454"></a>00454 <span class="comment">/* Scan elements of ARGV (whose length is ARGC) for option characters</span>
<a name="l00455"></a>00455 <span class="comment">   given in OPTSTRING.</span>
<a name="l00456"></a>00456 <span class="comment"></span>
<a name="l00457"></a>00457 <span class="comment">   If an element of ARGV starts with '-', and is not exactly "-" or "--",</span>
<a name="l00458"></a>00458 <span class="comment">   then it is an option element.  The characters of this element</span>
<a name="l00459"></a>00459 <span class="comment">   (aside from the initial '-') are option characters.  If `getopt'</span>
<a name="l00460"></a>00460 <span class="comment">   is called repeatedly, it returns successively each of the option characters</span>
<a name="l00461"></a>00461 <span class="comment">   from each of the option elements.</span>
<a name="l00462"></a>00462 <span class="comment"></span>
<a name="l00463"></a>00463 <span class="comment">   If `getopt' finds another option character, it returns that character,</span>
<a name="l00464"></a>00464 <span class="comment">   updating `optind' and `nextchar' so that the next call to `getopt' can</span>
<a name="l00465"></a>00465 <span class="comment">   resume the scan with the following option character or ARGV-element.</span>
<a name="l00466"></a>00466 <span class="comment"></span>
<a name="l00467"></a>00467 <span class="comment">   If there are no more option characters, `getopt' returns -1.</span>
<a name="l00468"></a>00468 <span class="comment">   Then `optind' is the index in ARGV of the first ARGV-element</span>
<a name="l00469"></a>00469 <span class="comment">   that is not an option.  (The ARGV-elements have been permuted</span>
<a name="l00470"></a>00470 <span class="comment">   so that those that are not options now come last.)</span>
<a name="l00471"></a>00471 <span class="comment"></span>
<a name="l00472"></a>00472 <span class="comment">   OPTSTRING is a string containing the legitimate option characters.</span>
<a name="l00473"></a>00473 <span class="comment">   If an option character is seen that is not listed in OPTSTRING,</span>
<a name="l00474"></a>00474 <span class="comment">   return '?' after printing an error message.  If you set `opterr' to</span>
<a name="l00475"></a>00475 <span class="comment">   zero, the error message is suppressed but we still return '?'.</span>
<a name="l00476"></a>00476 <span class="comment"></span>
<a name="l00477"></a>00477 <span class="comment">   If a char in OPTSTRING is followed by a colon, that means it wants an arg,</span>
<a name="l00478"></a>00478 <span class="comment">   so the following text in the same ARGV-element, or the text of the following</span>
<a name="l00479"></a>00479 <span class="comment">   ARGV-element, is returned in `optarg'.  Two colons mean an option that</span>
<a name="l00480"></a>00480 <span class="comment">   wants an optional arg; if there is text in the current ARGV-element,</span>
<a name="l00481"></a>00481 <span class="comment">   it is returned in `optarg', otherwise `optarg' is set to zero.</span>
<a name="l00482"></a>00482 <span class="comment"></span>
<a name="l00483"></a>00483 <span class="comment">   If OPTSTRING starts with `-' or `+', it requests different methods of</span>
<a name="l00484"></a>00484 <span class="comment">   handling the non-option ARGV-elements.</span>
<a name="l00485"></a>00485 <span class="comment">   See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above.</span>
<a name="l00486"></a>00486 <span class="comment"></span>
<a name="l00487"></a>00487 <span class="comment">   Long-named options begin with `--' instead of `-'.</span>
<a name="l00488"></a>00488 <span class="comment">   Their names may be abbreviated as long as the abbreviation is unique</span>
<a name="l00489"></a>00489 <span class="comment">   or is an exact match for some defined option.  If they have an</span>
<a name="l00490"></a>00490 <span class="comment">   argument, it follows the option name in the same ARGV-element, separated</span>
<a name="l00491"></a>00491 <span class="comment">   from the option name by a `=', or else the in next ARGV-element.</span>
<a name="l00492"></a>00492 <span class="comment">   When `getopt' finds a long-named option, it returns 0 if that option's</span>
<a name="l00493"></a>00493 <span class="comment">   `flag' field is nonzero, the value of the option's `val' field</span>
<a name="l00494"></a>00494 <span class="comment">   if the `flag' field is zero.</span>
<a name="l00495"></a>00495 <span class="comment"></span>
<a name="l00496"></a>00496 <span class="comment">   The elements of ARGV aren't really const, because we permute them.</span>
<a name="l00497"></a>00497 <span class="comment">   But we pretend they're const in the prototype to be compatible</span>
<a name="l00498"></a>00498 <span class="comment">   with other systems.</span>
<a name="l00499"></a>00499 <span class="comment"></span>
<a name="l00500"></a>00500 <span class="comment">   LONGOPTS is a vector of `struct option' terminated by an</span>
<a name="l00501"></a>00501 <span class="comment">   element containing a name which is zero.</span>
<a name="l00502"></a>00502 <span class="comment"></span>
<a name="l00503"></a>00503 <span class="comment">   LONGIND returns the index in LONGOPT of the long-named option found.</span>
<a name="l00504"></a>00504 <span class="comment">   It is only valid when a long-named option has been found by the most</span>
<a name="l00505"></a>00505 <span class="comment">   recent call.</span>
<a name="l00506"></a>00506 <span class="comment"></span>
<a name="l00507"></a>00507 <span class="comment">   If LONG_ONLY is nonzero, '-' as well as '--' can introduce</span>
<a name="l00508"></a>00508 <span class="comment">   long-named options.  */</span>
<a name="l00509"></a>00509 
<a name="l00510"></a>00510 <span class="keywordtype">int</span>
<a name="l00511"></a><a class="code" href="TestMasterMicroMod_2getopt_8c.html#0df92a0ae8fe1fd43268c738f548674f">00511</a> <a class="code" href="TestMasterSlave_2getopt_8c.html#0df92a0ae8fe1fd43268c738f548674f">_getopt_internal</a> (argc, argv, optstring, longopts, longind, long_only)
<a name="l00512"></a>00512      int argc;
<a name="l00513"></a>00513      <span class="keywordtype">char</span> *const *argv;
<a name="l00514"></a>00514      const <span class="keywordtype">char</span> *optstring;
<a name="l00515"></a>00515      const struct <a class="code" href="structoption.html">option</a> *longopts;
<a name="l00516"></a>00516      <span class="keywordtype">int</span> *longind;
<a name="l00517"></a>00517      <span class="keywordtype">int</span> long_only;
<a name="l00518"></a>00518 {
<a name="l00519"></a>00519   <span class="keywordtype">int</span> print_errors = <a class="code" href="TestMasterSlave_2getopt_8c.html#e30f05ee1e2e5652f174a35c7875d25e">opterr</a>;
<a name="l00520"></a>00520   <span class="keywordflow">if</span> (optstring[0] == <span class="charliteral">':'</span>)
<a name="l00521"></a>00521     print_errors = 0;
<a name="l00522"></a>00522 
<a name="l00523"></a>00523   <span class="keywordflow">if</span> (argc &lt; 1)
<a name="l00524"></a>00524     <span class="keywordflow">return</span> -1;
<a name="l00525"></a>00525 
<a name="l00526"></a>00526   <a class="code" href="TestMasterSlave_2getopt_8c.html#db50a0eab9fed92fc3bfc7dfa4f2c410">optarg</a> = NULL;
<a name="l00527"></a>00527 
<a name="l00528"></a>00528   <span class="keywordflow">if</span> (<a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a> == 0 || !<a class="code" href="TestMasterSlave_2getopt_8c.html#28286be757527aeb1db951b5da9aeec1">__getopt_initialized</a>)
<a name="l00529"></a>00529     {
<a name="l00530"></a>00530       <span class="keywordflow">if</span> (<a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a> == 0)
<a name="l00531"></a>00531         <a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a> = 1;     <span class="comment">/* Don't scan ARGV[0], the program name.  */</span>
<a name="l00532"></a>00532       optstring = _getopt_initialize (argc, argv, optstring);
<a name="l00533"></a>00533       <a class="code" href="TestMasterSlave_2getopt_8c.html#28286be757527aeb1db951b5da9aeec1">__getopt_initialized</a> = 1;
<a name="l00534"></a>00534     }
<a name="l00535"></a>00535 
<a name="l00536"></a>00536   <span class="comment">/* Test whether ARGV[optind] points to a non-option argument.</span>
<a name="l00537"></a>00537 <span class="comment">     Either it does not have option syntax, or there is an environment flag</span>
<a name="l00538"></a>00538 <span class="comment">     from the shell indicating it is not an option.  The later information</span>
<a name="l00539"></a>00539 <span class="comment">     is only used when the used in the GNU libc.  */</span>
<a name="l00540"></a>00540 <span class="preprocessor">#if defined _LIBC &amp;&amp; defined USE_NONOPTION_FLAGS</span>
<a name="l00541"></a>00541 <span class="preprocessor"></span><span class="preprocessor"># define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0'       \</span>
<a name="l00542"></a>00542 <span class="preprocessor">                      || (optind &lt; nonoption_flags_len                        \</span>
<a name="l00543"></a>00543 <span class="preprocessor">                          &amp;&amp; __getopt_nonoption_flags[optind] == '1'))</span>
<a name="l00544"></a>00544 <span class="preprocessor"></span><span class="preprocessor">#else</span>
<a name="l00545"></a>00545 <span class="preprocessor"></span><span class="preprocessor"># define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0')</span>
<a name="l00546"></a>00546 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00547"></a>00547 <span class="preprocessor"></span>
<a name="l00548"></a>00548   <span class="keywordflow">if</span> (nextchar == NULL || *nextchar == <span class="charliteral">'\0'</span>)
<a name="l00549"></a>00549     {
<a name="l00550"></a>00550       <span class="comment">/* Advance to the next ARGV-element.  */</span>
<a name="l00551"></a>00551 
<a name="l00552"></a>00552       <span class="comment">/* Give FIRST_NONOPT and LAST_NONOPT rational values if OPTIND has been</span>
<a name="l00553"></a>00553 <span class="comment">         moved back by the user (who may also have changed the arguments).  */</span>
<a name="l00554"></a>00554       <span class="keywordflow">if</span> (last_nonopt &gt; <a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>)
<a name="l00555"></a>00555         last_nonopt = <a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>;
<a name="l00556"></a>00556       <span class="keywordflow">if</span> (first_nonopt &gt; <a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>)
<a name="l00557"></a>00557         first_nonopt = <a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>;
<a name="l00558"></a>00558 
<a name="l00559"></a>00559       <span class="keywordflow">if</span> (ordering == <a class="code" href="TestMasterSlave_2getopt_8c.html#06fc87d81c62e9abb8790b6e5713c55bcfdde4b47c27f4efbd832e1ac7f8a8fc">PERMUTE</a>)
<a name="l00560"></a>00560         {
<a name="l00561"></a>00561           <span class="comment">/* If we have just processed some options following some non-options,</span>
<a name="l00562"></a>00562 <span class="comment">             exchange them so that the options come first.  */</span>
<a name="l00563"></a>00563 
<a name="l00564"></a>00564           <span class="keywordflow">if</span> (first_nonopt != last_nonopt &amp;&amp; last_nonopt != <a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>)
<a name="l00565"></a>00565             exchange ((<span class="keywordtype">char</span> **) argv);
<a name="l00566"></a>00566           <span class="keywordflow">else</span> <span class="keywordflow">if</span> (last_nonopt != <a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>)
<a name="l00567"></a>00567             first_nonopt = <a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>;
<a name="l00568"></a>00568 
<a name="l00569"></a>00569           <span class="comment">/* Skip any additional non-options</span>
<a name="l00570"></a>00570 <span class="comment">             and extend the range of non-options previously skipped.  */</span>
<a name="l00571"></a>00571 
<a name="l00572"></a>00572           <span class="keywordflow">while</span> (<a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a> &lt; argc &amp;&amp; <a class="code" href="TestMasterSlave_2getopt_8c.html#71ceb8911d64b39b402041ba5ea8453c">NONOPTION_P</a>)
<a name="l00573"></a>00573             <a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>++;
<a name="l00574"></a>00574           last_nonopt = <a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>;
<a name="l00575"></a>00575         }
<a name="l00576"></a>00576 
<a name="l00577"></a>00577       <span class="comment">/* The special ARGV-element `--' means premature end of options.</span>
<a name="l00578"></a>00578 <span class="comment">         Skip it like a null option,</span>
<a name="l00579"></a>00579 <span class="comment">         then exchange with previous non-options as if it were an option,</span>
<a name="l00580"></a>00580 <span class="comment">         then skip everything else like a non-option.  */</span>
<a name="l00581"></a>00581 
<a name="l00582"></a>00582       <span class="keywordflow">if</span> (<a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a> != argc &amp;&amp; !strcmp (argv[<a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>], <span class="stringliteral">"--"</span>))
<a name="l00583"></a>00583         {
<a name="l00584"></a>00584           optind++;
<a name="l00585"></a>00585 
<a name="l00586"></a>00586           <span class="keywordflow">if</span> (first_nonopt != last_nonopt &amp;&amp; last_nonopt != optind)
<a name="l00587"></a>00587             exchange ((<span class="keywordtype">char</span> **) argv);
<a name="l00588"></a>00588           <span class="keywordflow">else</span> <span class="keywordflow">if</span> (first_nonopt == last_nonopt)
<a name="l00589"></a>00589             first_nonopt = optind;
<a name="l00590"></a>00590           last_nonopt = argc;
<a name="l00591"></a>00591 
<a name="l00592"></a>00592           optind = argc;
<a name="l00593"></a>00593         }
<a name="l00594"></a>00594 
<a name="l00595"></a>00595       <span class="comment">/* If we have done all the ARGV-elements, stop the scan</span>
<a name="l00596"></a>00596 <span class="comment">         and back over any non-options that we skipped and permuted.  */</span>
<a name="l00597"></a>00597 
<a name="l00598"></a>00598       <span class="keywordflow">if</span> (optind == argc)
<a name="l00599"></a>00599         {
<a name="l00600"></a>00600           <span class="comment">/* Set the next-arg-index to point at the non-options</span>
<a name="l00601"></a>00601 <span class="comment">             that we previously skipped, so the caller will digest them.  */</span>
<a name="l00602"></a>00602           <span class="keywordflow">if</span> (first_nonopt != last_nonopt)
<a name="l00603"></a>00603             optind = first_nonopt;
<a name="l00604"></a>00604           <span class="keywordflow">return</span> -1;
<a name="l00605"></a>00605         }
<a name="l00606"></a>00606 
<a name="l00607"></a>00607       <span class="comment">/* If we have come to a non-option and did not permute it,</span>
<a name="l00608"></a>00608 <span class="comment">         either stop the scan or describe it to the caller and pass it by.  */</span>
<a name="l00609"></a>00609 
<a name="l00610"></a>00610       <span class="keywordflow">if</span> (<a class="code" href="TestMasterSlave_2getopt_8c.html#71ceb8911d64b39b402041ba5ea8453c">NONOPTION_P</a>)
<a name="l00611"></a>00611         {
<a name="l00612"></a>00612           <span class="keywordflow">if</span> (ordering == <a class="code" href="TestMasterSlave_2getopt_8c.html#06fc87d81c62e9abb8790b6e5713c55b0e73a0691c110b1442d8364d1d12eccc">REQUIRE_ORDER</a>)
<a name="l00613"></a>00613             <span class="keywordflow">return</span> -1;
<a name="l00614"></a>00614           <a class="code" href="TestMasterSlave_2getopt_8c.html#db50a0eab9fed92fc3bfc7dfa4f2c410">optarg</a> = argv[optind++];
<a name="l00615"></a>00615           <span class="keywordflow">return</span> 1;
<a name="l00616"></a>00616         }
<a name="l00617"></a>00617 
<a name="l00618"></a>00618       <span class="comment">/* We have found another option-ARGV-element.</span>
<a name="l00619"></a>00619 <span class="comment">         Skip the initial punctuation.  */</span>
<a name="l00620"></a>00620 
<a name="l00621"></a>00621       nextchar = (argv[optind] + 1
<a name="l00622"></a>00622                   + (longopts != NULL &amp;&amp; argv[optind][1] == <span class="charliteral">'-'</span>));
<a name="l00623"></a>00623     }
<a name="l00624"></a>00624 
<a name="l00625"></a>00625   <span class="comment">/* Decode the current option-ARGV-element.  */</span>
<a name="l00626"></a>00626 
<a name="l00627"></a>00627   <span class="comment">/* Check whether the ARGV-element is a long option.</span>
<a name="l00628"></a>00628 <span class="comment"></span>
<a name="l00629"></a>00629 <span class="comment">     If long_only and the ARGV-element has the form "-f", where f is</span>
<a name="l00630"></a>00630 <span class="comment">     a valid short option, don't consider it an abbreviated form of</span>
<a name="l00631"></a>00631 <span class="comment">     a long option that starts with f.  Otherwise there would be no</span>
<a name="l00632"></a>00632 <span class="comment">     way to give the -f short option.</span>
<a name="l00633"></a>00633 <span class="comment"></span>
<a name="l00634"></a>00634 <span class="comment">     On the other hand, if there's a long option "fubar" and</span>
<a name="l00635"></a>00635 <span class="comment">     the ARGV-element is "-fu", do consider that an abbreviation of</span>
<a name="l00636"></a>00636 <span class="comment">     the long option, just like "--fu", and not "-f" with arg "u".</span>
<a name="l00637"></a>00637 <span class="comment"></span>
<a name="l00638"></a>00638 <span class="comment">     This distinction seems to be the most useful approach.  */</span>
<a name="l00639"></a>00639 
<a name="l00640"></a>00640   <span class="keywordflow">if</span> (longopts != NULL
<a name="l00641"></a>00641       &amp;&amp; (argv[<a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>][1] == <span class="charliteral">'-'</span>
<a name="l00642"></a>00642           || (long_only &amp;&amp; (argv[<a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>][2] || !my_index (optstring, argv[<a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>][1])))))
<a name="l00643"></a>00643     {
<a name="l00644"></a>00644       <span class="keywordtype">char</span> *nameend;
<a name="l00645"></a>00645       <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structoption.html">option</a> *p;
<a name="l00646"></a>00646       <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structoption.html">option</a> *pfound = NULL;
<a name="l00647"></a>00647       <span class="keywordtype">int</span> exact = 0;
<a name="l00648"></a>00648       <span class="keywordtype">int</span> ambig = 0;
<a name="l00649"></a>00649       <span class="keywordtype">int</span> indfound = -1;
<a name="l00650"></a>00650       <span class="keywordtype">int</span> option_index;
<a name="l00651"></a>00651 
<a name="l00652"></a>00652       <span class="keywordflow">for</span> (nameend = nextchar; *nameend &amp;&amp; *nameend != <span class="charliteral">'='</span>; nameend++)
<a name="l00653"></a>00653         <span class="comment">/* Do nothing.  */</span> ;
<a name="l00654"></a>00654 
<a name="l00655"></a>00655       <span class="comment">/* Test all long options for either exact match</span>
<a name="l00656"></a>00656 <span class="comment">         or abbreviated matches.  */</span>
<a name="l00657"></a>00657       <span class="keywordflow">for</span> (p = longopts, option_index = 0; p-&gt;<a class="code" href="structoption.html#92c850a23c7828c1dba453bf8d15e1f0">name</a>; p++, option_index++)
<a name="l00658"></a>00658         <span class="keywordflow">if</span> (!strncmp (p-&gt;<a class="code" href="structoption.html#92c850a23c7828c1dba453bf8d15e1f0">name</a>, nextchar, nameend - nextchar))
<a name="l00659"></a>00659           {
<a name="l00660"></a>00660             if ((<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>) (nameend - nextchar)
<a name="l00661"></a>00661                 == (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>) strlen (p-&gt;<a class="code" href="structoption.html#92c850a23c7828c1dba453bf8d15e1f0">name</a>))
<a name="l00662"></a>00662               {
<a name="l00663"></a>00663                 <span class="comment">/* Exact match found.  */</span>
<a name="l00664"></a>00664                 pfound = p;
<a name="l00665"></a>00665                 indfound = option_index;
<a name="l00666"></a>00666                 exact = 1;
<a name="l00667"></a>00667                 <span class="keywordflow">break</span>;
<a name="l00668"></a>00668               }
<a name="l00669"></a>00669             <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pfound == NULL)
<a name="l00670"></a>00670               {
<a name="l00671"></a>00671                 <span class="comment">/* First nonexact match found.  */</span>
<a name="l00672"></a>00672                 pfound = p;
<a name="l00673"></a>00673                 indfound = option_index;
<a name="l00674"></a>00674               }
<a name="l00675"></a>00675             <span class="keywordflow">else</span> <span class="keywordflow">if</span> (long_only
<a name="l00676"></a>00676                      || pfound-&gt;has_arg != p-&gt;has_arg
<a name="l00677"></a>00677                      || pfound-&gt;flag != p-&gt;flag
<a name="l00678"></a>00678                      || pfound-&gt;val != p-&gt;val)
<a name="l00679"></a>00679               <span class="comment">/* Second or later nonexact match found.  */</span>
<a name="l00680"></a>00680               ambig = 1;
<a name="l00681"></a>00681           }
<a name="l00682"></a>00682 
<a name="l00683"></a>00683       <span class="keywordflow">if</span> (ambig &amp;&amp; !exact)
<a name="l00684"></a>00684         {
<a name="l00685"></a>00685           <span class="keywordflow">if</span> (print_errors)
<a name="l00686"></a>00686             {
<a name="l00687"></a>00687 #<span class="keywordflow">if</span> defined _LIBC &amp;&amp; defined USE_IN_LIBIO
<a name="l00688"></a>00688               <span class="keywordtype">char</span> *buf;
<a name="l00689"></a>00689 
<a name="l00690"></a>00690               __asprintf (&amp;buf, <a class="code" href="TestMasterSlave_2getopt_8c.html#86a239addea586602343007a370bf8ad">_</a>(<span class="stringliteral">"%s: option `%s' is ambiguous\n"</span>),
<a name="l00691"></a>00691                           argv[0], argv[<a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>]);
<a name="l00692"></a>00692 
<a name="l00693"></a>00693               <span class="keywordflow">if</span> (_IO_fwide (stderr, 0) &gt; 0)
<a name="l00694"></a>00694                 __fwprintf (stderr, L<span class="stringliteral">"%s"</span>, buf);
<a name="l00695"></a>00695               <span class="keywordflow">else</span>
<a name="l00696"></a>00696                 fputs (buf, stderr);
<a name="l00697"></a>00697 
<a name="l00698"></a>00698               free (buf);
<a name="l00699"></a>00699 <span class="preprocessor">#else</span>
<a name="l00700"></a>00700 <span class="preprocessor"></span>              fprintf (stderr, <a class="code" href="TestMasterSlave_2getopt_8c.html#86a239addea586602343007a370bf8ad">_</a>(<span class="stringliteral">"%s: option `%s' is ambiguous\n"</span>),
<a name="l00701"></a>00701                        argv[0], argv[<a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>]);
<a name="l00702"></a>00702 <span class="preprocessor">#endif</span>
<a name="l00703"></a>00703 <span class="preprocessor"></span>            }
<a name="l00704"></a>00704           nextchar += strlen (nextchar);
<a name="l00705"></a>00705           <a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>++;
<a name="l00706"></a>00706           <a class="code" href="TestMasterSlave_2getopt_8c.html#475b8db98445da73e5f62a1ef6324b95">optopt</a> = 0;
<a name="l00707"></a>00707           <span class="keywordflow">return</span> <span class="charliteral">'?'</span>;
<a name="l00708"></a>00708         }
<a name="l00709"></a>00709 
<a name="l00710"></a>00710       <span class="keywordflow">if</span> (pfound != NULL)
<a name="l00711"></a>00711         {
<a name="l00712"></a>00712           option_index = indfound;
<a name="l00713"></a>00713           <a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>++;
<a name="l00714"></a>00714           <span class="keywordflow">if</span> (*nameend)
<a name="l00715"></a>00715             {
<a name="l00716"></a>00716               <span class="comment">/* Don't test has_arg with &gt;, because some C compilers don't</span>
<a name="l00717"></a>00717 <span class="comment">                 allow it to be used on enums.  */</span>
<a name="l00718"></a>00718               <span class="keywordflow">if</span> (pfound-&gt;has_arg)
<a name="l00719"></a>00719                 <a class="code" href="TestMasterSlave_2getopt_8c.html#db50a0eab9fed92fc3bfc7dfa4f2c410">optarg</a> = nameend + 1;
<a name="l00720"></a>00720               <span class="keywordflow">else</span>
<a name="l00721"></a>00721                 {
<a name="l00722"></a>00722                   <span class="keywordflow">if</span> (print_errors)
<a name="l00723"></a>00723                     {
<a name="l00724"></a>00724 <span class="preprocessor">#if defined _LIBC &amp;&amp; defined USE_IN_LIBIO</span>
<a name="l00725"></a>00725 <span class="preprocessor"></span>                      <span class="keywordtype">char</span> *buf;
<a name="l00726"></a>00726 <span class="preprocessor">#endif</span>
<a name="l00727"></a>00727 <span class="preprocessor"></span>
<a name="l00728"></a>00728                       <span class="keywordflow">if</span> (argv[<a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a> - 1][1] == <span class="charliteral">'-'</span>)
<a name="l00729"></a>00729                         {
<a name="l00730"></a>00730                           <span class="comment">/* --option */</span>
<a name="l00731"></a>00731 <span class="preprocessor">#if defined _LIBC &amp;&amp; defined USE_IN_LIBIO</span>
<a name="l00732"></a>00732 <span class="preprocessor"></span>                          __asprintf (&amp;buf, <a class="code" href="TestMasterSlave_2getopt_8c.html#86a239addea586602343007a370bf8ad">_</a>(<span class="stringliteral">"\</span>
<a name="l00733"></a>00733 <span class="stringliteral">%s: option `--%s' doesn't allow an argument\n"</span>),
<a name="l00734"></a>00734                                       argv[0], pfound-&gt;name);
<a name="l00735"></a>00735 <span class="preprocessor">#else</span>
<a name="l00736"></a>00736 <span class="preprocessor"></span>                          fprintf (stderr, <a class="code" href="TestMasterSlave_2getopt_8c.html#86a239addea586602343007a370bf8ad">_</a>(<span class="stringliteral">"\</span>
<a name="l00737"></a>00737 <span class="stringliteral">%s: option `--%s' doesn't allow an argument\n"</span>),
<a name="l00738"></a>00738                                    argv[0], pfound-&gt;name);
<a name="l00739"></a>00739 <span class="preprocessor">#endif</span>
<a name="l00740"></a>00740 <span class="preprocessor"></span>                        }
<a name="l00741"></a>00741                       <span class="keywordflow">else</span>
<a name="l00742"></a>00742                         {
<a name="l00743"></a>00743                           <span class="comment">/* +option or -option */</span>
<a name="l00744"></a>00744 <span class="preprocessor">#if defined _LIBC &amp;&amp; defined USE_IN_LIBIO</span>
<a name="l00745"></a>00745 <span class="preprocessor"></span>                          __asprintf (&amp;buf, <a class="code" href="TestMasterSlave_2getopt_8c.html#86a239addea586602343007a370bf8ad">_</a>(<span class="stringliteral">"\</span>
<a name="l00746"></a>00746 <span class="stringliteral">%s: option `%c%s' doesn't allow an argument\n"</span>),
<a name="l00747"></a>00747                                       argv[0], argv[<a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a> - 1][0],
<a name="l00748"></a>00748                                       pfound-&gt;name);
<a name="l00749"></a>00749 <span class="preprocessor">#else</span>
<a name="l00750"></a>00750 <span class="preprocessor"></span>                          fprintf (stderr, <a class="code" href="TestMasterSlave_2getopt_8c.html#86a239addea586602343007a370bf8ad">_</a>(<span class="stringliteral">"\</span>
<a name="l00751"></a>00751 <span class="stringliteral">%s: option `%c%s' doesn't allow an argument\n"</span>),
<a name="l00752"></a>00752                                    argv[0], argv[<a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a> - 1][0], pfound-&gt;name);
<a name="l00753"></a>00753 <span class="preprocessor">#endif</span>
<a name="l00754"></a>00754 <span class="preprocessor"></span>                        }
<a name="l00755"></a>00755 
<a name="l00756"></a>00756 <span class="preprocessor">#if defined _LIBC &amp;&amp; defined USE_IN_LIBIO</span>
<a name="l00757"></a>00757 <span class="preprocessor"></span>                      <span class="keywordflow">if</span> (_IO_fwide (stderr, 0) &gt; 0)
<a name="l00758"></a>00758                         __fwprintf (stderr, L<span class="stringliteral">"%s"</span>, buf);
<a name="l00759"></a>00759                       <span class="keywordflow">else</span>
<a name="l00760"></a>00760                         fputs (buf, stderr);
<a name="l00761"></a>00761 
<a name="l00762"></a>00762                       free (buf);
<a name="l00763"></a>00763 <span class="preprocessor">#endif</span>
<a name="l00764"></a>00764 <span class="preprocessor"></span>                    }
<a name="l00765"></a>00765 
<a name="l00766"></a>00766                   nextchar += strlen (nextchar);
<a name="l00767"></a>00767 
<a name="l00768"></a>00768                   <a class="code" href="TestMasterSlave_2getopt_8c.html#475b8db98445da73e5f62a1ef6324b95">optopt</a> = pfound-&gt;val;
<a name="l00769"></a>00769                   <span class="keywordflow">return</span> <span class="charliteral">'?'</span>;
<a name="l00770"></a>00770                 }
<a name="l00771"></a>00771             }
<a name="l00772"></a>00772           <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pfound-&gt;has_arg == 1)
<a name="l00773"></a>00773             {
<a name="l00774"></a>00774               <span class="keywordflow">if</span> (<a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a> &lt; argc)
<a name="l00775"></a>00775                 <a class="code" href="TestMasterSlave_2getopt_8c.html#db50a0eab9fed92fc3bfc7dfa4f2c410">optarg</a> = argv[<a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>++];
<a name="l00776"></a>00776               <span class="keywordflow">else</span>
<a name="l00777"></a>00777                 {
<a name="l00778"></a>00778                   <span class="keywordflow">if</span> (print_errors)
<a name="l00779"></a>00779                     {
<a name="l00780"></a>00780 <span class="preprocessor">#if defined _LIBC &amp;&amp; defined USE_IN_LIBIO</span>
<a name="l00781"></a>00781 <span class="preprocessor"></span>                      <span class="keywordtype">char</span> *buf;
<a name="l00782"></a>00782 
<a name="l00783"></a>00783                       __asprintf (&amp;buf,
<a name="l00784"></a>00784                                   <a class="code" href="TestMasterSlave_2getopt_8c.html#86a239addea586602343007a370bf8ad">_</a>(<span class="stringliteral">"%s: option `%s' requires an argument\n"</span>),
<a name="l00785"></a>00785                                   argv[0], argv[<a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a> - 1]);
<a name="l00786"></a>00786 
<a name="l00787"></a>00787                       <span class="keywordflow">if</span> (_IO_fwide (stderr, 0) &gt; 0)
<a name="l00788"></a>00788                         __fwprintf (stderr, L<span class="stringliteral">"%s"</span>, buf);
<a name="l00789"></a>00789                       <span class="keywordflow">else</span>
<a name="l00790"></a>00790                         fputs (buf, stderr);
<a name="l00791"></a>00791 
<a name="l00792"></a>00792                       free (buf);
<a name="l00793"></a>00793 <span class="preprocessor">#else</span>
<a name="l00794"></a>00794 <span class="preprocessor"></span>                      fprintf (stderr,
<a name="l00795"></a>00795                                <a class="code" href="TestMasterSlave_2getopt_8c.html#86a239addea586602343007a370bf8ad">_</a>(<span class="stringliteral">"%s: option `%s' requires an argument\n"</span>),
<a name="l00796"></a>00796                                argv[0], argv[<a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a> - 1]);
<a name="l00797"></a>00797 <span class="preprocessor">#endif</span>
<a name="l00798"></a>00798 <span class="preprocessor"></span>                    }
<a name="l00799"></a>00799                   nextchar += strlen (nextchar);
<a name="l00800"></a>00800                   <a class="code" href="TestMasterSlave_2getopt_8c.html#475b8db98445da73e5f62a1ef6324b95">optopt</a> = pfound-&gt;val;
<a name="l00801"></a>00801                   <span class="keywordflow">return</span> optstring[0] == <span class="charliteral">':'</span> ? <span class="charliteral">':'</span> : <span class="charliteral">'?'</span>;
<a name="l00802"></a>00802                 }
<a name="l00803"></a>00803             }
<a name="l00804"></a>00804           nextchar += strlen (nextchar);
<a name="l00805"></a>00805           <span class="keywordflow">if</span> (longind != NULL)
<a name="l00806"></a>00806             *longind = option_index;
<a name="l00807"></a>00807           <span class="keywordflow">if</span> (pfound-&gt;flag)
<a name="l00808"></a>00808             {
<a name="l00809"></a>00809               *(pfound-&gt;flag) = pfound-&gt;val;
<a name="l00810"></a>00810               <span class="keywordflow">return</span> 0;
<a name="l00811"></a>00811             }
<a name="l00812"></a>00812           <span class="keywordflow">return</span> pfound-&gt;val;
<a name="l00813"></a>00813         }
<a name="l00814"></a>00814 
<a name="l00815"></a>00815       <span class="comment">/* Can't find it as a long option.  If this is not getopt_long_only,</span>
<a name="l00816"></a>00816 <span class="comment">         or the option starts with '--' or is not a valid short</span>
<a name="l00817"></a>00817 <span class="comment">         option, then it's an error.</span>
<a name="l00818"></a>00818 <span class="comment">         Otherwise interpret it as a short option.  */</span>
<a name="l00819"></a>00819       <span class="keywordflow">if</span> (!long_only || argv[<a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>][1] == <span class="charliteral">'-'</span>
<a name="l00820"></a>00820           || my_index (optstring, *nextchar) == NULL)
<a name="l00821"></a>00821         {
<a name="l00822"></a>00822           <span class="keywordflow">if</span> (print_errors)
<a name="l00823"></a>00823             {
<a name="l00824"></a>00824 <span class="preprocessor">#if defined _LIBC &amp;&amp; defined USE_IN_LIBIO</span>
<a name="l00825"></a>00825 <span class="preprocessor"></span>              <span class="keywordtype">char</span> *buf;
<a name="l00826"></a>00826 <span class="preprocessor">#endif</span>
<a name="l00827"></a>00827 <span class="preprocessor"></span>
<a name="l00828"></a>00828               <span class="keywordflow">if</span> (argv[<a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>][1] == <span class="charliteral">'-'</span>)
<a name="l00829"></a>00829                 {
<a name="l00830"></a>00830                   <span class="comment">/* --option */</span>
<a name="l00831"></a>00831 <span class="preprocessor">#if defined _LIBC &amp;&amp; defined USE_IN_LIBIO</span>
<a name="l00832"></a>00832 <span class="preprocessor"></span>                  __asprintf (&amp;buf, <a class="code" href="TestMasterSlave_2getopt_8c.html#86a239addea586602343007a370bf8ad">_</a>(<span class="stringliteral">"%s: unrecognized option `--%s'\n"</span>),
<a name="l00833"></a>00833                               argv[0], nextchar);
<a name="l00834"></a>00834 <span class="preprocessor">#else</span>
<a name="l00835"></a>00835 <span class="preprocessor"></span>                  fprintf (stderr, <a class="code" href="TestMasterSlave_2getopt_8c.html#86a239addea586602343007a370bf8ad">_</a>(<span class="stringliteral">"%s: unrecognized option `--%s'\n"</span>),
<a name="l00836"></a>00836                            argv[0], nextchar);
<a name="l00837"></a>00837 <span class="preprocessor">#endif</span>
<a name="l00838"></a>00838 <span class="preprocessor"></span>                }
<a name="l00839"></a>00839               <span class="keywordflow">else</span>
<a name="l00840"></a>00840                 {
<a name="l00841"></a>00841                   <span class="comment">/* +option or -option */</span>
<a name="l00842"></a>00842 <span class="preprocessor">#if defined _LIBC &amp;&amp; defined USE_IN_LIBIO</span>
<a name="l00843"></a>00843 <span class="preprocessor"></span>                  __asprintf (&amp;buf, <a class="code" href="TestMasterSlave_2getopt_8c.html#86a239addea586602343007a370bf8ad">_</a>(<span class="stringliteral">"%s: unrecognized option `%c%s'\n"</span>),
<a name="l00844"></a>00844                               argv[0], argv[<a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>][0], nextchar);
<a name="l00845"></a>00845 <span class="preprocessor">#else</span>
<a name="l00846"></a>00846 <span class="preprocessor"></span>                  fprintf (stderr, <a class="code" href="TestMasterSlave_2getopt_8c.html#86a239addea586602343007a370bf8ad">_</a>(<span class="stringliteral">"%s: unrecognized option `%c%s'\n"</span>),
<a name="l00847"></a>00847                            argv[0], argv[<a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>][0], nextchar);
<a name="l00848"></a>00848 <span class="preprocessor">#endif</span>
<a name="l00849"></a>00849 <span class="preprocessor"></span>                }
<a name="l00850"></a>00850 
<a name="l00851"></a>00851 <span class="preprocessor">#if defined _LIBC &amp;&amp; defined USE_IN_LIBIO</span>
<a name="l00852"></a>00852 <span class="preprocessor"></span>              <span class="keywordflow">if</span> (_IO_fwide (stderr, 0) &gt; 0)
<a name="l00853"></a>00853                 __fwprintf (stderr, L<span class="stringliteral">"%s"</span>, buf);
<a name="l00854"></a>00854               <span class="keywordflow">else</span>
<a name="l00855"></a>00855                 fputs (buf, stderr);
<a name="l00856"></a>00856 
<a name="l00857"></a>00857               free (buf);
<a name="l00858"></a>00858 <span class="preprocessor">#endif</span>
<a name="l00859"></a>00859 <span class="preprocessor"></span>            }
<a name="l00860"></a>00860           nextchar = (<span class="keywordtype">char</span> *) <span class="stringliteral">""</span>;
<a name="l00861"></a>00861           <a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>++;
<a name="l00862"></a>00862           <a class="code" href="TestMasterSlave_2getopt_8c.html#475b8db98445da73e5f62a1ef6324b95">optopt</a> = 0;
<a name="l00863"></a>00863           <span class="keywordflow">return</span> <span class="charliteral">'?'</span>;
<a name="l00864"></a>00864         }
<a name="l00865"></a>00865     }
<a name="l00866"></a>00866 
<a name="l00867"></a>00867   <span class="comment">/* Look at and handle the next short option-character.  */</span>
<a name="l00868"></a>00868 
<a name="l00869"></a>00869   {
<a name="l00870"></a>00870     <span class="keywordtype">char</span> c = *nextchar++;
<a name="l00871"></a>00871     <span class="keywordtype">char</span> *temp = my_index (optstring, c);
<a name="l00872"></a>00872 
<a name="l00873"></a>00873     <span class="comment">/* Increment `optind' when we start to process its last character.  */</span>
<a name="l00874"></a>00874     <span class="keywordflow">if</span> (*nextchar == <span class="charliteral">'\0'</span>)
<a name="l00875"></a>00875       ++<a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>;
<a name="l00876"></a>00876 
<a name="l00877"></a>00877     <span class="keywordflow">if</span> (temp == NULL || c == <span class="charliteral">':'</span>)
<a name="l00878"></a>00878       {
<a name="l00879"></a>00879         <span class="keywordflow">if</span> (print_errors)
<a name="l00880"></a>00880           {
<a name="l00881"></a>00881 <span class="preprocessor">#if defined _LIBC &amp;&amp; defined USE_IN_LIBIO</span>
<a name="l00882"></a>00882 <span class="preprocessor"></span>              <span class="keywordtype">char</span> *buf;
<a name="l00883"></a>00883 <span class="preprocessor">#endif</span>
<a name="l00884"></a>00884 <span class="preprocessor"></span>
<a name="l00885"></a>00885             <span class="keywordflow">if</span> (posixly_correct)
<a name="l00886"></a>00886               {
<a name="l00887"></a>00887                 <span class="comment">/* 1003.2 specifies the format of this message.  */</span>
<a name="l00888"></a>00888 <span class="preprocessor">#if defined _LIBC &amp;&amp; defined USE_IN_LIBIO</span>
<a name="l00889"></a>00889 <span class="preprocessor"></span>                __asprintf (&amp;buf, <a class="code" href="TestMasterSlave_2getopt_8c.html#86a239addea586602343007a370bf8ad">_</a>(<span class="stringliteral">"%s: illegal option -- %c\n"</span>),
<a name="l00890"></a>00890                             argv[0], c);
<a name="l00891"></a>00891 <span class="preprocessor">#else</span>
<a name="l00892"></a>00892 <span class="preprocessor"></span>                fprintf (stderr, <a class="code" href="TestMasterSlave_2getopt_8c.html#86a239addea586602343007a370bf8ad">_</a>(<span class="stringliteral">"%s: illegal option -- %c\n"</span>), argv[0], c);
<a name="l00893"></a>00893 <span class="preprocessor">#endif</span>
<a name="l00894"></a>00894 <span class="preprocessor"></span>              }
<a name="l00895"></a>00895             <span class="keywordflow">else</span>
<a name="l00896"></a>00896               {
<a name="l00897"></a>00897 <span class="preprocessor">#if defined _LIBC &amp;&amp; defined USE_IN_LIBIO</span>
<a name="l00898"></a>00898 <span class="preprocessor"></span>                __asprintf (&amp;buf, <a class="code" href="TestMasterSlave_2getopt_8c.html#86a239addea586602343007a370bf8ad">_</a>(<span class="stringliteral">"%s: invalid option -- %c\n"</span>),
<a name="l00899"></a>00899                             argv[0], c);
<a name="l00900"></a>00900 <span class="preprocessor">#else</span>
<a name="l00901"></a>00901 <span class="preprocessor"></span>                fprintf (stderr, <a class="code" href="TestMasterSlave_2getopt_8c.html#86a239addea586602343007a370bf8ad">_</a>(<span class="stringliteral">"%s: invalid option -- %c\n"</span>), argv[0], c);
<a name="l00902"></a>00902 <span class="preprocessor">#endif</span>
<a name="l00903"></a>00903 <span class="preprocessor"></span>              }
<a name="l00904"></a>00904 
<a name="l00905"></a>00905 <span class="preprocessor">#if defined _LIBC &amp;&amp; defined USE_IN_LIBIO</span>
<a name="l00906"></a>00906 <span class="preprocessor"></span>            <span class="keywordflow">if</span> (_IO_fwide (stderr, 0) &gt; 0)
<a name="l00907"></a>00907               __fwprintf (stderr, L<span class="stringliteral">"%s"</span>, buf);
<a name="l00908"></a>00908             <span class="keywordflow">else</span>
<a name="l00909"></a>00909               fputs (buf, stderr);
<a name="l00910"></a>00910 
<a name="l00911"></a>00911             free (buf);
<a name="l00912"></a>00912 <span class="preprocessor">#endif</span>
<a name="l00913"></a>00913 <span class="preprocessor"></span>          }
<a name="l00914"></a>00914         <a class="code" href="TestMasterSlave_2getopt_8c.html#475b8db98445da73e5f62a1ef6324b95">optopt</a> = c;
<a name="l00915"></a>00915         <span class="keywordflow">return</span> <span class="charliteral">'?'</span>;
<a name="l00916"></a>00916       }
<a name="l00917"></a>00917     <span class="comment">/* Convenience. Treat POSIX -W foo same as long option --foo */</span>
<a name="l00918"></a>00918     <span class="keywordflow">if</span> (temp[0] == <span class="charliteral">'W'</span> &amp;&amp; temp[1] == <span class="charliteral">';'</span>)
<a name="l00919"></a>00919       {
<a name="l00920"></a>00920         <span class="keywordtype">char</span> *nameend;
<a name="l00921"></a>00921         <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structoption.html">option</a> *p;
<a name="l00922"></a>00922         <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structoption.html">option</a> *pfound = NULL;
<a name="l00923"></a>00923         <span class="keywordtype">int</span> exact = 0;
<a name="l00924"></a>00924         <span class="keywordtype">int</span> ambig = 0;
<a name="l00925"></a>00925         <span class="keywordtype">int</span> indfound = 0;
<a name="l00926"></a>00926         <span class="keywordtype">int</span> option_index;
<a name="l00927"></a>00927 
<a name="l00928"></a>00928         <span class="comment">/* This is an option that requires an argument.  */</span>
<a name="l00929"></a>00929         <span class="keywordflow">if</span> (*nextchar != <span class="charliteral">'\0'</span>)
<a name="l00930"></a>00930           {
<a name="l00931"></a>00931             <a class="code" href="TestMasterSlave_2getopt_8c.html#db50a0eab9fed92fc3bfc7dfa4f2c410">optarg</a> = nextchar;
<a name="l00932"></a>00932             <span class="comment">/* If we end this ARGV-element by taking the rest as an arg,</span>
<a name="l00933"></a>00933 <span class="comment">               we must advance to the next element now.  */</span>
<a name="l00934"></a>00934             <a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>++;
<a name="l00935"></a>00935           }
<a name="l00936"></a>00936         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a> == argc)
<a name="l00937"></a>00937           {
<a name="l00938"></a>00938             <span class="keywordflow">if</span> (print_errors)
<a name="l00939"></a>00939               {
<a name="l00940"></a>00940                 <span class="comment">/* 1003.2 specifies the format of this message.  */</span>
<a name="l00941"></a>00941 <span class="preprocessor">#if defined _LIBC &amp;&amp; defined USE_IN_LIBIO</span>
<a name="l00942"></a>00942 <span class="preprocessor"></span>                <span class="keywordtype">char</span> *buf;
<a name="l00943"></a>00943 
<a name="l00944"></a>00944                 __asprintf (&amp;buf, <a class="code" href="TestMasterSlave_2getopt_8c.html#86a239addea586602343007a370bf8ad">_</a>(<span class="stringliteral">"%s: option requires an argument -- %c\n"</span>),
<a name="l00945"></a>00945                             argv[0], c);
<a name="l00946"></a>00946 
<a name="l00947"></a>00947                 <span class="keywordflow">if</span> (_IO_fwide (stderr, 0) &gt; 0)
<a name="l00948"></a>00948                   __fwprintf (stderr, L<span class="stringliteral">"%s"</span>, buf);
<a name="l00949"></a>00949                 <span class="keywordflow">else</span>
<a name="l00950"></a>00950                   fputs (buf, stderr);
<a name="l00951"></a>00951 
<a name="l00952"></a>00952                 free (buf);
<a name="l00953"></a>00953 <span class="preprocessor">#else</span>
<a name="l00954"></a>00954 <span class="preprocessor"></span>                fprintf (stderr, <a class="code" href="TestMasterSlave_2getopt_8c.html#86a239addea586602343007a370bf8ad">_</a>(<span class="stringliteral">"%s: option requires an argument -- %c\n"</span>),
<a name="l00955"></a>00955                          argv[0], c);
<a name="l00956"></a>00956 <span class="preprocessor">#endif</span>
<a name="l00957"></a>00957 <span class="preprocessor"></span>              }
<a name="l00958"></a>00958             <a class="code" href="TestMasterSlave_2getopt_8c.html#475b8db98445da73e5f62a1ef6324b95">optopt</a> = c;
<a name="l00959"></a>00959             <span class="keywordflow">if</span> (optstring[0] == <span class="charliteral">':'</span>)
<a name="l00960"></a>00960               c = <span class="charliteral">':'</span>;
<a name="l00961"></a>00961             <span class="keywordflow">else</span>
<a name="l00962"></a>00962               c = <span class="charliteral">'?'</span>;
<a name="l00963"></a>00963             <span class="keywordflow">return</span> c;
<a name="l00964"></a>00964           }
<a name="l00965"></a>00965         <span class="keywordflow">else</span>
<a name="l00966"></a>00966           <span class="comment">/* We already incremented `optind' once;</span>
<a name="l00967"></a>00967 <span class="comment">             increment it again when taking next ARGV-elt as argument.  */</span>
<a name="l00968"></a>00968           <a class="code" href="TestMasterSlave_2getopt_8c.html#db50a0eab9fed92fc3bfc7dfa4f2c410">optarg</a> = argv[<a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>++];
<a name="l00969"></a>00969 
<a name="l00970"></a>00970         <span class="comment">/* optarg is now the argument, see if it's in the</span>
<a name="l00971"></a>00971 <span class="comment">           table of longopts.  */</span>
<a name="l00972"></a>00972 
<a name="l00973"></a>00973         <span class="keywordflow">for</span> (nextchar = nameend = <a class="code" href="TestMasterSlave_2getopt_8c.html#db50a0eab9fed92fc3bfc7dfa4f2c410">optarg</a>; *nameend &amp;&amp; *nameend != <span class="charliteral">'='</span>; nameend++)
<a name="l00974"></a>00974           <span class="comment">/* Do nothing.  */</span> ;
<a name="l00975"></a>00975 
<a name="l00976"></a>00976         <span class="comment">/* Test all long options for either exact match</span>
<a name="l00977"></a>00977 <span class="comment">           or abbreviated matches.  */</span>
<a name="l00978"></a>00978         <span class="keywordflow">for</span> (p = longopts, option_index = 0; p-&gt;<a class="code" href="structoption.html#92c850a23c7828c1dba453bf8d15e1f0">name</a>; p++, option_index++)
<a name="l00979"></a>00979           <span class="keywordflow">if</span> (!strncmp (p-&gt;<a class="code" href="structoption.html#92c850a23c7828c1dba453bf8d15e1f0">name</a>, nextchar, nameend - nextchar))
<a name="l00980"></a>00980             {
<a name="l00981"></a>00981               if ((<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>) (nameend - nextchar) == strlen (p-&gt;<a class="code" href="structoption.html#92c850a23c7828c1dba453bf8d15e1f0">name</a>))
<a name="l00982"></a>00982                 {
<a name="l00983"></a>00983                   <span class="comment">/* Exact match found.  */</span>
<a name="l00984"></a>00984                   pfound = p;
<a name="l00985"></a>00985                   indfound = option_index;
<a name="l00986"></a>00986                   exact = 1;
<a name="l00987"></a>00987                   <span class="keywordflow">break</span>;
<a name="l00988"></a>00988                 }
<a name="l00989"></a>00989               <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pfound == NULL)
<a name="l00990"></a>00990                 {
<a name="l00991"></a>00991                   <span class="comment">/* First nonexact match found.  */</span>
<a name="l00992"></a>00992                   pfound = p;
<a name="l00993"></a>00993                   indfound = option_index;
<a name="l00994"></a>00994                 }
<a name="l00995"></a>00995               <span class="keywordflow">else</span>
<a name="l00996"></a>00996                 <span class="comment">/* Second or later nonexact match found.  */</span>
<a name="l00997"></a>00997                 ambig = 1;
<a name="l00998"></a>00998             }
<a name="l00999"></a>00999         <span class="keywordflow">if</span> (ambig &amp;&amp; !exact)
<a name="l01000"></a>01000           {
<a name="l01001"></a>01001             <span class="keywordflow">if</span> (print_errors)
<a name="l01002"></a>01002               {
<a name="l01003"></a>01003 #<span class="keywordflow">if</span> defined _LIBC &amp;&amp; defined USE_IN_LIBIO
<a name="l01004"></a>01004                 <span class="keywordtype">char</span> *buf;
<a name="l01005"></a>01005 
<a name="l01006"></a>01006                 __asprintf (&amp;buf, <a class="code" href="TestMasterSlave_2getopt_8c.html#86a239addea586602343007a370bf8ad">_</a>(<span class="stringliteral">"%s: option `-W %s' is ambiguous\n"</span>),
<a name="l01007"></a>01007                             argv[0], argv[<a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>]);
<a name="l01008"></a>01008 
<a name="l01009"></a>01009                 <span class="keywordflow">if</span> (_IO_fwide (stderr, 0) &gt; 0)
<a name="l01010"></a>01010                   __fwprintf (stderr, L<span class="stringliteral">"%s"</span>, buf);
<a name="l01011"></a>01011                 <span class="keywordflow">else</span>
<a name="l01012"></a>01012                   fputs (buf, stderr);
<a name="l01013"></a>01013 
<a name="l01014"></a>01014                 free (buf);
<a name="l01015"></a>01015 <span class="preprocessor">#else</span>
<a name="l01016"></a>01016 <span class="preprocessor"></span>                fprintf (stderr, <a class="code" href="TestMasterSlave_2getopt_8c.html#86a239addea586602343007a370bf8ad">_</a>(<span class="stringliteral">"%s: option `-W %s' is ambiguous\n"</span>),
<a name="l01017"></a>01017                          argv[0], argv[<a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>]);
<a name="l01018"></a>01018 <span class="preprocessor">#endif</span>
<a name="l01019"></a>01019 <span class="preprocessor"></span>              }
<a name="l01020"></a>01020             nextchar += strlen (nextchar);
<a name="l01021"></a>01021             <a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>++;
<a name="l01022"></a>01022             <span class="keywordflow">return</span> <span class="charliteral">'?'</span>;
<a name="l01023"></a>01023           }
<a name="l01024"></a>01024         <span class="keywordflow">if</span> (pfound != NULL)
<a name="l01025"></a>01025           {
<a name="l01026"></a>01026             option_index = indfound;
<a name="l01027"></a>01027             <span class="keywordflow">if</span> (*nameend)
<a name="l01028"></a>01028               {
<a name="l01029"></a>01029                 <span class="comment">/* Don't test has_arg with &gt;, because some C compilers don't</span>
<a name="l01030"></a>01030 <span class="comment">                   allow it to be used on enums.  */</span>
<a name="l01031"></a>01031                 <span class="keywordflow">if</span> (pfound-&gt;<a class="code" href="structoption.html#90d7ee9a51eea5c002682dbd0af149e4">has_arg</a>)
<a name="l01032"></a>01032                   <a class="code" href="TestMasterSlave_2getopt_8c.html#db50a0eab9fed92fc3bfc7dfa4f2c410">optarg</a> = nameend + 1;
<a name="l01033"></a>01033                 <span class="keywordflow">else</span>
<a name="l01034"></a>01034                   {
<a name="l01035"></a>01035                     <span class="keywordflow">if</span> (print_errors)
<a name="l01036"></a>01036                       {
<a name="l01037"></a>01037 <span class="preprocessor">#if defined _LIBC &amp;&amp; defined USE_IN_LIBIO</span>
<a name="l01038"></a>01038 <span class="preprocessor"></span>                        <span class="keywordtype">char</span> *buf;
<a name="l01039"></a>01039 
<a name="l01040"></a>01040                         __asprintf (&amp;buf, <a class="code" href="TestMasterSlave_2getopt_8c.html#86a239addea586602343007a370bf8ad">_</a>(<span class="stringliteral">"\</span>
<a name="l01041"></a>01041 <span class="stringliteral">%s: option `-W %s' doesn't allow an argument\n"</span>),
<a name="l01042"></a>01042                                     argv[0], pfound-&gt;<a class="code" href="structoption.html#92c850a23c7828c1dba453bf8d15e1f0">name</a>);
<a name="l01043"></a>01043 
<a name="l01044"></a>01044                         <span class="keywordflow">if</span> (_IO_fwide (stderr, 0) &gt; 0)
<a name="l01045"></a>01045                           __fwprintf (stderr, L<span class="stringliteral">"%s"</span>, buf);
<a name="l01046"></a>01046                         <span class="keywordflow">else</span>
<a name="l01047"></a>01047                           fputs (buf, stderr);
<a name="l01048"></a>01048 
<a name="l01049"></a>01049                         free (buf);
<a name="l01050"></a>01050 <span class="preprocessor">#else</span>
<a name="l01051"></a>01051 <span class="preprocessor"></span>                        fprintf (stderr, <a class="code" href="TestMasterSlave_2getopt_8c.html#86a239addea586602343007a370bf8ad">_</a>(<span class="stringliteral">"\</span>
<a name="l01052"></a>01052 <span class="stringliteral">%s: option `-W %s' doesn't allow an argument\n"</span>),
<a name="l01053"></a>01053                                  argv[0], pfound-&gt;<a class="code" href="structoption.html#92c850a23c7828c1dba453bf8d15e1f0">name</a>);
<a name="l01054"></a>01054 <span class="preprocessor">#endif</span>
<a name="l01055"></a>01055 <span class="preprocessor"></span>                      }
<a name="l01056"></a>01056 
<a name="l01057"></a>01057                     nextchar += strlen (nextchar);
<a name="l01058"></a>01058                     <span class="keywordflow">return</span> <span class="charliteral">'?'</span>;
<a name="l01059"></a>01059                   }
<a name="l01060"></a>01060               }
<a name="l01061"></a>01061             <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pfound-&gt;<a class="code" href="structoption.html#90d7ee9a51eea5c002682dbd0af149e4">has_arg</a> == 1)
<a name="l01062"></a>01062               {
<a name="l01063"></a>01063                 <span class="keywordflow">if</span> (<a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a> &lt; argc)
<a name="l01064"></a>01064                   <a class="code" href="TestMasterSlave_2getopt_8c.html#db50a0eab9fed92fc3bfc7dfa4f2c410">optarg</a> = argv[<a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>++];
<a name="l01065"></a>01065                 <span class="keywordflow">else</span>
<a name="l01066"></a>01066                   {
<a name="l01067"></a>01067                     <span class="keywordflow">if</span> (print_errors)
<a name="l01068"></a>01068                       {
<a name="l01069"></a>01069 <span class="preprocessor">#if defined _LIBC &amp;&amp; defined USE_IN_LIBIO</span>
<a name="l01070"></a>01070 <span class="preprocessor"></span>                        <span class="keywordtype">char</span> *buf;
<a name="l01071"></a>01071 
<a name="l01072"></a>01072                         __asprintf (&amp;buf, <a class="code" href="TestMasterSlave_2getopt_8c.html#86a239addea586602343007a370bf8ad">_</a>(<span class="stringliteral">"\</span>
<a name="l01073"></a>01073 <span class="stringliteral">%s: option `%s' requires an argument\n"</span>),
<a name="l01074"></a>01074                                     argv[0], argv[<a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a> - 1]);
<a name="l01075"></a>01075 
<a name="l01076"></a>01076                         <span class="keywordflow">if</span> (_IO_fwide (stderr, 0) &gt; 0)
<a name="l01077"></a>01077                           __fwprintf (stderr, L<span class="stringliteral">"%s"</span>, buf);
<a name="l01078"></a>01078                         <span class="keywordflow">else</span>
<a name="l01079"></a>01079                           fputs (buf, stderr);
<a name="l01080"></a>01080 
<a name="l01081"></a>01081                         free (buf);
<a name="l01082"></a>01082 <span class="preprocessor">#else</span>
<a name="l01083"></a>01083 <span class="preprocessor"></span>                        fprintf (stderr,
<a name="l01084"></a>01084                                  <a class="code" href="TestMasterSlave_2getopt_8c.html#86a239addea586602343007a370bf8ad">_</a>(<span class="stringliteral">"%s: option `%s' requires an argument\n"</span>),
<a name="l01085"></a>01085                                  argv[0], argv[<a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a> - 1]);
<a name="l01086"></a>01086 <span class="preprocessor">#endif</span>
<a name="l01087"></a>01087 <span class="preprocessor"></span>                      }
<a name="l01088"></a>01088                     nextchar += strlen (nextchar);
<a name="l01089"></a>01089                     <span class="keywordflow">return</span> optstring[0] == <span class="charliteral">':'</span> ? <span class="charliteral">':'</span> : <span class="charliteral">'?'</span>;
<a name="l01090"></a>01090                   }
<a name="l01091"></a>01091               }
<a name="l01092"></a>01092             nextchar += strlen (nextchar);
<a name="l01093"></a>01093             <span class="keywordflow">if</span> (longind != NULL)
<a name="l01094"></a>01094               *longind = option_index;
<a name="l01095"></a>01095             <span class="keywordflow">if</span> (pfound-&gt;<a class="code" href="structoption.html#b366eea5fe7be25c1928328ba715e353">flag</a>)
<a name="l01096"></a>01096               {
<a name="l01097"></a>01097                 *(pfound-&gt;<a class="code" href="structoption.html#b366eea5fe7be25c1928328ba715e353">flag</a>) = pfound-&gt;<a class="code" href="structoption.html#13bd155ec3b405d29c41ab8d0793be11">val</a>;
<a name="l01098"></a>01098                 <span class="keywordflow">return</span> 0;
<a name="l01099"></a>01099               }
<a name="l01100"></a>01100             <span class="keywordflow">return</span> pfound-&gt;<a class="code" href="structoption.html#13bd155ec3b405d29c41ab8d0793be11">val</a>;
<a name="l01101"></a>01101           }
<a name="l01102"></a>01102           nextchar = NULL;
<a name="l01103"></a>01103           <span class="keywordflow">return</span> <span class="charliteral">'W'</span>;   <span class="comment">/* Let the application handle it.   */</span>
<a name="l01104"></a>01104       }
<a name="l01105"></a>01105     <span class="keywordflow">if</span> (temp[1] == <span class="charliteral">':'</span>)
<a name="l01106"></a>01106       {
<a name="l01107"></a>01107         <span class="keywordflow">if</span> (temp[2] == <span class="charliteral">':'</span>)
<a name="l01108"></a>01108           {
<a name="l01109"></a>01109             <span class="comment">/* This is an option that accepts an argument optionally.  */</span>
<a name="l01110"></a>01110             <span class="keywordflow">if</span> (*nextchar != <span class="charliteral">'\0'</span>)
<a name="l01111"></a>01111               {
<a name="l01112"></a>01112                 <a class="code" href="TestMasterSlave_2getopt_8c.html#db50a0eab9fed92fc3bfc7dfa4f2c410">optarg</a> = nextchar;
<a name="l01113"></a>01113                 <a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>++;
<a name="l01114"></a>01114               }
<a name="l01115"></a>01115             <span class="keywordflow">else</span>
<a name="l01116"></a>01116               <a class="code" href="TestMasterSlave_2getopt_8c.html#db50a0eab9fed92fc3bfc7dfa4f2c410">optarg</a> = NULL;
<a name="l01117"></a>01117             nextchar = NULL;
<a name="l01118"></a>01118           }
<a name="l01119"></a>01119         <span class="keywordflow">else</span>
<a name="l01120"></a>01120           {
<a name="l01121"></a>01121             <span class="comment">/* This is an option that requires an argument.  */</span>
<a name="l01122"></a>01122             <span class="keywordflow">if</span> (*nextchar != <span class="charliteral">'\0'</span>)
<a name="l01123"></a>01123               {
<a name="l01124"></a>01124                 <a class="code" href="TestMasterSlave_2getopt_8c.html#db50a0eab9fed92fc3bfc7dfa4f2c410">optarg</a> = nextchar;
<a name="l01125"></a>01125                 <span class="comment">/* If we end this ARGV-element by taking the rest as an arg,</span>
<a name="l01126"></a>01126 <span class="comment">                   we must advance to the next element now.  */</span>
<a name="l01127"></a>01127                 <a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>++;
<a name="l01128"></a>01128               }
<a name="l01129"></a>01129             <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a> == argc)
<a name="l01130"></a>01130               {
<a name="l01131"></a>01131                 <span class="keywordflow">if</span> (print_errors)
<a name="l01132"></a>01132                   {
<a name="l01133"></a>01133                     <span class="comment">/* 1003.2 specifies the format of this message.  */</span>
<a name="l01134"></a>01134 <span class="preprocessor">#if defined _LIBC &amp;&amp; defined USE_IN_LIBIO</span>
<a name="l01135"></a>01135 <span class="preprocessor"></span>                    <span class="keywordtype">char</span> *buf;
<a name="l01136"></a>01136 
<a name="l01137"></a>01137                     __asprintf (&amp;buf,
<a name="l01138"></a>01138                                 <a class="code" href="TestMasterSlave_2getopt_8c.html#86a239addea586602343007a370bf8ad">_</a>(<span class="stringliteral">"%s: option requires an argument -- %c\n"</span>),
<a name="l01139"></a>01139                                 argv[0], c);
<a name="l01140"></a>01140 
<a name="l01141"></a>01141                     <span class="keywordflow">if</span> (_IO_fwide (stderr, 0) &gt; 0)
<a name="l01142"></a>01142                       __fwprintf (stderr, L<span class="stringliteral">"%s"</span>, buf);
<a name="l01143"></a>01143                     <span class="keywordflow">else</span>
<a name="l01144"></a>01144                       fputs (buf, stderr);
<a name="l01145"></a>01145 
<a name="l01146"></a>01146                     free (buf);
<a name="l01147"></a>01147 <span class="preprocessor">#else</span>
<a name="l01148"></a>01148 <span class="preprocessor"></span>                    fprintf (stderr,
<a name="l01149"></a>01149                              <a class="code" href="TestMasterSlave_2getopt_8c.html#86a239addea586602343007a370bf8ad">_</a>(<span class="stringliteral">"%s: option requires an argument -- %c\n"</span>),
<a name="l01150"></a>01150                              argv[0], c);
<a name="l01151"></a>01151 <span class="preprocessor">#endif</span>
<a name="l01152"></a>01152 <span class="preprocessor"></span>                  }
<a name="l01153"></a>01153                 <a class="code" href="TestMasterSlave_2getopt_8c.html#475b8db98445da73e5f62a1ef6324b95">optopt</a> = c;
<a name="l01154"></a>01154                 <span class="keywordflow">if</span> (optstring[0] == <span class="charliteral">':'</span>)
<a name="l01155"></a>01155                   c = <span class="charliteral">':'</span>;
<a name="l01156"></a>01156                 <span class="keywordflow">else</span>
<a name="l01157"></a>01157                   c = <span class="charliteral">'?'</span>;
<a name="l01158"></a>01158               }
<a name="l01159"></a>01159             <span class="keywordflow">else</span>
<a name="l01160"></a>01160               <span class="comment">/* We already incremented `optind' once;</span>
<a name="l01161"></a>01161 <span class="comment">                 increment it again when taking next ARGV-elt as argument.  */</span>
<a name="l01162"></a>01162               <a class="code" href="TestMasterSlave_2getopt_8c.html#db50a0eab9fed92fc3bfc7dfa4f2c410">optarg</a> = argv[<a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>++];
<a name="l01163"></a>01163             nextchar = NULL;
<a name="l01164"></a>01164           }
<a name="l01165"></a>01165       }
<a name="l01166"></a>01166     <span class="keywordflow">return</span> c;
<a name="l01167"></a>01167   }
<a name="l01168"></a>01168 }
<a name="l01169"></a>01169 
<a name="l01170"></a>01170 <span class="keywordtype">int</span>
<a name="l01171"></a><a class="code" href="TestMasterMicroMod_2getopt_8c.html#1b2ada39ab92162c6ec9c67c8093fa2e">01171</a> <a class="code" href="TestMasterSlave_2getopt_8c.html#1b2ada39ab92162c6ec9c67c8093fa2e">getopt</a> (argc, argv, optstring)
<a name="l01172"></a>01172      int argc;
<a name="l01173"></a>01173      <span class="keywordtype">char</span> *const *argv;
<a name="l01174"></a>01174      const <span class="keywordtype">char</span> *optstring;
<a name="l01175"></a>01175 {
<a name="l01176"></a>01176   <span class="keywordflow">return</span> <a class="code" href="TestMasterSlave_2getopt_8c.html#0df92a0ae8fe1fd43268c738f548674f">_getopt_internal</a> (argc, argv, optstring,
<a name="l01177"></a>01177                            (<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structoption.html">option</a> *) 0,
<a name="l01178"></a>01178                            (<span class="keywordtype">int</span> *) 0,
<a name="l01179"></a>01179                            0);
<a name="l01180"></a>01180 }
<a name="l01181"></a>01181 
<a name="l01182"></a>01182 <span class="preprocessor">#endif  </span><span class="comment">/* Not ELIDE_CODE.  */</span>
<a name="l01183"></a>01183 
<a name="l01184"></a>01184 
<a name="l01185"></a>01185 <span class="comment">/* Compile with -DTEST to make an executable for use in testing</span>
<a name="l01186"></a>01186 <span class="comment">   the above definition of `getopt'.  */</span>
<a name="l01187"></a>01187 
<a name="l01188"></a>01188 <span class="comment">/* #define TEST */</span>        <span class="comment">/* Pete Wilson mod 7/28/02 */</span>
<a name="l01189"></a>01189 <span class="preprocessor">#ifdef TEST</span>
<a name="l01190"></a>01190 <span class="preprocessor"></span>
<a name="l01191"></a>01191 <span class="preprocessor">#ifndef exit         </span><span class="comment">/* Pete Wilson mod 7/28/02 */</span>
<a name="l01192"></a>01192   <span class="keywordtype">int</span> exit(<span class="keywordtype">int</span>);     <span class="comment">/* Pete Wilson mod 7/28/02 */</span>
<a name="l01193"></a>01193 <span class="preprocessor">#endif               </span><span class="comment">/* Pete Wilson mod 7/28/02 */</span>
<a name="l01194"></a>01194 
<a name="l01195"></a>01195 <span class="keywordtype">int</span>
<a name="l01196"></a>01196 <a class="code" href="appli_8c.html#ef83014be811ae964a5ef7f0af7b46a2">main</a> (argc, argv)
<a name="l01197"></a>01197      int argc;
<a name="l01198"></a>01198      <span class="keywordtype">char</span> **argv;
<a name="l01199"></a>01199 {
<a name="l01200"></a>01200   <span class="keywordtype">int</span> c;
<a name="l01201"></a>01201   <span class="keywordtype">int</span> digit_optind = 0;
<a name="l01202"></a>01202 
<a name="l01203"></a>01203   <span class="keywordflow">while</span> (1)
<a name="l01204"></a>01204     {
<a name="l01205"></a>01205       <span class="keywordtype">int</span> this_option_optind = <a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a> ? <a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a> : 1;
<a name="l01206"></a>01206 
<a name="l01207"></a>01207       c = <a class="code" href="TestMasterSlave_2getopt_8c.html#1b2ada39ab92162c6ec9c67c8093fa2e">getopt</a> (argc, argv, <span class="stringliteral">"abc:d:0123456789"</span>);
<a name="l01208"></a>01208       <span class="keywordflow">if</span> (c == -1)
<a name="l01209"></a>01209         <span class="keywordflow">break</span>;
<a name="l01210"></a>01210 
<a name="l01211"></a>01211       <span class="keywordflow">switch</span> (c)
<a name="l01212"></a>01212         {
<a name="l01213"></a>01213         <span class="keywordflow">case</span> <span class="charliteral">'0'</span>:
<a name="l01214"></a>01214         <span class="keywordflow">case</span> <span class="charliteral">'1'</span>:
<a name="l01215"></a>01215         <span class="keywordflow">case</span> <span class="charliteral">'2'</span>:
<a name="l01216"></a>01216         <span class="keywordflow">case</span> <span class="charliteral">'3'</span>:
<a name="l01217"></a>01217         <span class="keywordflow">case</span> <span class="charliteral">'4'</span>:
<a name="l01218"></a>01218         <span class="keywordflow">case</span> <span class="charliteral">'5'</span>:
<a name="l01219"></a>01219         <span class="keywordflow">case</span> <span class="charliteral">'6'</span>:
<a name="l01220"></a>01220         <span class="keywordflow">case</span> <span class="charliteral">'7'</span>:
<a name="l01221"></a>01221         <span class="keywordflow">case</span> <span class="charliteral">'8'</span>:
<a name="l01222"></a>01222         <span class="keywordflow">case</span> <span class="charliteral">'9'</span>:
<a name="l01223"></a>01223           <span class="keywordflow">if</span> (digit_optind != 0 &amp;&amp; digit_optind != this_option_optind)
<a name="l01224"></a>01224             printf (<span class="stringliteral">"digits occur in two different argv-elements.\n"</span>);
<a name="l01225"></a>01225           digit_optind = this_option_optind;
<a name="l01226"></a>01226           printf (<span class="stringliteral">"option %c\n"</span>, c);
<a name="l01227"></a>01227           <span class="keywordflow">break</span>;
<a name="l01228"></a>01228 
<a name="l01229"></a>01229         <span class="keywordflow">case</span> <span class="charliteral">'a'</span>:
<a name="l01230"></a>01230           printf (<span class="stringliteral">"option a\n"</span>);
<a name="l01231"></a>01231           <span class="keywordflow">break</span>;
<a name="l01232"></a>01232 
<a name="l01233"></a>01233         <span class="keywordflow">case</span> <span class="charliteral">'b'</span>:
<a name="l01234"></a>01234           printf (<span class="stringliteral">"option b\n"</span>);
<a name="l01235"></a>01235           <span class="keywordflow">break</span>;
<a name="l01236"></a>01236 
<a name="l01237"></a>01237         <span class="keywordflow">case</span> <span class="charliteral">'c'</span>:
<a name="l01238"></a>01238           printf (<span class="stringliteral">"option c with value `%s'\n"</span>, <a class="code" href="TestMasterSlave_2getopt_8c.html#db50a0eab9fed92fc3bfc7dfa4f2c410">optarg</a>);
<a name="l01239"></a>01239           <span class="keywordflow">break</span>;
<a name="l01240"></a>01240 
<a name="l01241"></a>01241         <span class="keywordflow">case</span> <span class="charliteral">'?'</span>:
<a name="l01242"></a>01242           <span class="keywordflow">break</span>;
<a name="l01243"></a>01243 
<a name="l01244"></a>01244         <span class="keywordflow">default</span>:
<a name="l01245"></a>01245           printf (<span class="stringliteral">"?? getopt returned character code 0%o ??\n"</span>, c);
<a name="l01246"></a>01246         }
<a name="l01247"></a>01247     }
<a name="l01248"></a>01248 
<a name="l01249"></a>01249   <span class="keywordflow">if</span> (<a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a> &lt; argc)
<a name="l01250"></a>01250     {
<a name="l01251"></a>01251       printf (<span class="stringliteral">"non-option ARGV-elements: "</span>);
<a name="l01252"></a>01252       <span class="keywordflow">while</span> (<a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a> &lt; argc)
<a name="l01253"></a>01253         printf (<span class="stringliteral">"%s "</span>, argv[<a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>++]);
<a name="l01254"></a>01254       printf (<span class="stringliteral">"\n"</span>);
<a name="l01255"></a>01255     }
<a name="l01256"></a>01256 
<a name="l01257"></a>01257   exit (0);
<a name="l01258"></a>01258 }
<a name="l01259"></a>01259 
<a name="l01260"></a>01260 <span class="preprocessor">#endif </span><span class="comment">/* TEST */</span>
</pre></div><hr size="1"><address style="align: right;"><small>Generated on Fri Jun 8 08:51:39 2007 for CanFestival by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.1 </small></address>
</body>
</html>