Mercurial > nsnake
changeset 64:8ab607924882
nsnake: use only POSIX
author | David Demelier <markand@malikania.fr> |
---|---|
date | Tue, 28 Jan 2020 21:10:00 +0100 |
parents | cab217ba064a |
children | 8e38593b0a08 |
files | TODO.md extern/getopt.c nsnake.c sysconfig.sh |
diffstat | 4 files changed, 5 insertions(+), 170 deletions(-) [+] |
line wrap: on
line diff
--- a/TODO.md Tue Jan 28 21:00:00 2020 +0100 +++ b/TODO.md Tue Jan 28 21:10:00 2020 +0100 @@ -1,5 +1,4 @@ NSnake TODO =========== -- Remove all Windows stuff. -- Assume POSIX everywhere. +- Use less globals.
--- a/extern/getopt.c Tue Jan 28 21:00:00 2020 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,124 +0,0 @@ -/* - * getopt.c -- getopt(3) from FreeBSD (portable version) - */ - -/*- - * Copyright (c) 1987, 1993, 1994 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - -int opterr = 1, /* if error message should be printed */ - optind = 1, /* index into parent argv vector */ - optopt, /* character checked for validity */ - optreset; /* reset getopt */ -char *optarg; /* argument associated with option */ - -#define BADCH (int)'?' -#define BADARG (int)':' -#define EMSG "" - -/* - * getopt -- - * Parse argc/argv argument vector. - */ -int -getopt(nargc, nargv, ostr) - int nargc; - char * const nargv[]; - const char *ostr; -{ - static char *place = EMSG; /* option letter processing */ - char *oli; /* option letter list index */ - - if (optreset || *place == 0) { /* update scanning pointer */ - optreset = 0; - place = nargv[optind]; - if (optind >= nargc || *place++ != '-') { - /* Argument is absent or is not an option */ - place = EMSG; - return (-1); - } - optopt = *place++; - if (optopt == '-' && *place == 0) { - /* "--" => end of options */ - ++optind; - place = EMSG; - return (-1); - } - if (optopt == 0) { - /* Solitary '-', treat as a '-' option - if the program (eg su) is looking for it. */ - place = EMSG; - if (strchr(ostr, '-') == NULL) - return (-1); - optopt = '-'; - } - } else - optopt = *place++; - - /* See if option letter is one the caller wanted... */ - if (optopt == ':' || (oli = strchr(ostr, optopt)) == NULL) { - if (*place == 0) - ++optind; - if (opterr && *ostr != ':') - (void)fprintf(stderr, - "illegal option -- %c\n", optopt); - return (BADCH); - } - - /* Does this option need an argument? */ - if (oli[1] != ':') { - /* don't need argument */ - optarg = NULL; - if (*place == 0) - ++optind; - } else { - /* Option-argument is either the rest of this argument or the - entire next argument. */ - if (*place) - optarg = place; - else if (nargc > ++optind) - optarg = nargv[optind]; - else { - /* option-argument absent */ - place = EMSG; - if (*ostr == ':') - return (BADARG); - if (opterr) - (void)fprintf(stderr, - "option requires an argument -- %c\n", optopt); - return (BADCH); - } - place = EMSG; - ++optind; - } - return (optopt); /* return option letter */ -}
--- a/nsnake.c Tue Jan 28 21:00:00 2020 +0100 +++ b/nsnake.c Tue Jan 28 21:10:00 2020 +0100 @@ -16,41 +16,24 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +#include <sys/types.h> #include <sys/stat.h> #include <errno.h> +#include <pwd.h> #include <signal.h> #include <stdarg.h> #include <stdbool.h> -#include <stdint.h> #include <stdio.h> #include <stdlib.h> #include <stdnoreturn.h> #include <string.h> #include <time.h> +#include <unistd.h> #include <curses.h> -#if !defined(_WIN32) -# include <unistd.h> -# include <sys/types.h> -# include <pwd.h> -#else -# include <io.h> -# include <lmcons.h> -# include <windows.h> -#endif - #include "sysconfig.h" -#if !defined(HAVE_RANDOM) -# define random rand -# define srandom srand -#endif - -#if !defined(HAVE_GETOPT) -# include "extern/getopt.c" -#endif - #define HEIGHT 23 #define WIDTH 78 #define SIZE ((HEIGHT - 2) * (WIDTH - 2))
--- a/sysconfig.sh Tue Jan 28 21:00:00 2020 +0100 +++ b/sysconfig.sh Tue Jan 28 21:10:00 2020 +0100 @@ -2,7 +2,7 @@ # # sysconfig.sh -- automatically configure portability checks # -# Copyright (c) 2011-2019 David Demelier <markand@malikania.fr> +# Copyright (c) 2011-2020 David Demelier <markand@malikania.fr> # # Permission to use, copy, modify, and/or distribute this software for any # purpose with or without fee is hereby granted, provided that the above @@ -34,26 +34,3 @@ resizeterm(0, 0); } EOF - -# random/srandom. -cat << EOF | compile "#define HAVE_RANDOM" -#include <stdlib.h> - -int -main(void) -{ - srandom(0); - random(); -} -EOF - -# getopt(3) function. -cat << EOF | compile "#define HAVE_GETOPT" -#include <unistd.h> - -int -main(void) -{ - getopt(0, 0, 0); -} -EOF