1/***********************************************************************
2*                                                                      *
3*               This software is part of the ast package               *
4*          Copyright (c) 1985-2011 AT&T Intellectual Property          *
5*                      and is licensed under the                       *
6*                  Common Public License, Version 1.0                  *
7*                    by AT&T Intellectual Property                     *
8*                                                                      *
9*                A copy of the License is available at                 *
10*            http://www.opensource.org/licenses/cpl1.0.txt             *
11*         (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9)         *
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#include	"sfhdr.h"
23
24/*	External variables and functions used only by Sfio
25**	Written by Kiem-Phong Vo
26*/
27
28/* code to initialize mutexes */
29static Vtmutex_t	Sfmutex;
30static Vtonce_t		Sfonce = VTONCE_INITDATA;
31static void _sfoncef()
32{	(void)vtmtxopen(_Sfmutex, VT_INIT);
33	(void)vtmtxopen(&_Sfpool.mutex, VT_INIT);
34	(void)vtmtxopen(sfstdin->mutex, VT_INIT);
35	(void)vtmtxopen(sfstdout->mutex, VT_INIT);
36	(void)vtmtxopen(sfstderr->mutex, VT_INIT);
37	_Sfdone = 1;
38}
39
40/* global variables used internally to the package */
41Sfextern_t _Sfextern =
42{	0,						/* _Sfpage	*/
43	{ NIL(Sfpool_t*), 0, 0, 0, NIL(Sfio_t**) },	/* _Sfpool	*/
44	NIL(int(*)_ARG_((Sfio_t*,int))),		/* _Sfpmove	*/
45	NIL(Sfio_t*(*)_ARG_((Sfio_t*, Sfio_t*))),	/* _Sfstack	*/
46	NIL(void(*)_ARG_((Sfio_t*, int, void*))),	/* _Sfnotify	*/
47	NIL(int(*)_ARG_((Sfio_t*))),			/* _Sfstdsync	*/
48	{ NIL(Sfread_f),				/* _Sfudisc	*/
49	  NIL(Sfwrite_f),
50	  NIL(Sfseek_f),
51	  NIL(Sfexcept_f),
52	  NIL(Sfdisc_t*)
53	},
54	NIL(void(*)_ARG_((void)) ),			/* _Sfcleanup	*/
55	0,						/* _Sfexiting	*/
56	0,						/* _Sfdone	*/
57	&Sfonce,					/* _Sfonce	*/
58	_sfoncef,					/* _Sfoncef	*/
59	&Sfmutex					/* _Sfmutex	*/
60};
61
62ssize_t	_Sfi = -1;		/* value for a few fast macro functions	*/
63#ifdef _ast_int8_t
64ssize_t _Sfmaxr = 256*1024;	/* default maximum size for a record	*/
65#else
66ssize_t _Sfmaxr = 16*1024;	/* default maximum size for a record	*/
67#endif
68
69#if vt_threaded
70static Vtmutex_t	_Sfmtxin, _Sfmtxout, _Sfmtxerr;
71#define SFMTXIN		(&_Sfmtxin)
72#define SFMTXOUT	(&_Sfmtxout)
73#define SFMTXERR	(&_Sfmtxerr)
74#define SF_STDSAFE	SF_MTSAFE
75#else
76#define SFMTXIN		(0)
77#define SFMTXOUT	(0)
78#define SFMTXERR	(0)
79#define SF_STDSAFE	(0)
80#endif
81
82Sfio_t	_Sfstdin  = SFNEW(NIL(char*),-1,0,
83			  (SF_READ |SF_STATIC|SF_STDSAFE),NIL(Sfdisc_t*),SFMTXIN);
84Sfio_t	_Sfstdout = SFNEW(NIL(char*),-1,1,
85			  (SF_WRITE|SF_STATIC|SF_STDSAFE),NIL(Sfdisc_t*),SFMTXOUT);
86Sfio_t	_Sfstderr = SFNEW(NIL(char*),-1,2,
87			  (SF_WRITE|SF_STATIC|SF_STDSAFE),NIL(Sfdisc_t*),SFMTXERR);
88
89#undef	sfstdin
90#undef	sfstdout
91#undef	sfstderr
92
93Sfio_t*	sfstdin  = &_Sfstdin;
94Sfio_t*	sfstdout = &_Sfstdout;
95Sfio_t*	sfstderr = &_Sfstderr;
96
97__EXTERN__(ssize_t,_Sfi);
98__EXTERN__(Sfio_t,_Sfstdin);
99__EXTERN__(Sfio_t,_Sfstdout);
100__EXTERN__(Sfio_t,_Sfstderr);
101__EXTERN__(Sfio_t*,sfstdin);
102__EXTERN__(Sfio_t*,sfstdout);
103__EXTERN__(Sfio_t*,sfstderr);
104