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

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

?? memmgr.c

?? 這是DOS操作系統啟動的源代碼 里面是匯編語言 包括了部分的驅動程序
?? C
?? 第 1 頁 / 共 2 頁
字號:

	/* Initialize                                           */
	p = (mcb FAR *)(MK_FP(first_mcb, 0));

	/* Search through memory blocks                         */
	for(q = (mcb FAR *)0, *size = 0, found = FALSE; !found; )
	{
		/* check for corruption                         */
		if(p -> m_type != MCB_NORMAL && p -> m_type != MCB_LAST)
			return DE_MCBDESTRY;

		/* Test for largest fit/available               */
		if((p -> m_psp == FREE_PSP) && (p -> m_size > *size))
		{
			*size = p -> m_size;
			q = p;
		}
		/* not free - bump the pointer          */
		if(p -> m_type != MCB_LAST)
			p = MK_FP(far2para((VOID FAR *)p) + p -> m_size + 1, 0);
		/* was there no room (q == 0)?          */
		else if(p -> m_type == MCB_LAST && q == (mcb FAR *)0)
			return DE_NOMEM;
		/* something was found - continue       */
		else
			found = TRUE;
	}
	if( q != 0)
		return SUCCESS;
	else
		return DE_NOMEM;
}


COUNT 
DosMemFree (UWORD para)
{
	REG mcb FAR *p, FAR *q;
	COUNT i;

	/* Initialize                                           */
	p = (mcb FAR *)(MK_FP(para, 0));

	/* check for corruption                         */
	if(p -> m_type != MCB_NORMAL && p -> m_type != MCB_LAST)
		return DE_INVLDMCB;

	/* Mark the mcb as free so that we can later    */
	/* merge with other surrounding free mcb's      */
	p -> m_psp = FREE_PSP;
	for(i = 0; i < 8; i++)
		p -> m_name[i] = '\0';

	/* Now merge free blocks                        */
	for(p = (mcb FAR *)(MK_FP(first_mcb, 0)); p -> m_type != MCB_LAST; p = q)
	{
		/* make q a pointer to the next block   */
		q = MK_FP(far2para((VOID FAR *)p) + p -> m_size + 1, 0);
		/* and test for corruption              */
		if(q -> m_type != MCB_NORMAL && q -> m_type != MCB_LAST)
			return DE_MCBDESTRY;
		if(p -> m_psp != FREE_PSP)
			continue;

		/* test if next is free - if so merge   */
		if(q -> m_psp == FREE_PSP)
		{
			/* Always flow type down on free */
			p -> m_type = q -> m_type;
			p -> m_size += q -> m_size + 1;
			/* and make pointers the same   */
			/* since the next free is now   */
			/* this block                   */
			q = p;
		}
	}
	return SUCCESS;
}

