亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? id_mm.c

?? Wolf 3D official source code.
?? C
?? 第 1 頁 / 共 2 頁
字號:

		startseg = lastscan->start + lastscan->length;

		while (scan != endscan)
		{
			if (scan->start - startseg >= needed)
			{
			//
			// got enough space between the end of lastscan and
			// the start of scan, so throw out anything in the middle
			// and allocate the new block
			//
				purge = lastscan->next;
				lastscan->next = mmnew;
				mmnew->start = *(unsigned *)baseptr = startseg;
				mmnew->next = scan;
				while ( purge != scan)
				{	// free the purgable block
					next = purge->next;
					FREEBLOCK(purge);
					purge = next;		// purge another if not at scan
				}
				mmrover = mmnew;
				return;	// good allocation!
			}

			//
			// if this block is purge level zero or locked, skip past it
			//
			if ( (scan->attributes & LOCKBIT)
				|| !(scan->attributes & PURGEBITS) )
			{
				lastscan = scan;
				startseg = lastscan->start + lastscan->length;
			}


			scan=scan->next;		// look at next line
		}
	}

	if (bombonerror)
	{

extern char configname[];
extern	boolean	insetupscaling;
extern	int	viewsize;
boolean SetViewSize (unsigned width, unsigned height);
#define HEIGHTRATIO		0.50
//
// wolf hack -- size the view down
//
		if (!insetupscaling && viewsize>10)
		{
mmblocktype	far *savedmmnew;
			savedmmnew = mmnew;
			viewsize -= 2;
			SetViewSize (viewsize*16,viewsize*16*HEIGHTRATIO);
			mmnew = savedmmnew;
			goto tryagain;
		}

//		unlink(configname);
		Quit ("MM_GetPtr: Out of memory!");
	}
	else
		mmerror = true;
}

//==========================================================================

/*
====================
=
= MM_FreePtr
=
= Deallocates an unlocked, purgable block
=
====================
*/

void MM_FreePtr (memptr *baseptr)
{
	mmblocktype far *scan,far *last;

	last = mmhead;
	scan = last->next;

	if (baseptr == mmrover->useptr)	// removed the last allocated block
		mmrover = mmhead;

	while (scan->useptr != baseptr && scan)
	{
		last = scan;
		scan = scan->next;
	}

	if (!scan)
		Quit ("MM_FreePtr: Block not found!");

	last->next = scan->next;

	FREEBLOCK(scan);
}
//==========================================================================

/*
=====================
=
= MM_SetPurge
=
= Sets the purge level for a block (locked blocks cannot be made purgable)
=
=====================
*/

void MM_SetPurge (memptr *baseptr, int purge)
{
	mmblocktype far *start;

	start = mmrover;

	do
	{
		if (mmrover->useptr == baseptr)
			break;

		mmrover = mmrover->next;

		if (!mmrover)
			mmrover = mmhead;
		else if (mmrover == start)
			Quit ("MM_SetPurge: Block not found!");

	} while (1);

	mmrover->attributes &= ~PURGEBITS;
	mmrover->attributes |= purge;
}

//==========================================================================

/*
=====================
=
= MM_SetLock
=
= Locks / unlocks the block
=
=====================
*/

void MM_SetLock (memptr *baseptr, boolean locked)
{
	mmblocktype far *start;

	start = mmrover;

	do
	{
		if (mmrover->useptr == baseptr)
			break;

		mmrover = mmrover->next;

		if (!mmrover)
			mmrover = mmhead;
		else if (mmrover == start)
			Quit ("MM_SetLock: Block not found!");

	} while (1);

	mmrover->attributes &= ~LOCKBIT;
	mmrover->attributes |= locked*LOCKBIT;
}

//==========================================================================

/*
=====================
=
= MM_SortMem
=
= Throws out all purgable stuff and compresses movable blocks
=
=====================
*/

