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

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

?? fcbfns.c

?? 這是DOS操作系統(tǒng)啟動(dòng)的源代碼 里面是匯編語(yǔ)言 包括了部分的驅(qū)動(dòng)程序
?? C
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
fcb FAR *lpFcb;
{
	if(++lpFcb -> fcb_curec > 128)
	{
		lpFcb -> fcb_curec = 0;
		++lpFcb -> fcb_cublock;
	}
}


BOOL FcbRead(lpXfcb, nErrorCode)
xfcb FAR *lpXfcb;
COUNT *nErrorCode;
{
	sft FAR *s;
	LONG lPosit;
	COUNT nRead;
	psp FAR *p = MK_FP(cu_psp,0);

	/* Convert to fcb if necessary                                  */
	lpFcb = ExtFcbToFcb(lpXfcb);

	/* Get the SFT block that contains the SFT      */
	if((s = FcbGetSft(lpFcb -> fcb_sftno)) == (sft FAR *)-1)
		return FALSE;

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

	/* Now update the fcb and compute where we need to position     */
	/* to.                                                          */
	lPosit = ((lpFcb -> fcb_cublock * 128) + lpFcb -> fcb_curec)
	 * lpFcb -> fcb_recsiz;
	if(dos_lseek(s -> sft_status, lPosit, 0) < 0)
	{
		*nErrorCode = FCB_ERR_EOF;
		return FALSE;
	}

	/* Do the read                                                  */
	nRead = dos_read(s -> sft_status,
	 p -> ps_dta, lpFcb -> fcb_recsiz);

	/* Now find out how we will return and do it.                   */
	if(nRead == lpFcb -> fcb_recsiz)
	{
		*nErrorCode = FCB_SUCCESS;
		FcbNextRecord(lpFcb);
		return TRUE;
	}
	else if(nRead < 0)
	{
		*nErrorCode = FCB_ERR_EOF;
		return TRUE;
	}
	else if(nRead == 0)
	{
		*nErrorCode = FCB_ERR_NODATA;
		return FALSE;
	}
	else
	{
		COUNT nIdx, nCount;
		BYTE FAR *lpDta;

		nCount = lpFcb -> fcb_recsiz - nRead;
		lpDta = (BYTE FAR *)&(p -> ps_dta[nRead]);
		for(nIdx = 0; nIdx < nCount; nIdx++)
			*lpDta++ = 0;
		*nErrorCode = FCB_ERR_EOF;
		FcbNextRecord(lpFcb);
		return FALSE;
	}
}

BOOL FcbWrite(lpXfcb, nErrorCode)
xfcb FAR *lpXfcb;
COUNT *nErrorCode;
{
	sft FAR *s;
	LONG lPosit;
	COUNT nWritten;
	psp FAR *p = MK_FP(cu_psp,0);

	/* Convert to fcb if necessary                                  */
	lpFcb = ExtFcbToFcb(lpXfcb);

	/* Get the SFT block that contains the SFT      */
	if((s = FcbGetSft(lpFcb -> fcb_sftno)) == (sft FAR *)-1)
		return FALSE;

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

	/* Now update the fcb and compute where we need to position     */
	/* to.                                                          */
	lPosit = ((lpFcb -> fcb_cublock * 128) + lpFcb -> fcb_curec)
	 * lpFcb -> fcb_recsiz;
	if(dos_lseek(s -> sft_status, lPosit, 0) < 0)
	{
		*nErrorCode = FCB_ERR_EOF;
		return FALSE;
	}

	/* Do the read                                                  */
	nWritten = dos_write(s -> sft_status,
	 p -> ps_dta, lpFcb -> fcb_recsiz);

	/* Now find out how we will return and do it.                   */
	if(nWritten == lpFcb -> fcb_recsiz)
	{
		lpFcb -> fcb_fsize = dos_getcufsize(s -> sft_status);
		FcbNextRecord(lpFcb);
		*nErrorCode = FCB_SUCCESS;
		return TRUE;
	}
	else if(nWritten <= 0)
	{
		*nErrorCode = FCB_ERR_WRITE;
		return TRUE;
	}
	*nErrorCode = FCB_ERR_WRITE;
	return FALSE;
}


