| /* GNU SED, a batch stream editor. |
| Copyright (C) 1998, 1999, 2002, 2003 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 2, 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, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ |
| |
| #ifndef BASICDEFS_H |
| #define BASICDEFS_H |
| |
| #include <alloca.h> |
| |
| #ifdef HAVE_WCHAR_H |
| # include <wchar.h> |
| #endif |
| #ifdef HAVE_LOCALE_H |
| # include <locale.h> |
| #endif |
| #ifdef HAVE_WCTYPE_H |
| # include <wctype.h> |
| #endif |
| |
| |
| #ifdef BOOTSTRAP |
| # define false 0 |
| # define true 1 |
| # define bool unsigned |
| # define __bool_true_false_are_defined 1 |
| #else |
| # include <stdbool.h> |
| #endif |
| |
| #include <gettext.h> |
| #define N_(String) gettext_noop(String) |
| #define _(String) gettext(String) |
| |
| /* type countT is used to keep track of line numbers, etc. */ |
| typedef unsigned long countT; |
| |
| /* Oftentimes casts are used as an ugly hack to silence warnings |
| * from the compiler. However, sometimes those warnings really |
| * do point to something worth avoiding. I define this |
| * dummy marker to make searching for them with a text editor |
| * much easier, in case I want to verify that they are all |
| * legitimate. It is defined in the way it is so that it is |
| * easy to disable all casts so that the compiler (or lint) |
| * can tell me potentially interesting things about what would |
| * happen to the code without the explicit casts. |
| */ |
| #ifdef LOUD_LINT |
| # define CAST(x) |
| #else |
| # define CAST(x) (x) |
| #endif |
| |
| |
| /* Can the compiler grok function prototypes? */ |
| #if (defined __STDC__ && __STDC__-0) || defined __GNUC__ || __PROTOTYPES |
| # define P_(s) s |
| #else |
| # define P_(s) () |
| #endif |
| |
| /* (VOID *) is the generic pointer type; some ancient compilers |
| don't know about (void *), and typically use (char *) instead. |
| VCAST() is used to cast to and from (VOID *)s --- but if the |
| compiler *does* support (void *) make this a no-op, so that |
| the compiler can detect if we omitted an essential function |
| declaration somewhere. |
| */ |
| #ifndef VOID |
| # define VOID void |
| # define VCAST(t) |
| #else |
| # define VCAST(t) (t) |
| #endif |
| |
| /* some basic definitions to avoid undue promulgating of VCAST ugliness */ |
| #define MALLOC(n,t) (VCAST(t *)ck_malloc((n)*sizeof(t))) |
| #define REALLOC(x,n,t) (VCAST(t *)ck_realloc(VCAST(VOID *)(x),(n)*sizeof(t))) |
| #define MEMDUP(x,n,t) (VCAST(t *)ck_memdup(VCAST(VOID *)(x),(n)*sizeof(t))) |
| #define FREE(x) (ck_free(VCAST(VOID *)x)) |
| #define MEMCPY(d,s,l) (memcpy(VCAST(VOID *)(d),VCAST(const VOID *)(s),l)) |
| #define MEMMOVE(d,s,l) (memmove(VCAST(VOID *)(d),VCAST(const VOID *)(s),l)) |
| #define OB_MALLOC(o,n,t) ((t *)(void *)obstack_alloc(o,(n)*sizeof(t))) |
| |
| #define obstack_chunk_alloc ck_malloc |
| #define obstack_chunk_free ck_free |
| |
| |
| #ifdef HAVE_MEMORY_H |
| # include <memory.h> |
| #endif |
| |
| #ifndef HAVE_MEMMOVE |
| # ifndef memmove |
| /* ../lib/libsed.a provides a memmove() if the system doesn't. |
| Here is where we declare its return type; we don't prototype |
| it because that sometimes causes problems when we're running in |
| bootstrap mode on a system which really does support memmove(). */ |
| extern VOID *memmove(); |
| # endif |
| #endif |
| |
| #ifndef HAVE_MEMCPY |
| # ifndef memcpy |
| # define memcpy(d, s, n) memmove(d, s, n) |
| # endif |
| #endif |
| |
| #ifndef HAVE_STRERROR |
| extern char *strerror P_((int e)); |
| #endif |
| |
| |
| /* handle misdesigned <ctype.h> macros (snarfed from lib/regex.c) */ |
| /* Jim Meyering writes: |
| |
| "... Some ctype macros are valid only for character codes that |
| isascii says are ASCII (SGI's IRIX-4.0.5 is one such system --when |
| using /bin/cc or gcc but without giving an ansi option). So, all |
| ctype uses should be through macros like ISPRINT... If |
| STDC_HEADERS is defined, then autoconf has verified that the ctype |
| macros don't need to be guarded with references to isascii. ... |
| Defining isascii to 1 should let any compiler worth its salt |
| eliminate the && through constant folding." |
| Solaris defines some of these symbols so we must undefine them first. */ |
| |
| #undef ISASCII |
| #if defined STDC_HEADERS || (!defined isascii && !defined HAVE_ISASCII) |
| # define ISASCII(c) 1 |
| #else |
| # define ISASCII(c) isascii(c) |
| #endif |
| |
| #if defined isblank || defined HAVE_ISBLANK |
| # define ISBLANK(c) (ISASCII (c) && isblank (c)) |
| #else |
| # define ISBLANK(c) ((c) == ' ' || (c) == '\t') |
| #endif |
| |
| #undef ISPRINT |
| #define ISPRINT(c) (ISASCII (c) && isprint (c)) |
| #define ISDIGIT(c) (ISASCII (c) && isdigit (c)) |
| #define ISALNUM(c) (ISASCII (c) && isalnum (c)) |
| #define ISALPHA(c) (ISASCII (c) && isalpha (c)) |
| #define ISCNTRL(c) (ISASCII (c) && iscntrl (c)) |
| #define ISLOWER(c) (ISASCII (c) && islower (c)) |
| #define ISPUNCT(c) (ISASCII (c) && ispunct (c)) |
| #define ISSPACE(c) (ISASCII (c) && isspace (c)) |
| #define ISUPPER(c) (ISASCII (c) && isupper (c)) |
| #define ISXDIGIT(c) (ISASCII (c) && isxdigit (c)) |
| |
| #ifndef initialize_main |
| # ifdef __EMX__ |
| # define initialize_main(argcp, argvp) \ |
| { _response(argcp, argvp); _wildcard(argcp, argvp); } |
| # else /* NOT __EMX__ */ |
| # define initialize_main(argcp, argvp) |
| # endif |
| #endif |
| |
| #endif /*!BASICDEFS_H*/ |