void MM_SortMem (void)
{
	mmblocktype far *scan,far *last,far *next;
	unsigned	start,length,source,dest;
	int			playing;

	//
	// lock down a currently playing sound
	//
	playing = SD_SoundPlaying ();
	if (playing)
	{
		switch (SoundMode)
		{
		case sdm_PC:
			playing += STARTPCSOUNDS;
			break;
		case sdm_AdLib:
			playing += STARTADLIBSOUNDS;
			break;
		}
		MM_SetLock(&(memptr)audiosegs[playing],true);
	}


	SD_StopSound();

	if (beforesort)
		beforesort();

	scan = mmhead;

	last = NULL;		// shut up compiler warning

	while (scan)
	{
		if (scan->attributes & LOCKBIT)
		{
		//
		// block is locked, so try to pile later blocks right after it
		//
			start = scan->start + scan->length;
		}
		else
		{
			if (scan->attributes & PURGEBITS)
			{
			//
			// throw out the purgable block
			//
				next = scan->next;
				FREEBLOCK(scan);
				last->next = next;
				scan = next;
				continue;
			}
			else
			{
			//
			// push the non purgable block on top of the last moved block
			//
				if (scan->start != start)
				{
					length = scan->length;
					source = scan->start;
					dest = start;
					while (length > 0xf00)
					{
						movedata(source,0,dest,0,0xf00*16);
						length -= 0xf00;
						source += 0xf00;
						dest += 0xf00;
					}
					movedata(source,0,dest,0,length*16);

					scan->start = start;
					*(unsigned *)scan->useptr = start;
				}
				start = scan->start + scan->length;
			}
		}

		last = scan;
		scan = scan->next;		// go to next block
	}

	mmrover = mmhead;

	if (aftersort)
		aftersort();

	if (playing)
		MM_SetLock(&(memptr)audiosegs[playing],false);
}


//==========================================================================

/*
=====================
=
= MM_ShowMemory
=
=====================
*/

void MM_ShowMemory (void)
{
	mmblocktype far *scan;
	unsigned color,temp,x,y;
	long	end,owner;
	char    scratch[80],str[10];

	temp = bufferofs;
	bufferofs = displayofs;
	scan = mmhead;

	end = -1;

	while (scan)
	{
		if (scan->attributes & PURGEBITS)
			color = 5;		// dark purple = purgable
		else
			color = 9;		// medium blue = non purgable
		if (scan->attributes & LOCKBIT)
			color = 12;		// red = locked
		if (scan->start<=end)
			Quit ("MM_ShowMemory: Memory block order currupted!");
		end = scan->length-1;
		y = scan->start/320;
		x = scan->start%320;
		VW_Hlin(x,x+end,y,color);
		VW_Plot(x,y,15);
		if (scan->next && scan->next->start > end+1)
			VW_Hlin(x+end+1,x+(scan->next->start-scan->start),y,0);	// black = free

		scan = scan->next;
	}

	VW_FadeIn ();
	IN_Ack();

	bufferofs = temp;
}

//==========================================================================

/*
=====================
=
= MM_DumpData
=
=====================
*/

void MM_DumpData (void)
{
	mmblocktype far *scan,far *best;
	long	lowest,oldlowest;
	unsigned	owner;
	char	lock,purge;
	FILE	*dumpfile;


	free (nearheap);
	dumpfile = fopen ("MMDUMP.TXT","w");
	if (!dumpfile)
		Quit ("MM_DumpData: Couldn't open MMDUMP.TXT!");

	lowest = -1;
	do
	{
		oldlowest = lowest;
		lowest = 0xffff;

		scan = mmhead;
		while (scan)
		{
			owner = (unsigned)scan->useptr;

			if (owner && owner<lowest && owner > oldlowest)
			{
				best = scan;
				lowest = owner;
			}

			scan = scan->next;
		}

		if (lowest != 0xffff)
		{
			if (best->attributes & PURGEBITS)
				purge = 'P';
			else
				purge = '-';
			if (best->attributes & LOCKBIT)
				lock = 'L';
			else
				lock = '-';
			fprintf (dumpfile,"0x%p (%c%c) = %u\n"
			,(unsigned)lowest,lock,purge,best->length);
		}

	} while (lowest != 0xffff);

	fclose (dumpfile);
	Quit ("MMDUMP.TXT created.");
}

