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