COUNT 
DosMemChange (UWORD para, UWORD size, UWORD *maxSize)
{
	REG mcb FAR *p, FAR *q;
	REG COUNT i;


	/* Initialize                                                   */
	p = (mcb FAR *)(MK_FP(--para, 0));

	/* check for corruption                                         */
	if(p -> m_type != MCB_NORMAL && p -> m_type != MCB_LAST)
		return DE_MCBDESTRY;

	/* check for wrong allocation                                   */
	if(size > p -> m_size)
	{
		REG UCOUNT delta;

		if (p -> m_type == MCB_LAST)
		{      
		    if (maxSize) *maxSize = p -> m_size + q -> m_size;
		    return DE_NOMEM;
		}

		/* make q a pointer to the next block                   */
		q = MK_FP(far2para((VOID FAR *)p) + p -> m_size + 1, 0);

		/* check for corruption                                         */
		if(q -> m_type != MCB_NORMAL && q -> m_type != MCB_LAST)
		    return DE_MCBDESTRY;

		/* if next mcb is not free, error no memory             */
		if(q -> m_psp != FREE_PSP)
		{        
			if (maxSize) *maxSize = p -> m_size;
			return DE_NOMEM;
		}
		/* reduce the size of q and add difference to p         */
		/* but check that q is big enough first                 */
		delta = size - p -> m_size;
		 
		if(q -> m_size < delta)
		{        
			
			if (maxSize) *maxSize = p -> m_size + q -> m_size;
			return DE_NOMEM;
		}
		
		q -> m_size -= delta;
		p -> m_size += delta;

		/* Now go back and adjust q, we'll make p new q         */
		p = MK_FP(far2para((VOID FAR *)q) + delta, 0);
		p -> m_type = q -> m_type;
		p -> m_psp  = q -> m_psp;
		p -> m_size = q -> m_size;
		
		for(i = 0; i < 8; i++)
		    p -> m_name[i] = q -> m_name[i];

		/* and finished                                         */
		return SUCCESS;
	}

	/* else, shrink it down                                         */
	else if(size < p -> m_size)
	{
		/* make q a pointer to the new next block               */
		q = MK_FP(far2para((VOID FAR *)p) + size + 1, 0);
		/* reduce the size of p and add difference to q         */
		q -> m_type = p -> m_type;
		q -> m_size = p -> m_size - size - 1;
		
		p -> m_size = size;

		/* Make certian the old psp is not last (if it was)     */
		p -> m_type = MCB_NORMAL;

		/* Mark the mcb as free so that we can later    */
		/* merge with other surrounding free mcb's      */
		q -> m_psp = FREE_PSP;
		for(i = 0; i < 8; i++)
			q -> m_name[i] = '\0';

		/* now free it so that we have a complete block */
		return DosMemFree(far2para((VOID FAR *)q));
	}

	/* otherwise, its a no-op                                       */
	else
		return SUCCESS;
}

COUNT 
DosMemCheck (void)
{
	REG mcb FAR *p;

	/* Initialize                                           */
	p = (mcb FAR *)(MK_FP(first_mcb, 0));

	/* Search through memory blocks                         */
	for( ; ; )
	{
		/* check for corruption                         */
		if(p -> m_type != MCB_NORMAL && p -> m_type != MCB_LAST)
			return DE_MCBDESTRY;

		/* not corrupted - if last we're OK!            */
		if(p -> m_type == MCB_LAST)
			return SUCCESS;

		/* not corrupted - but not end, bump the pointer */
		else if(p -> m_type != MCB_LAST)
			p = MK_FP(far2para((VOID FAR *)p) + p -> m_size + 1, 0);

		/* totally lost - bad exit                      */
		else
			return DE_MCBDESTRY;
	}
}

COUNT 
FreeProcessMem (UWORD ps)
{
	mcb FAR *p;

	/* Initialize                                           */
	p = (mcb FAR *)(MK_FP(first_mcb, 0));

	/* Search through memory blocks                         */
	for( ; ; )
	{
		/* check for corruption                         */
		if(p -> m_type != MCB_NORMAL && p -> m_type != MCB_LAST)
			return DE_MCBDESTRY;

		if(p -> m_psp == ps) 
			DosMemFree( FP_SEG(p) );

		/* not corrupted - if last we're OK!            */
		if(p -> m_type == MCB_LAST) break;
		p = MK_FP(far2para((VOID FAR *)p) + p -> m_size + 1, 0);

	}
	return SUCCESS;
}

COUNT
DosGetLargestBlock(UWORD FAR *block)
{
	UWORD sz = 0;
	mcb FAR *p;
	*block = sz;

	/* Initialize                                           */
	p = (mcb FAR *)(MK_FP(first_mcb, 0));

	/* Search through memory blocks                         */
	for( ; ; )
	{
		/* check for corruption                         */
		if(p -> m_type != MCB_NORMAL && p -> m_type != MCB_LAST)
			return DE_MCBDESTRY;

		if (p -> m_psp == FREE_PSP && p -> m_size > sz)
		    sz = p -> m_size;

		/* not corrupted - if last we're OK!            */
		if(p -> m_type == MCB_LAST) break;
		p = MK_FP(far2para((VOID FAR *)p) + p -> m_size + 1, 0);

	}
	*block = sz;
	return SUCCESS;
}

