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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? dosfns.c

?? 分享:Dos操作系統(tǒng)的源程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
	for(--froot; length > 0 && !(*froot == '/' || *froot == '\\'); --froot)
		;
	return ++froot;
}


/* Ascii only file name match routines                  */
static BOOL 
cmatch (COUNT s, COUNT d, COUNT mode)
{
	if(s >= 'a' && s <= 'z')
		s -= 'a' - 'A';
	if(d >= 'a' && d <= 'z')
		d -= 'a' - 'A';
	if(mode && s == '?' && (d >= 'A' && s <= 'Z'))
		return TRUE;
	return s == d;
}

static BOOL 
fnmatch (BYTE FAR *s, BYTE FAR *d, COUNT n, COUNT mode)
{
	while(n--)
	{
		if(!cmatch(*s++, *d++, mode))
			return FALSE;
	}
	return TRUE;
}


#ifndef IPL
COUNT 
DosCreat (BYTE FAR *fname, COUNT attrib)
{
	psp FAR *p = MK_FP(cu_psp,0);
	WORD hndl, sft_idx;
	sft FAR *sftp;
	struct dhdr FAR *dhp;
	BYTE FAR *froot;
	WORD i;

	/* get a free handle                            */
	if((hndl = get_free_hndl()) == 0xff)
		return DE_TOOMANY;

	/* now get a free system file table entry       */
	if((sftp = get_free_sft((WORD FAR *)&sft_idx)) == (sft FAR *)-1)
		return DE_TOOMANY;
	
	/* check for a device                           */
	froot = get_root(fname);
	for(i = 0; i < FNAME_SIZE; i++)
	{
		if(*froot != '\0' && *froot != '.')
			PriPathName[i] = *froot++;
		else
			break;
	}

	for( ; i < FNAME_SIZE; i++)
		PriPathName[i] = ' ';

	/* if we have an extension, can't be a device   */
	if(*froot != '.');
	{
		for(dhp = (struct dhdr FAR *)&nul_dev; dhp != (struct dhdr FAR *)-1; dhp = dhp -> dh_next)
		{
			if(fnmatch((BYTE FAR *)PriPathName, (BYTE FAR *)dhp -> dh_name, FNAME_SIZE, FALSE))
			{
				sftp -> sft_count += 1;
				sftp -> sft_mode = SFT_MRDWR;
				sftp -> sft_attrib = attrib;
				sftp -> sft_flags = 
				  (dhp -> dh_attr & ~SFT_MASK) | SFT_FDEVICE | SFT_FEOF;
				sftp -> sft_psp = cu_psp;
				fbcopy((BYTE FAR *)PriPathName, sftp -> sft_name, FNAME_SIZE+FEXT_SIZE);
				sftp -> sft_dev = dhp;
				p -> ps_filetab[hndl] = sft_idx;
				return hndl;
			}
		}
	}
	sftp -> sft_status = dos_creat(fname, attrib);
	if(sftp -> sft_status >= 0)
	{
		p -> ps_filetab[hndl] = sft_idx;
		sftp -> sft_count += 1;
		sftp -> sft_mode = SFT_MRDWR;
		sftp -> sft_attrib = attrib;
		sftp -> sft_flags = 0;
		sftp -> sft_psp = cu_psp;
		fbcopy((BYTE FAR *)PriPathName, sftp -> sft_name, FNAME_SIZE+FEXT_SIZE);
		return hndl;
	}
	else
		return sftp -> sft_status;
}
#endif


COUNT 
CloneHandle (COUNT hndl)
{
	sft FAR *sftp;

	/* now get the system file table entry                          */
	if((sftp = get_sft(hndl)) == (sft FAR *)-1)
		return DE_INVLDHNDL;
	
	/* now that we have the system file table entry, get the fnode  */
	/* index, and increment the count, so that we've effectively    */
	/* cloned the file.                                             */
	sftp -> sft_count += 1;
	return hndl;
}


