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 *                 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 #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 */
29 static Vtmutex_t	Sfmutex;
30 static Vtonce_t		Sfonce = VTONCE_INITDATA;
_sfoncef()31 static 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 */
41 Sfextern_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 
62 ssize_t	_Sfi = -1;		/* value for a few fast macro functions	*/
63 ssize_t _Sfmaxr = 0;		/* default (unlimited) max record size	*/
64 
65 #if vt_threaded
66 static Vtmutex_t	_Sfmtxin, _Sfmtxout, _Sfmtxerr;
67 #define SFMTXIN		(&_Sfmtxin)
68 #define SFMTXOUT	(&_Sfmtxout)
69 #define SFMTXERR	(&_Sfmtxerr)
70 #define SF_STDSAFE	SF_MTSAFE
71 #else
72 #define SFMTXIN		(0)
73 #define SFMTXOUT	(0)
74 #define SFMTXERR	(0)
75 #define SF_STDSAFE	(0)
76 #endif
77 
78 Sfio_t	_Sfstdin  = SFNEW(NIL(char*),-1,0,
79 			  (SF_READ |SF_STATIC|SF_STDSAFE),NIL(Sfdisc_t*),SFMTXIN);
80 Sfio_t	_Sfstdout = SFNEW(NIL(char*),-1,1,
81 			  (SF_WRITE|SF_STATIC|SF_STDSAFE),NIL(Sfdisc_t*),SFMTXOUT);
82 Sfio_t	_Sfstderr = SFNEW(NIL(char*),-1,2,
83 			  (SF_WRITE|SF_STATIC|SF_STDSAFE),NIL(Sfdisc_t*),SFMTXERR);
84 
85 #undef	sfstdin
86 #undef	sfstdout
87 #undef	sfstderr
88 
89 Sfio_t*	sfstdin  = &_Sfstdin;
90 Sfio_t*	sfstdout = &_Sfstdout;
91 Sfio_t*	sfstderr = &_Sfstderr;
92 
93 __EXTERN__(ssize_t,_Sfi);
94 __EXTERN__(Sfio_t,_Sfstdin);
95 __EXTERN__(Sfio_t,_Sfstdout);
96 __EXTERN__(Sfio_t,_Sfstderr);
97 __EXTERN__(Sfio_t*,sfstdin);
98 __EXTERN__(Sfio_t*,sfstdout);
99 __EXTERN__(Sfio_t*,sfstderr);
100