150276Speter/****************************************************************************
2184989Srafan * Copyright (c) 1998-2007,2008 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/*
33184989Srafan * $Id: progs.priv.h,v 1.34 2008/08/03 17:43:05 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
93184989Srafan#include <assert.h>
9450276Speter#include <errno.h>
9550276Speter
9650276Speter#if DECL_ERRNO
9750276Speterextern int errno;
9850276Speter#endif
9950276Speter
10050276Speter#if HAVE_GETOPT_H
10150276Speter#include <getopt.h>
10250276Speter#else
10350276Speter/* 'getopt()' may be prototyped in <stdlib.h>, but declaring its
10450276Speter * variables doesn't hurt.
10550276Speter */
10650276Speterextern char *optarg;
10750276Speterextern int optind;
10850276Speter#endif /* HAVE_GETOPT_H */
10950276Speter
11050276Speter#include <curses.h>
11150276Speter#include <term_entry.h>
11250276Speter#include <tic.h>
113166124Srafan#include <nc_tparm.h>
114174993Srafan
11550276Speter#include <nc_alloc.h>
116174993Srafan#if HAVE_NC_FREEALL
117174993Srafan#undef ExitProgram
118174993Srafan#ifdef USE_LIBTINFO
119174993Srafan#define ExitProgram(code) _nc_free_tinfo(code)
120174993Srafan#else
121174993Srafan#define ExitProgram(code) _nc_free_tic(code)
122174993Srafan#endif
123174993Srafan#endif
12450276Speter
12550276Speter/* usually in <unistd.h> */
12650276Speter#ifndef STDOUT_FILENO
12750276Speter#define STDOUT_FILENO 1
12850276Speter#endif
12950276Speter
13050276Speter#ifndef STDERR_FILENO
13150276Speter#define STDERR_FILENO 2
13250276Speter#endif
13350276Speter
13450276Speter#ifndef EXIT_SUCCESS
13550276Speter#define EXIT_SUCCESS 0
13650276Speter#endif
13750276Speter
13850276Speter#ifndef EXIT_FAILURE
13950276Speter#define EXIT_FAILURE 1
14050276Speter#endif
14150276Speter
14262449Speter#ifndef R_OK
14362449Speter#define	R_OK	4		/* Test for readable.  */
14462449Speter#endif
14562449Speter
14662449Speter#ifndef W_OK
14762449Speter#define	W_OK	2		/* Test for writable.  */
14862449Speter#endif
14962449Speter
15062449Speter#ifndef X_OK
15162449Speter#define	X_OK	1		/* Test for executable.  */
15262449Speter#endif
15362449Speter
15450276Speter#ifndef F_OK
15550276Speter#define	F_OK	0		/* Test for existence.  */
15650276Speter#endif
15750276Speter
15850276Speter/* usually in <unistd.h> */
15950276Speter#ifndef STDOUT_FILENO
16050276Speter#define STDOUT_FILENO 1
16150276Speter#endif
16250276Speter
16350276Speter#ifndef STDERR_FILENO
16450276Speter#define STDERR_FILENO 2
16550276Speter#endif
16650276Speter
16750276Speter/* may be in limits.h, included from various places */
16850276Speter#ifndef PATH_MAX
16950276Speter# if defined(_POSIX_PATH_MAX)
17050276Speter#  define PATH_MAX _POSIX_PATH_MAX
17150276Speter# elif defined(MAXPATHLEN)
17250276Speter#  define PATH_MAX MAXPATHLEN
17350276Speter# else
17450276Speter#  define PATH_MAX 255	/* the Posix minimum pathsize */
17550276Speter# endif
17650276Speter#endif
17750276Speter
17850276Speter/* We use isascii only to guard against use of 7-bit ctype tables in the
17950276Speter * isprint test in infocmp.
18050276Speter */
18166963Speter#if !HAVE_ISASCII
18250276Speter# undef isascii
18350276Speter# if ('z'-'a' == 25) && ('z' < 127) && ('Z'-'A' == 25) && ('Z' < 127) && ('9' < 127)
18497049Speter#  define isascii(c) (UChar(c) <= 127)
18550276Speter# else
18650276Speter#  define isascii(c) 1	/* not really ascii anyway */
18750276Speter# endif
18850276Speter#endif
18966963Speter
19097049Speter#define UChar(c)    ((unsigned char)(c))
19176726Speter
19266963Speter#define SIZEOF(v) (sizeof(v)/sizeof(v[0]))
193