//==========================================================================


/*
======================
=
= MM_UnusedMemory
=
= Returns the total free space without purging
=
======================
*/

long MM_UnusedMemory (void)
{
	unsigned free;
	mmblocktype far *scan;

	free = 0;
	scan = mmhead;

	while (scan->next)
	{
		free += scan->next->start - (scan->start + scan->length);
		scan = scan->next;
	}

	return free*16l;
}

//==========================================================================


/*
======================
=
= MM_TotalFree
=
= Returns the total free space with purging
=
======================
*/

long MM_TotalFree (void)
{
	unsigned free;
	mmblocktype far *scan;

	free = 0;
	scan = mmhead;

	while (scan->next)
	{
		if ((scan->attributes&PURGEBITS) && !(scan->attributes&LOCKBIT))
			free += scan->length;
		free += scan->next->start - (scan->start + scan->length);
		scan = scan->next;
	}

	return free*16l;
}

//==========================================================================

/*
=====================
=
= MM_BombOnError
=
=====================
*/

void MM_BombOnError (boolean bomb)
{
	bombonerror = bomb;
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线看国产日韩| 国产在线精品免费| 亚洲色图一区二区| 国产精品乱码一区二区三区软件| 26uuu国产电影一区二区| 精品国产一区二区精华| 2021国产精品久久精品| 国产亚洲婷婷免费| 中文字幕一区二区三区精华液 | 亚洲v中文字幕| 亚洲国产欧美一区二区三区丁香婷| 亚洲人成在线观看一区二区| 亚洲九九爱视频| 午夜不卡在线视频| 麻豆视频观看网址久久| 国产精一品亚洲二区在线视频| 国产福利91精品一区二区三区| 国产精品12区| 91在线视频播放地址| 色一情一伦一子一伦一区| 欧美日韩免费电影| 精品久久久久久久久久久院品网| 久久免费午夜影院| 国产精品理伦片| 亚洲成人一区二区| 精品一区二区三区影院在线午夜| 国产99久久久国产精品| 欧美中文一区二区三区| 日韩欧美精品在线视频| 国产欧美综合在线观看第十页| 亚洲日本欧美天堂| 日韩极品在线观看| 国产成人精品在线看| 欧美日韩国产经典色站一区二区三区| 91精品国产综合久久蜜臀| 中文字幕电影一区| 亚欧色一区w666天堂| 国产精品一区一区三区| 欧洲精品中文字幕| 久久蜜桃一区二区| 污片在线观看一区二区| 国产·精品毛片| 666欧美在线视频| 国产精品理论片| 蜜桃久久久久久| 欧美色区777第一页| 国产丝袜美腿一区二区三区| 亚洲国产精品久久久久婷婷884| 亚洲天堂精品在线观看| 久久精品99国产精品日本| 日本高清不卡aⅴ免费网站| 欧美成人乱码一区二区三区| 亚洲欧美乱综合| 成人av在线网站| 91麻豆精品国产91久久久资源速度 | 国产精品久久国产精麻豆99网站 | 日韩高清一级片| 91网上在线视频| 亚洲国产精品av| 久热成人在线视频| 欧美剧情片在线观看| 中文字幕视频一区| 国产91色综合久久免费分享| 日韩免费一区二区三区在线播放| 亚洲影视资源网| 92精品国产成人观看免费| 日本一区二区三区四区| 国产精品资源网站| 久久久午夜电影| 久久国产乱子精品免费女| 91精品久久久久久久91蜜桃 | 欧美一级xxx| 日韩综合小视频| 欧美久久久久久久久| 亚洲精品国产精品乱码不99| www.欧美色图| 亚洲青青青在线视频| 9i看片成人免费高清| 中文字幕欧美日本乱码一线二线| 黄色日韩三级电影| 久久久综合激的五月天| 国产精品一二二区| 亚洲国产高清不卡| 91网站在线观看视频| 亚洲精品videosex极品| 色婷婷久久综合| 亚洲成a人片在线观看中文| 欧美日韩精品高清| 美脚の诱脚舐め脚责91| 精品乱人伦小说| 国产成人自拍网| 国产精品全国免费观看高清| 成人av资源在线| 亚洲狠狠丁香婷婷综合久久久| 欧洲av一区二区嗯嗯嗯啊| 日韩高清一区二区| 久久一区二区三区四区| av一区二区不卡| 丝袜美腿高跟呻吟高潮一区| 精品日韩在线一区| 成人av一区二区三区| 一区二区久久久久久| 欧美一区二区黄色| 国产大陆亚洲精品国产| 一区二区三区日韩在线观看| 欧美高清视频www夜色资源网| 久久99最新地址| 国产精品久久久久久久久免费樱桃 | 久久人人爽爽爽人久久久| 成+人+亚洲+综合天堂| 亚洲大片在线观看| 久久精品人人做人人爽97| 色综合亚洲欧洲| 久久99久久久欧美国产| 一区二区在线观看视频| 精品久久国产老人久久综合| 色婷婷综合久久久中文字幕| 麻豆国产精品777777在线| 国产精品国产三级国产普通话蜜臀 | 国产精品网友自拍| 91麻豆精品国产91久久久| 99re6这里只有精品视频在线观看| 午夜成人免费电影| 亚洲视频在线观看三级| 久久综合久久综合久久| 欧美日韩国产高清一区二区| 成人综合在线网站| 久久99久久精品| 手机精品视频在线观看| 伊人一区二区三区| 国产精品色哟哟网站| 26uuu国产日韩综合| 欧美一区二区在线播放| 在线免费一区三区| 99r国产精品| 国产成人免费视| 国产电影一区二区三区| 久久99国产精品久久99| 视频一区国产视频| 亚洲一区视频在线观看视频| 国产精品国产三级国产普通话蜜臀| 欧美大片顶级少妇| 日韩精品一区二区三区四区| 91精品福利在线一区二区三区| 91福利资源站| 色香蕉成人二区免费| zzijzzij亚洲日本少妇熟睡| 国产 欧美在线| 床上的激情91.| eeuss鲁片一区二区三区在线看| 国产99一区视频免费| 狠狠狠色丁香婷婷综合久久五月| 久久精品国产99久久6| 男男gaygay亚洲| 久久电影网电视剧免费观看| 久久福利资源站| 激情欧美日韩一区二区| 国产一区二区91| 国产98色在线|日韩| 成人app网站| 色噜噜狠狠一区二区三区果冻| 91豆麻精品91久久久久久| 欧美三级视频在线| 在线不卡一区二区| 欧美videofree性高清杂交| 精品国产一区二区精华| 国产午夜精品理论片a级大结局| 国产欧美日产一区| 亚洲欧洲av在线| 亚洲国产综合色| 精品一区二区精品| 成人av网址在线| 91成人免费在线视频| 欧美高清激情brazzers| 久久综合久久鬼色中文字| 国产精品久久久久久一区二区三区| 亚洲日本护士毛茸茸| 日本不卡123| 成人av网在线| 欧美嫩在线观看| 欧美国产日韩a欧美在线观看| 亚洲精选视频在线| 久久电影网站中文字幕| 91香蕉视频污| 日韩精品一区国产麻豆| 亚洲欧洲日韩在线| 日本系列欧美系列| 成人免费的视频| 91精品国产综合久久精品app | 国产精品亚洲午夜一区二区三区 | 六月丁香综合在线视频| 从欧美一区二区三区| 欧美精品久久一区二区三区| 久久精品亚洲麻豆av一区二区| 一区二区三区美女视频| 国产成人午夜精品影院观看视频| 欧美三区在线观看| 国产精品不卡视频| 国产美女主播视频一区| 7777女厕盗摄久久久|