/[MITgcm]/MITgcm_contrib/mpack_src/mpack-1.6-4/getopt.c
ViewVC logotype

Contents of /MITgcm_contrib/mpack_src/mpack-1.6-4/getopt.c

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.1 - (show annotations) (download)
Sat Feb 23 20:22:58 2008 UTC (17 years, 4 months ago) by jmc
Branch: MAIN
CVS Tags: HEAD
File MIME type: text/plain
- get new version from: http://packages.qa.debian.org/m/mpack.html
  (files: mpack_1.6.orig.tar.gz, mpack_1.6-4.diff.gz, mpack_1.6-4.dsc)
  and apply patch 'mpack_1.6-4.diff' to original dir: mpack_1.6/
- this fix the MD5 coding on 64.bit platforms (well, seems to).
- added in Contrib to allow separate test (since building mpack seems fishy)

1 /* (C) Copyright 1993,1994 by Carnegie Mellon University
2 * All Rights Reserved.
3 *
4 * Permission to use, copy, modify, distribute, and sell this software
5 * and its documentation for any purpose is hereby granted without
6 * fee, provided that the above copyright notice appear in all copies
7 * and that both that copyright notice and this permission notice
8 * appear in supporting documentation, and that the name of Carnegie
9 * Mellon University not be used in advertising or publicity
10 * pertaining to distribution of the software without specific,
11 * written prior permission. Carnegie Mellon University makes no
12 * representations about the suitability of this software for any
13 * purpose. It is provided "as is" without express or implied
14 * warranty.
15 *
16 * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO
17 * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
18 * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE
19 * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
20 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
21 * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
22 * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
23 * SOFTWARE.
24 */
25 #include <stdio.h>
26
27 #ifdef __OS2__
28 # include <io.h>
29 #endif
30
31 #if defined(__MSDOS__) || defined(__OS2__)
32 #define ERR(s, c) \
33 if (opterr) { \
34 char buff[3]; \
35 buff[0] = c; buff[1] = '\r'; buff[2] = '\n'; \
36 (void)write(2, av[0], strlen(av[0])); \
37 (void)write(2, s, strlen(s)); \
38 (void)write(2, buff, 3); \
39 }
40 #else /* __MSDOS__ */
41 #define ERR(s, c) \
42 if (opterr) { \
43 char buff[2]; \
44 buff[0] = c; buff[1] = '\n'; \
45 (void)write(2, av[0], strlen(av[0])); \
46 (void)write(2, s, strlen(s)); \
47 (void)write(2, buff, 2); \
48 }
49 #endif
50
51 int opterr = 1;
52 int optind = 1;
53 int optopt;
54 char *optarg;
55
56
57 /*
58 ** Return options and their values from the command line.
59 ** This comes from the AT&T public-domain getopt published in mod.sources
60 ** (i.e., comp.sources.unix before the great Usenet renaming).
61 */
62 int
63 getopt(int ac, char **av, char *opts)
64 {
65 extern char *strchr(const char *, int);
66 static int i = 1;
67 char *p;
68
69 /* Move to next value from argv? */
70 if (i == 1) {
71 if (optind >= ac ||
72 #if defined(__MSDOS__) || defined(__OS2__)
73 (av[optind][0] != '-' && av[optind][0] != '/')
74 #else
75 av[optind][0] != '-'
76 #endif
77 || av[optind][1] == '\0')
78 return EOF;
79 if (strcmp(av[optind], "--") == 0) {
80 optind++;
81 return EOF;
82 }
83 }
84
85 /* Get next option character. */
86 if ((optopt = av[optind][i]) == ':'
87 || (p = strchr(opts, optopt)) == NULL) {
88 ERR(": illegal option -- ", optopt);
89 if (av[optind][++i] == '\0') {
90 optind++;
91 i = 1;
92 }
93 return '?';
94 }
95
96 /* Snarf argument? */
97 if (*++p == ':') {
98 if (av[optind][i + 1] != '\0')
99 optarg = &av[optind++][i + 1];
100 else {
101 if (++optind >= ac) {
102 ERR(": option requires an argument -- ", optopt);
103 i = 1;
104 return '?';
105 }
106 optarg = av[optind++];
107 }
108 i = 1;
109 }
110 else {
111 if (av[optind][++i] == '\0') {
112 i = 1;
113 optind++;
114 }
115 optarg = NULL;
116 }
117
118 return optopt;
119 }

  ViewVC Help
Powered by ViewVC 1.1.22