xref: /onnv-gate/usr/src/lib/libast/common/include/ast_std.h (revision 12068:08a39a083754)
14887Schin /***********************************************************************
24887Schin *                                                                      *
34887Schin *               This software is part of the ast package               *
4*12068SRoger.Faulkner@Oracle.COM *          Copyright (c) 1985-2010 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 
11010898Sroland.mainz@nrubsig.org #if !_UWIN /* for ast54 compatibility */
11110898Sroland.mainz@nrubsig.org 
1128462SApril.Chin@Sun.COM #undef	getenv
1138462SApril.Chin@Sun.COM #define getenv		_ast_getenv
1148462SApril.Chin@Sun.COM 
11510898Sroland.mainz@nrubsig.org #undef	setenviron
11610898Sroland.mainz@nrubsig.org #define setenviron	_ast_setenviron
11710898Sroland.mainz@nrubsig.org 
11810898Sroland.mainz@nrubsig.org extern char*		getenv(const char*);
11910898Sroland.mainz@nrubsig.org 
12010898Sroland.mainz@nrubsig.org #endif
12110898Sroland.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
15710898Sroland.mainz@nrubsig.org #define AST_LC_LANG		255
1584887Schin 
159*12068SRoger.Faulkner@Oracle.COM #define AST_LC_internal		1
160*12068SRoger.Faulkner@Oracle.COM #define AST_LC_setenv		(1L<<27)
1614887Schin #define AST_LC_find		(1L<<28)
1624887Schin #define AST_LC_debug		(1L<<29)
1634887Schin #define AST_LC_setlocale	(1L<<30)
1644887Schin #define AST_LC_translate	(1L<<31)
1654887Schin 
1664887Schin #ifndef LC_ALL
1674887Schin #define LC_ALL			(-AST_LC_ALL)
1684887Schin #endif
1694887Schin #ifndef LC_COLLATE
1704887Schin #define LC_COLLATE		(-AST_LC_COLLATE)
1714887Schin #endif
1724887Schin #ifndef LC_CTYPE
1734887Schin #define LC_CTYPE		(-AST_LC_CTYPE)
1744887Schin #endif
1754887Schin #ifndef LC_MESSAGES
1764887Schin #define LC_MESSAGES		(-AST_LC_MESSAGES)
1774887Schin #endif
1784887Schin #ifndef LC_MONETARY
1794887Schin #define LC_MONETARY		(-AST_LC_MONETARY)
1804887Schin #endif
1814887Schin #ifndef LC_NUMERIC
1824887Schin #define LC_NUMERIC		(-AST_LC_NUMERIC)
1834887Schin #endif
1844887Schin #ifndef LC_TIME
1854887Schin #define LC_TIME			(-AST_LC_TIME)
1864887Schin #endif
1874887Schin #ifndef LC_ADDRESS
1884887Schin #define LC_ADDRESS		(-AST_LC_ADDRESS)
1894887Schin #endif
1904887Schin #ifndef LC_IDENTIFICATION
1914887Schin #define LC_IDENTIFICATION	(-AST_LC_IDENTIFICATION)
1924887Schin #endif
1934887Schin #ifndef LC_NAME
1944887Schin #define LC_NAME			(-AST_LC_NAME)
1954887Schin #endif
1964887Schin #ifndef LC_TELEPHONE
1974887Schin #define LC_TELEPHONE		(-AST_LC_TELEPHONE)
1984887Schin #endif
1994887Schin #ifndef LC_XLITERATE
2004887Schin #define LC_XLITERATE		(-AST_LC_XLITERATE)
2014887Schin #endif
2024887Schin #ifndef LC_MEASUREMENT
2034887Schin #define LC_MEASUREMENT		(-AST_LC_MEASUREMENT)
2044887Schin #endif
2054887Schin #ifndef LC_PAPER
2064887Schin #define LC_PAPER		(-AST_LC_PAPER)
2074887Schin #endif
20810898Sroland.mainz@nrubsig.org #ifndef LC_LANG
20910898Sroland.mainz@nrubsig.org #define LC_LANG			(-AST_LC_LANG)
21010898Sroland.mainz@nrubsig.org #endif
2114887Schin 
2124887Schin #undef	extern
2134887Schin 
2144887Schin #undef	strcoll
2154887Schin #if _std_strcoll
2164887Schin #define strcoll		_ast_info.collate
2174887Schin #else
2184887Schin #define strcoll		strcmp
2194887Schin #endif
2204887Schin 
2214887Schin typedef struct
2224887Schin {
2234887Schin 
2244887Schin 	char*		id;
2254887Schin 
2264887Schin 	struct
2274887Schin 	{
2284887Schin 	uint32_t	serial;
2294887Schin 	uint32_t	set;
2304887Schin 	}		locale;
2314887Schin 
2324887Schin 	long		tmp_long;
2334887Schin 	size_t		tmp_size;
2344887Schin 	short		tmp_short;
2354887Schin 	char		tmp_char;
2364887Schin 	wchar_t		tmp_wchar;
2374887Schin 
2384887Schin 	int		(*collate)(const char*, const char*);
2394887Schin 
2404887Schin 	int		tmp_int;
2414887Schin 	void*		tmp_pointer;
2424887Schin 
2434887Schin 	int		mb_cur_max;
2444887Schin 	int		(*mb_len)(const char*, size_t);
2454887Schin 	int		(*mb_towc)(wchar_t*, const char*, size_t);
2464887Schin 	size_t		(*mb_xfrm)(char*, const char*, size_t);
2474887Schin 	int		(*mb_width)(wchar_t);
2484887Schin 	int		(*mb_conv)(char*, wchar_t);
2494887Schin 
2504887Schin 	uint32_t	env_serial;
25110898Sroland.mainz@nrubsig.org 	uint32_t	mb_sync;
252*12068SRoger.Faulkner@Oracle.COM 	uint32_t	version;
2534887Schin 
254*12068SRoger.Faulkner@Oracle.COM 	char		pad[936];
2554887Schin 
2564887Schin } _Ast_info_t;
2574887Schin 
2584887Schin #if _BLD_ast && defined(__EXPORT__)
2594887Schin #define extern		extern __EXPORT__
2604887Schin #endif
2614887Schin #if !_BLD_ast && defined(__IMPORT__)
2624887Schin #define extern		extern __IMPORT__
2634887Schin #endif
2644887Schin 
2654887Schin extern _Ast_info_t	_ast_info;
2664887Schin 
2674887Schin #undef	extern
2684887Schin 
2694887Schin /* largefile hackery -- ast uses the large versions by default */
2704887Schin 
2714887Schin #if _typ_off64_t
2724887Schin #undef	off_t
2734887Schin #define off_t		off64_t
2744887Schin #endif
2754887Schin #if !defined(ftruncate) && _lib_ftruncate64
2764887Schin #define ftruncate	ftruncate64
2774887Schin extern int		ftruncate64(int, off64_t);
2784887Schin #endif
2794887Schin #if !defined(lseek) && _lib_lseek64
2804887Schin #define lseek		lseek64
2814887Schin extern off64_t		lseek64(int, off64_t, int);
2824887Schin #endif
2834887Schin #if !defined(truncate) && _lib_truncate64
2844887Schin #define truncate	truncate64
2854887Schin extern int		truncate64(const char*, off64_t);
2864887Schin #endif
2874887Schin 
2884887Schin /* direct macro access for bsd crossover */
2894887Schin 
2904887Schin #if !defined(__cplusplus)
2914887Schin 
2924887Schin #if !defined(memcpy) && !defined(_lib_memcpy) && defined(_lib_bcopy)
2934887Schin #define memcpy(t,f,n)	(bcopy(f,t,n),(t))
2944887Schin #endif
2954887Schin 
2964887Schin #if !defined(memzero) && !defined(_lib_memzero)
2974887Schin #if defined(_lib_memset) || !defined(_lib_bzero)
2984887Schin #define memzero(b,n)	memset(b,0,n)
2994887Schin #else
3004887Schin #define memzero(b,n)	(bzero(b,n),(b))
3014887Schin #endif
3024887Schin #endif
3034887Schin 
3044887Schin #endif
3054887Schin 
3064887Schin #if !defined(remove)
3074887Schin extern int		remove(const char*);
3084887Schin #endif
3094887Schin 
3104887Schin #if !defined(rename)
3114887Schin extern int		rename(const char*, const char*);
3124887Schin #endif
3134887Schin 
3144887Schin #if !defined(strchr) && !defined(_lib_strchr) && defined(_lib_index)
3154887Schin #define strchr(s,c)	index(s,c)
3164887Schin #endif
3174887Schin 
3184887Schin #if !defined(strrchr) && !defined(_lib_strrchr) && defined(_lib_rindex)
3194887Schin #define strrchr(s,c)	rindex(s,c)
3204887Schin #endif
3214887Schin 
3224887Schin /* and now introducing prototypes botched by the standard(s) */
3234887Schin 
3244887Schin #if _BLD_ast && defined(__EXPORT__)
3254887Schin #define extern		__EXPORT__
3264887Schin #endif
3274887Schin 
3284887Schin #undef	getpgrp
3294887Schin #define	getpgrp()	_ast_getpgrp()
3304887Schin extern int		_ast_getpgrp(void);
3314887Schin 
3324887Schin #undef	extern
3334887Schin 
3344887Schin /*
3354887Schin  * and finally, standard interfaces hijacked by ast
336*12068SRoger.Faulkner@Oracle.COM  * _AST_STD_I delays headers that require <ast_map.h>
3374887Schin  */
3384887Schin 
3394887Schin #include <ast_map.h>
3404887Schin 
3414887Schin #undef	_AST_STD_I
3424887Schin 
3438462SApril.Chin@Sun.COM #if _AST_GETOPT_H < 0
3448462SApril.Chin@Sun.COM #undef	_AST_GETOPT_H
3458462SApril.Chin@Sun.COM #include <ast_getopt.h>
3468462SApril.Chin@Sun.COM #endif
3478462SApril.Chin@Sun.COM 
3488462SApril.Chin@Sun.COM #if _GETOPT_H < 0
3498462SApril.Chin@Sun.COM #undef	_GETOPT_H
3508462SApril.Chin@Sun.COM #include <getopt.h>
3518462SApril.Chin@Sun.COM #endif
3528462SApril.Chin@Sun.COM 
3534887Schin #if _REGEX_H < 0
3544887Schin #undef	_REGEX_H
3554887Schin #include <regex.h>
3564887Schin #endif
3574887Schin 
3584887Schin #endif
359