doc/doxygen/html/TestMasterSlave_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.
215
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
     1
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
     2
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
     3
<title>CanFestival: examples/TestMasterSlave/getopt.c Source File</title>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
     4
<link href="doxygen.css" rel="stylesheet" type="text/css">
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
     5
<link href="tabs.css" rel="stylesheet" type="text/css">
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
     6
</head><body>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
     7
<!-- Generated by Doxygen 1.5.1 -->
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
     8
<div class="tabs">
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
     9
  <ul>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    10
    <li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    11
    <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    12
    <li id="current"><a href="files.html"><span>Files</span></a></li>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    13
    <li><a href="dirs.html"><span>Directories</span></a></li>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    14
  </ul></div>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    15
<div class="tabs">
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    16
  <ul>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    17
    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    18
    <li><a href="globals.html"><span>Globals</span></a></li>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    19
  </ul></div>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    20
<div class="nav">
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    21
<a class="el" href="dir_fc8d77725c328f9de5a130dceab5a508.html">examples</a>&nbsp;&raquo&nbsp;<a class="el" href="dir_cb9d6d827bc8780b4808994475b6fec1.html">TestMasterSlave</a></div>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    22
<h1>getopt.c</h1><a href="TestMasterSlave_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>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    23
<a name="l00002"></a>00002 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    24
<a name="l00003"></a>00003 <span class="comment">/* Getopt for GNU.</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    25
<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>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    26
<a name="l00005"></a>00005 <span class="comment">   "Keep this file name-space clean" means, talk to drepper@gnu.org</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    27
<a name="l00006"></a>00006 <span class="comment">   before changing it!</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    28
<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>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    29
<a name="l00008"></a>00008 <span class="comment">        Free Software Foundation, Inc.</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    30
<a name="l00009"></a>00009 <span class="comment">   This file is part of the GNU C Library.</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    31
<a name="l00010"></a>00010 <span class="comment"></span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    32
<a name="l00011"></a>00011 <span class="comment">   The GNU C Library is free software; you can redistribute it and/or</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    33
<a name="l00012"></a>00012 <span class="comment">   modify it under the terms of the GNU Lesser General Public</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    34
<a name="l00013"></a>00013 <span class="comment">   License as published by the Free Software Foundation; either</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    35
<a name="l00014"></a>00014 <span class="comment">   version 2.1 of the License, or (at your option) any later version.</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    36
<a name="l00015"></a>00015 <span class="comment"></span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    37
<a name="l00016"></a>00016 <span class="comment">   The GNU C Library is distributed in the hope that it will be useful,</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    38
<a name="l00017"></a>00017 <span class="comment">   but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    39
<a name="l00018"></a>00018 <span class="comment">   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    40
<a name="l00019"></a>00019 <span class="comment">   Lesser General Public License for more details.</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    41
<a name="l00020"></a>00020 <span class="comment"></span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    42
<a name="l00021"></a>00021 <span class="comment">   You should have received a copy of the GNU Lesser General Public</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    43
<a name="l00022"></a>00022 <span class="comment">   License along with the GNU C Library; if not, write to the Free</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    44
<a name="l00023"></a>00023 <span class="comment">   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    45
<a name="l00024"></a>00024 <span class="comment">   02111-1307 USA.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    46
<a name="l00025"></a>00025 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    47
<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>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    48
<a name="l00027"></a>00027 <span class="comment">   Ditto for AIX 3.2 and &lt;stdlib.h&gt;.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    49
<a name="l00028"></a>00028 <span class="preprocessor">#ifndef _NO_PROTO</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    50
<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor"># define _NO_PROTO</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    51
<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    52
<a name="l00031"></a>00031 <span class="preprocessor"></span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    53
<a name="l00032"></a>00032 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    54
<a name="l00033"></a>00033 <span class="preprocessor"></span><span class="preprocessor"># include &lt;config.h&gt;</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    55
<a name="l00034"></a>00034 <span class="preprocessor">#endif</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    56
<a name="l00035"></a>00035 <span class="preprocessor"></span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    57
<a name="l00036"></a>00036 <span class="preprocessor">#if !defined __STDC__ || !__STDC__</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    58
<a name="l00037"></a>00037 <span class="preprocessor"></span><span class="comment">/* This is a separate conditional since some stdc systems</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    59
<a name="l00038"></a>00038 <span class="comment">   reject `defined (const)'.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    60
<a name="l00039"></a>00039 <span class="preprocessor"># ifndef const</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    61
<a name="l00040"></a>00040 <span class="preprocessor"></span><span class="preprocessor">#  define const</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    62
<a name="l00041"></a>00041 <span class="preprocessor"></span><span class="preprocessor"># endif</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    63
<a name="l00042"></a>00042 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    64
<a name="l00043"></a>00043 <span class="preprocessor"></span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    65
<a name="l00044"></a>00044 <span class="preprocessor">#include &lt;stdio.h&gt;</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    66
<a name="l00045"></a>00045 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    67
<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>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    68
<a name="l00047"></a>00047 <span class="comment">   actually compiling the library itself.  This code is part of the GNU C</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    69
<a name="l00048"></a>00048 <span class="comment">   Library, but also included in many other GNU distributions.  Compiling</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    70
<a name="l00049"></a>00049 <span class="comment">   and linking in this code is a waste when using the GNU C library</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    71
<a name="l00050"></a>00050 <span class="comment">   (especially if it is a shared library).  Rather than having every GNU</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    72
<a name="l00051"></a>00051 <span class="comment">   program understand `configure --with-gnu-libc' and omit the object files,</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    73
<a name="l00052"></a>00052 <span class="comment">   it is simpler to just do this in the source for each such file.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    74
<a name="l00053"></a>00053 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    75
<a name="l00054"></a><a class="code" href="TestMasterSlave_2getopt_8c.html#5325c715897861c318d3ae312ac452cc">00054</a> <span class="preprocessor">#define GETOPT_INTERFACE_VERSION 2</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    76
<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>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    77
<a name="l00056"></a>00056 <span class="preprocessor"></span><span class="preprocessor"># include &lt;gnu-versions.h&gt;</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    78
<a name="l00057"></a>00057 <span class="preprocessor"># if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    79
<a name="l00058"></a>00058 <span class="preprocessor"></span><span class="preprocessor">#  define ELIDE_CODE</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    80
<a name="l00059"></a>00059 <span class="preprocessor"></span><span class="preprocessor"># endif</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    81
<a name="l00060"></a>00060 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    82
<a name="l00061"></a>00061 <span class="preprocessor"></span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    83
<a name="l00062"></a>00062 <span class="preprocessor">#ifndef ELIDE_CODE</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    84
<a name="l00063"></a>00063 <span class="preprocessor"></span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    85
<a name="l00064"></a>00064 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    86
<a name="l00065"></a>00065 <span class="comment">/* This needs to come after some library #include</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    87
<a name="l00066"></a>00066 <span class="comment">   to get __GNU_LIBRARY__ defined.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    88
<a name="l00067"></a>00067 <span class="preprocessor">#ifdef  __GNU_LIBRARY__</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    89
<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>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    90
<a name="l00069"></a>00069 <span class="comment">   contain conflicting prototypes for getopt.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    91
<a name="l00070"></a>00070 <span class="preprocessor"># include &lt;stdlib.h&gt;</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    92
<a name="l00071"></a>00071 <span class="preprocessor"># include &lt;unistd.h&gt;</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    93
<a name="l00072"></a>00072 <span class="preprocessor">#endif  </span><span class="comment">/* GNU C library.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    94
<a name="l00073"></a>00073 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    95
<a name="l00074"></a>00074 <span class="preprocessor">#ifdef VMS</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    96
<a name="l00075"></a>00075 <span class="preprocessor"></span><span class="preprocessor"># include &lt;unixlib.h&gt;</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    97
<a name="l00076"></a>00076 <span class="preprocessor"># if HAVE_STRING_H - 0</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    98
<a name="l00077"></a>00077 <span class="preprocessor"></span><span class="preprocessor">#  include &lt;string.h&gt;</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
    99
<a name="l00078"></a>00078 <span class="preprocessor"># endif</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   100
<a name="l00079"></a>00079 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   101
<a name="l00080"></a>00080 <span class="preprocessor"></span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   102
<a name="l00081"></a>00081 <span class="preprocessor">#ifndef _</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   103
<a name="l00082"></a>00082 <span class="preprocessor"></span><span class="comment">/* This is for other GNU distributions with internationalized messages.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   104
<a name="l00083"></a>00083 <span class="preprocessor"># if (HAVE_LIBINTL_H &amp;&amp; ENABLE_NLS) || defined _LIBC</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   105
<a name="l00084"></a>00084 <span class="preprocessor"></span><span class="preprocessor">#  include &lt;libintl.h&gt;</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   106
<a name="l00085"></a>00085 <span class="preprocessor">#  ifndef _</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   107
<a name="l00086"></a>00086 <span class="preprocessor"></span><span class="preprocessor">#   define _(msgid)     gettext (msgid)</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   108
<a name="l00087"></a>00087 <span class="preprocessor"></span><span class="preprocessor">#  endif</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   109
<a name="l00088"></a>00088 <span class="preprocessor"></span><span class="preprocessor"># else</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   110
<a name="l00089"></a><a class="code" href="TestMasterSlave_2getopt_8c.html#86a239addea586602343007a370bf8ad">00089</a> <span class="preprocessor"></span><span class="preprocessor">#  define _(msgid)      (msgid)</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   111
<a name="l00090"></a>00090 <span class="preprocessor"></span><span class="preprocessor"># endif</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   112
<a name="l00091"></a>00091 <span class="preprocessor"></span><span class="preprocessor"># if defined _LIBC &amp;&amp; defined USE_IN_LIBIO</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   113
<a name="l00092"></a>00092 <span class="preprocessor"></span><span class="preprocessor">#  include &lt;wchar.h&gt;</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   114
<a name="l00093"></a>00093 <span class="preprocessor"># endif</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   115
<a name="l00094"></a>00094 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   116
<a name="l00095"></a>00095 <span class="preprocessor"></span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   117
<a name="l00096"></a>00096 <span class="comment">/* This version of `getopt' appears to the caller like standard Unix `getopt'</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   118
<a name="l00097"></a>00097 <span class="comment">   but it behaves differently for the user, since it allows the user</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   119
<a name="l00098"></a>00098 <span class="comment">   to intersperse the options with the other arguments.</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   120
<a name="l00099"></a>00099 <span class="comment"></span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   121
<a name="l00100"></a>00100 <span class="comment">   As `getopt' works, it permutes the elements of ARGV so that,</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   122
<a name="l00101"></a>00101 <span class="comment">   when it is done, all the options precede everything else.  Thus</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   123
<a name="l00102"></a>00102 <span class="comment">   all application programs are extended to handle flexible argument order.</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   124
<a name="l00103"></a>00103 <span class="comment"></span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   125
<a name="l00104"></a>00104 <span class="comment">   Setting the environment variable POSIXLY_CORRECT disables permutation.</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   126
<a name="l00105"></a>00105 <span class="comment">   Then the behavior is completely standard.</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   127
<a name="l00106"></a>00106 <span class="comment"></span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   128
<a name="l00107"></a>00107 <span class="comment">   GNU application programs can use a third alternative mode in which</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   129
<a name="l00108"></a>00108 <span class="comment">   they can distinguish the relative order of options and other arguments.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   130
<a name="l00109"></a>00109 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   131
<a name="l00110"></a>00110 <span class="preprocessor">#include "<a class="code" href="TestMasterSlave_2getopt_8h.html">getopt.h</a>"</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   132
<a name="l00111"></a>00111 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   133
<a name="l00112"></a>00112 <span class="comment">/* For communication from `getopt' to the caller.</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   134
<a name="l00113"></a>00113 <span class="comment">   When `getopt' finds an option that takes an argument,</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   135
<a name="l00114"></a>00114 <span class="comment">   the argument value is returned here.</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   136
<a name="l00115"></a>00115 <span class="comment">   Also, when `ordering' is RETURN_IN_ORDER,</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   137
<a name="l00116"></a>00116 <span class="comment">   each non-option ARGV-element is returned here.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   138
<a name="l00117"></a>00117 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   139
<a name="l00118"></a><a class="code" href="TestMasterMicroMod_2getopt_8h.html#db50a0eab9fed92fc3bfc7dfa4f2c410">00118</a> <span class="keywordtype">char</span> *<a class="code" href="TestMasterSlave_2getopt_8c.html#db50a0eab9fed92fc3bfc7dfa4f2c410">optarg</a>;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   140
<a name="l00119"></a>00119 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   141
<a name="l00120"></a>00120 <span class="comment">/* Index in ARGV of the next element to be scanned.</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   142
<a name="l00121"></a>00121 <span class="comment">   This is used for communication to and from the caller</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   143
<a name="l00122"></a>00122 <span class="comment">   and for communication between successive calls to `getopt'.</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   144
<a name="l00123"></a>00123 <span class="comment"></span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   145
<a name="l00124"></a>00124 <span class="comment">   On entry to `getopt', zero means this is the first call; initialize.</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   146
<a name="l00125"></a>00125 <span class="comment"></span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   147
<a name="l00126"></a>00126 <span class="comment">   When `getopt' returns -1, this is the index of the first of the</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   148
<a name="l00127"></a>00127 <span class="comment">   non-option elements that the caller should itself scan.</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   149
<a name="l00128"></a>00128 <span class="comment"></span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   150
<a name="l00129"></a>00129 <span class="comment">   Otherwise, `optind' communicates from one call to the next</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   151
<a name="l00130"></a>00130 <span class="comment">   how much of ARGV has been scanned so far.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   152
<a name="l00131"></a>00131 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   153
<a name="l00132"></a>00132 <span class="comment">/* 1003.2 says this must be 1 before any call.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   154
<a name="l00133"></a><a class="code" href="TestMasterMicroMod_2getopt_8h.html#d5e1c16213bbee2d5e8cc363309f418c">00133</a> <span class="keywordtype">int</span> <a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a> = 1;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   155
<a name="l00134"></a>00134 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   156
<a name="l00135"></a>00135 <span class="comment">/* Formerly, initialization of getopt depended on optind==0, which</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   157
<a name="l00136"></a>00136 <span class="comment">   causes problems with re-calling getopt as programs generally don't</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   158
<a name="l00137"></a>00137 <span class="comment">   know that. */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   159
<a name="l00138"></a>00138 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   160
<a name="l00139"></a><a class="code" href="TestMasterSlave_2getopt_8c.html#28286be757527aeb1db951b5da9aeec1">00139</a> <span class="keywordtype">int</span> <a class="code" href="TestMasterSlave_2getopt_8c.html#28286be757527aeb1db951b5da9aeec1">__getopt_initialized</a>;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   161
<a name="l00140"></a>00140 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   162
<a name="l00141"></a>00141 <span class="comment">/* The next char to be scanned in the option-element</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   163
<a name="l00142"></a>00142 <span class="comment">   in which the last option character we returned was found.</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   164
<a name="l00143"></a>00143 <span class="comment">   This allows us to pick up the scan where we left off.</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   165
<a name="l00144"></a>00144 <span class="comment"></span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   166
<a name="l00145"></a>00145 <span class="comment">   If this is zero, or a null string, it means resume the scan</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   167
<a name="l00146"></a>00146 <span class="comment">   by advancing to the next ARGV-element.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   168
<a name="l00147"></a>00147 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   169
<a name="l00148"></a>00148 <span class="keyword">static</span> <span class="keywordtype">char</span> *nextchar;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   170
<a name="l00149"></a>00149 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   171
<a name="l00150"></a>00150 <span class="comment">/* Callers store zero here to inhibit the error message</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   172
<a name="l00151"></a>00151 <span class="comment">   for unrecognized options.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   173
<a name="l00152"></a>00152 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   174
<a name="l00153"></a><a class="code" href="TestMasterMicroMod_2getopt_8h.html#e30f05ee1e2e5652f174a35c7875d25e">00153</a> <span class="keywordtype">int</span> <a class="code" href="TestMasterSlave_2getopt_8c.html#e30f05ee1e2e5652f174a35c7875d25e">opterr</a> = 1;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   175
<a name="l00154"></a>00154 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   176
<a name="l00155"></a>00155 <span class="comment">/* Set to an option character which was unrecognized.</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   177
<a name="l00156"></a>00156 <span class="comment">   This must be initialized on some systems to avoid linking in the</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   178
<a name="l00157"></a>00157 <span class="comment">   system's own getopt implementation.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   179
<a name="l00158"></a>00158 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   180
<a name="l00159"></a><a class="code" href="TestMasterMicroMod_2getopt_8h.html#475b8db98445da73e5f62a1ef6324b95">00159</a> <span class="keywordtype">int</span> <a class="code" href="TestMasterSlave_2getopt_8c.html#475b8db98445da73e5f62a1ef6324b95">optopt</a> = <span class="charliteral">'?'</span>;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   181
<a name="l00160"></a>00160 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   182
<a name="l00161"></a>00161 <span class="comment">/* Describe how to deal with options that follow non-option ARGV-elements.</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   183
<a name="l00162"></a>00162 <span class="comment"></span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   184
<a name="l00163"></a>00163 <span class="comment">   If the caller did not specify anything,</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   185
<a name="l00164"></a>00164 <span class="comment">   the default is REQUIRE_ORDER if the environment variable</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   186
<a name="l00165"></a>00165 <span class="comment">   POSIXLY_CORRECT is defined, PERMUTE otherwise.</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   187
<a name="l00166"></a>00166 <span class="comment"></span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   188
<a name="l00167"></a>00167 <span class="comment">   REQUIRE_ORDER means don't recognize them as options;</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   189
<a name="l00168"></a>00168 <span class="comment">   stop option processing when the first non-option is seen.</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   190
<a name="l00169"></a>00169 <span class="comment">   This is what Unix does.</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   191
<a name="l00170"></a>00170 <span class="comment">   This mode of operation is selected by either setting the environment</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   192
<a name="l00171"></a>00171 <span class="comment">   variable POSIXLY_CORRECT, or using `+' as the first character</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   193
<a name="l00172"></a>00172 <span class="comment">   of the list of option characters.</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   194
<a name="l00173"></a>00173 <span class="comment"></span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   195
<a name="l00174"></a>00174 <span class="comment">   PERMUTE is the default.  We permute the contents of ARGV as we scan,</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   196
<a name="l00175"></a>00175 <span class="comment">   so that eventually all the non-options are at the end.  This allows options</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   197
<a name="l00176"></a>00176 <span class="comment">   to be given in any order, even with programs that were not written to</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   198
<a name="l00177"></a>00177 <span class="comment">   expect this.</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   199
<a name="l00178"></a>00178 <span class="comment"></span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   200
<a name="l00179"></a>00179 <span class="comment">   RETURN_IN_ORDER is an option available to programs that were written</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   201
<a name="l00180"></a>00180 <span class="comment">   to expect options and other ARGV-elements in any order and that care about</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   202
<a name="l00181"></a>00181 <span class="comment">   the ordering of the two.  We describe each non-option ARGV-element</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   203
<a name="l00182"></a>00182 <span class="comment">   as if it were the argument of an option with character code 1.</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   204
<a name="l00183"></a>00183 <span class="comment">   Using `-' as the first character of the list of option characters</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   205
<a name="l00184"></a>00184 <span class="comment">   selects this mode of operation.</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   206
<a name="l00185"></a>00185 <span class="comment"></span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   207
<a name="l00186"></a>00186 <span class="comment">   The special argument `--' forces an end of option-scanning regardless</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   208
<a name="l00187"></a>00187 <span class="comment">   of the value of `ordering'.  In the case of RETURN_IN_ORDER, only</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   209
<a name="l00188"></a>00188 <span class="comment">   `--' can cause `getopt' to return -1 with `optind' != ARGC.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   210
<a name="l00189"></a>00189 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   211
<a name="l00190"></a>00190 <span class="keyword">static</span> <span class="keyword">enum</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   212
<a name="l00191"></a>00191 {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   213
<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>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   214
<a name="l00193"></a>00193 } ordering;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   215
<a name="l00194"></a>00194 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   216
<a name="l00195"></a>00195 <span class="comment">/* Value of POSIXLY_CORRECT environment variable.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   217
<a name="l00196"></a>00196 <span class="keyword">static</span> <span class="keywordtype">char</span> *posixly_correct;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   218
<a name="l00197"></a>00197 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   219
<a name="l00198"></a>00198 <span class="preprocessor">#ifdef  __GNU_LIBRARY__</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   220
<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>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   221
<a name="l00200"></a>00200 <span class="comment">   because there are many ways it can cause trouble.</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   222
<a name="l00201"></a>00201 <span class="comment">   On some systems, it contains special magic macros that don't work</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   223
<a name="l00202"></a>00202 <span class="comment">   in GCC.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   224
<a name="l00203"></a>00203 <span class="preprocessor"># include &lt;string.h&gt;</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   225
<a name="l00204"></a>00204 <span class="preprocessor"># define my_index       strchr</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   226
<a name="l00205"></a>00205 <span class="preprocessor"></span><span class="preprocessor">#else</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   227
<a name="l00206"></a>00206 <span class="preprocessor"></span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   228
<a name="l00207"></a>00207 <span class="preprocessor"># if HAVE_STRING_H || WIN32 </span><span class="comment">/* Pete Wilson mod 7/28/02 */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   229
<a name="l00208"></a>00208 <span class="preprocessor">#  include &lt;string.h&gt;</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   230
<a name="l00209"></a>00209 <span class="preprocessor"># else</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   231
<a name="l00210"></a>00210 <span class="preprocessor"></span><span class="preprocessor">#  include &lt;strings.h&gt;</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   232
<a name="l00211"></a>00211 <span class="preprocessor"># endif</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   233
<a name="l00212"></a>00212 <span class="preprocessor"></span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   234
<a name="l00213"></a>00213 <span class="comment">/* Avoid depending on library functions or files</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   235
<a name="l00214"></a>00214 <span class="comment">   whose names are inconsistent.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   236
<a name="l00215"></a>00215 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   237
<a name="l00216"></a>00216 <span class="preprocessor">#ifndef getenv</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   238
<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> ();
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   239
<a name="l00218"></a>00218 <span class="preprocessor">#endif</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   240
<a name="l00219"></a>00219 <span class="preprocessor"></span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   241
<a name="l00220"></a>00220 <span class="keyword">static</span> <span class="keywordtype">char</span> *
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   242
<a name="l00221"></a>00221 my_index (str, chr)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   243
<a name="l00222"></a>00222      const <span class="keywordtype">char</span> *str;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   244
<a name="l00223"></a>00223      <span class="keywordtype">int</span> chr;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   245
<a name="l00224"></a>00224 {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   246
<a name="l00225"></a>00225   <span class="keywordflow">while</span> (*str)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   247
<a name="l00226"></a>00226     {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   248
<a name="l00227"></a>00227       <span class="keywordflow">if</span> (*str == chr)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   249
<a name="l00228"></a>00228         <span class="keywordflow">return</span> (<span class="keywordtype">char</span> *) str;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   250
<a name="l00229"></a>00229       str++;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   251
<a name="l00230"></a>00230     }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   252
<a name="l00231"></a>00231   <span class="keywordflow">return</span> 0;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   253
<a name="l00232"></a>00232 }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   254
<a name="l00233"></a>00233 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   255
<a name="l00234"></a>00234 <span class="comment">/* If using GCC, we can safely declare strlen this way.</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   256
<a name="l00235"></a>00235 <span class="comment">   If not using GCC, it is ok not to declare it.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   257
<a name="l00236"></a>00236 <span class="preprocessor">#ifdef __GNUC__</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   258
<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>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   259
<a name="l00238"></a>00238 <span class="comment">   That was relevant to code that was here before.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   260
<a name="l00239"></a>00239 <span class="preprocessor"># if (!defined __STDC__ || !__STDC__) &amp;&amp; !defined strlen</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   261
<a name="l00240"></a>00240 <span class="preprocessor"></span><span class="comment">/* gcc with -traditional declares the built-in strlen to return int,</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   262
<a name="l00241"></a>00241 <span class="comment">   and has done so at least since version 2.4.5. -- rms.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   263
<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> *);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   264
<a name="l00243"></a>00243 <span class="preprocessor"># endif </span><span class="comment">/* not __STDC__ */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   265
<a name="l00244"></a>00244 <span class="preprocessor">#endif </span><span class="comment">/* __GNUC__ */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   266
<a name="l00245"></a>00245 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   267
<a name="l00246"></a>00246 <span class="preprocessor">#endif </span><span class="comment">/* not __GNU_LIBRARY__ */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   268
<a name="l00247"></a>00247 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   269
<a name="l00248"></a>00248 <span class="comment">/* Handle permutation of arguments.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   270
<a name="l00249"></a>00249 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   271
<a name="l00250"></a>00250 <span class="comment">/* Describe the part of ARGV that contains non-options that have</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   272
<a name="l00251"></a>00251 <span class="comment">   been skipped.  `first_nonopt' is the index in ARGV of the first of them;</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   273
<a name="l00252"></a>00252 <span class="comment">   `last_nonopt' is the index after the last of them.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   274
<a name="l00253"></a>00253 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   275
<a name="l00254"></a>00254 <span class="keyword">static</span> <span class="keywordtype">int</span> first_nonopt;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   276
<a name="l00255"></a>00255 <span class="keyword">static</span> <span class="keywordtype">int</span> last_nonopt;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   277
<a name="l00256"></a>00256 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   278
<a name="l00257"></a>00257 <span class="preprocessor">#ifdef _LIBC</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   279
<a name="l00258"></a>00258 <span class="preprocessor"></span><span class="comment">/* Stored original parameters.</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   280
<a name="l00259"></a>00259 <span class="comment">   XXX This is no good solution.  We should rather copy the args so</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   281
<a name="l00260"></a>00260 <span class="comment">   that we can compare them later.  But we must not use malloc(3).  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   282
<a name="l00261"></a>00261 <span class="keyword">extern</span> <span class="keywordtype">int</span> __libc_argc;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   283
<a name="l00262"></a>00262 <span class="keyword">extern</span> <span class="keywordtype">char</span> **__libc_argv;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   284
<a name="l00263"></a>00263 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   285
<a name="l00264"></a>00264 <span class="comment">/* Bash 2.0 gives us an environment variable containing flags</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   286
<a name="l00265"></a>00265 <span class="comment">   indicating ARGV elements that should not be considered arguments.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   287
<a name="l00266"></a>00266 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   288
<a name="l00267"></a>00267 <span class="preprocessor"># ifdef USE_NONOPTION_FLAGS</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   289
<a name="l00268"></a>00268 <span class="preprocessor"></span><span class="comment">/* Defined in getopt_init.c  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   290
<a name="l00269"></a>00269 <span class="keyword">extern</span> <span class="keywordtype">char</span> *__getopt_nonoption_flags;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   291
<a name="l00270"></a>00270 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   292
<a name="l00271"></a>00271 <span class="keyword">static</span> <span class="keywordtype">int</span> nonoption_flags_max_len;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   293
<a name="l00272"></a>00272 <span class="keyword">static</span> <span class="keywordtype">int</span> nonoption_flags_len;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   294
<a name="l00273"></a>00273 <span class="preprocessor"># endif</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   295
<a name="l00274"></a>00274 <span class="preprocessor"></span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   296
<a name="l00275"></a>00275 <span class="preprocessor"># ifdef USE_NONOPTION_FLAGS</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   297
<a name="l00276"></a>00276 <span class="preprocessor"></span><span class="preprocessor">#  define SWAP_FLAGS(ch1, ch2) \</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   298
<a name="l00277"></a>00277 <span class="preprocessor">  if (nonoption_flags_len &gt; 0)                                                \</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   299
<a name="l00278"></a>00278 <span class="preprocessor">    {                                                                         \</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   300
<a name="l00279"></a>00279 <span class="preprocessor">      char __tmp = __getopt_nonoption_flags[ch1];                             \</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   301
<a name="l00280"></a>00280 <span class="preprocessor">      __getopt_nonoption_flags[ch1] = __getopt_nonoption_flags[ch2];          \</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   302
<a name="l00281"></a>00281 <span class="preprocessor">      __getopt_nonoption_flags[ch2] = __tmp;                                  \</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   303
<a name="l00282"></a>00282 <span class="preprocessor">    }</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   304
<a name="l00283"></a>00283 <span class="preprocessor"></span><span class="preprocessor"># else</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   305
<a name="l00284"></a>00284 <span class="preprocessor"></span><span class="preprocessor">#  define SWAP_FLAGS(ch1, ch2)</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   306
<a name="l00285"></a>00285 <span class="preprocessor"></span><span class="preprocessor"># endif</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   307
<a name="l00286"></a>00286 <span class="preprocessor"></span><span class="preprocessor">#else   </span><span class="comment">/* !_LIBC */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   308
<a name="l00287"></a><a class="code" href="TestMasterSlave_2getopt_8c.html#6e06e56c5fa96faaf47f3b231e015e35">00287</a> <span class="preprocessor"># define SWAP_FLAGS(ch1, ch2)</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   309
<a name="l00288"></a>00288 <span class="preprocessor"></span><span class="preprocessor">#endif  </span><span class="comment">/* _LIBC */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   310
<a name="l00289"></a>00289 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   311
<a name="l00290"></a>00290 <span class="comment">/* Exchange two adjacent subsequences of ARGV.</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   312
<a name="l00291"></a>00291 <span class="comment">   One subsequence is elements [first_nonopt,last_nonopt)</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   313
<a name="l00292"></a>00292 <span class="comment">   which contains all the non-options that have been skipped so far.</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   314
<a name="l00293"></a>00293 <span class="comment">   The other is elements [last_nonopt,optind), which contains all</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   315
<a name="l00294"></a>00294 <span class="comment">   the options processed since those non-options were skipped.</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   316
<a name="l00295"></a>00295 <span class="comment"></span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   317
<a name="l00296"></a>00296 <span class="comment">   `first_nonopt' and `last_nonopt' are relocated so that they describe</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   318
<a name="l00297"></a>00297 <span class="comment">   the new indices of the non-options in ARGV after they are moved.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   319
<a name="l00298"></a>00298 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   320
<a name="l00299"></a>00299 <span class="preprocessor">#if defined __STDC__ &amp;&amp; __STDC__</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   321
<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> **);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   322
<a name="l00301"></a>00301 <span class="preprocessor">#endif</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   323
<a name="l00302"></a>00302 <span class="preprocessor"></span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   324
<a name="l00303"></a>00303 <span class="keyword">static</span> <span class="keywordtype">void</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   325
<a name="l00304"></a>00304 exchange (argv)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   326
<a name="l00305"></a>00305      char **argv;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   327
<a name="l00306"></a>00306 {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   328
<a name="l00307"></a>00307   <span class="keywordtype">int</span> bottom = first_nonopt;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   329
<a name="l00308"></a>00308   <span class="keywordtype">int</span> middle = last_nonopt;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   330
<a name="l00309"></a>00309   <span class="keywordtype">int</span> top = <a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   331
<a name="l00310"></a>00310   <span class="keywordtype">char</span> *tem;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   332
<a name="l00311"></a>00311 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   333
<a name="l00312"></a>00312   <span class="comment">/* Exchange the shorter segment with the far end of the longer segment.</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   334
<a name="l00313"></a>00313 <span class="comment">     That puts the shorter segment into the right place.</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   335
<a name="l00314"></a>00314 <span class="comment">     It leaves the longer segment in the right place overall,</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   336
<a name="l00315"></a>00315 <span class="comment">     but it consists of two parts that need to be swapped next.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   337
<a name="l00316"></a>00316 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   338
<a name="l00317"></a>00317 <span class="preprocessor">#if defined _LIBC &amp;&amp; defined USE_NONOPTION_FLAGS</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   339
<a name="l00318"></a>00318 <span class="preprocessor"></span>  <span class="comment">/* First make sure the handling of the `__getopt_nonoption_flags'</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   340
<a name="l00319"></a>00319 <span class="comment">     string can work normally.  Our top argument must be in the range</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   341
<a name="l00320"></a>00320 <span class="comment">     of the string.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   342
<a name="l00321"></a>00321   <span class="keywordflow">if</span> (nonoption_flags_len &gt; 0 &amp;&amp; top &gt;= nonoption_flags_max_len)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   343
<a name="l00322"></a>00322     {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   344
<a name="l00323"></a>00323       <span class="comment">/* We must extend the array.  The user plays games with us and</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   345
<a name="l00324"></a>00324 <span class="comment">         presents new arguments.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   346
<a name="l00325"></a>00325       <span class="keywordtype">char</span> *new_str = malloc (top + 1);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   347
<a name="l00326"></a>00326       <span class="keywordflow">if</span> (new_str == NULL)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   348
<a name="l00327"></a>00327         nonoption_flags_len = nonoption_flags_max_len = 0;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   349
<a name="l00328"></a>00328       <span class="keywordflow">else</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   350
<a name="l00329"></a>00329         {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   351
<a name="l00330"></a>00330           memset (__mempcpy (new_str, __getopt_nonoption_flags,
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   352
<a name="l00331"></a>00331                              nonoption_flags_max_len),
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   353
<a name="l00332"></a>00332                   <span class="charliteral">'\0'</span>, top + 1 - nonoption_flags_max_len);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   354
<a name="l00333"></a>00333           nonoption_flags_max_len = top + 1;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   355
<a name="l00334"></a>00334           __getopt_nonoption_flags = new_str;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   356
<a name="l00335"></a>00335         }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   357
<a name="l00336"></a>00336     }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   358
<a name="l00337"></a>00337 <span class="preprocessor">#endif</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   359
<a name="l00338"></a>00338 <span class="preprocessor"></span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   360
<a name="l00339"></a>00339   <span class="keywordflow">while</span> (top &gt; middle &amp;&amp; middle &gt; bottom)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   361
<a name="l00340"></a>00340     {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   362
<a name="l00341"></a>00341       <span class="keywordflow">if</span> (top - middle &gt; middle - bottom)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   363
<a name="l00342"></a>00342         {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   364
<a name="l00343"></a>00343           <span class="comment">/* Bottom segment is the short one.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   365
<a name="l00344"></a>00344           <span class="keywordtype">int</span> len = middle - bottom;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   366
<a name="l00345"></a>00345           <span class="keyword">register</span> <span class="keywordtype">int</span> i;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   367
<a name="l00346"></a>00346 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   368
<a name="l00347"></a>00347           <span class="comment">/* Swap it with the top part of the top segment.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   369
<a name="l00348"></a>00348           <span class="keywordflow">for</span> (i = 0; i &lt; len; i++)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   370
<a name="l00349"></a>00349             {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   371
<a name="l00350"></a>00350               tem = argv[bottom + i];
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   372
<a name="l00351"></a>00351               argv[bottom + i] = argv[top - (middle - bottom) + i];
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   373
<a name="l00352"></a>00352               argv[top - (middle - bottom) + i] = tem;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   374
<a name="l00353"></a>00353               <a class="code" href="TestMasterSlave_2getopt_8c.html#6e06e56c5fa96faaf47f3b231e015e35">SWAP_FLAGS</a> (bottom + i, top - (middle - bottom) + i);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   375
<a name="l00354"></a>00354             }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   376
<a name="l00355"></a>00355           <span class="comment">/* Exclude the moved bottom segment from further swapping.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   377
<a name="l00356"></a>00356           top -= len;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   378
<a name="l00357"></a>00357         }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   379
<a name="l00358"></a>00358       <span class="keywordflow">else</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   380
<a name="l00359"></a>00359         {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   381
<a name="l00360"></a>00360           <span class="comment">/* Top segment is the short one.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   382
<a name="l00361"></a>00361           <span class="keywordtype">int</span> len = top - middle;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   383
<a name="l00362"></a>00362           <span class="keyword">register</span> <span class="keywordtype">int</span> i;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   384
<a name="l00363"></a>00363 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   385
<a name="l00364"></a>00364           <span class="comment">/* Swap it with the bottom part of the bottom segment.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   386
<a name="l00365"></a>00365           <span class="keywordflow">for</span> (i = 0; i &lt; len; i++)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   387
<a name="l00366"></a>00366             {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   388
<a name="l00367"></a>00367               tem = argv[bottom + i];
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   389
<a name="l00368"></a>00368               argv[bottom + i] = argv[middle + i];
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   390
<a name="l00369"></a>00369               argv[middle + i] = tem;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   391
<a name="l00370"></a>00370               <a class="code" href="TestMasterSlave_2getopt_8c.html#6e06e56c5fa96faaf47f3b231e015e35">SWAP_FLAGS</a> (bottom + i, middle + i);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   392
<a name="l00371"></a>00371             }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   393
<a name="l00372"></a>00372           <span class="comment">/* Exclude the moved top segment from further swapping.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   394
<a name="l00373"></a>00373           bottom += len;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   395
<a name="l00374"></a>00374         }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   396
<a name="l00375"></a>00375     }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   397
<a name="l00376"></a>00376 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   398
<a name="l00377"></a>00377   <span class="comment">/* Update records for the slots the non-options now occupy.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   399
<a name="l00378"></a>00378 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   400
<a name="l00379"></a>00379   first_nonopt += (<a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a> - last_nonopt);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   401
<a name="l00380"></a>00380   last_nonopt = <a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   402
<a name="l00381"></a>00381 }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   403
<a name="l00382"></a>00382 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   404
<a name="l00383"></a>00383 <span class="comment">/* Initialize the internal data when the first call is made.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   405
<a name="l00384"></a>00384 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   406
<a name="l00385"></a>00385 <span class="preprocessor">#if defined __STDC__ &amp;&amp; __STDC__</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   407
<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> *);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   408
<a name="l00387"></a>00387 <span class="preprocessor">#endif</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   409
<a name="l00388"></a>00388 <span class="preprocessor"></span><span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   410
<a name="l00389"></a>00389 _getopt_initialize (argc, argv, optstring)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   411
<a name="l00390"></a>00390      int argc;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   412
<a name="l00391"></a>00391      <span class="keywordtype">char</span> *const *argv;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   413
<a name="l00392"></a>00392      const <span class="keywordtype">char</span> *optstring;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   414
<a name="l00393"></a>00393 {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   415
<a name="l00394"></a>00394   <span class="comment">/* Start processing options with ARGV-element 1 (since ARGV-element 0</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   416
<a name="l00395"></a>00395 <span class="comment">     is the program name); the sequence of previously skipped</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   417
<a name="l00396"></a>00396 <span class="comment">     non-option ARGV-elements is empty.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   418
<a name="l00397"></a>00397 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   419
<a name="l00398"></a>00398   first_nonopt = last_nonopt = <a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   420
<a name="l00399"></a>00399 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   421
<a name="l00400"></a>00400   nextchar = NULL;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   422
<a name="l00401"></a>00401 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   423
<a name="l00402"></a>00402   posixly_correct = <a class="code" href="TestMasterSlave_2getopt_8c.html#ee28fd8a0e40b6d958f7d20348e45368">getenv</a> (<span class="stringliteral">"POSIXLY_CORRECT"</span>);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   424
<a name="l00403"></a>00403 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   425
<a name="l00404"></a>00404   <span class="comment">/* Determine how to handle the ordering of options and nonoptions.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   426
<a name="l00405"></a>00405 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   427
<a name="l00406"></a>00406   <span class="keywordflow">if</span> (optstring[0] == <span class="charliteral">'-'</span>)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   428
<a name="l00407"></a>00407     {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   429
<a name="l00408"></a>00408       ordering = <a class="code" href="TestMasterSlave_2getopt_8c.html#06fc87d81c62e9abb8790b6e5713c55b3c56550bfafe809d9214b863b69c31c5">RETURN_IN_ORDER</a>;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   430
<a name="l00409"></a>00409       ++optstring;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   431
<a name="l00410"></a>00410     }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   432
<a name="l00411"></a>00411   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (optstring[0] == <span class="charliteral">'+'</span>)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   433
<a name="l00412"></a>00412     {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   434
<a name="l00413"></a>00413       ordering = <a class="code" href="TestMasterSlave_2getopt_8c.html#06fc87d81c62e9abb8790b6e5713c55b0e73a0691c110b1442d8364d1d12eccc">REQUIRE_ORDER</a>;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   435
<a name="l00414"></a>00414       ++optstring;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   436
<a name="l00415"></a>00415     }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   437
<a name="l00416"></a>00416   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (posixly_correct != NULL)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   438
<a name="l00417"></a>00417     ordering = <a class="code" href="TestMasterSlave_2getopt_8c.html#06fc87d81c62e9abb8790b6e5713c55b0e73a0691c110b1442d8364d1d12eccc">REQUIRE_ORDER</a>;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   439
<a name="l00418"></a>00418   <span class="keywordflow">else</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   440
<a name="l00419"></a>00419     ordering = <a class="code" href="TestMasterSlave_2getopt_8c.html#06fc87d81c62e9abb8790b6e5713c55bcfdde4b47c27f4efbd832e1ac7f8a8fc">PERMUTE</a>;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   441
<a name="l00420"></a>00420 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   442
<a name="l00421"></a>00421 <span class="preprocessor">#if defined _LIBC &amp;&amp; defined USE_NONOPTION_FLAGS</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   443
<a name="l00422"></a>00422 <span class="preprocessor"></span>  <span class="keywordflow">if</span> (posixly_correct == NULL
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   444
<a name="l00423"></a>00423       &amp;&amp; argc == __libc_argc &amp;&amp; argv == __libc_argv)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   445
<a name="l00424"></a>00424     {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   446
<a name="l00425"></a>00425       <span class="keywordflow">if</span> (nonoption_flags_max_len == 0)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   447
<a name="l00426"></a>00426         {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   448
<a name="l00427"></a>00427           <span class="keywordflow">if</span> (__getopt_nonoption_flags == NULL
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   449
<a name="l00428"></a>00428               || __getopt_nonoption_flags[0] == <span class="charliteral">'\0'</span>)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   450
<a name="l00429"></a>00429             nonoption_flags_max_len = -1;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   451
<a name="l00430"></a>00430           <span class="keywordflow">else</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   452
<a name="l00431"></a>00431             {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   453
<a name="l00432"></a>00432               <span class="keyword">const</span> <span class="keywordtype">char</span> *orig_str = __getopt_nonoption_flags;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   454
<a name="l00433"></a>00433               <span class="keywordtype">int</span> len = nonoption_flags_max_len = strlen (orig_str);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   455
<a name="l00434"></a>00434               <span class="keywordflow">if</span> (nonoption_flags_max_len &lt; argc)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   456
<a name="l00435"></a>00435                 nonoption_flags_max_len = argc;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   457
<a name="l00436"></a>00436               __getopt_nonoption_flags =
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   458
<a name="l00437"></a>00437                 (<span class="keywordtype">char</span> *) malloc (nonoption_flags_max_len);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   459
<a name="l00438"></a>00438               <span class="keywordflow">if</span> (__getopt_nonoption_flags == NULL)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   460
<a name="l00439"></a>00439                 nonoption_flags_max_len = -1;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   461
<a name="l00440"></a>00440               <span class="keywordflow">else</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   462
<a name="l00441"></a>00441                 memset (__mempcpy (__getopt_nonoption_flags, orig_str, len),
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   463
<a name="l00442"></a>00442                         <span class="charliteral">'\0'</span>, nonoption_flags_max_len - len);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   464
<a name="l00443"></a>00443             }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   465
<a name="l00444"></a>00444         }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   466
<a name="l00445"></a>00445       nonoption_flags_len = nonoption_flags_max_len;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   467
<a name="l00446"></a>00446     }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   468
<a name="l00447"></a>00447   <span class="keywordflow">else</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   469
<a name="l00448"></a>00448     nonoption_flags_len = 0;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   470
<a name="l00449"></a>00449 <span class="preprocessor">#endif</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   471
<a name="l00450"></a>00450 <span class="preprocessor"></span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   472
<a name="l00451"></a>00451   <span class="keywordflow">return</span> optstring;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   473
<a name="l00452"></a>00452 }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   474
<a name="l00453"></a>00453 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   475
<a name="l00454"></a>00454 <span class="comment">/* Scan elements of ARGV (whose length is ARGC) for option characters</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   476
<a name="l00455"></a>00455 <span class="comment">   given in OPTSTRING.</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   477
<a name="l00456"></a>00456 <span class="comment"></span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   478
<a name="l00457"></a>00457 <span class="comment">   If an element of ARGV starts with '-', and is not exactly "-" or "--",</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   479
<a name="l00458"></a>00458 <span class="comment">   then it is an option element.  The characters of this element</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   480
<a name="l00459"></a>00459 <span class="comment">   (aside from the initial '-') are option characters.  If `getopt'</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   481
<a name="l00460"></a>00460 <span class="comment">   is called repeatedly, it returns successively each of the option characters</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   482
<a name="l00461"></a>00461 <span class="comment">   from each of the option elements.</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   483
<a name="l00462"></a>00462 <span class="comment"></span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   484
<a name="l00463"></a>00463 <span class="comment">   If `getopt' finds another option character, it returns that character,</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   485
<a name="l00464"></a>00464 <span class="comment">   updating `optind' and `nextchar' so that the next call to `getopt' can</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   486
<a name="l00465"></a>00465 <span class="comment">   resume the scan with the following option character or ARGV-element.</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   487
<a name="l00466"></a>00466 <span class="comment"></span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   488
<a name="l00467"></a>00467 <span class="comment">   If there are no more option characters, `getopt' returns -1.</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   489
<a name="l00468"></a>00468 <span class="comment">   Then `optind' is the index in ARGV of the first ARGV-element</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   490
<a name="l00469"></a>00469 <span class="comment">   that is not an option.  (The ARGV-elements have been permuted</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   491
<a name="l00470"></a>00470 <span class="comment">   so that those that are not options now come last.)</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   492
<a name="l00471"></a>00471 <span class="comment"></span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   493
<a name="l00472"></a>00472 <span class="comment">   OPTSTRING is a string containing the legitimate option characters.</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   494
<a name="l00473"></a>00473 <span class="comment">   If an option character is seen that is not listed in OPTSTRING,</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   495
<a name="l00474"></a>00474 <span class="comment">   return '?' after printing an error message.  If you set `opterr' to</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   496
<a name="l00475"></a>00475 <span class="comment">   zero, the error message is suppressed but we still return '?'.</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   497
<a name="l00476"></a>00476 <span class="comment"></span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   498
<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>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   499
<a name="l00478"></a>00478 <span class="comment">   so the following text in the same ARGV-element, or the text of the following</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   500
<a name="l00479"></a>00479 <span class="comment">   ARGV-element, is returned in `optarg'.  Two colons mean an option that</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   501
<a name="l00480"></a>00480 <span class="comment">   wants an optional arg; if there is text in the current ARGV-element,</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   502
<a name="l00481"></a>00481 <span class="comment">   it is returned in `optarg', otherwise `optarg' is set to zero.</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   503
<a name="l00482"></a>00482 <span class="comment"></span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   504
<a name="l00483"></a>00483 <span class="comment">   If OPTSTRING starts with `-' or `+', it requests different methods of</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   505
<a name="l00484"></a>00484 <span class="comment">   handling the non-option ARGV-elements.</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   506
<a name="l00485"></a>00485 <span class="comment">   See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above.</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   507
<a name="l00486"></a>00486 <span class="comment"></span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   508
<a name="l00487"></a>00487 <span class="comment">   Long-named options begin with `--' instead of `-'.</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   509
<a name="l00488"></a>00488 <span class="comment">   Their names may be abbreviated as long as the abbreviation is unique</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   510
<a name="l00489"></a>00489 <span class="comment">   or is an exact match for some defined option.  If they have an</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   511
<a name="l00490"></a>00490 <span class="comment">   argument, it follows the option name in the same ARGV-element, separated</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   512
<a name="l00491"></a>00491 <span class="comment">   from the option name by a `=', or else the in next ARGV-element.</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   513
<a name="l00492"></a>00492 <span class="comment">   When `getopt' finds a long-named option, it returns 0 if that option's</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   514
<a name="l00493"></a>00493 <span class="comment">   `flag' field is nonzero, the value of the option's `val' field</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   515
<a name="l00494"></a>00494 <span class="comment">   if the `flag' field is zero.</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   516
<a name="l00495"></a>00495 <span class="comment"></span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   517
<a name="l00496"></a>00496 <span class="comment">   The elements of ARGV aren't really const, because we permute them.</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   518
<a name="l00497"></a>00497 <span class="comment">   But we pretend they're const in the prototype to be compatible</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   519
<a name="l00498"></a>00498 <span class="comment">   with other systems.</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   520
<a name="l00499"></a>00499 <span class="comment"></span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   521
<a name="l00500"></a>00500 <span class="comment">   LONGOPTS is a vector of `struct option' terminated by an</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   522
<a name="l00501"></a>00501 <span class="comment">   element containing a name which is zero.</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   523
<a name="l00502"></a>00502 <span class="comment"></span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   524
<a name="l00503"></a>00503 <span class="comment">   LONGIND returns the index in LONGOPT of the long-named option found.</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   525
<a name="l00504"></a>00504 <span class="comment">   It is only valid when a long-named option has been found by the most</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   526
<a name="l00505"></a>00505 <span class="comment">   recent call.</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   527
<a name="l00506"></a>00506 <span class="comment"></span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   528
<a name="l00507"></a>00507 <span class="comment">   If LONG_ONLY is nonzero, '-' as well as '--' can introduce</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   529
<a name="l00508"></a>00508 <span class="comment">   long-named options.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   530
<a name="l00509"></a>00509 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   531
<a name="l00510"></a>00510 <span class="keywordtype">int</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   532
<a name="l00511"></a><a class="code" href="TestMasterSlave_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)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   533
<a name="l00512"></a>00512      int argc;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   534
<a name="l00513"></a>00513      <span class="keywordtype">char</span> *const *argv;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   535
<a name="l00514"></a>00514      const <span class="keywordtype">char</span> *optstring;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   536
<a name="l00515"></a>00515      const struct <a class="code" href="structoption.html">option</a> *longopts;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   537
<a name="l00516"></a>00516      <span class="keywordtype">int</span> *longind;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   538
<a name="l00517"></a>00517      <span class="keywordtype">int</span> long_only;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   539
<a name="l00518"></a>00518 {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   540
<a name="l00519"></a>00519   <span class="keywordtype">int</span> print_errors = <a class="code" href="TestMasterSlave_2getopt_8c.html#e30f05ee1e2e5652f174a35c7875d25e">opterr</a>;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   541
<a name="l00520"></a>00520   <span class="keywordflow">if</span> (optstring[0] == <span class="charliteral">':'</span>)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   542
<a name="l00521"></a>00521     print_errors = 0;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   543
<a name="l00522"></a>00522 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   544
<a name="l00523"></a>00523   <span class="keywordflow">if</span> (argc &lt; 1)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   545
<a name="l00524"></a>00524     <span class="keywordflow">return</span> -1;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   546
<a name="l00525"></a>00525 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   547
<a name="l00526"></a>00526   <a class="code" href="TestMasterSlave_2getopt_8c.html#db50a0eab9fed92fc3bfc7dfa4f2c410">optarg</a> = NULL;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   548
<a name="l00527"></a>00527 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   549
<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>)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   550
<a name="l00529"></a>00529     {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   551
<a name="l00530"></a>00530       <span class="keywordflow">if</span> (<a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a> == 0)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   552
<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>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   553
<a name="l00532"></a>00532       optstring = _getopt_initialize (argc, argv, optstring);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   554
<a name="l00533"></a>00533       <a class="code" href="TestMasterSlave_2getopt_8c.html#28286be757527aeb1db951b5da9aeec1">__getopt_initialized</a> = 1;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   555
<a name="l00534"></a>00534     }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   556
<a name="l00535"></a>00535 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   557
<a name="l00536"></a>00536   <span class="comment">/* Test whether ARGV[optind] points to a non-option argument.</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   558
<a name="l00537"></a>00537 <span class="comment">     Either it does not have option syntax, or there is an environment flag</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   559
<a name="l00538"></a>00538 <span class="comment">     from the shell indicating it is not an option.  The later information</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   560
<a name="l00539"></a>00539 <span class="comment">     is only used when the used in the GNU libc.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   561
<a name="l00540"></a>00540 <span class="preprocessor">#if defined _LIBC &amp;&amp; defined USE_NONOPTION_FLAGS</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   562
<a name="l00541"></a>00541 <span class="preprocessor"></span><span class="preprocessor"># define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0'       \</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   563
<a name="l00542"></a>00542 <span class="preprocessor">                      || (optind &lt; nonoption_flags_len                        \</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   564
<a name="l00543"></a>00543 <span class="preprocessor">                          &amp;&amp; __getopt_nonoption_flags[optind] == '1'))</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   565
<a name="l00544"></a>00544 <span class="preprocessor"></span><span class="preprocessor">#else</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   566
<a name="l00545"></a>00545 <span class="preprocessor"></span><span class="preprocessor"># define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0')</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   567
<a name="l00546"></a>00546 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   568
<a name="l00547"></a>00547 <span class="preprocessor"></span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   569
<a name="l00548"></a>00548   <span class="keywordflow">if</span> (nextchar == NULL || *nextchar == <span class="charliteral">'\0'</span>)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   570
<a name="l00549"></a>00549     {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   571
<a name="l00550"></a>00550       <span class="comment">/* Advance to the next ARGV-element.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   572
<a name="l00551"></a>00551 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   573
<a name="l00552"></a>00552       <span class="comment">/* Give FIRST_NONOPT and LAST_NONOPT rational values if OPTIND has been</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   574
<a name="l00553"></a>00553 <span class="comment">         moved back by the user (who may also have changed the arguments).  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   575
<a name="l00554"></a>00554       <span class="keywordflow">if</span> (last_nonopt &gt; <a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   576
<a name="l00555"></a>00555         last_nonopt = <a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   577
<a name="l00556"></a>00556       <span class="keywordflow">if</span> (first_nonopt &gt; <a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   578
<a name="l00557"></a>00557         first_nonopt = <a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   579
<a name="l00558"></a>00558 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   580
<a name="l00559"></a>00559       <span class="keywordflow">if</span> (ordering == <a class="code" href="TestMasterSlave_2getopt_8c.html#06fc87d81c62e9abb8790b6e5713c55bcfdde4b47c27f4efbd832e1ac7f8a8fc">PERMUTE</a>)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   581
<a name="l00560"></a>00560         {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   582
<a name="l00561"></a>00561           <span class="comment">/* If we have just processed some options following some non-options,</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   583
<a name="l00562"></a>00562 <span class="comment">             exchange them so that the options come first.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   584
<a name="l00563"></a>00563 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   585
<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>)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   586
<a name="l00565"></a>00565             exchange ((<span class="keywordtype">char</span> **) argv);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   587
<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>)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   588
<a name="l00567"></a>00567             first_nonopt = <a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   589
<a name="l00568"></a>00568 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   590
<a name="l00569"></a>00569           <span class="comment">/* Skip any additional non-options</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   591
<a name="l00570"></a>00570 <span class="comment">             and extend the range of non-options previously skipped.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   592
<a name="l00571"></a>00571 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   593
<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>)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   594
<a name="l00573"></a>00573             <a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>++;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   595
<a name="l00574"></a>00574           last_nonopt = <a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   596
<a name="l00575"></a>00575         }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   597
<a name="l00576"></a>00576 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   598
<a name="l00577"></a>00577       <span class="comment">/* The special ARGV-element `--' means premature end of options.</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   599
<a name="l00578"></a>00578 <span class="comment">         Skip it like a null option,</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   600
<a name="l00579"></a>00579 <span class="comment">         then exchange with previous non-options as if it were an option,</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   601
<a name="l00580"></a>00580 <span class="comment">         then skip everything else like a non-option.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   602
<a name="l00581"></a>00581 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   603
<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>))
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   604
<a name="l00583"></a>00583         {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   605
<a name="l00584"></a>00584           optind++;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   606
<a name="l00585"></a>00585 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   607
<a name="l00586"></a>00586           <span class="keywordflow">if</span> (first_nonopt != last_nonopt &amp;&amp; last_nonopt != optind)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   608
<a name="l00587"></a>00587             exchange ((<span class="keywordtype">char</span> **) argv);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   609
<a name="l00588"></a>00588           <span class="keywordflow">else</span> <span class="keywordflow">if</span> (first_nonopt == last_nonopt)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   610
<a name="l00589"></a>00589             first_nonopt = optind;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   611
<a name="l00590"></a>00590           last_nonopt = argc;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   612
<a name="l00591"></a>00591 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   613
<a name="l00592"></a>00592           optind = argc;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   614
<a name="l00593"></a>00593         }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   615
<a name="l00594"></a>00594 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   616
<a name="l00595"></a>00595       <span class="comment">/* If we have done all the ARGV-elements, stop the scan</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   617
<a name="l00596"></a>00596 <span class="comment">         and back over any non-options that we skipped and permuted.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   618
<a name="l00597"></a>00597 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   619
<a name="l00598"></a>00598       <span class="keywordflow">if</span> (optind == argc)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   620
<a name="l00599"></a>00599         {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   621
<a name="l00600"></a>00600           <span class="comment">/* Set the next-arg-index to point at the non-options</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   622
<a name="l00601"></a>00601 <span class="comment">             that we previously skipped, so the caller will digest them.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   623
<a name="l00602"></a>00602           <span class="keywordflow">if</span> (first_nonopt != last_nonopt)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   624
<a name="l00603"></a>00603             optind = first_nonopt;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   625
<a name="l00604"></a>00604           <span class="keywordflow">return</span> -1;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   626
<a name="l00605"></a>00605         }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   627
<a name="l00606"></a>00606 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   628
<a name="l00607"></a>00607       <span class="comment">/* If we have come to a non-option and did not permute it,</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   629
<a name="l00608"></a>00608 <span class="comment">         either stop the scan or describe it to the caller and pass it by.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   630
<a name="l00609"></a>00609 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   631
<a name="l00610"></a>00610       <span class="keywordflow">if</span> (<a class="code" href="TestMasterSlave_2getopt_8c.html#71ceb8911d64b39b402041ba5ea8453c">NONOPTION_P</a>)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   632
<a name="l00611"></a>00611         {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   633
<a name="l00612"></a>00612           <span class="keywordflow">if</span> (ordering == <a class="code" href="TestMasterSlave_2getopt_8c.html#06fc87d81c62e9abb8790b6e5713c55b0e73a0691c110b1442d8364d1d12eccc">REQUIRE_ORDER</a>)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   634
<a name="l00613"></a>00613             <span class="keywordflow">return</span> -1;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   635
<a name="l00614"></a>00614           <a class="code" href="TestMasterSlave_2getopt_8c.html#db50a0eab9fed92fc3bfc7dfa4f2c410">optarg</a> = argv[optind++];
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   636
<a name="l00615"></a>00615           <span class="keywordflow">return</span> 1;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   637
<a name="l00616"></a>00616         }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   638
<a name="l00617"></a>00617 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   639
<a name="l00618"></a>00618       <span class="comment">/* We have found another option-ARGV-element.</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   640
<a name="l00619"></a>00619 <span class="comment">         Skip the initial punctuation.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   641
<a name="l00620"></a>00620 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   642
<a name="l00621"></a>00621       nextchar = (argv[optind] + 1
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   643
<a name="l00622"></a>00622                   + (longopts != NULL &amp;&amp; argv[optind][1] == <span class="charliteral">'-'</span>));
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   644
<a name="l00623"></a>00623     }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   645
<a name="l00624"></a>00624 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   646
<a name="l00625"></a>00625   <span class="comment">/* Decode the current option-ARGV-element.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   647
<a name="l00626"></a>00626 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   648
<a name="l00627"></a>00627   <span class="comment">/* Check whether the ARGV-element is a long option.</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   649
<a name="l00628"></a>00628 <span class="comment"></span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   650
<a name="l00629"></a>00629 <span class="comment">     If long_only and the ARGV-element has the form "-f", where f is</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   651
<a name="l00630"></a>00630 <span class="comment">     a valid short option, don't consider it an abbreviated form of</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   652
<a name="l00631"></a>00631 <span class="comment">     a long option that starts with f.  Otherwise there would be no</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   653
<a name="l00632"></a>00632 <span class="comment">     way to give the -f short option.</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   654
<a name="l00633"></a>00633 <span class="comment"></span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   655
<a name="l00634"></a>00634 <span class="comment">     On the other hand, if there's a long option "fubar" and</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   656
<a name="l00635"></a>00635 <span class="comment">     the ARGV-element is "-fu", do consider that an abbreviation of</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   657
<a name="l00636"></a>00636 <span class="comment">     the long option, just like "--fu", and not "-f" with arg "u".</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   658
<a name="l00637"></a>00637 <span class="comment"></span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   659
<a name="l00638"></a>00638 <span class="comment">     This distinction seems to be the most useful approach.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   660
<a name="l00639"></a>00639 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   661
<a name="l00640"></a>00640   <span class="keywordflow">if</span> (longopts != NULL
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   662
<a name="l00641"></a>00641       &amp;&amp; (argv[<a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>][1] == <span class="charliteral">'-'</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   663
<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])))))
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   664
<a name="l00643"></a>00643     {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   665
<a name="l00644"></a>00644       <span class="keywordtype">char</span> *nameend;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   666
<a name="l00645"></a>00645       <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structoption.html">option</a> *p;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   667
<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;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   668
<a name="l00647"></a>00647       <span class="keywordtype">int</span> exact = 0;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   669
<a name="l00648"></a>00648       <span class="keywordtype">int</span> ambig = 0;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   670
<a name="l00649"></a>00649       <span class="keywordtype">int</span> indfound = -1;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   671
<a name="l00650"></a>00650       <span class="keywordtype">int</span> option_index;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   672
<a name="l00651"></a>00651 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   673
<a name="l00652"></a>00652       <span class="keywordflow">for</span> (nameend = nextchar; *nameend &amp;&amp; *nameend != <span class="charliteral">'='</span>; nameend++)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   674
<a name="l00653"></a>00653         <span class="comment">/* Do nothing.  */</span> ;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   675
<a name="l00654"></a>00654 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   676
<a name="l00655"></a>00655       <span class="comment">/* Test all long options for either exact match</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   677
<a name="l00656"></a>00656 <span class="comment">         or abbreviated matches.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   678
<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++)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   679
<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))
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   680
<a name="l00659"></a>00659           {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   681
<a name="l00660"></a>00660             if ((<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>) (nameend - nextchar)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   682
<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>))
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   683
<a name="l00662"></a>00662               {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   684
<a name="l00663"></a>00663                 <span class="comment">/* Exact match found.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   685
<a name="l00664"></a>00664                 pfound = p;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   686
<a name="l00665"></a>00665                 indfound = option_index;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   687
<a name="l00666"></a>00666                 exact = 1;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   688
<a name="l00667"></a>00667                 <span class="keywordflow">break</span>;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   689
<a name="l00668"></a>00668               }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   690
<a name="l00669"></a>00669             <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pfound == NULL)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   691
<a name="l00670"></a>00670               {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   692
<a name="l00671"></a>00671                 <span class="comment">/* First nonexact match found.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   693
<a name="l00672"></a>00672                 pfound = p;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   694
<a name="l00673"></a>00673                 indfound = option_index;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   695
<a name="l00674"></a>00674               }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   696
<a name="l00675"></a>00675             <span class="keywordflow">else</span> <span class="keywordflow">if</span> (long_only
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   697
<a name="l00676"></a>00676                      || pfound-&gt;has_arg != p-&gt;has_arg
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   698
<a name="l00677"></a>00677                      || pfound-&gt;flag != p-&gt;flag
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   699
<a name="l00678"></a>00678                      || pfound-&gt;val != p-&gt;val)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   700
<a name="l00679"></a>00679               <span class="comment">/* Second or later nonexact match found.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   701
<a name="l00680"></a>00680               ambig = 1;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   702
<a name="l00681"></a>00681           }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   703
<a name="l00682"></a>00682 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   704
<a name="l00683"></a>00683       <span class="keywordflow">if</span> (ambig &amp;&amp; !exact)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   705
<a name="l00684"></a>00684         {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   706
<a name="l00685"></a>00685           <span class="keywordflow">if</span> (print_errors)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   707
<a name="l00686"></a>00686             {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   708
<a name="l00687"></a>00687 #<span class="keywordflow">if</span> defined _LIBC &amp;&amp; defined USE_IN_LIBIO
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   709
<a name="l00688"></a>00688               <span class="keywordtype">char</span> *buf;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   710
<a name="l00689"></a>00689 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   711
<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>),
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   712
<a name="l00691"></a>00691                           argv[0], argv[<a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>]);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   713
<a name="l00692"></a>00692 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   714
<a name="l00693"></a>00693               <span class="keywordflow">if</span> (_IO_fwide (stderr, 0) &gt; 0)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   715
<a name="l00694"></a>00694                 __fwprintf (stderr, L<span class="stringliteral">"%s"</span>, buf);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   716
<a name="l00695"></a>00695               <span class="keywordflow">else</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   717
<a name="l00696"></a>00696                 fputs (buf, stderr);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   718
<a name="l00697"></a>00697 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   719
<a name="l00698"></a>00698               free (buf);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   720
<a name="l00699"></a>00699 <span class="preprocessor">#else</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   721
<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>),
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   722
<a name="l00701"></a>00701                        argv[0], argv[<a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>]);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   723
<a name="l00702"></a>00702 <span class="preprocessor">#endif</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   724
<a name="l00703"></a>00703 <span class="preprocessor"></span>            }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   725
<a name="l00704"></a>00704           nextchar += strlen (nextchar);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   726
<a name="l00705"></a>00705           <a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>++;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   727
<a name="l00706"></a>00706           <a class="code" href="TestMasterSlave_2getopt_8c.html#475b8db98445da73e5f62a1ef6324b95">optopt</a> = 0;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   728
<a name="l00707"></a>00707           <span class="keywordflow">return</span> <span class="charliteral">'?'</span>;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   729
<a name="l00708"></a>00708         }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   730
<a name="l00709"></a>00709 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   731
<a name="l00710"></a>00710       <span class="keywordflow">if</span> (pfound != NULL)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   732
<a name="l00711"></a>00711         {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   733
<a name="l00712"></a>00712           option_index = indfound;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   734
<a name="l00713"></a>00713           <a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>++;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   735
<a name="l00714"></a>00714           <span class="keywordflow">if</span> (*nameend)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   736
<a name="l00715"></a>00715             {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   737
<a name="l00716"></a>00716               <span class="comment">/* Don't test has_arg with &gt;, because some C compilers don't</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   738
<a name="l00717"></a>00717 <span class="comment">                 allow it to be used on enums.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   739
<a name="l00718"></a>00718               <span class="keywordflow">if</span> (pfound-&gt;has_arg)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   740
<a name="l00719"></a>00719                 <a class="code" href="TestMasterSlave_2getopt_8c.html#db50a0eab9fed92fc3bfc7dfa4f2c410">optarg</a> = nameend + 1;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   741
<a name="l00720"></a>00720               <span class="keywordflow">else</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   742
<a name="l00721"></a>00721                 {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   743
<a name="l00722"></a>00722                   <span class="keywordflow">if</span> (print_errors)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   744
<a name="l00723"></a>00723                     {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   745
<a name="l00724"></a>00724 <span class="preprocessor">#if defined _LIBC &amp;&amp; defined USE_IN_LIBIO</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   746
<a name="l00725"></a>00725 <span class="preprocessor"></span>                      <span class="keywordtype">char</span> *buf;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   747
<a name="l00726"></a>00726 <span class="preprocessor">#endif</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   748
<a name="l00727"></a>00727 <span class="preprocessor"></span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   749
<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>)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   750
<a name="l00729"></a>00729                         {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   751
<a name="l00730"></a>00730                           <span class="comment">/* --option */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   752
<a name="l00731"></a>00731 <span class="preprocessor">#if defined _LIBC &amp;&amp; defined USE_IN_LIBIO</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   753
<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>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   754
<a name="l00733"></a>00733 <span class="stringliteral">%s: option `--%s' doesn't allow an argument\n"</span>),
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   755
<a name="l00734"></a>00734                                       argv[0], pfound-&gt;name);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   756
<a name="l00735"></a>00735 <span class="preprocessor">#else</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   757
<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>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   758
<a name="l00737"></a>00737 <span class="stringliteral">%s: option `--%s' doesn't allow an argument\n"</span>),
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   759
<a name="l00738"></a>00738                                    argv[0], pfound-&gt;name);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   760
<a name="l00739"></a>00739 <span class="preprocessor">#endif</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   761
<a name="l00740"></a>00740 <span class="preprocessor"></span>                        }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   762
<a name="l00741"></a>00741                       <span class="keywordflow">else</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   763
<a name="l00742"></a>00742                         {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   764
<a name="l00743"></a>00743                           <span class="comment">/* +option or -option */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   765
<a name="l00744"></a>00744 <span class="preprocessor">#if defined _LIBC &amp;&amp; defined USE_IN_LIBIO</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   766
<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>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   767
<a name="l00746"></a>00746 <span class="stringliteral">%s: option `%c%s' doesn't allow an argument\n"</span>),
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   768
<a name="l00747"></a>00747                                       argv[0], argv[<a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a> - 1][0],
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   769
<a name="l00748"></a>00748                                       pfound-&gt;name);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   770
<a name="l00749"></a>00749 <span class="preprocessor">#else</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   771
<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>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   772
<a name="l00751"></a>00751 <span class="stringliteral">%s: option `%c%s' doesn't allow an argument\n"</span>),
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   773
<a name="l00752"></a>00752                                    argv[0], argv[<a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a> - 1][0], pfound-&gt;name);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   774
<a name="l00753"></a>00753 <span class="preprocessor">#endif</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   775
<a name="l00754"></a>00754 <span class="preprocessor"></span>                        }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   776
<a name="l00755"></a>00755 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   777
<a name="l00756"></a>00756 <span class="preprocessor">#if defined _LIBC &amp;&amp; defined USE_IN_LIBIO</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   778
<a name="l00757"></a>00757 <span class="preprocessor"></span>                      <span class="keywordflow">if</span> (_IO_fwide (stderr, 0) &gt; 0)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   779
<a name="l00758"></a>00758                         __fwprintf (stderr, L<span class="stringliteral">"%s"</span>, buf);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   780
<a name="l00759"></a>00759                       <span class="keywordflow">else</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   781
<a name="l00760"></a>00760                         fputs (buf, stderr);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   782
<a name="l00761"></a>00761 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   783
<a name="l00762"></a>00762                       free (buf);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   784
<a name="l00763"></a>00763 <span class="preprocessor">#endif</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   785
<a name="l00764"></a>00764 <span class="preprocessor"></span>                    }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   786
<a name="l00765"></a>00765 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   787
<a name="l00766"></a>00766                   nextchar += strlen (nextchar);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   788
<a name="l00767"></a>00767 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   789
<a name="l00768"></a>00768                   <a class="code" href="TestMasterSlave_2getopt_8c.html#475b8db98445da73e5f62a1ef6324b95">optopt</a> = pfound-&gt;val;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   790
<a name="l00769"></a>00769                   <span class="keywordflow">return</span> <span class="charliteral">'?'</span>;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   791
<a name="l00770"></a>00770                 }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   792
<a name="l00771"></a>00771             }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   793
<a name="l00772"></a>00772           <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pfound-&gt;has_arg == 1)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   794
<a name="l00773"></a>00773             {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   795
<a name="l00774"></a>00774               <span class="keywordflow">if</span> (<a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a> &lt; argc)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   796
<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>++];
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   797
<a name="l00776"></a>00776               <span class="keywordflow">else</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   798
<a name="l00777"></a>00777                 {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   799
<a name="l00778"></a>00778                   <span class="keywordflow">if</span> (print_errors)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   800
<a name="l00779"></a>00779                     {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   801
<a name="l00780"></a>00780 <span class="preprocessor">#if defined _LIBC &amp;&amp; defined USE_IN_LIBIO</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   802
<a name="l00781"></a>00781 <span class="preprocessor"></span>                      <span class="keywordtype">char</span> *buf;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   803
<a name="l00782"></a>00782 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   804
<a name="l00783"></a>00783                       __asprintf (&amp;buf,
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   805
<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>),
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   806
<a name="l00785"></a>00785                                   argv[0], argv[<a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a> - 1]);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   807
<a name="l00786"></a>00786 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   808
<a name="l00787"></a>00787                       <span class="keywordflow">if</span> (_IO_fwide (stderr, 0) &gt; 0)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   809
<a name="l00788"></a>00788                         __fwprintf (stderr, L<span class="stringliteral">"%s"</span>, buf);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   810
<a name="l00789"></a>00789                       <span class="keywordflow">else</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   811
<a name="l00790"></a>00790                         fputs (buf, stderr);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   812
<a name="l00791"></a>00791 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   813
<a name="l00792"></a>00792                       free (buf);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   814
<a name="l00793"></a>00793 <span class="preprocessor">#else</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   815
<a name="l00794"></a>00794 <span class="preprocessor"></span>                      fprintf (stderr,
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   816
<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>),
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   817
<a name="l00796"></a>00796                                argv[0], argv[<a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a> - 1]);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   818
<a name="l00797"></a>00797 <span class="preprocessor">#endif</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   819
<a name="l00798"></a>00798 <span class="preprocessor"></span>                    }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   820
<a name="l00799"></a>00799                   nextchar += strlen (nextchar);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   821
<a name="l00800"></a>00800                   <a class="code" href="TestMasterSlave_2getopt_8c.html#475b8db98445da73e5f62a1ef6324b95">optopt</a> = pfound-&gt;val;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   822
<a name="l00801"></a>00801                   <span class="keywordflow">return</span> optstring[0] == <span class="charliteral">':'</span> ? <span class="charliteral">':'</span> : <span class="charliteral">'?'</span>;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   823
<a name="l00802"></a>00802                 }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   824
<a name="l00803"></a>00803             }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   825
<a name="l00804"></a>00804           nextchar += strlen (nextchar);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   826
<a name="l00805"></a>00805           <span class="keywordflow">if</span> (longind != NULL)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   827
<a name="l00806"></a>00806             *longind = option_index;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   828
<a name="l00807"></a>00807           <span class="keywordflow">if</span> (pfound-&gt;flag)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   829
<a name="l00808"></a>00808             {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   830
<a name="l00809"></a>00809               *(pfound-&gt;flag) = pfound-&gt;val;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   831
<a name="l00810"></a>00810               <span class="keywordflow">return</span> 0;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   832
<a name="l00811"></a>00811             }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   833
<a name="l00812"></a>00812           <span class="keywordflow">return</span> pfound-&gt;val;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   834
<a name="l00813"></a>00813         }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   835
<a name="l00814"></a>00814 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   836
<a name="l00815"></a>00815       <span class="comment">/* Can't find it as a long option.  If this is not getopt_long_only,</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   837
<a name="l00816"></a>00816 <span class="comment">         or the option starts with '--' or is not a valid short</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   838
<a name="l00817"></a>00817 <span class="comment">         option, then it's an error.</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   839
<a name="l00818"></a>00818 <span class="comment">         Otherwise interpret it as a short option.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   840
<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>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   841
<a name="l00820"></a>00820           || my_index (optstring, *nextchar) == NULL)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   842
<a name="l00821"></a>00821         {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   843
<a name="l00822"></a>00822           <span class="keywordflow">if</span> (print_errors)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   844
<a name="l00823"></a>00823             {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   845
<a name="l00824"></a>00824 <span class="preprocessor">#if defined _LIBC &amp;&amp; defined USE_IN_LIBIO</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   846
<a name="l00825"></a>00825 <span class="preprocessor"></span>              <span class="keywordtype">char</span> *buf;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   847
<a name="l00826"></a>00826 <span class="preprocessor">#endif</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   848
<a name="l00827"></a>00827 <span class="preprocessor"></span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   849
<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>)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   850
<a name="l00829"></a>00829                 {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   851
<a name="l00830"></a>00830                   <span class="comment">/* --option */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   852
<a name="l00831"></a>00831 <span class="preprocessor">#if defined _LIBC &amp;&amp; defined USE_IN_LIBIO</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   853
<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>),
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   854
<a name="l00833"></a>00833                               argv[0], nextchar);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   855
<a name="l00834"></a>00834 <span class="preprocessor">#else</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   856
<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>),
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   857
<a name="l00836"></a>00836                            argv[0], nextchar);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   858
<a name="l00837"></a>00837 <span class="preprocessor">#endif</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   859
<a name="l00838"></a>00838 <span class="preprocessor"></span>                }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   860
<a name="l00839"></a>00839               <span class="keywordflow">else</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   861
<a name="l00840"></a>00840                 {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   862
<a name="l00841"></a>00841                   <span class="comment">/* +option or -option */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   863
<a name="l00842"></a>00842 <span class="preprocessor">#if defined _LIBC &amp;&amp; defined USE_IN_LIBIO</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   864
<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>),
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   865
<a name="l00844"></a>00844                               argv[0], argv[<a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>][0], nextchar);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   866
<a name="l00845"></a>00845 <span class="preprocessor">#else</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   867
<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>),
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   868
<a name="l00847"></a>00847                            argv[0], argv[<a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>][0], nextchar);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   869
<a name="l00848"></a>00848 <span class="preprocessor">#endif</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   870
<a name="l00849"></a>00849 <span class="preprocessor"></span>                }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   871
<a name="l00850"></a>00850 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   872
<a name="l00851"></a>00851 <span class="preprocessor">#if defined _LIBC &amp;&amp; defined USE_IN_LIBIO</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   873
<a name="l00852"></a>00852 <span class="preprocessor"></span>              <span class="keywordflow">if</span> (_IO_fwide (stderr, 0) &gt; 0)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   874
<a name="l00853"></a>00853                 __fwprintf (stderr, L<span class="stringliteral">"%s"</span>, buf);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   875
<a name="l00854"></a>00854               <span class="keywordflow">else</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   876
<a name="l00855"></a>00855                 fputs (buf, stderr);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   877
<a name="l00856"></a>00856 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   878
<a name="l00857"></a>00857               free (buf);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   879
<a name="l00858"></a>00858 <span class="preprocessor">#endif</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   880
<a name="l00859"></a>00859 <span class="preprocessor"></span>            }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   881
<a name="l00860"></a>00860           nextchar = (<span class="keywordtype">char</span> *) <span class="stringliteral">""</span>;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   882
<a name="l00861"></a>00861           <a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>++;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   883
<a name="l00862"></a>00862           <a class="code" href="TestMasterSlave_2getopt_8c.html#475b8db98445da73e5f62a1ef6324b95">optopt</a> = 0;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   884
<a name="l00863"></a>00863           <span class="keywordflow">return</span> <span class="charliteral">'?'</span>;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   885
<a name="l00864"></a>00864         }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   886
<a name="l00865"></a>00865     }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   887
<a name="l00866"></a>00866 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   888
<a name="l00867"></a>00867   <span class="comment">/* Look at and handle the next short option-character.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   889
<a name="l00868"></a>00868 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   890
<a name="l00869"></a>00869   {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   891
<a name="l00870"></a>00870     <span class="keywordtype">char</span> c = *nextchar++;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   892
<a name="l00871"></a>00871     <span class="keywordtype">char</span> *temp = my_index (optstring, c);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   893
<a name="l00872"></a>00872 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   894
<a name="l00873"></a>00873     <span class="comment">/* Increment `optind' when we start to process its last character.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   895
<a name="l00874"></a>00874     <span class="keywordflow">if</span> (*nextchar == <span class="charliteral">'\0'</span>)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   896
<a name="l00875"></a>00875       ++<a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   897
<a name="l00876"></a>00876 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   898
<a name="l00877"></a>00877     <span class="keywordflow">if</span> (temp == NULL || c == <span class="charliteral">':'</span>)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   899
<a name="l00878"></a>00878       {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   900
<a name="l00879"></a>00879         <span class="keywordflow">if</span> (print_errors)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   901
<a name="l00880"></a>00880           {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   902
<a name="l00881"></a>00881 <span class="preprocessor">#if defined _LIBC &amp;&amp; defined USE_IN_LIBIO</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   903
<a name="l00882"></a>00882 <span class="preprocessor"></span>              <span class="keywordtype">char</span> *buf;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   904
<a name="l00883"></a>00883 <span class="preprocessor">#endif</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   905
<a name="l00884"></a>00884 <span class="preprocessor"></span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   906
<a name="l00885"></a>00885             <span class="keywordflow">if</span> (posixly_correct)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   907
<a name="l00886"></a>00886               {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   908
<a name="l00887"></a>00887                 <span class="comment">/* 1003.2 specifies the format of this message.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   909
<a name="l00888"></a>00888 <span class="preprocessor">#if defined _LIBC &amp;&amp; defined USE_IN_LIBIO</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   910
<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>),
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   911
<a name="l00890"></a>00890                             argv[0], c);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   912
<a name="l00891"></a>00891 <span class="preprocessor">#else</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   913
<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);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   914
<a name="l00893"></a>00893 <span class="preprocessor">#endif</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   915
<a name="l00894"></a>00894 <span class="preprocessor"></span>              }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   916
<a name="l00895"></a>00895             <span class="keywordflow">else</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   917
<a name="l00896"></a>00896               {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   918
<a name="l00897"></a>00897 <span class="preprocessor">#if defined _LIBC &amp;&amp; defined USE_IN_LIBIO</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   919
<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>),
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   920
<a name="l00899"></a>00899                             argv[0], c);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   921
<a name="l00900"></a>00900 <span class="preprocessor">#else</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   922
<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);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   923
<a name="l00902"></a>00902 <span class="preprocessor">#endif</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   924
<a name="l00903"></a>00903 <span class="preprocessor"></span>              }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   925
<a name="l00904"></a>00904 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   926
<a name="l00905"></a>00905 <span class="preprocessor">#if defined _LIBC &amp;&amp; defined USE_IN_LIBIO</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   927
<a name="l00906"></a>00906 <span class="preprocessor"></span>            <span class="keywordflow">if</span> (_IO_fwide (stderr, 0) &gt; 0)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   928
<a name="l00907"></a>00907               __fwprintf (stderr, L<span class="stringliteral">"%s"</span>, buf);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   929
<a name="l00908"></a>00908             <span class="keywordflow">else</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   930
<a name="l00909"></a>00909               fputs (buf, stderr);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   931
<a name="l00910"></a>00910 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   932
<a name="l00911"></a>00911             free (buf);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   933
<a name="l00912"></a>00912 <span class="preprocessor">#endif</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   934
<a name="l00913"></a>00913 <span class="preprocessor"></span>          }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   935
<a name="l00914"></a>00914         <a class="code" href="TestMasterSlave_2getopt_8c.html#475b8db98445da73e5f62a1ef6324b95">optopt</a> = c;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   936
<a name="l00915"></a>00915         <span class="keywordflow">return</span> <span class="charliteral">'?'</span>;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   937
<a name="l00916"></a>00916       }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   938
<a name="l00917"></a>00917     <span class="comment">/* Convenience. Treat POSIX -W foo same as long option --foo */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   939
<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>)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   940
<a name="l00919"></a>00919       {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   941
<a name="l00920"></a>00920         <span class="keywordtype">char</span> *nameend;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   942
<a name="l00921"></a>00921         <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="structoption.html">option</a> *p;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   943
<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;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   944
<a name="l00923"></a>00923         <span class="keywordtype">int</span> exact = 0;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   945
<a name="l00924"></a>00924         <span class="keywordtype">int</span> ambig = 0;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   946
<a name="l00925"></a>00925         <span class="keywordtype">int</span> indfound = 0;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   947
<a name="l00926"></a>00926         <span class="keywordtype">int</span> option_index;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   948
<a name="l00927"></a>00927 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   949
<a name="l00928"></a>00928         <span class="comment">/* This is an option that requires an argument.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   950
<a name="l00929"></a>00929         <span class="keywordflow">if</span> (*nextchar != <span class="charliteral">'\0'</span>)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   951
<a name="l00930"></a>00930           {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   952
<a name="l00931"></a>00931             <a class="code" href="TestMasterSlave_2getopt_8c.html#db50a0eab9fed92fc3bfc7dfa4f2c410">optarg</a> = nextchar;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   953
<a name="l00932"></a>00932             <span class="comment">/* If we end this ARGV-element by taking the rest as an arg,</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   954
<a name="l00933"></a>00933 <span class="comment">               we must advance to the next element now.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   955
<a name="l00934"></a>00934             <a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>++;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   956
<a name="l00935"></a>00935           }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   957
<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)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   958
<a name="l00937"></a>00937           {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   959
<a name="l00938"></a>00938             <span class="keywordflow">if</span> (print_errors)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   960
<a name="l00939"></a>00939               {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   961
<a name="l00940"></a>00940                 <span class="comment">/* 1003.2 specifies the format of this message.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   962
<a name="l00941"></a>00941 <span class="preprocessor">#if defined _LIBC &amp;&amp; defined USE_IN_LIBIO</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   963
<a name="l00942"></a>00942 <span class="preprocessor"></span>                <span class="keywordtype">char</span> *buf;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   964
<a name="l00943"></a>00943 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   965
<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>),
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   966
<a name="l00945"></a>00945                             argv[0], c);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   967
<a name="l00946"></a>00946 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   968
<a name="l00947"></a>00947                 <span class="keywordflow">if</span> (_IO_fwide (stderr, 0) &gt; 0)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   969
<a name="l00948"></a>00948                   __fwprintf (stderr, L<span class="stringliteral">"%s"</span>, buf);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   970
<a name="l00949"></a>00949                 <span class="keywordflow">else</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   971
<a name="l00950"></a>00950                   fputs (buf, stderr);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   972
<a name="l00951"></a>00951 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   973
<a name="l00952"></a>00952                 free (buf);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   974
<a name="l00953"></a>00953 <span class="preprocessor">#else</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   975
<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>),
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   976
<a name="l00955"></a>00955                          argv[0], c);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   977
<a name="l00956"></a>00956 <span class="preprocessor">#endif</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   978
<a name="l00957"></a>00957 <span class="preprocessor"></span>              }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   979
<a name="l00958"></a>00958             <a class="code" href="TestMasterSlave_2getopt_8c.html#475b8db98445da73e5f62a1ef6324b95">optopt</a> = c;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   980
<a name="l00959"></a>00959             <span class="keywordflow">if</span> (optstring[0] == <span class="charliteral">':'</span>)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   981
<a name="l00960"></a>00960               c = <span class="charliteral">':'</span>;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   982
<a name="l00961"></a>00961             <span class="keywordflow">else</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   983
<a name="l00962"></a>00962               c = <span class="charliteral">'?'</span>;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   984
<a name="l00963"></a>00963             <span class="keywordflow">return</span> c;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   985
<a name="l00964"></a>00964           }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   986
<a name="l00965"></a>00965         <span class="keywordflow">else</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   987
<a name="l00966"></a>00966           <span class="comment">/* We already incremented `optind' once;</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   988
<a name="l00967"></a>00967 <span class="comment">             increment it again when taking next ARGV-elt as argument.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   989
<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>++];
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   990
<a name="l00969"></a>00969 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   991
<a name="l00970"></a>00970         <span class="comment">/* optarg is now the argument, see if it's in the</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   992
<a name="l00971"></a>00971 <span class="comment">           table of longopts.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   993
<a name="l00972"></a>00972 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   994
<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++)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   995
<a name="l00974"></a>00974           <span class="comment">/* Do nothing.  */</span> ;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   996
<a name="l00975"></a>00975 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   997
<a name="l00976"></a>00976         <span class="comment">/* Test all long options for either exact match</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   998
<a name="l00977"></a>00977 <span class="comment">           or abbreviated matches.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
   999
<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++)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1000
<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))
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1001
<a name="l00980"></a>00980             {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1002
<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>))
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1003
<a name="l00982"></a>00982                 {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1004
<a name="l00983"></a>00983                   <span class="comment">/* Exact match found.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1005
<a name="l00984"></a>00984                   pfound = p;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1006
<a name="l00985"></a>00985                   indfound = option_index;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1007
<a name="l00986"></a>00986                   exact = 1;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1008
<a name="l00987"></a>00987                   <span class="keywordflow">break</span>;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1009
<a name="l00988"></a>00988                 }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1010
<a name="l00989"></a>00989               <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pfound == NULL)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1011
<a name="l00990"></a>00990                 {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1012
<a name="l00991"></a>00991                   <span class="comment">/* First nonexact match found.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1013
<a name="l00992"></a>00992                   pfound = p;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1014
<a name="l00993"></a>00993                   indfound = option_index;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1015
<a name="l00994"></a>00994                 }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1016
<a name="l00995"></a>00995               <span class="keywordflow">else</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1017
<a name="l00996"></a>00996                 <span class="comment">/* Second or later nonexact match found.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1018
<a name="l00997"></a>00997                 ambig = 1;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1019
<a name="l00998"></a>00998             }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1020
<a name="l00999"></a>00999         <span class="keywordflow">if</span> (ambig &amp;&amp; !exact)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1021
<a name="l01000"></a>01000           {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1022
<a name="l01001"></a>01001             <span class="keywordflow">if</span> (print_errors)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1023
<a name="l01002"></a>01002               {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1024
<a name="l01003"></a>01003 #<span class="keywordflow">if</span> defined _LIBC &amp;&amp; defined USE_IN_LIBIO
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1025
<a name="l01004"></a>01004                 <span class="keywordtype">char</span> *buf;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1026
<a name="l01005"></a>01005 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1027
<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>),
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1028
<a name="l01007"></a>01007                             argv[0], argv[<a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>]);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1029
<a name="l01008"></a>01008 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1030
<a name="l01009"></a>01009                 <span class="keywordflow">if</span> (_IO_fwide (stderr, 0) &gt; 0)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1031
<a name="l01010"></a>01010                   __fwprintf (stderr, L<span class="stringliteral">"%s"</span>, buf);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1032
<a name="l01011"></a>01011                 <span class="keywordflow">else</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1033
<a name="l01012"></a>01012                   fputs (buf, stderr);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1034
<a name="l01013"></a>01013 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1035
<a name="l01014"></a>01014                 free (buf);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1036
<a name="l01015"></a>01015 <span class="preprocessor">#else</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1037
<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>),
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1038
<a name="l01017"></a>01017                          argv[0], argv[<a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>]);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1039
<a name="l01018"></a>01018 <span class="preprocessor">#endif</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1040
<a name="l01019"></a>01019 <span class="preprocessor"></span>              }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1041
<a name="l01020"></a>01020             nextchar += strlen (nextchar);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1042
<a name="l01021"></a>01021             <a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>++;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1043
<a name="l01022"></a>01022             <span class="keywordflow">return</span> <span class="charliteral">'?'</span>;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1044
<a name="l01023"></a>01023           }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1045
<a name="l01024"></a>01024         <span class="keywordflow">if</span> (pfound != NULL)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1046
<a name="l01025"></a>01025           {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1047
<a name="l01026"></a>01026             option_index = indfound;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1048
<a name="l01027"></a>01027             <span class="keywordflow">if</span> (*nameend)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1049
<a name="l01028"></a>01028               {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1050
<a name="l01029"></a>01029                 <span class="comment">/* Don't test has_arg with &gt;, because some C compilers don't</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1051
<a name="l01030"></a>01030 <span class="comment">                   allow it to be used on enums.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1052
<a name="l01031"></a>01031                 <span class="keywordflow">if</span> (pfound-&gt;<a class="code" href="structoption.html#90d7ee9a51eea5c002682dbd0af149e4">has_arg</a>)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1053
<a name="l01032"></a>01032                   <a class="code" href="TestMasterSlave_2getopt_8c.html#db50a0eab9fed92fc3bfc7dfa4f2c410">optarg</a> = nameend + 1;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1054
<a name="l01033"></a>01033                 <span class="keywordflow">else</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1055
<a name="l01034"></a>01034                   {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1056
<a name="l01035"></a>01035                     <span class="keywordflow">if</span> (print_errors)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1057
<a name="l01036"></a>01036                       {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1058
<a name="l01037"></a>01037 <span class="preprocessor">#if defined _LIBC &amp;&amp; defined USE_IN_LIBIO</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1059
<a name="l01038"></a>01038 <span class="preprocessor"></span>                        <span class="keywordtype">char</span> *buf;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1060
<a name="l01039"></a>01039 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1061
<a name="l01040"></a>01040                         __asprintf (&amp;buf, <a class="code" href="TestMasterSlave_2getopt_8c.html#86a239addea586602343007a370bf8ad">_</a>(<span class="stringliteral">"\</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1062
<a name="l01041"></a>01041 <span class="stringliteral">%s: option `-W %s' doesn't allow an argument\n"</span>),
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1063
<a name="l01042"></a>01042                                     argv[0], pfound-&gt;<a class="code" href="structoption.html#92c850a23c7828c1dba453bf8d15e1f0">name</a>);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1064
<a name="l01043"></a>01043 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1065
<a name="l01044"></a>01044                         <span class="keywordflow">if</span> (_IO_fwide (stderr, 0) &gt; 0)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1066
<a name="l01045"></a>01045                           __fwprintf (stderr, L<span class="stringliteral">"%s"</span>, buf);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1067
<a name="l01046"></a>01046                         <span class="keywordflow">else</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1068
<a name="l01047"></a>01047                           fputs (buf, stderr);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1069
<a name="l01048"></a>01048 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1070
<a name="l01049"></a>01049                         free (buf);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1071
<a name="l01050"></a>01050 <span class="preprocessor">#else</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1072
<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>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1073
<a name="l01052"></a>01052 <span class="stringliteral">%s: option `-W %s' doesn't allow an argument\n"</span>),
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1074
<a name="l01053"></a>01053                                  argv[0], pfound-&gt;<a class="code" href="structoption.html#92c850a23c7828c1dba453bf8d15e1f0">name</a>);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1075
<a name="l01054"></a>01054 <span class="preprocessor">#endif</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1076
<a name="l01055"></a>01055 <span class="preprocessor"></span>                      }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1077
<a name="l01056"></a>01056 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1078
<a name="l01057"></a>01057                     nextchar += strlen (nextchar);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1079
<a name="l01058"></a>01058                     <span class="keywordflow">return</span> <span class="charliteral">'?'</span>;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1080
<a name="l01059"></a>01059                   }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1081
<a name="l01060"></a>01060               }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1082
<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)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1083
<a name="l01062"></a>01062               {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1084
<a name="l01063"></a>01063                 <span class="keywordflow">if</span> (<a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a> &lt; argc)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1085
<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>++];
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1086
<a name="l01065"></a>01065                 <span class="keywordflow">else</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1087
<a name="l01066"></a>01066                   {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1088
<a name="l01067"></a>01067                     <span class="keywordflow">if</span> (print_errors)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1089
<a name="l01068"></a>01068                       {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1090
<a name="l01069"></a>01069 <span class="preprocessor">#if defined _LIBC &amp;&amp; defined USE_IN_LIBIO</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1091
<a name="l01070"></a>01070 <span class="preprocessor"></span>                        <span class="keywordtype">char</span> *buf;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1092
<a name="l01071"></a>01071 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1093
<a name="l01072"></a>01072                         __asprintf (&amp;buf, <a class="code" href="TestMasterSlave_2getopt_8c.html#86a239addea586602343007a370bf8ad">_</a>(<span class="stringliteral">"\</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1094
<a name="l01073"></a>01073 <span class="stringliteral">%s: option `%s' requires an argument\n"</span>),
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1095
<a name="l01074"></a>01074                                     argv[0], argv[<a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a> - 1]);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1096
<a name="l01075"></a>01075 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1097
<a name="l01076"></a>01076                         <span class="keywordflow">if</span> (_IO_fwide (stderr, 0) &gt; 0)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1098
<a name="l01077"></a>01077                           __fwprintf (stderr, L<span class="stringliteral">"%s"</span>, buf);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1099
<a name="l01078"></a>01078                         <span class="keywordflow">else</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1100
<a name="l01079"></a>01079                           fputs (buf, stderr);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1101
<a name="l01080"></a>01080 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1102
<a name="l01081"></a>01081                         free (buf);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1103
<a name="l01082"></a>01082 <span class="preprocessor">#else</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1104
<a name="l01083"></a>01083 <span class="preprocessor"></span>                        fprintf (stderr,
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1105
<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>),
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1106
<a name="l01085"></a>01085                                  argv[0], argv[<a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a> - 1]);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1107
<a name="l01086"></a>01086 <span class="preprocessor">#endif</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1108
<a name="l01087"></a>01087 <span class="preprocessor"></span>                      }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1109
<a name="l01088"></a>01088                     nextchar += strlen (nextchar);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1110
<a name="l01089"></a>01089                     <span class="keywordflow">return</span> optstring[0] == <span class="charliteral">':'</span> ? <span class="charliteral">':'</span> : <span class="charliteral">'?'</span>;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1111
<a name="l01090"></a>01090                   }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1112
<a name="l01091"></a>01091               }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1113
<a name="l01092"></a>01092             nextchar += strlen (nextchar);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1114
<a name="l01093"></a>01093             <span class="keywordflow">if</span> (longind != NULL)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1115
<a name="l01094"></a>01094               *longind = option_index;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1116
<a name="l01095"></a>01095             <span class="keywordflow">if</span> (pfound-&gt;<a class="code" href="structoption.html#b366eea5fe7be25c1928328ba715e353">flag</a>)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1117
<a name="l01096"></a>01096               {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1118
<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>;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1119
<a name="l01098"></a>01098                 <span class="keywordflow">return</span> 0;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1120
<a name="l01099"></a>01099               }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1121
<a name="l01100"></a>01100             <span class="keywordflow">return</span> pfound-&gt;<a class="code" href="structoption.html#13bd155ec3b405d29c41ab8d0793be11">val</a>;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1122
<a name="l01101"></a>01101           }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1123
<a name="l01102"></a>01102           nextchar = NULL;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1124
<a name="l01103"></a>01103           <span class="keywordflow">return</span> <span class="charliteral">'W'</span>;   <span class="comment">/* Let the application handle it.   */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1125
<a name="l01104"></a>01104       }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1126
<a name="l01105"></a>01105     <span class="keywordflow">if</span> (temp[1] == <span class="charliteral">':'</span>)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1127
<a name="l01106"></a>01106       {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1128
<a name="l01107"></a>01107         <span class="keywordflow">if</span> (temp[2] == <span class="charliteral">':'</span>)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1129
<a name="l01108"></a>01108           {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1130
<a name="l01109"></a>01109             <span class="comment">/* This is an option that accepts an argument optionally.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1131
<a name="l01110"></a>01110             <span class="keywordflow">if</span> (*nextchar != <span class="charliteral">'\0'</span>)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1132
<a name="l01111"></a>01111               {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1133
<a name="l01112"></a>01112                 <a class="code" href="TestMasterSlave_2getopt_8c.html#db50a0eab9fed92fc3bfc7dfa4f2c410">optarg</a> = nextchar;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1134
<a name="l01113"></a>01113                 <a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>++;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1135
<a name="l01114"></a>01114               }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1136
<a name="l01115"></a>01115             <span class="keywordflow">else</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1137
<a name="l01116"></a>01116               <a class="code" href="TestMasterSlave_2getopt_8c.html#db50a0eab9fed92fc3bfc7dfa4f2c410">optarg</a> = NULL;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1138
<a name="l01117"></a>01117             nextchar = NULL;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1139
<a name="l01118"></a>01118           }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1140
<a name="l01119"></a>01119         <span class="keywordflow">else</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1141
<a name="l01120"></a>01120           {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1142
<a name="l01121"></a>01121             <span class="comment">/* This is an option that requires an argument.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1143
<a name="l01122"></a>01122             <span class="keywordflow">if</span> (*nextchar != <span class="charliteral">'\0'</span>)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1144
<a name="l01123"></a>01123               {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1145
<a name="l01124"></a>01124                 <a class="code" href="TestMasterSlave_2getopt_8c.html#db50a0eab9fed92fc3bfc7dfa4f2c410">optarg</a> = nextchar;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1146
<a name="l01125"></a>01125                 <span class="comment">/* If we end this ARGV-element by taking the rest as an arg,</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1147
<a name="l01126"></a>01126 <span class="comment">                   we must advance to the next element now.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1148
<a name="l01127"></a>01127                 <a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>++;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1149
<a name="l01128"></a>01128               }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1150
<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)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1151
<a name="l01130"></a>01130               {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1152
<a name="l01131"></a>01131                 <span class="keywordflow">if</span> (print_errors)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1153
<a name="l01132"></a>01132                   {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1154
<a name="l01133"></a>01133                     <span class="comment">/* 1003.2 specifies the format of this message.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1155
<a name="l01134"></a>01134 <span class="preprocessor">#if defined _LIBC &amp;&amp; defined USE_IN_LIBIO</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1156
<a name="l01135"></a>01135 <span class="preprocessor"></span>                    <span class="keywordtype">char</span> *buf;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1157
<a name="l01136"></a>01136 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1158
<a name="l01137"></a>01137                     __asprintf (&amp;buf,
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1159
<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>),
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1160
<a name="l01139"></a>01139                                 argv[0], c);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1161
<a name="l01140"></a>01140 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1162
<a name="l01141"></a>01141                     <span class="keywordflow">if</span> (_IO_fwide (stderr, 0) &gt; 0)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1163
<a name="l01142"></a>01142                       __fwprintf (stderr, L<span class="stringliteral">"%s"</span>, buf);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1164
<a name="l01143"></a>01143                     <span class="keywordflow">else</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1165
<a name="l01144"></a>01144                       fputs (buf, stderr);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1166
<a name="l01145"></a>01145 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1167
<a name="l01146"></a>01146                     free (buf);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1168
<a name="l01147"></a>01147 <span class="preprocessor">#else</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1169
<a name="l01148"></a>01148 <span class="preprocessor"></span>                    fprintf (stderr,
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1170
<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>),
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1171
<a name="l01150"></a>01150                              argv[0], c);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1172
<a name="l01151"></a>01151 <span class="preprocessor">#endif</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1173
<a name="l01152"></a>01152 <span class="preprocessor"></span>                  }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1174
<a name="l01153"></a>01153                 <a class="code" href="TestMasterSlave_2getopt_8c.html#475b8db98445da73e5f62a1ef6324b95">optopt</a> = c;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1175
<a name="l01154"></a>01154                 <span class="keywordflow">if</span> (optstring[0] == <span class="charliteral">':'</span>)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1176
<a name="l01155"></a>01155                   c = <span class="charliteral">':'</span>;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1177
<a name="l01156"></a>01156                 <span class="keywordflow">else</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1178
<a name="l01157"></a>01157                   c = <span class="charliteral">'?'</span>;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1179
<a name="l01158"></a>01158               }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1180
<a name="l01159"></a>01159             <span class="keywordflow">else</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1181
<a name="l01160"></a>01160               <span class="comment">/* We already incremented `optind' once;</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1182
<a name="l01161"></a>01161 <span class="comment">                 increment it again when taking next ARGV-elt as argument.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1183
<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>++];
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1184
<a name="l01163"></a>01163             nextchar = NULL;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1185
<a name="l01164"></a>01164           }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1186
<a name="l01165"></a>01165       }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1187
<a name="l01166"></a>01166     <span class="keywordflow">return</span> c;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1188
<a name="l01167"></a>01167   }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1189
<a name="l01168"></a>01168 }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1190
<a name="l01169"></a>01169 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1191
<a name="l01170"></a>01170 <span class="keywordtype">int</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1192
<a name="l01171"></a><a class="code" href="TestMasterSlave_2getopt_8c.html#1b2ada39ab92162c6ec9c67c8093fa2e">01171</a> <a class="code" href="TestMasterSlave_2getopt_8c.html#1b2ada39ab92162c6ec9c67c8093fa2e">getopt</a> (argc, argv, optstring)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1193
<a name="l01172"></a>01172      int argc;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1194
<a name="l01173"></a>01173      <span class="keywordtype">char</span> *const *argv;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1195
<a name="l01174"></a>01174      const <span class="keywordtype">char</span> *optstring;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1196
<a name="l01175"></a>01175 {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1197
<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,
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1198
<a name="l01177"></a>01177                            (<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="structoption.html">option</a> *) 0,
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1199
<a name="l01178"></a>01178                            (<span class="keywordtype">int</span> *) 0,
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1200
<a name="l01179"></a>01179                            0);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1201
<a name="l01180"></a>01180 }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1202
<a name="l01181"></a>01181 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1203
<a name="l01182"></a>01182 <span class="preprocessor">#endif  </span><span class="comment">/* Not ELIDE_CODE.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1204
<a name="l01183"></a>01183 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1205
<a name="l01184"></a>01184 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1206
<a name="l01185"></a>01185 <span class="comment">/* Compile with -DTEST to make an executable for use in testing</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1207
<a name="l01186"></a>01186 <span class="comment">   the above definition of `getopt'.  */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1208
<a name="l01187"></a>01187 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1209
<a name="l01188"></a>01188 <span class="comment">/* #define TEST */</span>        <span class="comment">/* Pete Wilson mod 7/28/02 */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1210
<a name="l01189"></a>01189 <span class="preprocessor">#ifdef TEST</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1211
<a name="l01190"></a>01190 <span class="preprocessor"></span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1212
<a name="l01191"></a>01191 <span class="preprocessor">#ifndef exit         </span><span class="comment">/* Pete Wilson mod 7/28/02 */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1213
<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>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1214
<a name="l01193"></a>01193 <span class="preprocessor">#endif               </span><span class="comment">/* Pete Wilson mod 7/28/02 */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1215
<a name="l01194"></a>01194 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1216
<a name="l01195"></a>01195 <span class="keywordtype">int</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1217
<a name="l01196"></a>01196 <a class="code" href="appli_8c.html#ef83014be811ae964a5ef7f0af7b46a2">main</a> (argc, argv)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1218
<a name="l01197"></a>01197      int argc;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1219
<a name="l01198"></a>01198      <span class="keywordtype">char</span> **argv;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1220
<a name="l01199"></a>01199 {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1221
<a name="l01200"></a>01200   <span class="keywordtype">int</span> c;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1222
<a name="l01201"></a>01201   <span class="keywordtype">int</span> digit_optind = 0;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1223
<a name="l01202"></a>01202 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1224
<a name="l01203"></a>01203   <span class="keywordflow">while</span> (1)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1225
<a name="l01204"></a>01204     {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1226
<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;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1227
<a name="l01206"></a>01206 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1228
<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>);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1229
<a name="l01208"></a>01208       <span class="keywordflow">if</span> (c == -1)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1230
<a name="l01209"></a>01209         <span class="keywordflow">break</span>;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1231
<a name="l01210"></a>01210 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1232
<a name="l01211"></a>01211       <span class="keywordflow">switch</span> (c)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1233
<a name="l01212"></a>01212         {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1234
<a name="l01213"></a>01213         <span class="keywordflow">case</span> <span class="charliteral">'0'</span>:
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1235
<a name="l01214"></a>01214         <span class="keywordflow">case</span> <span class="charliteral">'1'</span>:
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1236
<a name="l01215"></a>01215         <span class="keywordflow">case</span> <span class="charliteral">'2'</span>:
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1237
<a name="l01216"></a>01216         <span class="keywordflow">case</span> <span class="charliteral">'3'</span>:
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1238
<a name="l01217"></a>01217         <span class="keywordflow">case</span> <span class="charliteral">'4'</span>:
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1239
<a name="l01218"></a>01218         <span class="keywordflow">case</span> <span class="charliteral">'5'</span>:
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1240
<a name="l01219"></a>01219         <span class="keywordflow">case</span> <span class="charliteral">'6'</span>:
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1241
<a name="l01220"></a>01220         <span class="keywordflow">case</span> <span class="charliteral">'7'</span>:
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1242
<a name="l01221"></a>01221         <span class="keywordflow">case</span> <span class="charliteral">'8'</span>:
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1243
<a name="l01222"></a>01222         <span class="keywordflow">case</span> <span class="charliteral">'9'</span>:
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1244
<a name="l01223"></a>01223           <span class="keywordflow">if</span> (digit_optind != 0 &amp;&amp; digit_optind != this_option_optind)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1245
<a name="l01224"></a>01224             printf (<span class="stringliteral">"digits occur in two different argv-elements.\n"</span>);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1246
<a name="l01225"></a>01225           digit_optind = this_option_optind;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1247
<a name="l01226"></a>01226           printf (<span class="stringliteral">"option %c\n"</span>, c);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1248
<a name="l01227"></a>01227           <span class="keywordflow">break</span>;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1249
<a name="l01228"></a>01228 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1250
<a name="l01229"></a>01229         <span class="keywordflow">case</span> <span class="charliteral">'a'</span>:
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1251
<a name="l01230"></a>01230           printf (<span class="stringliteral">"option a\n"</span>);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1252
<a name="l01231"></a>01231           <span class="keywordflow">break</span>;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1253
<a name="l01232"></a>01232 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1254
<a name="l01233"></a>01233         <span class="keywordflow">case</span> <span class="charliteral">'b'</span>:
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1255
<a name="l01234"></a>01234           printf (<span class="stringliteral">"option b\n"</span>);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1256
<a name="l01235"></a>01235           <span class="keywordflow">break</span>;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1257
<a name="l01236"></a>01236 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1258
<a name="l01237"></a>01237         <span class="keywordflow">case</span> <span class="charliteral">'c'</span>:
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1259
<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>);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1260
<a name="l01239"></a>01239           <span class="keywordflow">break</span>;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1261
<a name="l01240"></a>01240 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1262
<a name="l01241"></a>01241         <span class="keywordflow">case</span> <span class="charliteral">'?'</span>:
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1263
<a name="l01242"></a>01242           <span class="keywordflow">break</span>;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1264
<a name="l01243"></a>01243 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1265
<a name="l01244"></a>01244         <span class="keywordflow">default</span>:
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1266
<a name="l01245"></a>01245           printf (<span class="stringliteral">"?? getopt returned character code 0%o ??\n"</span>, c);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1267
<a name="l01246"></a>01246         }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1268
<a name="l01247"></a>01247     }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1269
<a name="l01248"></a>01248 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1270
<a name="l01249"></a>01249   <span class="keywordflow">if</span> (<a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a> &lt; argc)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1271
<a name="l01250"></a>01250     {
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1272
<a name="l01251"></a>01251       printf (<span class="stringliteral">"non-option ARGV-elements: "</span>);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1273
<a name="l01252"></a>01252       <span class="keywordflow">while</span> (<a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a> &lt; argc)
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1274
<a name="l01253"></a>01253         printf (<span class="stringliteral">"%s "</span>, argv[<a class="code" href="TestMasterSlave_2getopt_8c.html#d5e1c16213bbee2d5e8cc363309f418c">optind</a>++]);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1275
<a name="l01254"></a>01254       printf (<span class="stringliteral">"\n"</span>);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1276
<a name="l01255"></a>01255     }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1277
<a name="l01256"></a>01256 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1278
<a name="l01257"></a>01257   exit (0);
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1279
<a name="l01258"></a>01258 }
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1280
<a name="l01259"></a>01259 
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1281
<a name="l01260"></a>01260 <span class="preprocessor">#endif </span><span class="comment">/* TEST */</span>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1282
</pre></div><hr size="1"><address style="align: right;"><small>Generated on Fri Jun 8 08:51:39 2007 for CanFestival by&nbsp;
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1283
<a href="http://www.doxygen.org/index.html">
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1284
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.1 </small></address>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1285
</body>
f49e5a6b7804 Manual and Documentation finish
nico
parents:
diff changeset
  1286
</html>