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