COUNT 
DosDup (COUNT Handle)
{
	psp FAR *p = MK_FP(cu_psp,0);
	COUNT NewHandle;
	sft FAR *Sftp;

	/* Get the SFT block that contains the SFT                      */
	if((Sftp = get_sft(Handle)) == (sft FAR *)-1)
		return DE_INVLDACC;

	/* If not open - exit                                           */
	if(Sftp -> sft_count <= 0)
		return DE_INVLDACC;

	/* now get a free handle                                        */
	if((NewHandle = get_free_hndl()) == 0xff)
		return DE_TOOMANY;

	/* If everything looks ok, bump it up.                          */
	if((Sftp -> sft_flags & SFT_FDEVICE) || (Sftp -> sft_status >= 0))
	{
		p -> ps_filetab[NewHandle] = p -> ps_filetab[Handle];
		Sftp -> sft_count += 1;
		return NewHandle;
	}
	else
		return DE_INVLDACC;
}




COUNT 
DosForceDup (COUNT OldHandle, COUNT NewHandle)
{
	psp FAR *p = MK_FP(cu_psp,0);
	sft FAR *Sftp;

	/* Get the SFT block that contains the SFT                      */
	if((Sftp = get_sft(OldHandle)) == (sft FAR *)-1)
		return DE_INVLDACC;

	/* If not open - exit                                           */
	if(Sftp -> sft_count <= 0)
		return DE_INVLDACC;

	/* now close the new handle if it's open                        */
	if(p -> ps_filetab[NewHandle] != 0xff)
	{
		COUNT ret;

		if((ret = DosClose(NewHandle)) != SUCCESS)
			return ret;
	}

	/* If everything looks ok, bump it up.                          */
	if((Sftp -> sft_flags & SFT_FDEVICE) || (Sftp -> sft_status >= 0))
	{
		p -> ps_filetab[NewHandle] = p -> ps_filetab[OldHandle];
		
		Sftp -> sft_count += 1;
		return SUCCESS;
	}
	else
		return DE_INVLDACC;
}


COUNT 
DosOpen (BYTE FAR *fname, COUNT mode)
{
	psp FAR *p = MK_FP(cu_psp,0);
	WORD hndl, sft_idx;
	sft FAR *sftp;
	struct dhdr FAR *dhp;
	BYTE FAR *froot;
	WORD i;

	/* test if mode is in range                     */
	if((mode & ~SFT_OMASK) != 0)
		return DE_INVLDACC;

	mode &= 3;

	if (cu_psp != DOS_PSP)
	{
	    /* get a free handle                            */
	    if((hndl = get_free_hndl()) == 0xff)
		return DE_TOOMANY;
	}

	/* now het a free system file table entry       */
	if((sftp = get_free_sft((WORD FAR *)&sft_idx)) == (sft FAR *)-1)
		return DE_TOOMANY;

	/* check for a device                           */
	froot = get_root(fname);
	for(i = 0; i < FNAME_SIZE; i++)
	{
		if(*froot != '\0' && *froot != '.')
			PriPathName[i] = *froot++;
		else
			break;
	}

	for( ; i < FNAME_SIZE; i++)
		PriPathName[i] = ' ';

	/* if we have an extension, can't be a device   */
	if(*froot != '.');
	{
		for(dhp = (struct dhdr FAR *)&nul_dev; dhp != (struct dhdr FAR *)-1; dhp = dhp -> dh_next)
		{
			if(fnmatch((BYTE FAR *)PriPathName, (BYTE FAR *)dhp -> dh_name, FNAME_SIZE, FALSE))
			{
				sftp -> sft_count += 1;
				sftp -> sft_mode = mode;
				sftp -> sft_attrib = 0;
				sftp -> sft_flags = 
				  (dhp -> dh_attr & ~SFT_MASK) | SFT_FDEVICE | SFT_FEOF;
				sftp -> sft_psp = cu_psp;
				fbcopy((BYTE FAR *)PriPathName, sftp -> sft_name, FNAME_SIZE+FEXT_SIZE);
				sftp -> sft_dev = dhp;
				
				if (cu_psp != DOS_PSP)
				    p -> ps_filetab[hndl] = sft_idx;
				return hndl;
			}
		}
	}
	sftp -> sft_status = dos_open(fname, mode);
	if(sftp -> sft_status >= 0)
	{
		if (cu_psp != DOS_PSP)
		    p -> ps_filetab[hndl] = sft_idx;
		
		sftp -> sft_count += 1;
		sftp -> sft_mode = mode;
		sftp -> sft_attrib = 0;
		sftp -> sft_flags = 0;
		sftp -> sft_psp = cu_psp;
		fbcopy((BYTE FAR *)PriPathName, sftp -> sft_name, FNAME_SIZE+FEXT_SIZE);
		return hndl;
	}
	else
		return sftp -> sft_status;
}