VOID 
show_chain (void)
{
	mcb FAR *p = (mcb FAR *)(MK_FP(first_mcb, 0));

	for(;;)
	{
		mcb_print(p);
		if(p -> m_type == MCB_LAST || p -> m_type != MCB_NORMAL)
			return;
		else
			p = (mcb FAR *)(MK_FP(far2para((VOID FAR *)p)+p -> m_size+1,0));
	}
}


VOID 
mcb_print (mcb FAR *mcbp)
{
	static BYTE buff[9];
	VOID _fmemcpy();

	_fmemcpy((BYTE FAR *)buff, (BYTE FAR *)(mcbp -> m_name), 8);
	buff[8] = '\0';
	printf("%04x:%04x -> |%s| m_type = 0x%02x; m_psp = 0x%04x; m_size = 0x%04x\n",
		FP_SEG(mcbp),
		FP_OFF(mcbp),
		*buff == '\0' ? "*NO-ID*" : buff,
		mcbp -> m_type,
		mcbp -> m_psp,
		mcbp -> m_size);
}


VOID _fmemcpy(BYTE FAR *d, BYTE FAR *s, REG COUNT n)
{
	while(n--)
	      *d++ = *s++;

}
#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩专区中文字幕一区二区| 亚洲午夜久久久久久久久电影院| 欧美视频一区在线| 一本色道a无线码一区v| 一本高清dvd不卡在线观看 | 777久久久精品| 宅男噜噜噜66一区二区66| 777亚洲妇女| 欧美成人综合网站| 久久精品视频一区二区三区| 国产色爱av资源综合区| 亚洲欧美自拍偷拍| 亚洲va中文字幕| 久久精品久久久精品美女| 国产乱一区二区| 色婷婷亚洲婷婷| 欧美精品在线一区二区| 精品国偷自产国产一区| 欧美激情一区二区三区不卡| 亚洲人亚洲人成电影网站色| 亚洲国产精品久久艾草纯爱| 蜜乳av一区二区三区| 国产成人高清视频| 在线免费观看日本欧美| 2023国产精品自拍| 一区二区三区日本| 久久99久久精品| 99re热这里只有精品视频| 欧美丰满少妇xxxbbb| 欧美国产日韩a欧美在线观看| 亚洲免费视频中文字幕| 美女免费视频一区| 色婷婷精品久久二区二区蜜臀av| 日韩亚洲国产中文字幕欧美| 中文字幕第一页久久| 婷婷国产v国产偷v亚洲高清| 东方aⅴ免费观看久久av| 在线播放91灌醉迷j高跟美女| 久久综合久久鬼色中文字| 亚洲色图都市小说| 国产成人午夜99999| 日韩一区二区在线看片| 1区2区3区欧美| 国产精品影视天天线| 欧美精品亚洲二区| 一区二区三区成人| 99免费精品视频| 久久亚洲一区二区三区明星换脸 | 国产精品久久久久久久久快鸭 | 久久婷婷国产综合国色天香 | www久久精品| 日本视频在线一区| 91成人免费在线| 最新国产精品久久精品| 国产老妇另类xxxxx| 日韩视频在线永久播放| 一二三四区精品视频| a级精品国产片在线观看| 精品久久久久久久一区二区蜜臀| 午夜国产精品一区| 欧美三区在线观看| 亚洲自拍另类综合| 一本一道综合狠狠老| 1000精品久久久久久久久| 国产成人在线看| 久久久久国产精品人| 久久97超碰色| 久久久影院官网| 国产在线麻豆精品观看| 欧美成人三级电影在线| 免费观看91视频大全| 精品嫩草影院久久| 国内精品伊人久久久久av影院| 欧美一区二区美女| 日本欧美一区二区三区乱码| 日韩欧美123| 国产河南妇女毛片精品久久久| 久久综合久久综合九色| 丁香婷婷深情五月亚洲| 国产精品福利一区二区| 99精品黄色片免费大全| 一区二区三区视频在线观看| 欧美美女直播网站| 热久久国产精品| 2020国产成人综合网| 成人免费毛片片v| 亚洲人xxxx| 911精品国产一区二区在线| 久久精工是国产品牌吗| 久久亚洲一区二区三区明星换脸| 国产成人av电影| 亚洲美女视频在线| 7777精品伊人久久久大香线蕉完整版| 日产国产高清一区二区三区| 久久久久久久久久久久久久久99| www.综合网.com| 三级在线观看一区二区| 久久精品欧美一区二区三区不卡 | 岛国一区二区三区| 亚洲国产精品影院| 成人国产电影网| 亚洲成av人片在线| 久久久久久综合| 在线影视一区二区三区| 激情文学综合网| 亚洲人成人一区二区在线观看| 制服丝袜亚洲色图| 盗摄精品av一区二区三区| 亚洲成精国产精品女| 国产日韩欧美a| 精品视频资源站| 国产成人av影院| 日本午夜精品视频在线观看| 中文字幕第一区| 日韩欧美电影一区| 在线免费精品视频| 国产成人午夜电影网| 五月婷婷欧美视频| 中文字幕在线不卡| 精品第一国产综合精品aⅴ| 日本精品一区二区三区四区的功能| 美女性感视频久久| 亚洲国产精品综合小说图片区| 国产清纯在线一区二区www| 欧美乱熟臀69xxxxxx| av在线不卡电影| 国产精品一区免费视频| 免费成人av在线播放| 亚洲第一电影网| 有坂深雪av一区二区精品| 中文字幕不卡在线播放| 精品国产伦理网| 91精品国产色综合久久ai换脸| 色综合久久综合| 成人av网站免费| 成人黄色在线网站| 成人小视频免费在线观看| 激情综合色丁香一区二区| 日韩不卡在线观看日韩不卡视频| 亚洲美女屁股眼交| 自拍偷自拍亚洲精品播放| 亚洲国产岛国毛片在线| 久久久精品国产99久久精品芒果 | 日韩精品一区二区三区中文不卡 | 午夜成人在线视频| 亚洲精品自拍动漫在线| 亚洲欧美日韩在线| 亚洲乱码国产乱码精品精可以看| 国产精品久久久久久久久动漫| 国产精品网站在线| 国产精品久久精品日日| 亚洲日本免费电影| 亚洲日本va午夜在线电影| 18成人在线观看| 亚洲国产裸拍裸体视频在线观看乱了 | 天堂精品中文字幕在线| 偷拍自拍另类欧美| 日本中文字幕一区二区视频| 奇米精品一区二区三区四区| 精品影视av免费| 国产一区二区成人久久免费影院 | 91在线国产福利| 一本色道久久综合亚洲aⅴ蜜桃 | 日韩精品中午字幕| 国产无人区一区二区三区| 国产精品电影一区二区| 国产精品国产三级国产有无不卡 | 亚洲一区二区三区四区在线| 丝袜美腿亚洲一区| 国产毛片一区二区| 不卡av免费在线观看| 欧美日韩免费视频| 欧美不卡一区二区三区四区| 国产无一区二区| 亚洲精品成人少妇| 麻豆国产精品官网| 成人av在线观| 欧美日韩二区三区| 久久精品一区四区| 亚洲一二三区在线观看| 狠狠色狠狠色综合系列| 99久久精品国产观看| 日韩一卡二卡三卡四卡| 中文一区在线播放| 日韩在线一二三区| 成人天堂资源www在线| 欧美视频日韩视频在线观看| 久久久久久久久久久99999| 一区二区免费在线播放| 国产一区不卡精品| 欧美午夜电影网| 亚洲国产精品99久久久久久久久| 午夜精品久久久久久久久久| 懂色中文一区二区在线播放| 69堂精品视频| 亚洲激情一二三区| 国产成人精品亚洲日本在线桃色 | 成人国产精品免费| 日韩精品影音先锋| 亚洲大片免费看|