BOOL FcbGetFileSize(lpXfcb)
xfcb FAR *lpXfcb;
{
	COUNT FcbDrive, FileNum;

	/* Build a traditional DOS file name                            */
	lpFcb = CommonFcbInit(lpXfcb, PriPathName, &FcbDrive);

	/* check for a device                                           */
	/* if we have an extension, can't be a device                   */
	if(IsDevice(PriPathName) || (lpFcb -> fcb_recsiz == 0))
	{
		return FALSE;
	}
	FileNum = dos_open(PriPathName, O_RDONLY);
	if(FileNum >= 0)
	{
		LONG fsize;

		/* Get the size                                         */
		fsize = dos_getfsize(FileNum);

		/* compute the size and update the fcb                  */
		lpFcb -> fcb_rndm = fsize / lpFcb -> fcb_recsiz;
		if((fsize % lpFcb -> fcb_recsiz) != 0)
			++lpFcb -> fcb_rndm;

		/* close the file and leave                             */
		return dos_close(FileNum) == SUCCESS;
	}
	else
		return FALSE;
}


BOOL FcbSetRandom(lpXfcb)
xfcb FAR *lpXfcb;
{
	LONG lPosit;

	/* Convert to fcb if necessary                                  */
	lpFcb = ExtFcbToFcb(lpXfcb);

	/* Now update the fcb and compute where we need to position     */
	/* to.                                                          */
	lpFcb -> fcb_rndm = (lpFcb -> fcb_cublock * 128)
	 + lpFcb -> fcb_curec;

	return TRUE;
}


BOOL FcbCalcRec(lpXfcb)
xfcb FAR *lpXfcb;
{
	LONG lPosit;

	/* Convert to fcb if necessary                                  */
	lpFcb = ExtFcbToFcb(lpXfcb);

	/* Now update the fcb and compute where we need to position     */
	/* to.                                                          */
	lpFcb -> fcb_cublock =  lpFcb -> fcb_rndm / 128;
	lpFcb -> fcb_curec =  lpFcb -> fcb_rndm % 128;

	return TRUE;
}


BOOL FcbRandomBlockRead(lpXfcb, nRecords, nErrorCode)
xfcb FAR *lpXfcb;
COUNT nRecords;
COUNT *nErrorCode;
{
	FcbCalcRec(lpXfcb);

	/* Convert to fcb if necessary                                  */
	lpFcb = ExtFcbToFcb(lpXfcb);

	do
		FcbRead(lpXfcb, nErrorCode);
	while ((--nRecords > 0) && (*nErrorCode == 0));

	/* Now update the fcb                                           */
	lpFcb -> fcb_rndm = lpFcb -> fcb_cublock * 128 + lpFcb -> fcb_curec;

	return TRUE;
}


BOOL FcbRandomBlockWrite(lpXfcb, nRecords, nErrorCode)
xfcb FAR *lpXfcb;
COUNT nRecords;
COUNT *nErrorCode;
{
	FcbCalcRec(lpXfcb);

	/* Convert to fcb if necessary                                  */
	lpFcb = ExtFcbToFcb(lpXfcb);

	do
		FcbWrite(lpXfcb, nErrorCode);
	while ((--nRecords > 0) && (*nErrorCode == 0));

	/* Now update the fcb                                           */
	lpFcb -> fcb_rndm = lpFcb -> fcb_cublock * 128 + lpFcb -> fcb_curec;

	return TRUE;
}


BOOL FcbRandomRead(lpXfcb, nErrorCode)
xfcb FAR *lpXfcb;
COUNT *nErrorCode;
{
	UWORD uwCurrentBlock;
	UBYTE ucCurrentRecord;

	FcbCalcRec(lpXfcb);

	/* Convert to fcb if necessary                                  */
	lpFcb = ExtFcbToFcb(lpXfcb);

	uwCurrentBlock = lpFcb -> fcb_cublock;
	ucCurrentRecord = lpFcb -> fcb_curec;

	FcbRead(lpXfcb, nErrorCode);

	lpFcb -> fcb_cublock = uwCurrentBlock;
	lpFcb -> fcb_curec = ucCurrentRecord;
	return TRUE;
}