COUNT 
DosClose (COUNT hndl)
{
	psp FAR *p = MK_FP(cu_psp,0);
	sft FAR *s;

	/* Test that the handle is valid                */
	if(hndl < 0)
		return DE_INVLDHNDL;

	/* Get the SFT block that contains the SFT      */
	if((s = get_sft(hndl)) == (sft FAR *)-1)
		return DE_INVLDHNDL;

	/* If this is not opened another error          */
	if(s -> sft_count == 0)
		return DE_ACCESS;

	/* now just drop the count if a device, else    */
	/* call file system handler                     */
	if(s -> sft_flags & SFT_FDEVICE)
	{
		p -> ps_filetab[hndl] = 0xff;

		return SUCCESS;
	}
	else
	{
		p -> ps_filetab[hndl] = 0xff;
		s -> sft_count -= 1;
		if(s -> sft_count > 0)
			return SUCCESS;
		else
			return dos_close(s -> sft_status);
	}
}

VOID 
DosGetFree (COUNT drive, COUNT FAR *spc, COUNT FAR *navc, COUNT FAR *bps, COUNT FAR *nc)
{
	struct dpb *dpbp;

	/* first check for valid drive          */
	if(drive < 0 || drive > nblkdev)
	{
		*spc = -1;
		return;
	}

	/* next - "log" in the drive            */
	drive = (drive == 0 ? default_drive : drive - 1);
	dpbp = &blk_devices[drive];
	++(dpbp -> dpb_count);
	// dpbp -> dpb_flags = -1;
	if((media_check(dpbp) < 0) || (dpbp -> dpb_count <= 0))
	{
		*spc = -1;
		return;
	}

	/* get the data vailable from dpb       */
	*nc = dpbp -> dpb_size;
	*spc = dpbp -> dpb_clssize;
	*bps = dpbp -> dpb_secsize;

	/* now tell fs to give us free cluster  */
	/* count                                */
	*navc = dos_free(dpbp);
	--(dpbp -> dpb_count);
}


COUNT 
DosGetCuDir (COUNT drive, BYTE FAR *s)
{
	REG struct dpb *dpbp;

	/* first check for valid drive          */
	if(drive < 0 || drive > nblkdev)
		return DE_INVLDDRV;

	/* next - "log" in the drive            */
	drive = (drive == 0 ? default_drive : drive - 1);
	dpbp = &blk_devices[drive];
	// dpbp -> dpb_flags = -1;
	++(dpbp -> dpb_count);
	if((media_check(dpbp) < 0) || (dpbp -> dpb_count <= 0))
		return DE_INVLDDRV;

	/* now get fs to give current           */
	/* directory                            */
	dos_pwd(dpbp, s);
	--(dpbp -> dpb_count);
	return SUCCESS;
}


COUNT 
DosChangeDir (BYTE FAR *s)
{
	REG struct dpb *dpbp;
	REG COUNT drive;
	struct f_node FAR *fp;
	COUNT ret;

	/* test for path existance from fs      */
	if((fp = dir_open((BYTE FAR *)s)) == (struct f_node FAR *)0)
		return DE_PATHNOTFND;
	else
		dir_close(fp);

	/* Parse and extract drive              */
	if(*(s + 1) == ':')
	{
		drive = *s - '@';
		if (drive > 26) drive -= 'a' - 'A';
	}
	else
		drive = 0;

	/* first check for valid drive          */
	if(drive < 0 || drive > nblkdev)
		return DE_INVLDDRV;

	/* next - "log" in the drive            */
	drive = (drive == 0 ? default_drive : drive - 1);
	dpbp = &blk_devices[drive];
	++(dpbp -> dpb_count);
	// dpbp -> dpb_flags = -1;
	if((media_check(dpbp) < 0) || (dpbp -> dpb_count <= 0))
		return DE_INVLDDRV;
	
	/* now get fs to change to new          */
	/* directory                            */
	ret = dos_cd(dpbp, s);
	--(dpbp -> dpb_count);
	return ret;
}

