File: getopt.c

package info (click to toggle)
jzip 210r20001005d-5
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,124 kB
  • sloc: ansic: 11,700; sh: 32; makefile: 27
file content (89 lines) | stat: -rw-r--r-- 2,072 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89

/* $Id: getopt.c,v 1.1.1.1 2000/05/10 14:21:34 jholder Exp $   
 * --------------------------------------------------------------------
 * see doc/License.txt for License Information   
 * --------------------------------------------------------------------
 * 
 * File name: $Id: getopt.c,v 1.1.1.1 2000/05/10 14:21:34 jholder Exp $  
 *   
 * Description:    
 *    
 * Modification history:      
 * $Log: getopt.c,v $
 * Revision 1.1.1.1  2000/05/10 14:21:34  jholder
 *
 * imported
 *
 *
 * --------------------------------------------------------------------
 */

#include <stdio.h>
#include <string.h>

#define ERR(s, c) \
    if (opterr) {\
        char errbuf[2];\
        errbuf[0] = (char) c; errbuf[1] = '\n';\
        (void) fwrite (argv[0], strlen (argv[0]), 1, stderr);\
        (void) fwrite (s, strlen (s), 1, stderr);\
        (void) fwrite (errbuf, 2, 1, stderr);\
    }

int opterr = 1;
int optind = 1;
int optopt;
const char *optarg;

int getopt( int argc, char *argv[], const char *opts )
{
   static int sp = 1;
   int c;
   char *cp;

   if ( sp == 1 )
      if ( optind >= argc || argv[optind][0] != '-' || argv[optind][1] == '\0' )
         return ( EOF );
      else if ( strcmp( argv[optind], "--" ) == 0 )
      {
         optind++;
         return ( EOF );
      }
   optopt = c = argv[optind][sp];
   if ( c == ':' || ( cp = strchr( opts, c ) ) == NULL )
   {
      ERR( ": illegal option -- ", c );
      if ( argv[optind][++sp] == '\0' )
      {
         optind++;
         sp = 1;
      }
      return ( '?' );
   }
   if ( *++cp == ':' )
   {
      if ( argv[optind][sp + 1] != '\0' )
         optarg = &argv[optind++][sp + 1];
      else if ( ++optind >= argc )
      {
         ERR( ": option requires an argument -- ", c );
         sp = 1;
         return ( '?' );
      }
      else
         optarg = argv[optind++];
      sp = 1;
   }
   else
   {
      if ( argv[optind][++sp] == '\0' )
      {
         sp = 1;
         optind++;
      }
      optarg = NULL;
   }

   return ( c );

}                               /* getopt */