1da2e3ebdSchin /***********************************************************************
2da2e3ebdSchin *                                                                      *
3da2e3ebdSchin *               This software is part of the ast package               *
4*b30d1939SAndy Fiddaman *          Copyright (c) 1985-2012 AT&T Intellectual Property          *
5da2e3ebdSchin *                      and is licensed under the                       *
6*b30d1939SAndy Fiddaman *                 Eclipse Public License, Version 1.0                  *
77c2fbfb3SApril Chin *                    by AT&T Intellectual Property                     *
8da2e3ebdSchin *                                                                      *
9da2e3ebdSchin *                A copy of the License is available at                 *
10*b30d1939SAndy Fiddaman *          http://www.eclipse.org/org/documents/epl-v10.html           *
11*b30d1939SAndy Fiddaman *         (with md5 checksum b35adb5213ca9657e911e9befb180842)         *
12da2e3ebdSchin *                                                                      *
13da2e3ebdSchin *              Information and Software Systems Research               *
14da2e3ebdSchin *                            AT&T Research                             *
15da2e3ebdSchin *                           Florham Park NJ                            *
16da2e3ebdSchin *                                                                      *
17da2e3ebdSchin *                 Glenn Fowler <gsf@research.att.com>                  *
18da2e3ebdSchin *                  David Korn <dgk@research.att.com>                   *
19da2e3ebdSchin *                   Phong Vo <kpv@research.att.com>                    *
20da2e3ebdSchin *                                                                      *
21da2e3ebdSchin ***********************************************************************/
22da2e3ebdSchin #pragma prototyped
23da2e3ebdSchin /*
24da2e3ebdSchin  * Advanced Software Technology Library
25da2e3ebdSchin  * AT&T Research
26da2e3ebdSchin  *
27da2e3ebdSchin  * a union of standard headers that works
28da2e3ebdSchin  * with local extensions enabled
29da2e3ebdSchin  * and local omission compensation
30da2e3ebdSchin  */
31da2e3ebdSchin 
32da2e3ebdSchin #ifndef _AST_STD_H
33da2e3ebdSchin #define _AST_STD_H		1
34da2e3ebdSchin #define _AST_STD_I		1
35da2e3ebdSchin 
36da2e3ebdSchin #include <ast_common.h>
37da2e3ebdSchin 
38da2e3ebdSchin #if _BLD_ast
39*b30d1939SAndy Fiddaman #define _BLD_aso	1
40da2e3ebdSchin #define _BLD_cdt	1
41da2e3ebdSchin #define _BLD_sfio	1
42da2e3ebdSchin #if !_UWIN
43da2e3ebdSchin #define _BLD_vmalloc	1
44da2e3ebdSchin #endif
45da2e3ebdSchin #endif
46da2e3ebdSchin 
47da2e3ebdSchin #ifdef	_SFSTDIO_H
48da2e3ebdSchin #define _SKIP_SFSTDIO_H
49da2e3ebdSchin #else
50da2e3ebdSchin #define _SFSTDIO_H
51da2e3ebdSchin #ifndef FILE
52da2e3ebdSchin #ifndef _SFIO_H
53da2e3ebdSchin struct _sfio_s;
54da2e3ebdSchin #endif
55da2e3ebdSchin #define FILE		struct _sfio_s
56da2e3ebdSchin #ifndef	__FILE_typedef
57da2e3ebdSchin #define __FILE_typedef	1
58da2e3ebdSchin #endif
59da2e3ebdSchin #ifndef _FILEDEFED
60da2e3ebdSchin #define _FILEDEFED	1
61da2e3ebdSchin #endif
62da2e3ebdSchin #endif
63da2e3ebdSchin #endif
64da2e3ebdSchin 
65da2e3ebdSchin #include <ast_lib.h>
66da2e3ebdSchin #include <ast_sys.h>
67da2e3ebdSchin #include <ast_getopt.h>	/* <stdlib.h> does this */
68da2e3ebdSchin #include <ast_fcntl.h>
69da2e3ebdSchin #include <ast_limits.h>
70da2e3ebdSchin #include <ast_botch.h>
71da2e3ebdSchin 
72da2e3ebdSchin #ifdef	_SKIP_SFSTDIO_H
73da2e3ebdSchin #undef	_SKIP_SFSTDIO_H
74da2e3ebdSchin #else
75da2e3ebdSchin #undef	_SFSTDIO_H
76da2e3ebdSchin #undef	FILE
77da2e3ebdSchin #endif
78da2e3ebdSchin 
79da2e3ebdSchin /* locale stuff */
80da2e3ebdSchin 
81da2e3ebdSchin #if !_hdr_locale
82da2e3ebdSchin 
83da2e3ebdSchin struct lconv
84da2e3ebdSchin {
85da2e3ebdSchin 	char*	decimal_point;
86da2e3ebdSchin 	char*	thousands_sep;
87da2e3ebdSchin 	char*	grouping;
88da2e3ebdSchin 	char*	int_curr_symbol;
89da2e3ebdSchin 	char*	currency_symbol;
90da2e3ebdSchin 	char*	mon_decimal_point;
91da2e3ebdSchin 	char*	mon_thousands_sep;
92da2e3ebdSchin 	char*	mon_grouping;
93da2e3ebdSchin 	char*	positive_sign;
94da2e3ebdSchin 	char*	negative_sign;
95da2e3ebdSchin 	char	int_frac_digits;
96da2e3ebdSchin 	char	frac_digits;
97da2e3ebdSchin 	char	p_cs_precedes;
98da2e3ebdSchin 	char	p_sep_by_space;
99da2e3ebdSchin 	char	n_cs_precedes;
100da2e3ebdSchin 	char	n_sep_by_space;
101da2e3ebdSchin 	char	p_sign_posn;
102da2e3ebdSchin 	char	n_sign_posn;
103da2e3ebdSchin };
104da2e3ebdSchin 
105da2e3ebdSchin #endif
106da2e3ebdSchin 
107da2e3ebdSchin #if _BLD_ast && defined(__EXPORT__)
108da2e3ebdSchin #define extern		__EXPORT__
109da2e3ebdSchin #endif
110da2e3ebdSchin 
11134f9b3eeSRoland Mainz #if !_UWIN /* for ast54 compatibility */
11234f9b3eeSRoland Mainz 
1137c2fbfb3SApril Chin #undef	getenv
1147c2fbfb3SApril Chin #define getenv		_ast_getenv
1157c2fbfb3SApril Chin 
11634f9b3eeSRoland Mainz #undef	setenviron
11734f9b3eeSRoland Mainz #define setenviron	_ast_setenviron
11834f9b3eeSRoland Mainz 
11934f9b3eeSRoland Mainz extern char*		getenv(const char*);
12034f9b3eeSRoland Mainz 
12134f9b3eeSRoland Mainz #endif
12234f9b3eeSRoland Mainz 
123da2e3ebdSchin #undef	localeconv
124da2e3ebdSchin #define localeconv	_ast_localeconv
125da2e3ebdSchin 
126da2e3ebdSchin #undef	setlocale
127da2e3ebdSchin #define setlocale	_ast_setlocale
128da2e3ebdSchin 
129da2e3ebdSchin #undef	strerror
130da2e3ebdSchin #define strerror	_ast_strerror
131da2e3ebdSchin 
132da2e3ebdSchin extern struct lconv*	localeconv(void);
1337c2fbfb3SApril Chin extern char*		setenviron(const char*);
134da2e3ebdSchin extern char*		setlocale(int, const char*);
135da2e3ebdSchin extern char*		strerror(int);
136da2e3ebdSchin 
137da2e3ebdSchin #define AST_MESSAGE_SET		3	/* see <mc.h> mcindex()		*/
138da2e3ebdSchin 
139da2e3ebdSchin /*
140da2e3ebdSchin  * maintain this order when adding categories
141da2e3ebdSchin  */
142da2e3ebdSchin 
143da2e3ebdSchin #define AST_LC_ALL		0
144da2e3ebdSchin #define AST_LC_COLLATE		1
145da2e3ebdSchin #define AST_LC_CTYPE		2
146da2e3ebdSchin #define AST_LC_MESSAGES		3
147da2e3ebdSchin #define AST_LC_MONETARY		4
148da2e3ebdSchin #define AST_LC_NUMERIC		5
149da2e3ebdSchin #define AST_LC_TIME		6
150da2e3ebdSchin #define AST_LC_IDENTIFICATION	7
151da2e3ebdSchin #define AST_LC_ADDRESS		8
152da2e3ebdSchin #define AST_LC_NAME		9
153da2e3ebdSchin #define AST_LC_TELEPHONE	10
154da2e3ebdSchin #define AST_LC_XLITERATE	11
155da2e3ebdSchin #define AST_LC_MEASUREMENT	12
156da2e3ebdSchin #define AST_LC_PAPER		13
157da2e3ebdSchin #define AST_LC_COUNT		14
15834f9b3eeSRoland Mainz #define AST_LC_LANG		255
159da2e3ebdSchin 
1603e14f97fSRoger A. Faulkner #define AST_LC_internal		1
161*b30d1939SAndy Fiddaman #define AST_LC_test		(1L<<26)
1623e14f97fSRoger A. Faulkner #define AST_LC_setenv		(1L<<27)
163da2e3ebdSchin #define AST_LC_find		(1L<<28)
164da2e3ebdSchin #define AST_LC_debug		(1L<<29)
165da2e3ebdSchin #define AST_LC_setlocale	(1L<<30)
166da2e3ebdSchin #define AST_LC_translate	(1L<<31)
167da2e3ebdSchin 
168da2e3ebdSchin #ifndef LC_ALL
169da2e3ebdSchin #define LC_ALL			(-AST_LC_ALL)
170da2e3ebdSchin #endif
171da2e3ebdSchin #ifndef LC_COLLATE
172da2e3ebdSchin #define LC_COLLATE		(-AST_LC_COLLATE)
173da2e3ebdSchin #endif
174da2e3ebdSchin #ifndef LC_CTYPE
175da2e3ebdSchin #define LC_CTYPE		(-AST_LC_CTYPE)
176da2e3ebdSchin #endif
177da2e3ebdSchin #ifndef LC_MESSAGES
178da2e3ebdSchin #define LC_MESSAGES		(-AST_LC_MESSAGES)
179da2e3ebdSchin #endif
180da2e3ebdSchin #ifndef LC_MONETARY
181da2e3ebdSchin #define LC_MONETARY		(-AST_LC_MONETARY)
182da2e3ebdSchin #endif
183da2e3ebdSchin #ifndef LC_NUMERIC
184da2e3ebdSchin #define LC_NUMERIC		(-AST_LC_NUMERIC)
185da2e3ebdSchin #endif
186da2e3ebdSchin #ifndef LC_TIME
187da2e3ebdSchin #define LC_TIME			(-AST_LC_TIME)
188da2e3ebdSchin #endif
189da2e3ebdSchin #ifndef LC_ADDRESS
190da2e3ebdSchin #define LC_ADDRESS		(-AST_LC_ADDRESS)
191da2e3ebdSchin #endif
192da2e3ebdSchin #ifndef LC_IDENTIFICATION
193da2e3ebdSchin #define LC_IDENTIFICATION	(-AST_LC_IDENTIFICATION)
194da2e3ebdSchin #endif
195da2e3ebdSchin #ifndef LC_NAME
196da2e3ebdSchin #define LC_NAME			(-AST_LC_NAME)
197da2e3ebdSchin #endif
198da2e3ebdSchin #ifndef LC_TELEPHONE
199da2e3ebdSchin #define LC_TELEPHONE		(-AST_LC_TELEPHONE)
200da2e3ebdSchin #endif
201da2e3ebdSchin #ifndef LC_XLITERATE
202da2e3ebdSchin #define LC_XLITERATE		(-AST_LC_XLITERATE)
203da2e3ebdSchin #endif
204da2e3ebdSchin #ifndef LC_MEASUREMENT
205da2e3ebdSchin #define LC_MEASUREMENT		(-AST_LC_MEASUREMENT)
206da2e3ebdSchin #endif
207da2e3ebdSchin #ifndef LC_PAPER
208da2e3ebdSchin #define LC_PAPER		(-AST_LC_PAPER)
209da2e3ebdSchin #endif
21034f9b3eeSRoland Mainz #ifndef LC_LANG
21134f9b3eeSRoland Mainz #define LC_LANG			(-AST_LC_LANG)
21234f9b3eeSRoland Mainz #endif
213da2e3ebdSchin 
214da2e3ebdSchin #undef	extern
215da2e3ebdSchin 
216da2e3ebdSchin #undef	strcoll
217da2e3ebdSchin #if _std_strcoll
218da2e3ebdSchin #define strcoll		_ast_info.collate
219da2e3ebdSchin #else
220da2e3ebdSchin #define strcoll		strcmp
221da2e3ebdSchin #endif
222da2e3ebdSchin 
223da2e3ebdSchin typedef struct
224da2e3ebdSchin {
225da2e3ebdSchin 
226da2e3ebdSchin 	char*		id;
227da2e3ebdSchin 
228da2e3ebdSchin 	struct
229da2e3ebdSchin 	{
230da2e3ebdSchin 	uint32_t	serial;
231da2e3ebdSchin 	uint32_t	set;
232da2e3ebdSchin 	}		locale;
233da2e3ebdSchin 
234da2e3ebdSchin 	long		tmp_long;
235da2e3ebdSchin 	size_t		tmp_size;
236da2e3ebdSchin 	short		tmp_short;
237da2e3ebdSchin 	char		tmp_char;
238da2e3ebdSchin 	wchar_t		tmp_wchar;
239da2e3ebdSchin 
240da2e3ebdSchin 	int		(*collate)(const char*, const char*);
241da2e3ebdSchin 
242da2e3ebdSchin 	int		tmp_int;
243da2e3ebdSchin 	void*		tmp_pointer;
244da2e3ebdSchin 
245da2e3ebdSchin 	int		mb_cur_max;
246da2e3ebdSchin 	int		(*mb_len)(const char*, size_t);
247da2e3ebdSchin 	int		(*mb_towc)(wchar_t*, const char*, size_t);
248da2e3ebdSchin 	size_t		(*mb_xfrm)(char*, const char*, size_t);
249da2e3ebdSchin 	int		(*mb_width)(wchar_t);
250da2e3ebdSchin 	int		(*mb_conv)(char*, wchar_t);
251da2e3ebdSchin 
252da2e3ebdSchin 	uint32_t	env_serial;
25334f9b3eeSRoland Mainz 	uint32_t	mb_sync;
2543e14f97fSRoger A. Faulkner 	uint32_t	version;
255da2e3ebdSchin 
256*b30d1939SAndy Fiddaman 	int		(*mb_alpha)(wchar_t);
257*b30d1939SAndy Fiddaman 
258*b30d1939SAndy Fiddaman 	char		pad[936 - sizeof(void*)];
259da2e3ebdSchin 
260da2e3ebdSchin } _Ast_info_t;
261da2e3ebdSchin 
262da2e3ebdSchin #if _BLD_ast && defined(__EXPORT__)
263da2e3ebdSchin #define extern		extern __EXPORT__
264da2e3ebdSchin #endif
265da2e3ebdSchin #if !_BLD_ast && defined(__IMPORT__)
266da2e3ebdSchin #define extern		extern __IMPORT__
267da2e3ebdSchin #endif
268da2e3ebdSchin 
269da2e3ebdSchin extern _Ast_info_t	_ast_info;
270da2e3ebdSchin 
271da2e3ebdSchin #undef	extern
272da2e3ebdSchin 
273da2e3ebdSchin /* largefile hackery -- ast uses the large versions by default */
274da2e3ebdSchin 
275*b30d1939SAndy Fiddaman #if _typ_ino64_t
276*b30d1939SAndy Fiddaman #undef	ino_t
277*b30d1939SAndy Fiddaman #define ino_t		ino64_t
278*b30d1939SAndy Fiddaman #endif
279da2e3ebdSchin #if _typ_off64_t
280da2e3ebdSchin #undef	off_t
281da2e3ebdSchin #define off_t		off64_t
282da2e3ebdSchin #endif
283da2e3ebdSchin #if !defined(ftruncate) && _lib_ftruncate64
284da2e3ebdSchin #define ftruncate	ftruncate64
285da2e3ebdSchin extern int		ftruncate64(int, off64_t);
286da2e3ebdSchin #endif
287da2e3ebdSchin #if !defined(lseek) && _lib_lseek64
288da2e3ebdSchin #define lseek		lseek64
289da2e3ebdSchin extern off64_t		lseek64(int, off64_t, int);
290da2e3ebdSchin #endif
291da2e3ebdSchin #if !defined(truncate) && _lib_truncate64
292da2e3ebdSchin #define truncate	truncate64
293da2e3ebdSchin extern int		truncate64(const char*, off64_t);
294da2e3ebdSchin #endif
295da2e3ebdSchin 
296da2e3ebdSchin /* direct macro access for bsd crossover */
297da2e3ebdSchin 
298da2e3ebdSchin #if !defined(__cplusplus)
299da2e3ebdSchin 
300da2e3ebdSchin #if !defined(memcpy) && !defined(_lib_memcpy) && defined(_lib_bcopy)
301da2e3ebdSchin #define memcpy(t,f,n)	(bcopy(f,t,n),(t))
302da2e3ebdSchin #endif
303da2e3ebdSchin 
304da2e3ebdSchin #if !defined(memzero) && !defined(_lib_memzero)
305da2e3ebdSchin #if defined(_lib_memset) || !defined(_lib_bzero)
306da2e3ebdSchin #define memzero(b,n)	memset(b,0,n)
307da2e3ebdSchin #else
308da2e3ebdSchin #define memzero(b,n)	(bzero(b,n),(b))
309da2e3ebdSchin #endif
310da2e3ebdSchin #endif
311da2e3ebdSchin 
312da2e3ebdSchin #endif
313da2e3ebdSchin 
314da2e3ebdSchin #if !defined(remove)
315da2e3ebdSchin extern int		remove(const char*);
316da2e3ebdSchin #endif
317da2e3ebdSchin 
318da2e3ebdSchin #if !defined(rename)
319da2e3ebdSchin extern int		rename(const char*, const char*);
320da2e3ebdSchin #endif
321da2e3ebdSchin 
322da2e3ebdSchin #if !defined(strchr) && !defined(_lib_strchr) && defined(_lib_index)
323da2e3ebdSchin #define strchr(s,c)	index(s,c)
324da2e3ebdSchin #endif
325da2e3ebdSchin 
326da2e3ebdSchin #if !defined(strrchr) && !defined(_lib_strrchr) && defined(_lib_rindex)
327da2e3ebdSchin #define strrchr(s,c)	rindex(s,c)
328da2e3ebdSchin #endif
329da2e3ebdSchin 
330da2e3ebdSchin /* and now introducing prototypes botched by the standard(s) */
331da2e3ebdSchin 
332da2e3ebdSchin #if _BLD_ast && defined(__EXPORT__)
333da2e3ebdSchin #define extern		__EXPORT__
334da2e3ebdSchin #endif
335da2e3ebdSchin 
336da2e3ebdSchin #undef	getpgrp
337da2e3ebdSchin #define	getpgrp()	_ast_getpgrp()
338da2e3ebdSchin extern int		_ast_getpgrp(void);
339da2e3ebdSchin 
340da2e3ebdSchin #undef	extern
341da2e3ebdSchin 
342da2e3ebdSchin /*
343da2e3ebdSchin  * and finally, standard interfaces hijacked by ast
3443e14f97fSRoger A. Faulkner  * _AST_STD_I delays headers that require <ast_map.h>
345da2e3ebdSchin  */
346da2e3ebdSchin 
347da2e3ebdSchin #include <ast_map.h>
348da2e3ebdSchin 
349da2e3ebdSchin #undef	_AST_STD_I
350da2e3ebdSchin 
3517c2fbfb3SApril Chin #if _AST_GETOPT_H < 0
3527c2fbfb3SApril Chin #undef	_AST_GETOPT_H
3537c2fbfb3SApril Chin #include <ast_getopt.h>
3547c2fbfb3SApril Chin #endif
3557c2fbfb3SApril Chin 
3567c2fbfb3SApril Chin #if _GETOPT_H < 0
3577c2fbfb3SApril Chin #undef	_GETOPT_H
3587c2fbfb3SApril Chin #include <getopt.h>
3597c2fbfb3SApril Chin #endif
3607c2fbfb3SApril Chin 
361da2e3ebdSchin #if _REGEX_H < 0
362da2e3ebdSchin #undef	_REGEX_H
363da2e3ebdSchin #include <regex.h>
364da2e3ebdSchin #endif
365da2e3ebdSchin 
366da2e3ebdSchin #endif
367