BOOL FcbRandomWrite(lpXfcb, nErrorCode)
xfcb FAR *lpXfcb;
COUNT *nErrorCode;
{
	UWORD uwCurrentBlock;
	UBYTE ucCurrentRecord;

	FcbCalcRec(lpXfcb);

	/* Convert to fcb if necessary                                  */
	lpFcb = ExtFcbToFcb(lpXfcb);

	uwCurrentBlock = lpFcb -> fcb_cublock;
	ucCurrentRecord = lpFcb -> fcb_curec;

	FcbWrite(lpXfcb, nErrorCode);

	lpFcb -> fcb_cublock = uwCurrentBlock;
	lpFcb -> fcb_curec = ucCurrentRecord;
	return TRUE;
}


static sft FAR *FcbGetFreeSft(sft_idx)
WORD FAR *sft_idx;
{
	WORD sys_idx = 0;
	sfttbl FAR *sp;

	/* Get the SFT block that contains the SFT      */
	for(sp = sfthead; sp != (sfttbl FAR *)-1; sp = sp -> sftt_next)
	{
		REG WORD i;

		for(i = 0; i < sp -> sftt_count; i++)
		{
			if(sp -> sftt_table[i].sft_count == 0)
			{
				*sft_idx = sys_idx + i;
				return (sft FAR *)&sp -> sftt_table[sys_idx + i];
			}
		}
		sys_idx += i;
	}

	/* If not found, return an error                */
	return (sft FAR *)-1;
}


BOOL FcbCreate(lpXfcb)
xfcb FAR *lpXfcb;
{
	WORD sft_idx;
	sft FAR *sftp;
	struct dhdr FAR *dhp;
	COUNT FcbDrive;

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

	/* Build a traditional DOS file name                            */
	lpFcb = CommonFcbInit(lpXfcb, PriPathName, &FcbDrive);

	/* check for a device                                           */
	/* if we have an extension, can't be a device                   */
	if(IsDevice(PriPathName))
	{
		for(dhp = (struct dhdr FAR *)&nul_dev; dhp != (struct dhdr FAR *)-1; dhp = dhp -> dh_next)
		{
			if(FcbFnameMatch((BYTE FAR *)PriPathName, (BYTE FAR *)dhp -> dh_name, FNAME_SIZE, FALSE))
			{
				sftp -> sft_count += 1;
				sftp -> sft_mode = O_RDWR;
				sftp -> sft_attrib = 0;
				sftp -> sft_flags =
				  (dhp -> dh_attr & ~SFT_MASK) | SFT_FDEVICE | SFT_FEOF;
				sftp -> sft_psp = cu_psp;
				fbcopy(lpFcb -> fcb_fname, sftp -> sft_name, FNAME_SIZE+FEXT_SIZE);
				sftp -> sft_dev = dhp;
				lpFcb -> fcb_sftno = sft_idx;
				lpFcb -> fcb_curec = 0;
				lpFcb -> fcb_recsiz = 0;
				lpFcb -> fcb_fsize = 0;
				lpFcb -> fcb_date = dos_getdate();
				lpFcb -> fcb_time = dos_gettime();
				lpFcb -> fcb_rndm = 0;
				return TRUE;
			}
		}
	}
	sftp -> sft_status = dos_creat(PriPathName, 0);
	if(sftp -> sft_status >= 0)
	{
		lpFcb -> fcb_drive = FcbDrive;
		lpFcb -> fcb_sftno = sft_idx;
		lpFcb -> fcb_curec = 0;
		lpFcb -> fcb_recsiz = 128;
		lpFcb -> fcb_fsize = 0;
		lpFcb -> fcb_date = dos_getdate();
		lpFcb -> fcb_time = dos_gettime();
		lpFcb -> fcb_rndm = 0;
		sftp -> sft_count += 1;
		sftp -> sft_mode = O_RDWR;
		sftp -> sft_attrib = 0;
		sftp -> sft_flags = 0;
		sftp -> sft_psp = cu_psp;
		fbcopy((BYTE FAR *)&lpFcb -> fcb_fname, (BYTE FAR *)&sftp -> sft_name, FNAME_SIZE+FEXT_SIZE);
		return TRUE;
	}
	else
		return FALSE;
}


static fcb FAR *ExtFcbToFcb(xfcb FAR *lpExtFcb)
{
	if(*((UBYTE FAR *)lpExtFcb) == 0xff)
		return &lpExtFcb -> xfcb_fcb;
	else
		return (fcb FAR *)lpExtFcb;
}


