progs.priv.h revision 166124
150276Speter/****************************************************************************
2166124Srafan * Copyright (c) 1998-2005,2006 Free Software Foundation, Inc.              *
350276Speter *                                                                          *
450276Speter * Permission is hereby granted, free of charge, to any person obtaining a  *
550276Speter * copy of this software and associated documentation files (the            *
650276Speter * "Software"), to deal in the Software without restriction, including      *
750276Speter * without limitation the rights to use, copy, modify, merge, publish,      *
850276Speter * distribute, distribute with modifications, sublicense, and/or sell       *
950276Speter * copies of the Software, and to permit persons to whom the Software is    *
1050276Speter * furnished to do so, subject to the following conditions:                 *
1150276Speter *                                                                          *
1250276Speter * The above copyright notice and this permission notice shall be included  *
1350276Speter * in all copies or substantial portions of the Software.                   *
1450276Speter *                                                                          *
1550276Speter * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
1650276Speter * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
1750276Speter * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
1850276Speter * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
1950276Speter * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
2050276Speter * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
2150276Speter * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
2250276Speter *                                                                          *
2350276Speter * Except as contained in this notice, the name(s) of the above copyright   *
2450276Speter * holders shall not be used in advertising or otherwise to promote the     *
2550276Speter * sale, use or other dealings in this Software without prior written       *
2650276Speter * authorization.                                                           *
2750276Speter ****************************************************************************/
2850276Speter
2950276Speter/****************************************************************************
30166124Srafan *  Author: Thomas E. Dickey                    1997-on                     *
3150276Speter ****************************************************************************/
3250276Speter/*
33166124Srafan * $Id: progs.priv.h,v 1.30 2006/11/26 00:28:01 tom Exp $
3450276Speter *
3550276Speter *	progs.priv.h
3650276Speter *
3750276Speter *	Header file for curses utility programs
3850276Speter */
3950276Speter
4050276Speter#include <ncurses_cfg.h>
4150276Speter
4266963Speter#if USE_RCS_IDS
4350276Speter#define MODULE_ID(id) static const char Ident[] = id;
4450276Speter#else
4550276Speter#define MODULE_ID(id) /*nothing*/
4650276Speter#endif
4750276Speter
4850276Speter#include <stdlib.h>
4950276Speter#include <ctype.h>
5050276Speter#include <string.h>
5150276Speter#include <sys/types.h>
5250276Speter
5350276Speter#if HAVE_UNISTD_H
5450276Speter#include <unistd.h>
5550276Speter#endif
5650276Speter
5750276Speter#if HAVE_SYS_BSDTYPES_H
5850276Speter#include <sys/bsdtypes.h>	/* needed for ISC */
5950276Speter#endif
6050276Speter
6150276Speter#if HAVE_LIMITS_H
6250276Speter# include <limits.h>
6350276Speter#elif HAVE_SYS_PARAM_H
6450276Speter# include <sys/param.h>
6550276Speter#endif
6650276Speter
6750276Speter#if HAVE_DIRENT_H
6850276Speter# include <dirent.h>
6950276Speter# define NAMLEN(dirent) strlen((dirent)->d_name)
70166124Srafan# if defined(_FILE_OFFSET_BITS) && defined(HAVE_STRUCT_DIRENT64)
71166124Srafan#  if !defined(_LP64) && (_FILE_OFFSET_BITS == 64)
72166124Srafan#   define	DIRENT	struct dirent64
73166124Srafan#  else
74166124Srafan#   define	DIRENT	struct dirent
75166124Srafan#  endif
76166124Srafan# else
77166124Srafan#  define	DIRENT	struct dirent
78166124Srafan# endif
7950276Speter#else
80166124Srafan# define DIRENT struct direct
8150276Speter# define NAMLEN(dirent) (dirent)->d_namlen
8250276Speter# if HAVE_SYS_NDIR_H
8350276Speter#  include <sys/ndir.h>
8450276Speter# endif
8550276Speter# if HAVE_SYS_DIR_H
8650276Speter#  include <sys/dir.h>
8750276Speter# endif
8850276Speter# if HAVE_NDIR_H
8950276Speter#  include <ndir.h>
9050276Speter# endif
9150276Speter#endif
9250276Speter
9350276Speter#include <errno.h>
9450276Speter
9550276Speter#if DECL_ERRNO
9650276Speterextern int errno;
9750276Speter#endif
9850276Speter
9950276Speter#if HAVE_GETOPT_H
10050276Speter#include <getopt.h>
10150276Speter#else
10250276Speter/* 'getopt()' may be prototyped in <stdlib.h>, but declaring its
10350276Speter * variables doesn't hurt.
10450276Speter */
10550276Speterextern char *optarg;
10650276Speterextern int optind;
10750276Speter#endif /* HAVE_GETOPT_H */
10850276Speter
10950276Speter#include <curses.h>
11050276Speter#include <term_entry.h>
11150276Speter#include <tic.h>
112166124Srafan#include <nc_tparm.h>
11350276Speter#include <nc_alloc.h>
11450276Speter
11550276Speter/* usually in <unistd.h> */
11650276Speter#ifndef STDOUT_FILENO
11750276Speter#define STDOUT_FILENO 1
11850276Speter#endif
11950276Speter
12050276Speter#ifndef STDERR_FILENO
12150276Speter#define STDERR_FILENO 2
12250276Speter#endif
12350276Speter
12450276Speter#ifndef EXIT_SUCCESS
12550276Speter#define EXIT_SUCCESS 0
12650276Speter#endif
12750276Speter
12850276Speter#ifndef EXIT_FAILURE
12950276Speter#define EXIT_FAILURE 1
13050276Speter#endif
13150276Speter
13262449Speter#ifndef R_OK
13362449Speter#define	R_OK	4		/* Test for readable.  */
13462449Speter#endif
13562449Speter
13662449Speter#ifndef W_OK
13762449Speter#define	W_OK	2		/* Test for writable.  */
13862449Speter#endif
13962449Speter
14062449Speter#ifndef X_OK
14162449Speter#define	X_OK	1		/* Test for executable.  */
14262449Speter#endif
14362449Speter
14450276Speter#ifndef F_OK
14550276Speter#define	F_OK	0		/* Test for existence.  */
14650276Speter#endif
14750276Speter
14850276Speter/* usually in <unistd.h> */
14950276Speter#ifndef STDOUT_FILENO
15050276Speter#define STDOUT_FILENO 1
15150276Speter#endif
15250276Speter
15350276Speter#ifndef STDERR_FILENO
15450276Speter#define STDERR_FILENO 2
15550276Speter#endif
15650276Speter
15750276Speter/* may be in limits.h, included from various places */
15850276Speter#ifndef PATH_MAX
15950276Speter# if defined(_POSIX_PATH_MAX)
16050276Speter#  define PATH_MAX _POSIX_PATH_MAX
16150276Speter# elif defined(MAXPATHLEN)
16250276Speter#  define PATH_MAX MAXPATHLEN
16350276Speter# else
16450276Speter#  define PATH_MAX 255	/* the Posix minimum pathsize */
16550276Speter# endif
16650276Speter#endif
16750276Speter
16850276Speter/* We use isascii only to guard against use of 7-bit ctype tables in the
16950276Speter * isprint test in infocmp.
17050276Speter */
17166963Speter#if !HAVE_ISASCII
17250276Speter# undef isascii
17350276Speter# if ('z'-'a' == 25) && ('z' < 127) && ('Z'-'A' == 25) && ('Z' < 127) && ('9' < 127)
17497049Speter#  define isascii(c) (UChar(c) <= 127)
17550276Speter# else
17650276Speter#  define isascii(c) 1	/* not really ascii anyway */
17750276Speter# endif
17850276Speter#endif
17966963Speter
18097049Speter#define UChar(c)    ((unsigned char)(c))
18176726Speter
18266963Speter#define SIZEOF(v) (sizeof(v)/sizeof(v[0]))
183