10 dword dpmi_memavl(void);
12 extern int d_start,d_end;
16 static byte m_active=FALSE;
18 static void *resp[MAX_WAD];
19 static short resl[MAX_WAD];
21 void M_startup(void) {
23 logo("M_startup: настройка памяти\n");
24 memset(resp,0,sizeof(resp));
25 memset(resl,0,sizeof(resl));
26 logo(" свободно DPMI-памяти: %uK\n",dpmi_memavl()>>10);
30 void M_shutdown(void) {
37 if(!(h=fopen("res_use.txt","wt"))) return;
38 for(i=0;i<MAX_WAD;++i) if(resp[i]) {
39 fprintf(h,"%.8s\n",wad[i].n);
45 static void allocres(int h) {
48 if(h>d_start && h<d_end) s=1; else s=0;
49 if(!(p=malloc(wad[h].l+4+s*8)))
50 ERR_fatal("M_lock: не хватает памяти");
55 p[0]=p[1]=p[2]=p[3]=0;
60 F_loadres(h,p+4,8,wad[h].l-8);
61 }else F_loadres(h,p,0,wad[h].l);
65 if(h==-1 || h==0xFFFF) return NULL;
67 if(h>=MAX_WAD) ERR_fatal("M_lock: странный номер ресурса");
68 if(!resl[h]) if(!resp[h]) allocres(h);
73 void M_unlock(void *p) {
78 if(h>=MAX_WAD) ERR_fatal("M_unlock: странный номер ресурса");