static fcb FAR *CommonFcbInit(lpExtFcb, pszBuffer, pCurDrive)
xfcb FAR *lpExtFcb;
BYTE *pszBuffer;
COUNT *pCurDrive;
{
	BYTE FAR *lpszFcbFname, *lpszFcbFext;
	COUNT nDrvIdx, nFnameIdx, nFextIdx;
	fcb FAR *lpFcb;

	/* convert to fcb if needed first                               */
	lpFcb = ExtFcbToFcb(lpExtFcb);

	/* Build a traditional DOS file name                            */
	FcbNameInit(lpFcb, pszBuffer, pCurDrive);

	/* and return the fcb pointer                                   */
	return lpFcb;
}

void FcbNameInit(lpFcb, pszBuffer, pCurDrive)
fcb FAR *lpFcb;
BYTE *pszBuffer;
COUNT *pCurDrive;
{
	BYTE FAR *lpszFcbFname, FAR *lpszFcbFext;
	COUNT nDrvIdx, nFnameIdx, nFextIdx;

	/* Build a traditional DOS file name                            */
	lpszFcbFname = (BYTE FAR *)lpFcb -> fcb_fname;
	if(lpFcb -> fcb_drive != 0)
	{
		*pCurDrive = lpFcb -> fcb_drive;
		pszBuffer[0] = 'A' + lpFcb -> fcb_drive - 1;
		pszBuffer[1] = ':';
		nDrvIdx = 2;
	}           
	else
	{
		*pCurDrive = default_drive + 1;
		nDrvIdx = 0;
	}

	for(nFnameIdx = 0; nFnameIdx < FNAME_SIZE; nFnameIdx++)
	{
		if(*lpszFcbFname != ' ')
			pszBuffer[nDrvIdx + nFnameIdx] = *lpszFcbFname++;
		else
			break;
	}

	lpszFcbFext = (BYTE FAR *)lpFcb -> fcb_fext;
	if(*lpszFcbFext != ' ')
	{
		pszBuffer[nDrvIdx + nFnameIdx++] = '.';
		for(nFextIdx = 0; nFextIdx < FEXT_SIZE; nFextIdx++)

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久国产免费看| 色婷婷亚洲综合| 精品一区二区免费视频| 亚洲大片在线观看| 亚洲va韩国va欧美va| 亚洲成人激情自拍| 亚洲第四色夜色| 亚洲一区视频在线观看视频| 亚洲一区二区三区免费视频| 一区二区三区国产精华| 亚洲国产成人高清精品| 亚洲成av人片在www色猫咪| 视频在线观看国产精品| 免费三级欧美电影| 国产一区二区免费视频| 国产98色在线|日韩| 风流少妇一区二区| 色综合天天综合| 欧美在线视频全部完| 欧美日韩国产一级| 日韩欧美国产综合一区| 精品不卡在线视频| 国产欧美一区二区三区网站| 国产欧美一区二区精品仙草咪| 国产精品每日更新| 一区二区三区不卡视频| 日韩成人精品视频| 国产永久精品大片wwwapp | 在线观看日韩一区| 欧美丰满一区二区免费视频 | 亚洲影院久久精品| 亚洲国产色一区| 美女网站在线免费欧美精品| 国产精品一卡二| 色婷婷久久久综合中文字幕| 3d成人动漫网站| 国产视频一区在线观看| 夜夜嗨av一区二区三区| 麻豆久久久久久| 99视频一区二区| 4438x亚洲最大成人网| 久久在线免费观看| 亚洲欧美国产毛片在线| 日本aⅴ免费视频一区二区三区| 精品一区二区三区在线观看 | 制服丝袜一区二区三区| xf在线a精品一区二区视频网站| 国产精品理论在线观看| 天天综合网天天综合色| 国产盗摄一区二区三区| 欧美性xxxxxxxx| 国产午夜亚洲精品羞羞网站| 一区二区三区四区视频精品免费 | 亚洲国产精品久久艾草纯爱 | 欧美电影在线免费观看| 国产日本亚洲高清| 亚洲h动漫在线| 成人免费电影视频| 欧美一区二区性放荡片| 亚洲欧洲99久久| 麻豆高清免费国产一区| 91在线云播放| 久久夜色精品一区| 一区二区三区在线视频免费| 国产福利一区在线观看| 日韩三级精品电影久久久| 亚洲欧美日韩国产综合在线| 国产精品白丝av| 777午夜精品免费视频| 亚洲人吸女人奶水| 国产福利视频一区二区三区| 在线播放视频一区| 亚洲黄一区二区三区| 日韩女同互慰一区二区| 亚洲激情六月丁香| 成人毛片在线观看| 欧美α欧美αv大片| 亚洲专区一二三| av不卡一区二区三区| 日本一区二区三区dvd视频在线 | 91成人在线精品| 国产欧美精品一区aⅴ影院 | 欧洲一区二区三区在线| 国产精品久久777777| 国产馆精品极品| 久久午夜免费电影| 美女网站在线免费欧美精品| 欧美日本乱大交xxxxx| 亚洲一区二区免费视频| 色视频一区二区| 日韩理论片中文av| 91婷婷韩国欧美一区二区| 国产女同性恋一区二区| 国产成a人亚洲精品| 久久精品欧美日韩| 国产乱一区二区| 2022国产精品视频| 精品无人码麻豆乱码1区2区 | 久久久精品中文字幕麻豆发布| 日韩精品欧美成人高清一区二区| 欧美最猛黑人xxxxx猛交| 亚洲精品视频在线看| 色偷偷88欧美精品久久久| 亚洲免费高清视频在线| 一本久久a久久精品亚洲| 亚洲色图欧洲色图婷婷| 91小视频在线免费看| 亚洲欧美日韩小说| 欧美综合在线视频| 日韩激情视频网站| 日韩一区二区三区四区| 免费成人结看片| 精品伦理精品一区| 国产精品一级片在线观看| 日本一区二区不卡视频| 成人国产精品视频| 日韩伦理免费电影| 欧美三级韩国三级日本一级| 丝袜亚洲另类欧美| 精品国产一区二区国模嫣然| 国产+成+人+亚洲欧洲自线| 免费一级片91| 久久精品人人做| 成人黄色片在线观看| 一区二区三区在线不卡| 欧美美女一区二区三区| 久久成人羞羞网站| 中文一区二区完整视频在线观看| www.亚洲免费av| 亚洲狠狠爱一区二区三区| 欧美一区二区三区成人| 狠狠色综合日日| 国产精品福利影院| 欧美日产在线观看| 国产在线不卡一卡二卡三卡四卡| 欧美精品一区视频| 成人黄色免费短视频| 亚洲国产精品综合小说图片区| 制服丝袜中文字幕亚洲| 国产99久久久国产精品| 亚洲一区二区在线播放相泽| 日韩小视频在线观看专区| proumb性欧美在线观看| 亚洲图片欧美视频| 亚洲精品在线免费播放| 成人app软件下载大全免费| 午夜激情一区二区三区| 久久精品夜色噜噜亚洲aⅴ| 色综合视频在线观看| 久久99国产精品久久| 亚洲情趣在线观看| 日韩一区二区免费高清| 成人精品国产福利| 美洲天堂一区二卡三卡四卡视频| 亚洲国产精品二十页| 欧美日韩高清一区二区不卡| 粉嫩嫩av羞羞动漫久久久| 天天综合天天综合色| 国产精品毛片久久久久久| 91看片淫黄大片一级在线观看| 日韩不卡一区二区| 国产精品国产精品国产专区不片| 在线综合亚洲欧美在线视频| 高清shemale亚洲人妖| 免费人成在线不卡| 一区二区免费看| 国产清纯美女被跳蛋高潮一区二区久久w | 一区二区三区久久久| 国产欧美日本一区二区三区| 欧美福利视频一区| 色偷偷久久人人79超碰人人澡| 国产乱人伦精品一区二区在线观看 | 91.xcao| 色久优优欧美色久优优| 欧美性猛交xxxx黑人交| 成人精品一区二区三区中文字幕| 免费国产亚洲视频| 香蕉影视欧美成人| 亚洲欧美aⅴ...| 欧美国产精品一区| 久久一区二区视频| 日韩欧美一区在线观看| 欧美无人高清视频在线观看| 成人app软件下载大全免费| 国产美女av一区二区三区| 秋霞av亚洲一区二区三| 亚洲午夜久久久久| 一区二区免费在线播放| 亚洲视频免费在线观看| 国产精品久久综合| 国产偷v国产偷v亚洲高清| 精品国产91洋老外米糕| 日韩一区二区麻豆国产| 欧美一区二区三区啪啪| 欧美高清hd18日本| 91精品久久久久久久99蜜桃| 欧美色综合网站| 欧美日韩中字一区| 欧美视频你懂的| 欧美老年两性高潮|