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