home *** CD-ROM | disk | FTP | other *** search
- From: jac@yoko.rutgers.edu (Jonathan A. Chandross)
- Newsgroups: comp.sources.apple2
- Subject: v001SRC059: coff -- Dump OMF Files Under Orca (GS), Part04/04
- Message-ID: <Jun.1.12.22.18.1991.13073@yoko.rutgers.edu>
- Date: 1 Jun 91 16:22:18 GMT
- Approved: jac@paul.rutgers.edu
-
-
- Submitted-by: Albert Chin (acmfiu@fiu.edu)
- Posting-number: Volume 1, Source:59
- Archive-name: util/gs/shell/orca/coff/part04
- Architecture: ONLY_2gs
- Version-number: 1.00
-
-
- =getopt.c
- -/* Getopt for GNU.
- - Copyright (C) 1987, 1989, 1990 Free Software Foundation, Inc.
- -
- - This program is free software; you can redistribute it and/or modify
- - it under the terms of the GNU General Public License as published by
- - the Free Software Foundation; either version 1, or (at your option)
- - any later version.
- -
- - This program is distributed in the hope that it will be useful,
- - but WITHOUT ANY WARRANTY; without even the implied warranty of
- - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- - GNU General Public License for more details.
- -
- - You should have received a copy of the GNU General Public License
- - along with this program; if not, write to the Free Software
- - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
- -
- -#pragma noroot
- -#pragma memorymodel 0
- -#pragma optimize -1
- -
- -#ifdef __STDC__
- -#define CONST
- -#else
- -#define CONST
- -#endif
- -#include <stdio.h>
- -
- -/* This version of `getopt' appears to the caller like standard Unix `getopt'
- - but it behaves differently for the user, since it allows the user
- - to intersperse the options with the other arguments.
- -
- - As `getopt' works, it permutes the elements of `argv' so that,
- - when it is done, all the options precede everything else. Thus
- - all application programs are extended to handle flexible argument order.
- -
- - Setting the environment variable _POSIX_OPTION_ORDER disables permutation.
- - Then the behavior is completely standard.
- -
- - GNU application programs can use a third alternative mode in which
- - they can distinguish the relative order of options and other arguments. */
- -
- -#include <stdio.h>
- -#define STDC_HEADERS
- -
- -/* If compiled with GNU C, use the built-in alloca */
- -#ifdef __GNUC__
- -#define alloca __builtin_alloca
- -#else /* not __GNUC__ */
- -#ifdef sparc
- -#include <alloca.h>
- -#else
- -char *alloca ();
- -#endif
- -#endif /* not __GNUC__ */
- -
- -#if defined(STDC_HEADERS) || defined(__GNU_LIBRARY__)
- -#include <stdlib.h>
- -#include <string.h>
- -#define bcopy(s, d, n) memcpy ((d), (s), (n))
- -#define index strchr
- -#else
- -
- -#ifdef USG
- -#include <string.h>
- -#define bcopy(s, d, n) memcpy ((d), (s), (n))
- -#define index strchr
- -#else
- -#include <strings.h>
- -void bcopy ();
- -#endif
- -
- -char *getenv ();
- -char *malloc ();
- -#endif
- -
- -/* For communication from `getopt' to the caller.
- - When `getopt' finds an option that takes an argument,
- - the argument value is returned here.
- - Also, when `ordering' is RETURN_IN_ORDER,
- - each non-option ARGV-element is returned here. */
- -
- -char *optarg = NULL;
- -
- -/* Index in ARGV of the next element to be scanned.
- - This is used for communication to and from the caller
- - and for communication between successive calls to `getopt'.
- -
- - On entry to `getopt', zero means this is the first call; initialize.
- -
- - When `getopt' returns EOF, this is the index of the first of the
- - non-option elements that the caller should itself scan.
- -
- - Otherwise, `optind' communicates from one call to the next
- - how much of ARGV has been scanned so far. */
- -
- -int optind = 0;
- -
- -/* The next char to be scanned in the option-element
- - in which the last option character we returned was found.
- - This allows us to pick up the scan where we left off.
- -
- - If this is zero, or a null string, it means resume the scan
- - by advancing to the next ARGV-element. */
- -
- -static char *nextchar;
- -
- -/* Callers store zero here to inhibit the error message
- - for unrecognized options. */
- -
- -int opterr = 1;
- -
- -/* Describe how to deal with options that follow non-option ARGV-elements.
- -
- - If the caller did not specify anything,
- - the default is REQUIRE_ORDER if the environment variable
- - _POSIX_OPTION_ORDER is defined, PERMUTE otherwise.
- -
- - REQUIRE_ORDER means don't recognize them as options;
- - stop option processing when the first non-option is seen.
- - This is what Unix does.
- - This mode of operation is selected by either setting the environment
- - variable _POSIX_OPTION_ORDER, or using `+' as the first character
- - of the list of option characters.
- -
- - PERMUTE is the default. We permute the contents of ARGV as we scan,
- - so that eventually all the non-options are at the end. This allows options
- - to be given in any order, even with programs that were not written to
- - expect this.
- -
- - RETURN_IN_ORDER is an option available to programs that were written
- - to expect options and other ARGV-elements in any order and that care about
- - the ordering of the two. We describe each non-option ARGV-element
- - as if it were the argument of an option with character code 1.
- - Using `-' as the first character of the list of option characters
- - selects this mode of operation.
- -
- - The special argument `--' forces an end of option-scanning regardless
- - of the value of `ordering'. In the case of RETURN_IN_ORDER, only
- - `--' can cause `getopt' to return EOF with `optind' != ARGC. */
- -
- -static enum
- -{
- - REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER
- -} ordering;
- -
- -/* Describe the long-named options requested by the application.
- - _GETOPT_LONG_OPTIONS is a vector of `struct option' terminated by an
- - element containing a name which is zero.
- - The field `has_arg' is 1 if the option takes an argument,
- - 2 if it takes an optional argument. */
- -
- -struct option
- -{
- - char *name;
- - int has_arg;
- - int *flag;
- - int val;
- -};
- -
- -CONST struct option *_getopt_long_options;
- -
- -int _getopt_long_only = 0;
- -
- -/* Index in _GETOPT_LONG_OPTIONS of the long-named option actually found.
- - Only valid when a long-named option was found. */
- -
- -int option_index;
- -
- -/* Handle permutation of arguments. */
- -
- -/* Describe the part of ARGV that contains non-options that have
- - been skipped. `first_nonopt' is the index in ARGV of the first of them;
- - `last_nonopt' is the index after the last of them. */
- -
- -static int first_nonopt;
- -static int last_nonopt;
- -
- -/* Exchange two adjacent subsequences of ARGV.
- - One subsequence is elements [first_nonopt,last_nonopt)
- - which contains all the non-options that have been skipped so far.
- - The other is elements [last_nonopt,optind), which contains all
- - the options processed since those non-options were skipped.
- -
- - `first_nonopt' and `last_nonopt' are relocated so that they describe
- - the new indices of the non-options in ARGV after they are moved. */
- -
- -static void
- -exchange (argv)
- - char **argv;
- -{
- - int nonopts_size = (last_nonopt - first_nonopt) * sizeof (char *);
- - char **temp = (char **) malloc (nonopts_size);
- -
- - /* Interchange the two blocks of data in ARGV. */
- -
- - bcopy (&argv[first_nonopt], temp, nonopts_size);
- - bcopy (&argv[last_nonopt], &argv[first_nonopt],
- - (optind - last_nonopt) * sizeof (char *));
- - bcopy (temp, &argv[first_nonopt + optind - last_nonopt], nonopts_size);
- -
- - /* Update records for the slots the non-options now occupy. */
- -
- - first_nonopt += (optind - last_nonopt);
- - last_nonopt = optind;
- - free (temp);
- -}
- -
- -/* Scan elements of ARGV (whose length is ARGC) for option characters
- - given in OPTSTRING.
- -
- - If an element of ARGV starts with '-', and is not exactly "-" or "--",
- - then it is an option element. The characters of this element
- - (aside from the initial '-') are option characters. If `getopt'
- - is called repeatedly, it returns successively each of the option characters
- - from each of the option elements.
- -
- - If `getopt' finds another option character, it returns that character,
- - updating `optind' and `nextchar' so that the next call to `getopt' can
- - resume the scan with the following option character or ARGV-element.
- -
- - If there are no more option characters, `getopt' returns `EOF'.
- - Then `optind' is the index in ARGV of the first ARGV-element
- - that is not an option. (The ARGV-elements have been permuted
- - so that those that are not options now come last.)
- -
- - OPTSTRING is a string containing the legitimate option characters.
- - If an option character is seen that is not listed in OPTSTRING,
- - return '?' after printing an error message. If you set `opterr' to
- - zero, the error message is suppressed but we still return '?'.
- -
- - If a char in OPTSTRING is followed by a colon, that means it wants an arg,
- - so the following text in the same ARGV-element, or the text of the following
- - ARGV-element, is returned in `optarg'. Two colons mean an option that
- - wants an optional arg; if there is text in the current ARGV-element,
- - it is returned in `optarg', otherwise `optarg' is set to zero.
- -
- - If OPTSTRING starts with `-' or `+', it requests different methods of
- - handling the non-option ARGV-elements.
- - See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above.
- -
- - Long-named options begin with `+' instead of `-'.
- - Their names may be abbreviated as long as the abbreviation is unique
- - or is an exact match for some defined option. If they have an
- - argument, it follows the option name in the same ARGV-element, separated
- - from the option name by a `=', or else the in next ARGV-element.
- - When `getopt' finds a long-named option, it returns 0 if that option's
- - `flag' field is nonzero, the value of the option's `val' field
- - otherwise. */
- -
- -int
- -getopt (argc, argv, optstring)
- - int argc;
- - char **argv;
- - CONST char *optstring;
- -{
- - optarg = NULL;
- -
- - /* Initialize the internal data when the first call is made.
- - Start processing options with ARGV-element 1 (since ARGV-element 0
- - is the program name); the sequence of previously skipped
- - non-option ARGV-elements is empty. */
- -
- - if (optind == 0)
- - {
- - first_nonopt = last_nonopt = optind = 1;
- -
- - nextchar = NULL;
- -
- - /* Determine how to handle the ordering of options and nonoptions. */
- -
- - if (optstring[0] == '-')
- - {
- - ordering = RETURN_IN_ORDER;
- - ++optstring;
- - }
- - else if (optstring[0] == '+')
- - {
- - ordering = REQUIRE_ORDER;
- - ++optstring;
- - }
- - else if (getenv ("_POSIX_OPTION_ORDER") != NULL)
- - ordering = REQUIRE_ORDER;
- - else
- - ordering = PERMUTE;
- - }
- -
- - if (nextchar == NULL || *nextchar == 0)
- - {
- - if (ordering == PERMUTE)
- - {
- - /* If we have just processed some options following some non-options,
- - exchange them so that the options come first. */
- -
- - if (first_nonopt != last_nonopt && last_nonopt != optind)
- - exchange (argv);
- - else if (last_nonopt != optind)
- - first_nonopt = optind;
- -
- - /* Now skip any additional non-options
- - and extend the range of non-options previously skipped. */
- -
- - while (optind < argc
- - && (argv[optind][0] != '-'
- - || argv[optind][1] == 0)
- - && (_getopt_long_options == NULL
- - || argv[optind][0] != '+'
- - || argv[optind][1] == 0))
- - optind++;
- - last_nonopt = optind;
- - }
- -
- - /* Special ARGV-element `--' means premature end of options.
- - Skip it like a null option,
- - then exchange with previous non-options as if it were an option,
- - then skip everything else like a non-option. */
- -
- - if (optind != argc && !strcmp (argv[optind], "--"))
- - {
- - optind++;
- -
- - if (first_nonopt != last_nonopt && last_nonopt != optind)
- - exchange (argv);
- - else if (first_nonopt == last_nonopt)
- - first_nonopt = optind;
- - last_nonopt = argc;
- -
- - optind = argc;
- - }
- -
- - /* If we have done all the ARGV-elements, stop the scan
- - and back over any non-options that we skipped and permuted. */
- -
- - if (optind == argc)
- - {
- - /* Set the next-arg-index to point at the non-options
- - that we previously skipped, so the caller will digest them. */
- - if (first_nonopt != last_nonopt)
- - optind = first_nonopt;
- - return EOF;
- - }
- -
- - /* If we have come to a non-option and did not permute it,
- - either stop the scan or describe it to the caller and pass it by. */
- -
- - if ((argv[optind][0] != '-' || argv[optind][1] == 0)
- - && (_getopt_long_options == NULL
- - || argv[optind][0] != '+' || argv[optind][1] == 0))
- - {
- - if (ordering == REQUIRE_ORDER)
- - return EOF;
- - optarg = argv[optind++];
- - return 1;
- - }
- -
- - /* We have found another option-ARGV-element.
- - Start decoding its characters. */
- -
- - nextchar = argv[optind] + 1;
- - }
- -
- - if (_getopt_long_options != NULL
- - && (argv[optind][0] == '+'
- - || (_getopt_long_only && argv[optind][0] == '-'))
- - )
- - {
- - CONST struct option *p;
- - char *s = nextchar;
- - int exact = 0;
- - int ambig = 0;
- - CONST struct option *pfound = NULL;
- - int indfound;
- -
- - while (*s && *s != '=')
- - s++;
- -
- - /* Test all options for either exact match or abbreviated matches. */
- - for (p = _getopt_long_options, option_index = 0; p->name;
- - p++, option_index++)
- - if (!strncmp (p->name, nextchar, s - nextchar))
- - {
- - if (s - nextchar == strlen (p->name))
- - {
- - /* Exact match found. */
- - pfound = p;
- - indfound = option_index;
- - exact = 1;
- - break;
- - }
- - else if (pfound == NULL)
- - {
- - /* First nonexact match found. */
- - pfound = p;
- - indfound = option_index;
- - }
- - else
- - /* Second nonexact match found. */
- - ambig = 1;
- - }
- -
- - if (ambig && !exact)
- - {
- - printf ("%s: option `%s' is ambiguous\n",
- - argv[0], argv[optind]);
- - nextchar += strlen (nextchar);
- - optind++;
- - return '?';
- - }
- -
- - if (pfound != NULL)
- - {
- - option_index = indfound;
- - optind++;
- - if (*s)
- - {
- - if (pfound->has_arg > 0)
- - optarg = s + 1;
- - else
- - {
- - printf ("%s: option `%c%s' doesn't allow an argument\n",
- - argv[0], argv[optind - 1][0], pfound->name);
- - nextchar += strlen (nextchar);
- - return '?';
- - }
- - }
- - else if (pfound->has_arg == 1)
- - {
- - if (optind < argc)
- - optarg = argv[optind++];
- - else
- - {
- - printf ("%s: option `%s' requires an argument\n",
- - argv[0], argv[optind - 1]);
- - nextchar += strlen (nextchar);
- - return '?';
- - }
- - }
- - nextchar += strlen (nextchar);
- - if (pfound->flag)
- - {
- - *(pfound->flag) = pfound->val;
- - return 0;
- - }
- - return pfound->val;
- - }
- - /* Can't find it as a long option. If this is getopt_long_only,
- - and the option starts with '-' and is a valid short
- - option, then interpret it as a short option. Otherwise it's
- - an error. */
- - if (_getopt_long_only == 0 || argv[optind][0] == '+' ||
- - index (optstring, *nextchar) == NULL)
- - {
- - if (opterr != 0)
- - printf ("%s: unrecognized option `%c%s'\n",
- - argv[0], argv[optind][0], nextchar);
- - nextchar += strlen (nextchar);
- - optind++;
- - return '?';
- - }
- - }
- -
- - /* Look at and handle the next option-character. */
- -
- - {
- - char c = *nextchar;
- - char *temp = index (optstring, c);
- -
- - nextchar++;
- - /* Increment `optind' when we start to process its last character. */
- - if (*nextchar == 0)
- - optind++;
- -
- - if (temp == NULL || c == ':')
- - {
- - if (opterr != 0)
- - {
- - if (c < 040 || c >= 0177)
- - printf ("%s: unrecognized option, character code 0%o\n",
- - argv[0], c);
- - else
- - printf ("%s: unrecognized option `-%c'\n",
- - argv[0], c);
- - }
- - return '?';
- - }
- - if (temp[1] == ':')
- - {
- - if (temp[2] == ':')
- - {
- - /* This is an option that accepts an argument optionally. */
- - if (*nextchar != 0)
- - {
- - optarg = nextchar;
- - optind++;
- - }
- - else
- - optarg = NULL;
- - nextchar = NULL;
- - }
- - else
- - {
- - /* This is an option that requires an argument. */
- - if (*nextchar != 0)
- - {
- - optarg = nextchar;
- - /* If we end this ARGV-element by taking the rest as an arg,
- - we must advance to the next element now. */
- - optind++;
- - }
- - else if (optind == argc)
- - {
- - if (opterr != 0)
- - printf ("%s: option '-%c' requires an argument\n",
- - argv[0], c);
- - c = '?';
- - }
- - else
- - /* We already incremented `optind' once;
- - increment it again when taking next ARGV-elt as argument. */
- - optarg = argv[optind++];
- - nextchar = NULL;
- - }
- - }
- - return c;
- - }
- -}
- -
- -#ifdef TEST
- -
- -/* Compile with -DTEST to make an executable for use in testing
- - the above definition of `getopt'. */
- -
- -int
- -main (argc, argv)
- - int argc;
- - char **argv;
- -{
- - int c;
- - int digit_optind = 0;
- -
- - while (1)
- - {
- - int this_option_optind = optind ? optind : 1;
- -
- - c = getopt (argc, argv, "abc:d:0123456789");
- - if (c == EOF)
- - break;
- -
- - switch (c)
- - {
- - case '0':
- - case '1':
- - case '2':
- - case '3':
- - case '4':
- - case '5':
- - case '6':
- - case '7':
- - case '8':
- - case '9':
- - if (digit_optind != 0 && digit_optind != this_option_optind)
- - printf ("digits occur in two different argv-elements.\n");
- - digit_optind = this_option_optind;
- - printf ("option %c\n", c);
- - break;
- -
- - case 'a':
- - printf ("option a\n");
- - break;
- -
- - case 'b':
- - printf ("option b\n");
- - break;
- -
- - case 'c':
- - printf ("option c with value '%s'\n", optarg);
- - break;
- -
- - case '?':
- - break;
- -
- - default:
- - printf ("?? getopt returned character code 0%o ??\n", c);
- - }
- - }
- -
- - if (optind < argc)
- - {
- - printf ("non-option ARGV-elements: ");
- - while (optind < argc)
- - printf ("%s ", argv[optind++]);
- - printf ("\n");
- - }
- -
- - exit (0);
- -}
- -
- -#endif /* TEST */
- -
- =getopt1.c
- -/* Getopt for GNU.
- - Copyright (C) 1987, 1989 Free Software Foundation, Inc.
- -
- - This program is free software; you can redistribute it and/or modify
- - it under the terms of the GNU General Public License as published by
- - the Free Software Foundation; either version 1, or (at your option)
- - any later version.
- -
- - This program is distributed in the hope that it will be useful,
- - but WITHOUT ANY WARRANTY; without even the implied warranty of
- - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- - GNU General Public License for more details.
- -
- - You should have received a copy of the GNU General Public License
- - along with this program; if not, write to the Free Software
- - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
- -
- -#pragma noroot
- -#pragma memorymodel 0
- -#pragma optimize -1
- -
- -#include <sys/getopt.h>
- -
- -#ifdef __STDC__
- -#define CONST
- -#else
- -#define CONST
- -#endif
- -
- -#define NULL (void *) 0L
- -
- -int
- -getopt_long (argc, argv, options, long_options, opt_index)
- - int argc;
- - char **argv;
- - CONST char *options;
- - CONST struct option *long_options;
- - int *opt_index;
- -{
- - int val;
- -
- - _getopt_long_options = long_options;
- - val = getopt (argc, argv, options);
- - if (val == 0 && opt_index != NULL)
- - *opt_index = option_index;
- - return val;
- -}
- -
- -/* Like getopt_long, but '-' as well as '+' can indicate a long option.
- - If an option that starts with '-' doesn't match a long option,
- - but does match a short option, it is parsed as a short option
- - instead. */
- -
- -int
- -getopt_long_only (argc, argv, options, long_options, opt_index)
- - int argc;
- - char **argv;
- - CONST char *options;
- - CONST struct option *long_options;
- - int *opt_index;
- -{
- - int val;
- -
- - _getopt_long_options = long_options;
- - _getopt_long_only = 1;
- - val = getopt (argc, argv, options);
- - if (val == 0 && opt_index != NULL)
- - *opt_index = option_index;
- - return val;
- -}
- -
- -
- -#ifdef TEST
- -
- -#include <stdio.h>
- -
- -int
- -main (argc, argv)
- - int argc;
- - char **argv;
- -{
- - int c;
- - int digit_optind = 0;
- -
- - while (1)
- - {
- - int this_option_optind = optind ? optind : 1;
- - char *name = '\0';
- - int option_index = 0;
- - static struct option long_options[] =
- - {
- - {"add", 1, 0, 0},
- - {"append", 0, 0, 0},
- - {"delete", 1, 0, 0},
- - {"verbose", 0, 0, 0},
- - {"create", 0, 0, 0},
- - {"file", 1, 0, 0},
- - {0, 0, 0, 0}
- - };
- -
- - c = getopt_long (argc, argv, "abc:d:0123456789",
- - long_options, &option_index);
- - if (c == EOF)
- - break;
- -
- - switch (c)
- - {
- - case 0:
- - printf ("option %s", (long_options[option_index]).name);
- - if (optarg)
- - printf (" with arg %s", optarg);
- - printf ("\n");
- - break;
- -
- - case '0':
- - case '1':
- - case '2':
- - case '3':
- - case '4':
- - case '5':
- - case '6':
- - case '7':
- - case '8':
- - case '9':
- - if (digit_optind != 0 && digit_optind != this_option_optind)
- - printf ("digits occur in two different argv-elements.\n");
- - digit_optind = this_option_optind;
- - printf ("option %c\n", c);
- - break;
- -
- - case 'a':
- - printf ("option a\n");
- - break;
- -
- - case 'b':
- - printf ("option b\n");
- - break;
- -
- - case 'c':
- - printf ("option c with value `%s'\n", optarg);
- - break;
- -
- - case '?':
- - break;
- -
- - default:
- - printf ("?? getopt returned character code 0%o ??\n", c);
- - }
- - }
- -
- - if (optind < argc)
- - {
- - printf ("non-option ARGV-elements: ");
- - while (optind < argc)
- - printf ("%s ", argv[optind++]);
- - printf ("\n");
- - }
- -
- - exit (0);
- -}
- -
- -#endif /* TEST */
- -
- =COPYING
- -
- -
- - GNU GENERAL PUBLIC LICENSE
- - Version 1, February 1989
- -
- - Copyright (C) 1989 Free Software Foundation, Inc.
- - 675 Mass Ave, Cambridge, MA 02139, USA
- - Everyone is permitted to copy and distribute verbatim copies
- - of this license document, but changing it is not allowed.
- -
- - Preamble
- -
- - The license agreements of most software companies try to keep users
- -at the mercy of those companies. By contrast, our General Public
- -License is intended to guarantee your freedom to share and change free
- -software--to make sure the software is free for all its users. The
- -General Public License applies to the Free Software Foundation's
- -software and to any other program whose authors commit to using it.
- -You can use it for your programs, too.
- -
- - When we speak of free software, we are referring to freedom, not
- -price. Specifically, the General Public License is designed to make
- -sure that you have the freedom to give away or sell copies of free
- -software, that you receive source code or can get it if you want it,
- -that you can change the software or use pieces of it in new free
- -programs; and that you know you can do these things.
- -
- - To protect your rights, we need to make restrictions that forbid
- -anyone to deny you these rights or to ask you to surrender the rights.
- -These restrictions translate to certain responsibilities for you if you
- -distribute copies of the software, or if you modify it.
- -
- - For example, if you distribute copies of a such a program, whether
- -gratis or for a fee, you must give the recipients all the rights that
- -you have. You must make sure that they, too, receive or can get the
- -source code. And you must tell them their rights.
- -
- - We protect your rights with two steps: (1) copyright the software, and
- -(2) offer you this license which gives you legal permission to copy,
- -distribute and/or modify the software.
- -
- - Also, for each author's protection and ours, we want to make certain
- -that everyone understands that there is no warranty for this free
- -software. If the software is modified by someone else and passed on, we
- -want its recipients to know that what they have is not the original, so
- -that any problems introduced by others will not reflect on the original
- -authors' reputations.
- -
- - The precise terms and conditions for copying, distribution and
- -modification follow.
- -
- - GNU GENERAL PUBLIC LICENSE
- - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
- -
- - 0. This License Agreement applies to any program or other work which
- -contains a notice placed by the copyright holder saying it may be
- -distributed under the terms of this General Public License. The
- -"Program", below, refers to any such program or work, and a "work based
- -on the Program" means either the Program or any work containing the
- -Program or a portion of it, either verbatim or with modifications. Each
- -licensee is addressed as "you".
- -
- - 1. You may copy and distribute verbatim copies of the Program's source
- -code as you receive it, in any medium, provided that you conspicuously and
- -appropriately publish on each copy an appropriate copyright notice and
- -disclaimer of warranty; keep intact all the notices that refer to this
- -General Public License and to the absence of any warranty; and give any
- -other recipients of the Program a copy of this General Public License
- -along with the Program. You may charge a fee for the physical act of
- -transferring a copy.
- -
- - 2. You may modify your copy or copies of the Program or any portion of
- -it, and copy and distribute such modifications under the terms of Paragraph
- -1 above, provided that you also do the following:
- -
- - a) cause the modified files to carry prominent notices stating that
- - you changed the files and the date of any change; and
- -
- - b) cause the whole of any work that you distribute or publish, that
- - in whole or in part contains the Program or any part thereof, either
- - with or without modifications, to be licensed at no charge to all
- - third parties under the terms of this General Public License (except
- - that you may choose to grant warranty protection to some or all
- - third parties, at your option).
- -
- - c) If the modified program normally reads commands interactively when
- - run, you must cause it, when started running for such interactive use
- - in the simplest and most usual way, to print or display an
- - announcement including an appropriate copyright notice and a notice
- - that there is no warranty (or else, saying that you provide a
- - warranty) and that users may redistribute the program under these
- - conditions, and telling the user how to view a copy of this General
- - Public License.
- -
- - d) You may charge a fee for the physical act of transferring a
- - copy, and you may at your option offer warranty protection in
- - exchange for a fee.
- -
- -Mere aggregation of another independent work with the Program (or its
- -derivative) on a volume of a storage or distribution medium does not bring
- -the other work under the scope of these terms.
- -
- - 3. You may copy and distribute the Program (or a portion or derivative of
- -it, under Paragraph 2) in object code or executable form under the terms of
- -Paragraphs 1 and 2 above provided that you also do one of the following:
- -
- - a) accompany it with the complete corresponding machine-readable
- - source code, which must be distributed under the terms of
- - Paragraphs 1 and 2 above; or,
- -
- - b) accompany it with a written offer, valid for at least three
- - years, to give any third party free (except for a nominal charge
- - for the cost of distribution) a complete machine-readable copy of the
- - corresponding source code, to be distributed under the terms of
- - Paragraphs 1 and 2 above; or,
- -
- - c) accompany it with the information you received as to where the
- - corresponding source code may be obtained. (This alternative is
- - allowed only for noncommercial distribution and only if you
- - received the program in object code or executable form alone.)
- -
- -Source code for a work means the preferred form of the work for making
- -modifications to it. For an executable file, complete source code means
- -all the source code for all modules it contains; but, as a special
- -exception, it need not include source code for modules which are standard
- -libraries that accompany the operating system on which the executable
- -file runs, or for standard header files or definitions files that
- -accompany that operating system.
- -
- - 4. You may not copy, modify, sublicense, distribute or transfer the
- -Program except as expressly provided under this General Public License.
- -Any attempt otherwise to copy, modify, sublicense, distribute or transfer
- -the Program is void, and will automatically terminate your rights to use
- -the Program under this License. However, parties who have received
- -copies, or rights to use copies, from you under this General Public
- -License will not have their licenses terminated so long as such parties
- -remain in full compliance.
- -
- - 5. By copying, distributing or modifying the Program (or any work based
- -on the Program) you indicate your acceptance of this license to do so,
- -and all its terms and conditions.
- -
- - 6. Each time you redistribute the Program (or any work based on the
- -Program), the recipient automatically receives a license from the original
- -licensor to copy, distribute or modify the Program subject to these
- -terms and conditions. You may not impose any further restrictions on the
- -recipients' exercise of the rights granted herein.
- -
- - 7. The Free Software Foundation may publish revised and/or new versions
- -of the General Public License from time to time. Such new versions will
- -be similar in spirit to the present version, but may differ in detail to
- -address new problems or concerns.
- -
- -Each version is given a distinguishing version number. If the Program
- -specifies a version number of the license which applies to it and "any
- -later version", you have the option of following the terms and conditions
- -either of that version or of any later version published by the Free
- -Software Foundation. If the Program does not specify a version number of
- -the license, you may choose any version ever published by the Free Software
- -Foundation.
- -
- - 8. If you wish to incorporate parts of the Program into other free
- -programs whose distribution conditions are different, write to the author
- -to ask for permission. For software which is copyrighted by the Free
- -Software Foundation, write to the Free Software Foundation; we sometimes
- -make exceptions for this. Our decision will be guided by the two goals
- -of preserving the free status of all derivatives of our free software and
- -of promoting the sharing and reuse of software generally.
- -
- - NO WARRANTY
- -
- - 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
- -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
- -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
- -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
- -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
- -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
- -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
- -REPAIR OR CORRECTION.
- -
- - 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
- -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
- -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
- -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
- -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
- -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
- -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
- -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
- -POSSIBILITY OF SUCH DAMAGES.
- -
- - END OF TERMS AND CONDITIONS
- -
- - Appendix: How to Apply These Terms to Your New Programs
- -
- - If you develop a new program, and you want it to be of the greatest
- -possible use to humanity, the best way to achieve this is to make it
- -free software which everyone can redistribute and change under these
- -terms.
- -
- - To do so, attach the following notices to the program. It is safest to
- -attach them to the start of each source file to most effectively convey
- -the exclusion of warranty; and each file should have at least the
- -"copyright" line and a pointer to where the full notice is found.
- -
- - <one line to give the program's name and a brief idea of what it does.>
- - Copyright (C) 19yy <name of author>
- -
- - This program is free software; you can redistribute it and/or modify
- - it under the terms of the GNU General Public License as published by
- - the Free Software Foundation; either version 1, or (at your option)
- - any later version.
- -
- - This program is distributed in the hope that it will be useful,
- - but WITHOUT ANY WARRANTY; without even the implied warranty of
- - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- - GNU General Public License for more details.
- -
- - You should have received a copy of the GNU General Public License
- - along with this program; if not, write to the Free Software
- - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- -
- -Also add information on how to contact you by electronic and paper mail.
- -
- -If the program is interactive, make it output a short notice like this
- -when it starts in an interactive mode:
- -
- - Gnomovision version 69, Copyright (C) 19xx name of author
- - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- - This is free software, and you are welcome to redistribute it
- - under certain conditions; type `show c' for details.
- -
- -The hypothetical commands `show w' and `show c' should show the
- -appropriate parts of the General Public License. Of course, the
- -commands you use may be called something other than `show w' and `show
- -c'; they could even be mouse-clicks or menu items--whatever suits your
- -program.
- -
- -You should also get your employer (if you work as a programmer) or your
- -school, if any, to sign a "copyright disclaimer" for the program, if
- -necessary. Here a sample; alter the names:
- -
- - Yoyodyne, Inc., hereby disclaims all copyright interest in the
- - program `Gnomovision' (a program to direct compilers to make passes
- - at assemblers) written by James Hacker.
- -
- - <signature of Ty Coon>, 1 April 1989
- - Ty Coon, President of Vice
- -
- -That's all there is to it!
- -
- -
- + END OF ARCHIVE
-