COUNT 
DosFindFirst (UCOUNT attr, BYTE FAR *name)
{
	return dos_findfirst(attr, name);
}


COUNT 
DosFindNext (void)
{
	return dos_findnext();
}


#ifndef IPL
COUNT DosGetFtime(hndl, dp, tp)
COUNT hndl;
date FAR *dp;
time FAR *tp;
{
	sft FAR *s;
	sfttbl FAR *sp;

	/* Test that the handle is valid                */
	if(hndl < 0)
		return DE_INVLDHNDL;

	/* Get the SFT block that contains the SFT      */
	if((s = get_sft(hndl)) == (sft FAR *)-1)
		return DE_INVLDHNDL;

	/* If this is not opened another error          */
	if(s -> sft_count == 0)
		return DE_ACCESS;

	/* call file system handler                     */
	return dos_getftime(s -> sft_status, dp, tp);
}

COUNT DosSetFtime(hndl, dp, tp)
COUNT hndl;
date FAR *dp;
time FAR *tp;
{
	sft FAR *s;
	sfttbl FAR *sp;

	/* Test that the handle is valid                */
	if(hndl < 0)
		return DE_INVLDHNDL;

	/* Get the SFT block that contains the SFT      */
	if((s = get_sft(hndl)) == (sft FAR *)-1)
		return DE_INVLDHNDL;

	/* If this is not opened another error          */
	if(s -> sft_count == 0)
		return DE_ACCESS;

	/* call file system handler                     */
	return dos_setftime(s -> sft_status, dp, tp);
}
#endif

COUNT 
DosGetFattr (BYTE FAR *name, UWORD FAR *attrp)
{
	return dos_getfattr(name, attrp);
}


COUNT 
DosSetFattr (BYTE FAR *name, UWORD FAR *attrp)
{
	return dos_setfattr(name, attrp);
}


