/*
Copyright (C) Prikol Software 1996-1997
Copyright (C) Aleksey Volynskov 1996-1997
This file is part of the Doom2D:Rembo project.
Doom2D:Rembo is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License version 2 as
published by the Free Software Foundation.
Doom2D:Rembo is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, see or
write to the Free Software Foundation, Inc.,
51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "glob.h"
#include
#include
#include
#include "error.h"
#include "files.h"
#include "memory.h"
static byte m_active;
static void *resp[MAX_WAD];
static short resl[MAX_WAD];
void M_startup (void) {
if(m_active) return;
logo("M_startup: настройка памяти\n");
memset(resp,0,sizeof(resp));
memset(resl,0,sizeof(resl));
// logo(" свободно DPMI-памяти: %uK\n",dpmi_memavl()>>10);
m_active=TRUE;
}
void M_shutdown (void) {
if(!m_active) return;
m_active=FALSE;
}
static void allocres (int h) {
int *p,s;
if(h>d_start && h=MAX_WAD) ERR_fatal("M_lock: странный номер ресурса");
if(!resl[h]) if(!resp[h]) allocres(h);
++resl[h];
return resp[h];
}
void M_unlock (void *p) {
int h;
if(!p) return;
h=((int*)p)[-1];
if(h>=MAX_WAD) ERR_fatal("M_unlock: странный номер ресурса");
if(!resl[h]) return;
--resl[h];
}
int M_locked (int h) {
return (h != -1) && (h != 0xFFFF) && (resl[h & (-1 - 0x8000)] != 0);
}
int M_was_locked (int h) {
return (h != -1) && (h != 0xFFFF) && (resp[h & (-1 - 0x8000)] != NULL);
}