14887Schin /***********************************************************************
24887Schin *                                                                      *
34887Schin *               This software is part of the ast package               *
4*8462SApril.Chin@Sun.COM *          Copyright (c) 1985-2008 AT&T Intellectual Property          *
54887Schin *                      and is licensed under the                       *
64887Schin *                  Common Public License, Version 1.0                  *
7*8462SApril.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*8462SApril.Chin@Sun.COM #undef	getenv
111*8462SApril.Chin@Sun.COM #define getenv		_ast_getenv
112*8462SApril.Chin@Sun.COM 
1134887Schin #undef	localeconv
1144887Schin #define localeconv	_ast_localeconv
1154887Schin 
1164887Schin #undef	setlocale
1174887Schin #define setlocale	_ast_setlocale
1184887Schin 
119*8462SApril.Chin@Sun.COM #undef	setenviron
120*8462SApril.Chin@Sun.COM #define setenviron	_ast_setenviron
121*8462SApril.Chin@Sun.COM 
1224887Schin #undef	strerror
1234887Schin #define strerror	_ast_strerror
1244887Schin 
125*8462SApril.Chin@Sun.COM extern char*		getenv(const char*);
1264887Schin extern struct lconv*	localeconv(void);
127*8462SApril.Chin@Sun.COM extern char*		setenviron(const char*);
1284887Schin extern char*		setlocale(int, const char*);
1294887Schin extern char*		strerror(int);
1304887Schin 
1314887Schin #define AST_MESSAGE_SET		3	/* see <mc.h> mcindex()		*/
1324887Schin 
1334887Schin /*
1344887Schin  * maintain this order when adding categories
1354887Schin  */
1364887Schin 
1374887Schin #define AST_LC_ALL		0
1384887Schin #define AST_LC_COLLATE		1
1394887Schin #define AST_LC_CTYPE		2
1404887Schin #define AST_LC_MESSAGES		3
1414887Schin #define AST_LC_MONETARY		4
1424887Schin #define AST_LC_NUMERIC		5
1434887Schin #define AST_LC_TIME		6
1444887Schin #define AST_LC_IDENTIFICATION	7
1454887Schin #define AST_LC_ADDRESS		8
1464887Schin #define AST_LC_NAME		9
1474887Schin #define AST_LC_TELEPHONE	10
1484887Schin #define AST_LC_XLITERATE	11
1494887Schin #define AST_LC_MEASUREMENT	12
1504887Schin #define AST_LC_PAPER		13
1514887Schin #define AST_LC_COUNT		14
1524887Schin 
1534887Schin #define AST_LC_find		(1L<<28)
1544887Schin #define AST_LC_debug		(1L<<29)
1554887Schin #define AST_LC_setlocale	(1L<<30)
1564887Schin #define AST_LC_translate	(1L<<31)
1574887Schin 
1584887Schin #ifndef LC_ALL
1594887Schin #define LC_ALL			(-AST_LC_ALL)
1604887Schin #endif
1614887Schin #ifndef LC_COLLATE
1624887Schin #define LC_COLLATE		(-AST_LC_COLLATE)
1634887Schin #endif
1644887Schin #ifndef LC_CTYPE
1654887Schin #define LC_CTYPE		(-AST_LC_CTYPE)
1664887Schin #endif
1674887Schin #ifndef LC_MESSAGES
1684887Schin #define LC_MESSAGES		(-AST_LC_MESSAGES)
1694887Schin #endif
1704887Schin #ifndef LC_MONETARY
1714887Schin #define LC_MONETARY		(-AST_LC_MONETARY)
1724887Schin #endif
1734887Schin #ifndef LC_NUMERIC
1744887Schin #define LC_NUMERIC		(-AST_LC_NUMERIC)
1754887Schin #endif
1764887Schin #ifndef LC_TIME
1774887Schin #define LC_TIME			(-AST_LC_TIME)
1784887Schin #endif
1794887Schin #ifndef LC_ADDRESS
1804887Schin #define LC_ADDRESS		(-AST_LC_ADDRESS)
1814887Schin #endif
1824887Schin #ifndef LC_IDENTIFICATION
1834887Schin #define LC_IDENTIFICATION	(-AST_LC_IDENTIFICATION)
1844887Schin #endif
1854887Schin #ifndef LC_NAME
1864887Schin #define LC_NAME			(-AST_LC_NAME)
1874887Schin #endif
1884887Schin #ifndef LC_TELEPHONE
1894887Schin #define LC_TELEPHONE		(-AST_LC_TELEPHONE)
1904887Schin #endif
1914887Schin #ifndef LC_XLITERATE
1924887Schin #define LC_XLITERATE		(-AST_LC_XLITERATE)
1934887Schin #endif
1944887Schin #ifndef LC_MEASUREMENT
1954887Schin #define LC_MEASUREMENT		(-AST_LC_MEASUREMENT)
1964887Schin #endif
1974887Schin #ifndef LC_PAPER
1984887Schin #define LC_PAPER		(-AST_LC_PAPER)
1994887Schin #endif
2004887Schin 
2014887Schin #undef	extern
2024887Schin 
2034887Schin #undef	strcoll
2044887Schin #if _std_strcoll
2054887Schin #define strcoll		_ast_info.collate
2064887Schin #else
2074887Schin #define strcoll		strcmp
2084887Schin #endif
2094887Schin 
2104887Schin typedef struct
2114887Schin {
2124887Schin 
2134887Schin 	char*		id;
2144887Schin 
2154887Schin 	struct
2164887Schin 	{
2174887Schin 	uint32_t	serial;
2184887Schin 	uint32_t	set;
2194887Schin 	}		locale;
2204887Schin 
2214887Schin 	long		tmp_long;
2224887Schin 	size_t		tmp_size;
2234887Schin 	short		tmp_short;
2244887Schin 	char		tmp_char;
2254887Schin 	wchar_t		tmp_wchar;
2264887Schin 
2274887Schin 	int		(*collate)(const char*, const char*);
2284887Schin 
2294887Schin 	int		tmp_int;
2304887Schin 	void*		tmp_pointer;
2314887Schin 
2324887Schin 	int		mb_cur_max;
2334887Schin 	int		(*mb_len)(const char*, size_t);
2344887Schin 	int		(*mb_towc)(wchar_t*, const char*, size_t);
2354887Schin 	size_t		(*mb_xfrm)(char*, const char*, size_t);
2364887Schin 	int		(*mb_width)(wchar_t);
2374887Schin 	int		(*mb_conv)(char*, wchar_t);
2384887Schin 
2394887Schin 	uint32_t	env_serial;
2404887Schin 
2414887Schin 	char		pad[944];
2424887Schin 
2434887Schin } _Ast_info_t;
2444887Schin 
2454887Schin #if _BLD_ast && defined(__EXPORT__)
2464887Schin #define extern		extern __EXPORT__
2474887Schin #endif
2484887Schin #if !_BLD_ast && defined(__IMPORT__)
2494887Schin #define extern		extern __IMPORT__
2504887Schin #endif
2514887Schin 
2524887Schin extern _Ast_info_t	_ast_info;
2534887Schin 
2544887Schin #undef	extern
2554887Schin 
2564887Schin /* largefile hackery -- ast uses the large versions by default */
2574887Schin 
2584887Schin #if _typ_off64_t
2594887Schin #undef	off_t
2604887Schin #define off_t		off64_t
2614887Schin #endif
2624887Schin #if !defined(ftruncate) && _lib_ftruncate64
2634887Schin #define ftruncate	ftruncate64
2644887Schin extern int		ftruncate64(int, off64_t);
2654887Schin #endif
2664887Schin #if !defined(lseek) && _lib_lseek64
2674887Schin #define lseek		lseek64
2684887Schin extern off64_t		lseek64(int, off64_t, int);
2694887Schin #endif
2704887Schin #if !defined(truncate) && _lib_truncate64
2714887Schin #define truncate	truncate64
2724887Schin extern int		truncate64(const char*, off64_t);
2734887Schin #endif
2744887Schin 
2754887Schin /* direct macro access for bsd crossover */
2764887Schin 
2774887Schin #if !defined(__cplusplus)
2784887Schin 
2794887Schin #if !defined(memcpy) && !defined(_lib_memcpy) && defined(_lib_bcopy)
2804887Schin #define memcpy(t,f,n)	(bcopy(f,t,n),(t))
2814887Schin #endif
2824887Schin 
2834887Schin #if !defined(memzero) && !defined(_lib_memzero)
2844887Schin #if defined(_lib_memset) || !defined(_lib_bzero)
2854887Schin #define memzero(b,n)	memset(b,0,n)
2864887Schin #else
2874887Schin #define memzero(b,n)	(bzero(b,n),(b))
2884887Schin #endif
2894887Schin #endif
2904887Schin 
2914887Schin #endif
2924887Schin 
2934887Schin #if !defined(remove)
2944887Schin extern int		remove(const char*);
2954887Schin #endif
2964887Schin 
2974887Schin #if !defined(rename)
2984887Schin extern int		rename(const char*, const char*);
2994887Schin #endif
3004887Schin 
3014887Schin #if !defined(strchr) && !defined(_lib_strchr) && defined(_lib_index)
3024887Schin #define strchr(s,c)	index(s,c)
3034887Schin #endif
3044887Schin 
3054887Schin #if !defined(strrchr) && !defined(_lib_strrchr) && defined(_lib_rindex)
3064887Schin #define strrchr(s,c)	rindex(s,c)
3074887Schin #endif
3084887Schin 
3094887Schin /* and now introducing prototypes botched by the standard(s) */
3104887Schin 
3114887Schin #if _BLD_ast && defined(__EXPORT__)
3124887Schin #define extern		__EXPORT__
3134887Schin #endif
3144887Schin 
3154887Schin #undef	getpgrp
3164887Schin #define	getpgrp()	_ast_getpgrp()
3174887Schin extern int		_ast_getpgrp(void);
3184887Schin 
3194887Schin #undef	extern
3204887Schin 
3214887Schin /*
3224887Schin  * and finally, standard interfaces hijacked by ast
3234887Schin  * _ATS_STD_I delays headers that require <ast_map.h>
3244887Schin  */
3254887Schin 
3264887Schin #include <ast_map.h>
3274887Schin 
3284887Schin #undef	_AST_STD_I
3294887Schin 
330*8462SApril.Chin@Sun.COM #if _AST_GETOPT_H < 0
331*8462SApril.Chin@Sun.COM #undef	_AST_GETOPT_H
332*8462SApril.Chin@Sun.COM #include <ast_getopt.h>
333*8462SApril.Chin@Sun.COM #endif
334*8462SApril.Chin@Sun.COM 
335*8462SApril.Chin@Sun.COM #if _GETOPT_H < 0
336*8462SApril.Chin@Sun.COM #undef	_GETOPT_H
337*8462SApril.Chin@Sun.COM #include <getopt.h>
338*8462SApril.Chin@Sun.COM #endif
339*8462SApril.Chin@Sun.COM 
3404887Schin #if _REGEX_H < 0
3414887Schin #undef	_REGEX_H
3424887Schin #include <regex.h>
3434887Schin #endif
3444887Schin 
3454887Schin #endif
346