150276Speter/****************************************************************************
2262685Sdelphij * Copyright (c) 1998-2011,2012 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/*
33262685Sdelphij * $Id: progs.priv.h,v 1.39 2012/02/22 22:11:27 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
45262685Sdelphij#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
93262685Sdelphij#if HAVE_INTTYPES_H
94262685Sdelphij# include <inttypes.h>
95262685Sdelphij#else
96262685Sdelphij# if HAVE_STDINT_H
97262685Sdelphij#  include <stdint.h>
98262685Sdelphij# endif
99262685Sdelphij#endif
100262685Sdelphij
101184989Srafan#include <assert.h>
10250276Speter#include <errno.h>
10350276Speter
10450276Speter#if DECL_ERRNO
10550276Speterextern int errno;
10650276Speter#endif
10750276Speter
10850276Speter#if HAVE_GETOPT_H
10950276Speter#include <getopt.h>
110262685Sdelphij#elif !defined(HAVE_GETOPT_HEADER)
11150276Speter/* 'getopt()' may be prototyped in <stdlib.h>, but declaring its
11250276Speter * variables doesn't hurt.
11350276Speter */
11450276Speterextern char *optarg;
11550276Speterextern int optind;
11650276Speter#endif /* HAVE_GETOPT_H */
11750276Speter
11850276Speter#include <curses.h>
11950276Speter#include <term_entry.h>
120262685Sdelphij#include <nc_termios.h>
12150276Speter#include <tic.h>
122166124Srafan#include <nc_tparm.h>
123174993Srafan
124262685Sdelphij#include <nc_string.h>
12550276Speter#include <nc_alloc.h>
126174993Srafan#if HAVE_NC_FREEALL
127174993Srafan#undef ExitProgram
128174993Srafan#ifdef USE_LIBTINFO
129174993Srafan#define ExitProgram(code) _nc_free_tinfo(code)
130174993Srafan#else
131174993Srafan#define ExitProgram(code) _nc_free_tic(code)
132174993Srafan#endif
133174993Srafan#endif
13450276Speter
13550276Speter/* usually in <unistd.h> */
13650276Speter#ifndef STDOUT_FILENO
13750276Speter#define STDOUT_FILENO 1
13850276Speter#endif
13950276Speter
14050276Speter#ifndef STDERR_FILENO
14150276Speter#define STDERR_FILENO 2
14250276Speter#endif
14350276Speter
14450276Speter#ifndef EXIT_SUCCESS
14550276Speter#define EXIT_SUCCESS 0
14650276Speter#endif
14750276Speter
14850276Speter#ifndef EXIT_FAILURE
14950276Speter#define EXIT_FAILURE 1
15050276Speter#endif
15150276Speter
15262449Speter#ifndef R_OK
15362449Speter#define	R_OK	4		/* Test for readable.  */
15462449Speter#endif
15562449Speter
15662449Speter#ifndef W_OK
15762449Speter#define	W_OK	2		/* Test for writable.  */
15862449Speter#endif
15962449Speter
16062449Speter#ifndef X_OK
16162449Speter#define	X_OK	1		/* Test for executable.  */
16262449Speter#endif
16362449Speter
16450276Speter#ifndef F_OK
16550276Speter#define	F_OK	0		/* Test for existence.  */
16650276Speter#endif
16750276Speter
16850276Speter/* usually in <unistd.h> */
16950276Speter#ifndef STDOUT_FILENO
17050276Speter#define STDOUT_FILENO 1
17150276Speter#endif
17250276Speter
17350276Speter#ifndef STDERR_FILENO
17450276Speter#define STDERR_FILENO 2
17550276Speter#endif
17650276Speter
17750276Speter/* may be in limits.h, included from various places */
17850276Speter#ifndef PATH_MAX
17950276Speter# if defined(_POSIX_PATH_MAX)
18050276Speter#  define PATH_MAX _POSIX_PATH_MAX
18150276Speter# elif defined(MAXPATHLEN)
18250276Speter#  define PATH_MAX MAXPATHLEN
18350276Speter# else
184262685Sdelphij#  define PATH_MAX 255		/* the Posix minimum pathsize */
18550276Speter# endif
18650276Speter#endif
18750276Speter
18850276Speter/* We use isascii only to guard against use of 7-bit ctype tables in the
18950276Speter * isprint test in infocmp.
19050276Speter */
19166963Speter#if !HAVE_ISASCII
19250276Speter# undef isascii
19350276Speter# if ('z'-'a' == 25) && ('z' < 127) && ('Z'-'A' == 25) && ('Z' < 127) && ('9' < 127)
19497049Speter#  define isascii(c) (UChar(c) <= 127)
19550276Speter# else
196262685Sdelphij#  define isascii(c) 1		/* not really ascii anyway */
19750276Speter# endif
19850276Speter#endif
19966963Speter
20097049Speter#define UChar(c)    ((unsigned char)(c))
20176726Speter
20266963Speter#define SIZEOF(v) (sizeof(v)/sizeof(v[0]))
203