imports.h revision 6ec6b845fdf3c44436028ad6fff9471d18928719
1/* $Id: imports.h,v 1.8 2002/10/30 19:49:29 brianp Exp $ */
2
3/*
4 * Mesa 3-D graphics library
5 * Version:  5.0
6 *
7 * Copyright (C) 1999-2002  Brian Paul   All Rights Reserved.
8 *
9 * Permission is hereby granted, free of charge, to any person obtaining a
10 * copy of this software and associated documentation files (the "Software"),
11 * to deal in the Software without restriction, including without limitation
12 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
13 * and/or sell copies of the Software, and to permit persons to whom the
14 * Software is furnished to do so, subject to the following conditions:
15 *
16 * The above copyright notice and this permission notice shall be included
17 * in all copies or substantial portions of the Software.
18 *
19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
20 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
22 * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
23 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
24 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25 */
26
27
28/*
29 * This file provides wrappers for all the standard C library functions
30 * like malloc, free, printf, getenv, etc.
31 */
32
33
34#ifndef IMPORTS_H
35#define IMPORTS_H
36
37
38#define MALLOC(BYTES)      _mesa_malloc(BYTES)
39#define CALLOC(BYTES)      _mesa_calloc(BYTES)
40#define MALLOC_STRUCT(T)   (struct T *) _mesa_malloc(sizeof(struct T))
41#define CALLOC_STRUCT(T)   (struct T *) _mesa_calloc(sizeof(struct T))
42#define FREE(PTR)          _mesa_free(PTR)
43
44#define ALIGN_MALLOC(BYTES, N)     _mesa_align_malloc(BYTES, N)
45#define ALIGN_CALLOC(BYTES, N)     _mesa_align_calloc(BYTES, N)
46#define ALIGN_MALLOC_STRUCT(T, N)  (struct T *) _mesa_align_malloc(sizeof(struct T), N)
47#define ALIGN_CALLOC_STRUCT(T, N)  (struct T *) _mesa_align_calloc(sizeof(struct T), N)
48#define ALIGN_FREE(PTR)            _mesa_align_free(PTR)
49
50#define MEMCPY( DST, SRC, BYTES)   _mesa_memcpy(DST, SRC, BYTES)
51#define MEMSET( DST, VAL, N )      _mesa_memset(DST, VAL, N)
52
53
54/* MACs and BeOS don't support static larger than 32kb, so... */
55#if defined(macintosh) && !defined(__MRC__)
56/*extern char *AGLAlloc(int size);*/
57/*extern void AGLFree(char* ptr);*/
58#  define DEFARRAY(TYPE,NAME,SIZE)  			TYPE *NAME = (TYPE*)_mesa_alloc(sizeof(TYPE)*(SIZE))
59#  define DEFMARRAY(TYPE,NAME,SIZE1,SIZE2)		TYPE (*NAME)[SIZE2] = (TYPE(*)[SIZE2])_mesa_alloc(sizeof(TYPE)*(SIZE1)*(SIZE2))
60#  define DEFMNARRAY(TYPE,NAME,SIZE1,SIZE2,SIZE3)	TYPE (*NAME)[SIZE2][SIZE3] = (TYPE(*)[SIZE2][SIZE3])_mesa_alloc(sizeof(TYPE)*(SIZE1)*(SIZE2)*(SIZE3))
61
62#  define CHECKARRAY(NAME,CMD)				do {if (!(NAME)) {CMD;}} while (0)
63#  define UNDEFARRAY(NAME)          			do {if ((NAME)) {_mesa_free((char*)NAME);}  }while (0)
64#elif defined(__BEOS__)
65#  define DEFARRAY(TYPE,NAME,SIZE)  			TYPE *NAME = (TYPE*)_mesa_malloc(sizeof(TYPE)*(SIZE))
66#  define DEFMARRAY(TYPE,NAME,SIZE1,SIZE2)  		TYPE (*NAME)[SIZE2] = (TYPE(*)[SIZE2])_mesa_malloc(sizeof(TYPE)*(SIZE1)*(SIZE2))
67#  define DEFMNARRAY(TYPE,NAME,SIZE1,SIZE2,SIZE3)	TYPE (*NAME)[SIZE2][SIZE3] = (TYPE(*)[SIZE2][SIZE3])_mesa_malloc(sizeof(TYPE)*(SIZE1)*(SIZE2)*(SIZE3))
68#  define CHECKARRAY(NAME,CMD)				do {if (!(NAME)) {CMD;}} while (0)
69#  define UNDEFARRAY(NAME)          			do {if ((NAME)) {_mesa_free((char*)NAME);}  }while (0)
70#else
71#  define DEFARRAY(TYPE,NAME,SIZE)  			TYPE NAME[SIZE]
72#  define DEFMARRAY(TYPE,NAME,SIZE1,SIZE2)		TYPE NAME[SIZE1][SIZE2]
73#  define DEFMNARRAY(TYPE,NAME,SIZE1,SIZE2,SIZE3)	TYPE NAME[SIZE1][SIZE2][SIZE3]
74#  define CHECKARRAY(NAME,CMD)				do {} while(0)
75#  define UNDEFARRAY(NAME)
76#endif
77
78
79#ifdef MESA_EXTERNAL_BUFFERALLOC
80/*
81 * If you want Mesa's depth/stencil/accum/etc buffers to be allocated
82 * with a specialized allocator you can define MESA_EXTERNAL_BUFFERALLOC
83 * and implement _ext_mesa_alloc/free_pixelbuffer() in your app.
84 * Contributed by Gerk Huisma (gerk@five-d.demon.nl).
85 */
86extern void *_ext_mesa_alloc_pixelbuffer( unsigned int size );
87extern void _ext_mesa_free_pixelbuffer( void *pb );
88
89#define MESA_PBUFFER_ALLOC(BYTES)  (void *) _ext_mesa_alloc_pixelbuffer(BYTES)
90#define MESA_PBUFFER_FREE(PTR)     _ext_mesa_free_pixelbuffer(PTR)
91#else
92/* Default buffer allocation uses the aligned allocation routines: */
93#define MESA_PBUFFER_ALLOC(BYTES)  (void *) _mesa_align_malloc(BYTES, 512)
94#define MESA_PBUFFER_FREE(PTR)     _mesa_align_free(PTR)
95#endif
96
97
98extern void *
99_mesa_malloc( size_t bytes );
100
101extern void *
102_mesa_calloc( size_t bytes );
103
104extern void
105_mesa_free( void *ptr );
106
107extern void *
108_mesa_align_malloc( size_t bytes, unsigned long alignment );
109
110extern void *
111_mesa_align_calloc( size_t bytes, unsigned long alignment );
112
113extern void
114_mesa_align_free( void *ptr );
115
116extern void *
117_mesa_memcpy( void *dest, const void *src, size_t n );
118
119extern void
120_mesa_memset( void *dst, int val, size_t n );
121
122extern void
123_mesa_memset16( unsigned short *dst, unsigned short val, size_t n );
124
125extern void
126_mesa_bzero( void *dst, size_t n );
127
128
129extern double
130_mesa_sin(double a);
131
132extern double
133_mesa_cos(double a);
134
135extern double
136_mesa_sqrt(double x);
137
138extern double
139_mesa_pow(double x, double y);
140
141
142extern char *
143_mesa_getenv( const char *var );
144
145extern char *
146_mesa_strstr( const char *haystack, const char *needle );
147
148extern char *
149_mesa_strncat( char *dest, const char *src, size_t n );
150
151extern char *
152_mesa_strcpy( char *dest, const char *src );
153
154extern char *
155_mesa_strncpy( char *dest, const char *src, size_t n );
156
157extern size_t
158_mesa_strlen( const char *s );
159
160extern int
161_mesa_strcmp( const char *s1, const char *s2 );
162
163extern int
164_mesa_strncmp( const char *s1, const char *s2, size_t n );
165
166extern int
167_mesa_atoi( const char *s );
168
169extern int
170_mesa_sprintf( char *str, const char *fmt, ... );
171
172extern void
173_mesa_printf( const char *fmtString, ... );
174
175
176extern void
177_mesa_warning( __GLcontext *gc, const char *fmtString, ... );
178
179extern void
180_mesa_problem( const __GLcontext *ctx, const char *s );
181
182extern void
183_mesa_error( __GLcontext *ctx, GLenum error, const char *fmtString, ... );
184
185extern void
186_mesa_debug( const __GLcontext *ctx, const char *fmtString, ... );
187
188
189extern void
190_mesa_init_default_imports( __GLimports *imports, void *driverCtx );
191
192
193#endif /* IMPORTS_H */
194
195