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

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

?? memmgr.c

?? Free 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一区二区三区免费野_久草精品视频
欧美在线999| 91免费观看国产| 一区二区三区91| 最新国产成人在线观看| 国产精品污网站| 国产喷白浆一区二区三区| 久久色视频免费观看| 精品国产一区二区在线观看| 欧美一级xxx| 精品美女一区二区| 久久久久88色偷偷免费| 亚洲国产精品一区二区www | 不卡的av在线播放| 欧美一区二区网站| 久久久久久久久免费| 日韩精品亚洲专区| 色噜噜夜夜夜综合网| 国产精品理论片| 国产一区二区91| 精品国产青草久久久久福利| 性做久久久久久免费观看| a级高清视频欧美日韩| 性做久久久久久免费观看欧美| 成人av免费在线观看| 久久久久久久电影| 韩国在线一区二区| 久久综合色婷婷| 韩国一区二区在线观看| 精品免费一区二区三区| 麻豆91精品视频| 日韩三级.com| 欧美日韩国产乱码电影| 一区二区三区在线不卡| 99riav一区二区三区| 中文字幕一区二区日韩精品绯色| 国产91精品免费| 国产精品久久久久久久午夜片 | 亚洲国产一区二区三区| 色偷偷88欧美精品久久久| 亚洲视频在线观看三级| 一本到一区二区三区| 一区二区三区不卡视频在线观看| 一本色道久久加勒比精品| 亚洲综合在线电影| 欧美美女直播网站| 久久精品国产亚洲aⅴ| 日韩女优av电影| 高清国产一区二区三区| 国产精品久久久久久福利一牛影视| 成人不卡免费av| 亚洲精品水蜜桃| 7777精品伊人久久久大香线蕉| 日本女优在线视频一区二区| 欧美成人性战久久| www.综合网.com| 亚洲一区二区三区自拍| 91精品国产综合久久久久久久| 久久99精品一区二区三区| 国产精品私人影院| 欧美一a一片一级一片| 老司机午夜精品99久久| 国产精品久久久久精k8| 欧美三级电影网| 国产最新精品精品你懂的| 自拍av一区二区三区| 欧美日韩在线播放一区| 国产精品综合视频| 亚洲一区二区美女| 久久久青草青青国产亚洲免观| 91色porny在线视频| 日本不卡视频在线| 1000部国产精品成人观看| 91精品国产综合久久精品app | 亚洲电影中文字幕在线观看| 欧美精品一区二区精品网| 91一区二区在线| 狠狠久久亚洲欧美| 性做久久久久久| 国产精品嫩草99a| 日韩免费观看2025年上映的电影| 91在线无精精品入口| 蜜桃视频第一区免费观看| 亚洲视频1区2区| 精品免费国产一区二区三区四区| 色综合欧美在线| 国产不卡一区视频| 精品一区二区三区免费观看| 亚洲成在人线免费| 中文字幕日本乱码精品影院| 日韩精品一区二区三区中文不卡 | 色欧美日韩亚洲| 成人小视频免费在线观看| 青青草国产精品亚洲专区无| 亚洲裸体在线观看| 久久久精品中文字幕麻豆发布| 欧美日韩国产在线观看| 91老师片黄在线观看| 国产成人综合精品三级| 蜜臀av一区二区| 亚洲成人资源在线| 亚洲免费电影在线| 国产精品久久久久久久久晋中| 久久影音资源网| 精品久久免费看| 日韩一区二区电影| 3d成人h动漫网站入口| 在线视频国内自拍亚洲视频| 99re亚洲国产精品| 99热99精品| av激情亚洲男人天堂| 成人综合日日夜夜| 成人一道本在线| 成人av在线资源网| 盗摄精品av一区二区三区| 国产美女av一区二区三区| 国产尤物一区二区| 国产69精品久久久久毛片 | 久久久久久电影| 国产日韩v精品一区二区| 欧美国产97人人爽人人喊| 国产午夜精品久久久久久久| www激情久久| 一区在线中文字幕| 国产精品久久久久久久午夜片| 中文字幕欧美一| 亚洲综合视频网| 免费观看一级特黄欧美大片| 久草中文综合在线| 国产精品91xxx| 成人久久久精品乱码一区二区三区 | 精品一区二区三区久久| 国产成人一区在线| 成人免费看视频| 色狠狠一区二区| 欧美一区二区福利在线| 精品国精品国产| 亚洲欧洲另类国产综合| 一区二区三区在线视频免费| 亚洲va欧美va国产va天堂影院| 免费一级片91| 99综合影院在线| 欧美女孩性生活视频| 久久天堂av综合合色蜜桃网| 国产欧美日韩视频在线观看| 亚洲图片欧美激情| 日韩中文字幕av电影| 国产精品综合一区二区三区| 91在线观看美女| 欧美岛国在线观看| 国产精品国产三级国产专播品爱网 | 成人黄色小视频在线观看| 欧美综合久久久| 精品少妇一区二区三区在线播放| 中文一区二区在线观看| 亚洲综合在线第一页| 国产综合色产在线精品| eeuss鲁片一区二区三区| 欧美精品tushy高清| 国产精品大尺度| 热久久国产精品| 99精品视频在线免费观看| 91麻豆精品国产无毒不卡在线观看| 久久久久国色av免费看影院| 亚洲成a人v欧美综合天堂下载| 国产精品一二三| 51精品视频一区二区三区| 国产精品视频免费看| 久久99精品久久久| 欧美日韩小视频| 亚洲另类一区二区| 国产精品一区二区久久精品爱涩| 在线精品亚洲一区二区不卡| 国产亚洲欧美在线| 日本视频在线一区| 在线观看亚洲精品| 亚洲视频一区二区免费在线观看| 国内一区二区视频| 91麻豆精品国产91久久久使用方法| 国产精品高潮呻吟| 国产高清成人在线| 久久综合九色综合97婷婷 | 亚洲人精品午夜| 国产宾馆实践打屁股91| 日韩精品一区二区三区在线播放| 亚洲欧美成aⅴ人在线观看| 国产99久久久久久免费看农村| 欧美成人精品3d动漫h| 午夜视频在线观看一区二区 | 韩国三级电影一区二区| 欧美久久高跟鞋激| 亚洲成a人在线观看| 色八戒一区二区三区| 中文字幕一区二区三区视频| 国产成人亚洲精品青草天美| 欧美成人精品3d动漫h| 蜜臀国产一区二区三区在线播放| 欧美剧在线免费观看网站| 亚洲国产裸拍裸体视频在线观看乱了| 白白色 亚洲乱淫| 日韩一区在线免费观看|