14887Schin /***********************************************************************
24887Schin *                                                                      *
34887Schin *               This software is part of the ast package               *
4*10898Sroland.mainz@nrubsig.org *          Copyright (c) 1985-2009 AT&T Intellectual Property          *
54887Schin *                      and is licensed under the                       *
64887Schin *                  Common Public License, Version 1.0                  *
78462SApril.Chin@Sun.COM *                    by AT&T Intellectual Property                     *
84887Schin *                                                                      *
94887Schin *                A copy of the License is available at                 *
104887Schin *            http://www.opensource.org/licenses/cpl1.0.txt             *
114887Schin *         (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9)         *
124887Schin *                                                                      *
134887Schin *              Information and Software Systems Research               *
144887Schin *                            AT&T Research                             *
154887Schin *                           Florham Park NJ                            *
164887Schin *                                                                      *
174887Schin *                 Glenn Fowler <gsf@research.att.com>                  *
184887Schin *                  David Korn <dgk@research.att.com>                   *
194887Schin *                   Phong Vo <kpv@research.att.com>                    *
204887Schin *                                                                      *
214887Schin ***********************************************************************/
224887Schin #pragma prototyped
234887Schin /*
244887Schin  * Advanced Software Technology Library
254887Schin  * AT&T Research
264887Schin  *
274887Schin  * a union of standard headers that works
284887Schin  * with local extensions enabled
294887Schin  * and local omission compensation
304887Schin  */
314887Schin 
324887Schin #ifndef _AST_STD_H
334887Schin #define _AST_STD_H		1
344887Schin #define _AST_STD_I		1
354887Schin 
364887Schin #include <ast_common.h>
374887Schin 
384887Schin #if _BLD_ast
394887Schin #define _BLD_cdt	1
404887Schin #define _BLD_sfio	1
414887Schin #if !_UWIN
424887Schin #define _BLD_vmalloc	1
434887Schin #endif
444887Schin #endif
454887Schin 
464887Schin #ifdef	_SFSTDIO_H
474887Schin #define _SKIP_SFSTDIO_H
484887Schin #else
494887Schin #define _SFSTDIO_H
504887Schin #ifndef FILE
514887Schin #ifndef _SFIO_H
524887Schin struct _sfio_s;
534887Schin #endif
544887Schin #define FILE		struct _sfio_s
554887Schin #ifndef	__FILE_typedef
564887Schin #define __FILE_typedef	1
574887Schin #endif
584887Schin #ifndef _FILEDEFED
594887Schin #define _FILEDEFED	1
604887Schin #endif
614887Schin #endif
624887Schin #endif
634887Schin 
644887Schin #include <ast_lib.h>
654887Schin #include <ast_sys.h>
664887Schin #include <ast_getopt.h>	/* <stdlib.h> does this */
674887Schin #include <ast_fcntl.h>
684887Schin #include <ast_limits.h>
694887Schin #include <ast_botch.h>
704887Schin 
714887Schin #ifdef	_SKIP_SFSTDIO_H
724887Schin #undef	_SKIP_SFSTDIO_H
734887Schin #else
744887Schin #undef	_SFSTDIO_H
754887Schin #undef	FILE
764887Schin #endif
774887Schin 
784887Schin /* locale stuff */
794887Schin 
804887Schin #if !_hdr_locale
814887Schin 
824887Schin struct lconv
834887Schin {
844887Schin 	char*	decimal_point;
854887Schin 	char*	thousands_sep;
864887Schin 	char*	grouping;
874887Schin 	char*	int_curr_symbol;
884887Schin 	char*	currency_symbol;
894887Schin 	char*	mon_decimal_point;
904887Schin 	char*	mon_thousands_sep;
914887Schin 	char*	mon_grouping;
924887Schin 	char*	positive_sign;
934887Schin 	char*	negative_sign;
944887Schin 	char	int_frac_digits;
954887Schin 	char	frac_digits;
964887Schin 	char	p_cs_precedes;
974887Schin 	char	p_sep_by_space;
984887Schin 	char	n_cs_precedes;
994887Schin 	char	n_sep_by_space;
1004887Schin 	char	p_sign_posn;
1014887Schin 	char	n_sign_posn;
1024887Schin };
1034887Schin 
1044887Schin #endif
1054887Schin 
1064887Schin #if _BLD_ast && defined(__EXPORT__)
1074887Schin #define extern		__EXPORT__
1084887Schin #endif
1094887Schin 
110*10898Sroland.mainz@nrubsig.org #if !_UWIN /* for ast54 compatibility */
111*10898Sroland.mainz@nrubsig.org 
1128462SApril.Chin@Sun.COM #undef	getenv
1138462SApril.Chin@Sun.COM #define getenv		_ast_getenv
1148462SApril.Chin@Sun.COM 
115*10898Sroland.mainz@nrubsig.org #undef	setenviron
116*10898Sroland.mainz@nrubsig.org #define setenviron	_ast_setenviron
117*10898Sroland.mainz@nrubsig.org 
118*10898Sroland.mainz@nrubsig.org extern char*		getenv(const char*);
119*10898Sroland.mainz@nrubsig.org 
120*10898Sroland.mainz@nrubsig.org #endif
121*10898Sroland.mainz@nrubsig.org 
1224887Schin #undef	localeconv
1234887Schin #define localeconv	_ast_localeconv
1244887Schin 
1254887Schin #undef	setlocale
1264887Schin #define setlocale	_ast_setlocale
1274887Schin 
1284887Schin #undef	strerror
1294887Schin #define strerror	_ast_strerror
1304887Schin 
1314887Schin extern struct lconv*	localeconv(void);
1328462SApril.Chin@Sun.COM extern char*		setenviron(const char*);
1334887Schin extern char*		setlocale(int, const char*);
1344887Schin extern char*		strerror(int);
1354887Schin 
1364887Schin #define AST_MESSAGE_SET		3	/* see <mc.h> mcindex()		*/
1374887Schin 
1384887Schin /*
1394887Schin  * maintain this order when adding categories
1404887Schin  */
1414887Schin 
1424887Schin #define AST_LC_ALL		0
1434887Schin #define AST_LC_COLLATE		1
1444887Schin #define AST_LC_CTYPE		2
1454887Schin #define AST_LC_MESSAGES		3
1464887Schin #define AST_LC_MONETARY		4
1474887Schin #define AST_LC_NUMERIC		5
1484887Schin #define AST_LC_TIME		6
1494887Schin #define AST_LC_IDENTIFICATION	7
1504887Schin #define AST_LC_ADDRESS		8
1514887Schin #define AST_LC_NAME		9
1524887Schin #define AST_LC_TELEPHONE	10
1534887Schin #define AST_LC_XLITERATE	11
1544887Schin #define AST_LC_MEASUREMENT	12
1554887Schin #define AST_LC_PAPER		13
1564887Schin #define AST_LC_COUNT		14
157*10898Sroland.mainz@nrubsig.org #define AST_LC_LANG		255
1584887Schin 
1594887Schin #define AST_LC_find		(1L<<28)
1604887Schin #define AST_LC_debug		(1L<<29)
1614887Schin #define AST_LC_setlocale	(1L<<30)
1624887Schin #define AST_LC_translate	(1L<<31)
1634887Schin 
1644887Schin #ifndef LC_ALL
1654887Schin #define LC_ALL			(-AST_LC_ALL)
1664887Schin #endif
1674887Schin #ifndef LC_COLLATE
1684887Schin #define LC_COLLATE		(-AST_LC_COLLATE)
1694887Schin #endif
1704887Schin #ifndef LC_CTYPE
1714887Schin #define LC_CTYPE		(-AST_LC_CTYPE)
1724887Schin #endif
1734887Schin #ifndef LC_MESSAGES
1744887Schin #define LC_MESSAGES		(-AST_LC_MESSAGES)
1754887Schin #endif
1764887Schin #ifndef LC_MONETARY
1774887Schin #define LC_MONETARY		(-AST_LC_MONETARY)
1784887Schin #endif
1794887Schin #ifndef LC_NUMERIC
1804887Schin #define LC_NUMERIC		(-AST_LC_NUMERIC)
1814887Schin #endif
1824887Schin #ifndef LC_TIME
1834887Schin #define LC_TIME			(-AST_LC_TIME)
1844887Schin #endif
1854887Schin #ifndef LC_ADDRESS
1864887Schin #define LC_ADDRESS		(-AST_LC_ADDRESS)
1874887Schin #endif
1884887Schin #ifndef LC_IDENTIFICATION
1894887Schin #define LC_IDENTIFICATION	(-AST_LC_IDENTIFICATION)
1904887Schin #endif
1914887Schin #ifndef LC_NAME
1924887Schin #define LC_NAME			(-AST_LC_NAME)
1934887Schin #endif
1944887Schin #ifndef LC_TELEPHONE
1954887Schin #define LC_TELEPHONE		(-AST_LC_TELEPHONE)
1964887Schin #endif
1974887Schin #ifndef LC_XLITERATE
1984887Schin #define LC_XLITERATE		(-AST_LC_XLITERATE)
1994887Schin #endif
2004887Schin #ifndef LC_MEASUREMENT
2014887Schin #define LC_MEASUREMENT		(-AST_LC_MEASUREMENT)
2024887Schin #endif
2034887Schin #ifndef LC_PAPER
2044887Schin #define LC_PAPER		(-AST_LC_PAPER)
2054887Schin #endif
206*10898Sroland.mainz@nrubsig.org #ifndef LC_LANG
207*10898Sroland.mainz@nrubsig.org #define LC_LANG			(-AST_LC_LANG)
208*10898Sroland.mainz@nrubsig.org #endif
2094887Schin 
2104887Schin #undef	extern
2114887Schin 
2124887Schin #undef	strcoll
2134887Schin #if _std_strcoll
2144887Schin #define strcoll		_ast_info.collate
2154887Schin #else
2164887Schin #define strcoll		strcmp
2174887Schin #endif
2184887Schin 
2194887Schin typedef struct
2204887Schin {
2214887Schin 
2224887Schin 	char*		id;
2234887Schin 
2244887Schin 	struct
2254887Schin 	{
2264887Schin 	uint32_t	serial;
2274887Schin 	uint32_t	set;
2284887Schin 	}		locale;
2294887Schin 
2304887Schin 	long		tmp_long;
2314887Schin 	size_t		tmp_size;
2324887Schin 	short		tmp_short;
2334887Schin 	char		tmp_char;
2344887Schin 	wchar_t		tmp_wchar;
2354887Schin 
2364887Schin 	int		(*collate)(const char*, const char*);
2374887Schin 
2384887Schin 	int		tmp_int;
2394887Schin 	void*		tmp_pointer;
2404887Schin 
2414887Schin 	int		mb_cur_max;
2424887Schin 	int		(*mb_len)(const char*, size_t);
2434887Schin 	int		(*mb_towc)(wchar_t*, const char*, size_t);
2444887Schin 	size_t		(*mb_xfrm)(char*, const char*, size_t);
2454887Schin 	int		(*mb_width)(wchar_t);
2464887Schin 	int		(*mb_conv)(char*, wchar_t);
2474887Schin 
2484887Schin 	uint32_t	env_serial;
249*10898Sroland.mainz@nrubsig.org 	uint32_t	mb_sync;
2504887Schin 
251*10898Sroland.mainz@nrubsig.org 	char		pad[940];
2524887Schin 
2534887Schin } _Ast_info_t;
2544887Schin 
2554887Schin #if _BLD_ast && defined(__EXPORT__)
2564887Schin #define extern		extern __EXPORT__
2574887Schin #endif
2584887Schin #if !_BLD_ast && defined(__IMPORT__)
2594887Schin #define extern		extern __IMPORT__
2604887Schin #endif
2614887Schin 
2624887Schin extern _Ast_info_t	_ast_info;
2634887Schin 
2644887Schin #undef	extern
2654887Schin 
2664887Schin /* largefile hackery -- ast uses the large versions by default */
2674887Schin 
2684887Schin #if _typ_off64_t
2694887Schin #undef	off_t
2704887Schin #define off_t		off64_t
2714887Schin #endif
2724887Schin #if !defined(ftruncate) && _lib_ftruncate64
2734887Schin #define ftruncate	ftruncate64
2744887Schin extern int		ftruncate64(int, off64_t);
2754887Schin #endif
2764887Schin #if !defined(lseek) && _lib_lseek64
2774887Schin #define lseek		lseek64
2784887Schin extern off64_t		lseek64(int, off64_t, int);
2794887Schin #endif
2804887Schin #if !defined(truncate) && _lib_truncate64
2814887Schin #define truncate	truncate64
2824887Schin extern int		truncate64(const char*, off64_t);
2834887Schin #endif
2844887Schin 
2854887Schin /* direct macro access for bsd crossover */
2864887Schin 
2874887Schin #if !defined(__cplusplus)
2884887Schin 
2894887Schin #if !defined(memcpy) && !defined(_lib_memcpy) && defined(_lib_bcopy)
2904887Schin #define memcpy(t,f,n)	(bcopy(f,t,n),(t))
2914887Schin #endif
2924887Schin 
2934887Schin #if !defined(memzero) && !defined(_lib_memzero)
2944887Schin #if defined(_lib_memset) || !defined(_lib_bzero)
2954887Schin #define memzero(b,n)	memset(b,0,n)
2964887Schin #else
2974887Schin #define memzero(b,n)	(bzero(b,n),(b))
2984887Schin #endif
2994887Schin #endif
3004887Schin 
3014887Schin #endif
3024887Schin 
3034887Schin #if !defined(remove)
3044887Schin extern int		remove(const char*);
3054887Schin #endif
3064887Schin 
3074887Schin #if !defined(rename)
3084887Schin extern int		rename(const char*, const char*);
3094887Schin #endif
3104887Schin 
3114887Schin #if !defined(strchr) && !defined(_lib_strchr) && defined(_lib_index)
3124887Schin #define strchr(s,c)	index(s,c)
3134887Schin #endif
3144887Schin 
3154887Schin #if !defined(strrchr) && !defined(_lib_strrchr) && defined(_lib_rindex)
3164887Schin #define strrchr(s,c)	rindex(s,c)
3174887Schin #endif
3184887Schin 
3194887Schin /* and now introducing prototypes botched by the standard(s) */
3204887Schin 
3214887Schin #if _BLD_ast && defined(__EXPORT__)
3224887Schin #define extern		__EXPORT__
3234887Schin #endif
3244887Schin 
3254887Schin #undef	getpgrp
3264887Schin #define	getpgrp()	_ast_getpgrp()
3274887Schin extern int		_ast_getpgrp(void);
3284887Schin 
3294887Schin #undef	extern
3304887Schin 
3314887Schin /*
3324887Schin  * and finally, standard interfaces hijacked by ast
3334887Schin  * _ATS_STD_I delays headers that require <ast_map.h>
3344887Schin  */
3354887Schin 
3364887Schin #include <ast_map.h>
3374887Schin 
3384887Schin #undef	_AST_STD_I
3394887Schin 
3408462SApril.Chin@Sun.COM #if _AST_GETOPT_H < 0
3418462SApril.Chin@Sun.COM #undef	_AST_GETOPT_H
3428462SApril.Chin@Sun.COM #include <ast_getopt.h>
3438462SApril.Chin@Sun.COM #endif
3448462SApril.Chin@Sun.COM 
3458462SApril.Chin@Sun.COM #if _GETOPT_H < 0
3468462SApril.Chin@Sun.COM #undef	_GETOPT_H
3478462SApril.Chin@Sun.COM #include <getopt.h>
3488462SApril.Chin@Sun.COM #endif
3498462SApril.Chin@Sun.COM 
3504887Schin #if _REGEX_H < 0
3514887Schin #undef	_REGEX_H
3524887Schin #include <regex.h>
3534887Schin #endif
3544887Schin 
3554887Schin #endif
356