?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩精品中午字幕| 欧美一级久久久| 不卡av在线免费观看| 国产欧美一区二区精品婷婷| 91丨九色丨蝌蚪富婆spa| 日韩av在线免费观看不卡| 国产欧美一区二区精品性| 欧美日韩一区二区三区在线看| 久久电影国产免费久久电影| 中文字幕一区二区三区视频| 日韩一级片网址| 欧美嫩在线观看| 色哟哟一区二区三区| 韩国三级电影一区二区| 亚洲国产一区二区三区青草影视| 欧洲精品一区二区| 日韩电影在线观看网站| 精品国产99国产精品| 成人免费毛片嘿嘿连载视频| 亚洲国产一区视频| 中文字幕欧美激情一区| 欧美综合一区二区三区| 国产一区二区在线影院| 亚洲视频一区在线| 久久久国产综合精品女国产盗摄| 777午夜精品视频在线播放| 制服丝袜激情欧洲亚洲| 国产剧情av麻豆香蕉精品| 日本vs亚洲vs韩国一区三区二区| 国产精品久久久久7777按摩| 欧美一级在线观看| 免费日本视频一区| 国产欧美一区二区精品忘忧草| 欧美无人高清视频在线观看| 韩国成人精品a∨在线观看| 亚洲与欧洲av电影| 国产精品入口麻豆原神| 91精品国产一区二区三区香蕉| 91蜜桃传媒精品久久久一区二区| 日韩高清在线观看| 夜夜嗨av一区二区三区网页 | 国产精品入口麻豆原神| 日韩免费性生活视频播放| 色噜噜狠狠成人中文综合| 国内成人精品2018免费看| 日一区二区三区| 亚洲国产欧美日韩另类综合| 国产精品久久久久久久午夜片| 日韩欧美亚洲国产另类| 777xxx欧美| 欧洲国内综合视频| 日本精品免费观看高清观看| 色香蕉久久蜜桃| 色综合久久综合网| 精品视频一区 二区 三区| 欧美自拍丝袜亚洲| 欧美日韩综合色| 欧美人狂配大交3d怪物一区| 欧美日韩精品欧美日韩精品一| 欧美天天综合网| 欧美日韩久久一区| 日韩一区二区三区视频| 日韩一区二区三区免费看| 欧美成人一级视频| 国产精品色噜噜| 樱花草国产18久久久久| 一区二区三区电影在线播| 亚洲在线视频网站| 麻豆国产精品777777在线| 国产一区999| 欧美亚日韩国产aⅴ精品中极品| 欧美视频一区在线| 国产亚洲美州欧州综合国| 亚洲欧洲综合另类| 日本欧美一区二区三区乱码 | 久久精品亚洲精品国产欧美 | 91蝌蚪porny九色| 欧美久久久影院| 国产视频一区在线播放| 午夜视频一区二区三区| 国产一区二区在线视频| 欧美性一区二区| 欧美激情综合五月色丁香| 日韩精品国产欧美| 不卡av免费在线观看| 精品福利在线导航| 午夜伦欧美伦电影理论片| 不卡一二三区首页| 国产欧美一区二区精品久导航| 天堂久久久久va久久久久| 9色porny自拍视频一区二区| 欧美一区二区三区免费视频| 亚洲精品日日夜夜| 99国产精品一区| 国产精品伦一区| 成人亚洲精品久久久久软件| 欧美一区二区三区日韩视频| 日本午夜一区二区| 99久久精品免费| 久久久不卡影院| 秋霞av亚洲一区二区三| 国产电影精品久久禁18| 麻豆国产精品777777在线| 99国产欧美另类久久久精品| 亚洲精品一区二区三区99| 午夜影院在线观看欧美| 欧美在线高清视频| 色天天综合色天天久久| 91热门视频在线观看| 99久精品国产| 欧美日韩国产精品自在自线| 欧美日韩免费电影| 欧美男人的天堂一二区| 秋霞影院一区二区| 这里只有精品电影| 亚洲成人7777| 在线观看亚洲a| 亚洲美女免费在线| 成人性生交大片免费看中文网站 | 综合色天天鬼久久鬼色| 99免费精品在线观看| 日本一区二区三区久久久久久久久不 | 亚洲精品视频一区| 成人污污视频在线观看| 国产女人aaa级久久久级| 日本人妖一区二区| 天堂av在线一区| 精品久久久久香蕉网| 99国产精品99久久久久久| 亚洲r级在线视频| 国产精品美女一区二区| 91黄色免费看| 粉嫩aⅴ一区二区三区四区| 天堂成人国产精品一区| 另类调教123区| 国产高清在线精品| 99re视频精品| 国产精品一区三区| 亚洲一级二级三级在线免费观看| 精品少妇一区二区三区日产乱码| 91免费看视频| 成人午夜电影久久影院| 奇米色一区二区| 亚洲精选免费视频| 蜜桃91丨九色丨蝌蚪91桃色| 国产一本一道久久香蕉| 美脚の诱脚舐め脚责91| 尤物av一区二区| 国产精品免费看片| 精品久久久久香蕉网| 欧美年轻男男videosbes| 色八戒一区二区三区| 91精品国产综合久久精品性色| 中文字幕av资源一区| 蜜桃视频一区二区三区| 91久久一区二区| 国产女人18毛片水真多成人如厕| 欧美男男青年gay1069videost| 欧美午夜精品理论片a级按摩| 91日韩在线专区| 欧美天天综合网| 91精品国产色综合久久ai换脸| 欧美日韩国产a| 精品第一国产综合精品aⅴ| 一本色道久久综合亚洲精品按摩| 99久精品国产| 欧美日韩1234| 欧美不卡一区二区| 久久嫩草精品久久久精品| 亚洲国产成人私人影院tom| 最新国产精品久久精品| 久久精品国产一区二区三| 国产精选一区二区三区| 一本久道久久综合中文字幕| 欧美日韩一区国产| 亚洲精品一二三区| 国产偷国产偷精品高清尤物| 亚洲欧美日韩综合aⅴ视频| 岛国av在线一区| 国产精品国产a| 91视频www| 亚洲va在线va天堂| 日韩午夜av电影| 欧美丝袜第三区| 亚洲欧洲性图库| 国产麻豆一精品一av一免费| 欧美在线免费观看亚洲| 国产精品亲子伦对白| 毛片av中文字幕一区二区| 欧美色网站导航| 亚洲老妇xxxxxx| 99久精品国产| 亚洲精品乱码久久久久久| 不卡的看片网站| 中文字幕成人av| 99久久精品国产观看| 国产精品久线在线观看| 99久久99久久精品免费看蜜桃| 国产欧美日韩中文久久| 国产成人av一区二区|