1 /* Emacs style mode select -*- C++ -*- 2 *----------------------------------------------------------------------------- 3 * 4 * 5 * PrBoom: a Doom port merged with LxDoom and LSDLDoom 6 * based on BOOM, a modified and improved DOOM engine 7 * Copyright (C) 1999 by 8 * id Software, Chi Hoang, Lee Killough, Jim Flynn, Rand Phares, Ty Halderman 9 * Copyright (C) 1999-2000 by 10 * Jess Haas, Nicolas Kalkhof, Colin Phipps, Florian Schulze 11 * Copyright 2005, 2006 by 12 * Florian Schulze, Colin Phipps, Neil Stevens, Andrey Budko 13 * 14 * This program is free software; you can redistribute it and/or 15 * modify it under the terms of the GNU General Public License 16 * as published by the Free Software Foundation; either version 2 17 * of the License, or (at your option) any later version. 18 * 19 * This program is distributed in the hope that it will be useful, 20 * but WITHOUT ANY WARRANTY; without even the implied warranty of 21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 * GNU General Public License for more details. 23 * 24 * You should have received a copy of the GNU General Public License 25 * along with this program; if not, write to the Free Software 26 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 27 * 02111-1307, USA. 28 * 29 * DESCRIPTION: 30 * Zone Memory Allocation, perhaps NeXT ObjectiveC inspired. 31 * Remark: this was the only stuff that, according 32 * to John Carmack, might have been useful for 33 * Quake. 34 * 35 * Rewritten by Lee Killough, though, since it was not efficient enough. 36 * 37 *---------------------------------------------------------------------*/ 38 39 #ifndef __Z_ZONE__ 40 #define __Z_ZONE__ 41 42 #ifndef __GNUC__ 43 #define __attribute__(x) 44 #endif 45 46 // Include system definitions so that prototypes become 47 // active before macro replacements below are in effect. 48 49 #include "config.h" 50 #include <stdio.h> 51 #include <stdlib.h> 52 #include <string.h> 53 #include <assert.h> 54 55 #include <boolean.h> 56 57 // ZONE MEMORY 58 // PU - purge tags. 59 60 enum {PU_FREE, PU_STATIC, PU_SOUND, PU_MUSIC, PU_LEVEL, PU_LEVSPEC, PU_CACHE, 61 /* Must always be last -- killough */ PU_MAX}; 62 63 #define PU_PURGELEVEL PU_CACHE /* First purgable tag's level */ 64 65 #define DA(x,y) 66 #define DAC(x,y) 67 68 void *(Z_Malloc)(size_t size, int tag, void **ptr DA(const char *, int)); 69 void (Z_Free)(void *ptr DA(const char *, int)); 70 void (Z_FreeTags)(int lowtag, int hightag DA(const char *, int)); 71 void (Z_ChangeTag)(void *ptr, int tag DA(const char *, int)); 72 bool (Z_Init)(void); 73 void Z_Close(void); 74 void *(Z_Calloc)(size_t n, size_t n2, int tag, void **user DA(const char *, int)); 75 void *(Z_Realloc)(void *p, size_t n, int tag, void **user DA(const char *, int)); 76 char *(Z_Strdup)(const char *s, int tag, void **user DA(const char *, int)); 77 void (Z_CheckHeap)(DAC(const char *,int)); // killough 3/22/98: add file/line info 78 void Z_DumpHistory(char *); 79 80 // Remove all definitions before including system definitions 81 82 #undef malloc 83 #undef free 84 #undef realloc 85 #undef calloc 86 #undef strdup 87 88 #define malloc(n) Z_Malloc(n,PU_STATIC,0) 89 #define free(p) Z_Free(p) 90 #define realloc(p,n) Z_Realloc(p,n,PU_STATIC,0) 91 #define calloc(n1,n2) Z_Calloc(n1,n2,PU_STATIC,0) 92 #define strdup(s) Z_Strdup(s,PU_STATIC,0) 93 94 95 void Z_ZoneHistory(char *); 96 97 #endif 98