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

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

?? fcbfns.c

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

/****************************************************************/
/*                                                              */
/*                          fcbfns.c                            */
/*                                                              */
/*           Old CP/M Style Function Handlers for Kernel        */
/*                                                              */
/*                      Copyright (c) 1995                      */
/*                      Pasquale J. Villani                     */
/*                      All Rights Reserved                     */
/*                                                              */
/* This file is part of DOS-C.                                  */
/*                                                              */
/* DOS-C is free software; you can redistribute it and/or       */
/* modify it under the terms of the GNU General Public License  */
/* as published by the Free Software Foundation; either version */
/* 2, or (at your option) any later version.                    */
/*                                                              */
/* DOS-C is distributed in the hope that it will be useful, but */
/* WITHOUT ANY WARRANTY; without even the implied warranty of   */
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See    */
/* the GNU General Public License for more details.             */
/*                                                              */
/* You should have received a copy of the GNU General Public    */
/* License along with DOS-C; see the file COPYING.  If not,     */
/* write to the Free Software Foundation, 675 Mass Ave,         */
/* Cambridge, MA 02139, USA.                                    */
/****************************************************************/

#include "../../hdr/portab.h"
#include "globals.h"

/* $Logfile:   C:/dos-c/src/fs/fcbfns.c_v  $ */
#ifdef VERSION_STRINGS
static BYTE *RcsId = "$Header:   C:/dos-c/src/fs/fcbfns.c_v   1.6   04 Jan 1998 23:14:38   patv  $";
#endif

/* $Log:   C:/dos-c/src/fs/fcbfns.c_v  $
 * 
 *    Rev 1.6   04 Jan 1998 23:14:38   patv
 * Changed Log for strip utility
 * 
 *    Rev 1.5   03 Jan 1998  8:36:02   patv
 * Converted data area to SDA format
 * 
 *    Rev 1.4   16 Jan 1997 12:46:38   patv
 * pre-Release 0.92 feature additions
 * 
 *    Rev 1.3   29 May 1996 21:15:14   patv
 * bug fixes for v0.91a
 * 
 *    Rev 1.2   01 Sep 1995 17:48:44   patv
 * First GPL release.
 * 
 *    Rev 1.1   30 Jul 1995 20:50:26   patv
 * Eliminated version strings in ipl
 * 
 *    Rev 1.0   02 Jul 1995  8:06:06   patv
 * Initial revision.
 */
/* $EndLog$ */

#define FCB_SUCCESS     0
#define FCB_ERR_NODATA  1
#define FCB_ERR_EOF     3
#define FCB_ERR_WRITE   1
#define D_ALL   D_NORMAL | D_RDONLY | D_HIDDEN | D_SYSTEM | D_DIR | D_ARCHIVE

#ifdef PROTO
fcb FAR *ExtFcbToFcb(xfcb FAR *lpExtFcb);
fcb FAR *CommonFcbInit(xfcb FAR *lpExtFcb, BYTE *pszBuffer, COUNT *pCurDrive);
void FcbNameInit(fcb FAR *lpFcb, BYTE *pszBuffer, COUNT *pCurDrive);
sft FAR *FcbGetSft(COUNT SftIndex);
VOID FcbNextRecord(fcb FAR *lpFcb);
sft FAR *FcbGetFreeSft(WORD FAR *sft_idx);
BOOL FcbFnameMatch(BYTE FAR *s, BYTE FAR *d, COUNT n, COUNT mode);
BOOL FcbCharMatch(COUNT s, COUNT d, COUNT mode);
BOOL FcbCalcRec(xfcb FAR *lpXfcb);
VOID MoveDirInfo(dmatch FAR *lpDmatch, struct dirent FAR *lpDir);
#else
fcb FAR *ExtFcbToFcb();
fcb FAR *CommonFcbInit();
void FcbNameInit();
sft FAR *FcbGetSft();
VOID FcbNextRecord();
sft FAR *FcbGetFreeSft();
BOOL FcbFnameMatch();
BOOL FcbCharMatch();
BOOL FcbCalcRec();
VOID MoveDirInfo();
#endif
	
static dmatch Dmatch;

VOID DosOutputString(BYTE FAR *s)
{
	while(*s != '$')
		DosCharOutput(*s++);
}

static BYTE *con_name = "CON";

int DosCharInputEcho(VOID)
{
	BYTE cb;

	CharReqHdr.r_length = sizeof(request);
	CharReqHdr.r_command = C_INPUT;
	CharReqHdr.r_count = 1;
	CharReqHdr.r_trans = (VOID FAR *)&cb;
	CharReqHdr.r_status = 0;
	execrh((request FAR *)&CharReqHdr, syscon);
	if(CharReqHdr.r_status & S_ERROR)
		return char_error(&CharReqHdr, con_name);
	DosCharOutput(cb);
	return cb;
}


int DosCharInput(VOID)
{
	BYTE cb;

	CharReqHdr.r_length = sizeof(request);
	CharReqHdr.r_command = C_INPUT;
	CharReqHdr.r_count = 1;
	CharReqHdr.r_trans = (VOID FAR *)&cb;
	CharReqHdr.r_status = 0;
	execrh((request FAR *)&CharReqHdr, syscon);
	if(CharReqHdr.r_status & S_ERROR)
		return char_error(&CharReqHdr, con_name);
	return cb;
}


VOID DosDirectConsoleIO(iregs FAR *r)
{
	BYTE buf;

	if(r -> DL == 0xff)
	{
		r -> FLAGS &= ~FLG_ZERO;

		CharReqHdr.r_length = sizeof(request);
		CharReqHdr.r_command = C_ISTAT;
		CharReqHdr.r_status = 0;
		execrh((request FAR *)&CharReqHdr, syscon);
		if(CharReqHdr.r_status & S_ERROR)
		{
			char_error(&CharReqHdr, con_name);
			return;
		}

		if(CharReqHdr.r_status & S_BUSY)
		{
			CharReqHdr.r_length = sizeof(request);
			CharReqHdr.r_command = C_INPUT;
			CharReqHdr.r_count = 1;
			CharReqHdr.r_trans = (VOID FAR *)&buf;
			CharReqHdr.r_status = 0;
			execrh((request FAR *)&CharReqHdr, syscon);
			if(CharReqHdr.r_status & S_ERROR)
			{
				char_error(&CharReqHdr, con_name);
				return;
			}

			r -> AL = buf;
			r -> FLAGS |= FLG_ZERO;
		}

	}
	else
	{
		CharReqHdr.r_length = sizeof(request);
		CharReqHdr.r_command = C_OUTPUT;
		CharReqHdr.r_count = 1;
		CharReqHdr.r_trans = (VOID FAR *)(&buf);
		CharReqHdr.r_status = 0;
		execrh((request FAR *)&CharReqHdr, syscon);
		if(CharReqHdr.r_status & S_ERROR)
			char_error(&CharReqHdr, con_name);
	}
}

/* Console output with printer echo                                     */
VOID DosCharOutput(COUNT c)
{
	BYTE buf = c;

	/* Test for break first                                         */
	if(con_break())
		return;

	/* Now do an output directly to the console                     */
	CharReqHdr.r_length = sizeof(request);
	CharReqHdr.r_command = C_OUTPUT;
	CharReqHdr.r_count = 1;
	CharReqHdr.r_trans = (VOID FAR *)(&buf);
	CharReqHdr.r_status = 0;
	execrh((request FAR *)&CharReqHdr, syscon);
	if(CharReqHdr.r_status & S_ERROR)
		char_error(&CharReqHdr, con_name);
	++scr_pos;

	/* printer echo stuff                                   */
}


VOID DosDisplayOutput(COUNT c)
{
	/* Non-portable construct                                       */
	if(c < ' ' || c == 0x7f)
	{
		switch(c)
		{
		case '\r':
			scr_pos = 0;
			break;

		case 0x7f:
			++scr_pos;
			break;

		case '\b':
			if(scr_pos > 0)
				--scr_pos;
			break;

		case '\t':
			do
				DosCharOutput(' ');
			while(scr_pos & 7);
			return;

		default:
			break;
		}
		DosCharOutput(c);
	}
	else
	{
		DosCharOutput(c);
	}
}


VOID 
FatGetDrvData (COUNT drive, COUNT FAR *spc, COUNT FAR *bps, COUNT FAR *nc, BYTE FAR **mdp)
{
	struct dpb *dpbp;

	/* first check for valid drive                                  */
	if(drive < 0 || drive > NDEVS)
	{
		*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_clsmask;
	*bps = dpbp -> dpb_secsize;

	/* Point to the media desctriptor fotr this drive               */
	*mdp = &(dpbp -> dpb_mdb);
	--(dpbp -> dpb_count);
}

#define PARSE_SEP_STOP          0x01
#define PARSE_DFLT_DRIVE        0x02
#define PARSE_BLNK_FNAME        0x04
#define PARSE_BLNK_FEXT         0x08

#define PARSE_RET_NOWILD        0
#define PARSE_RET_WILD          1
#define PARSE_RET_BADDRIVE      0xff

#ifndef IPL
WORD FcbParseFname(wTestMode, lpFileName, lpFcb)
REG WORD wTestMode;
BYTE FAR **lpFileName;
fcb FAR *lpFcb;
{
	COUNT   nIndex;
	WORD    wRetCode = PARSE_RET_NOWILD;

	/* pjv -- ExtFcbToFcb?                                          */
	/* Start out with some simple stuff first.  Check if we are     */
	/* going to use a default drive specificaton.                   */
	if(!(wTestMode & PARSE_DFLT_DRIVE))
		lpFcb -> fcb_drive = FDFLT_DRIVE;
	if(!(wTestMode & PARSE_BLNK_FNAME))
	{
		for(nIndex = 0; nIndex < FNAME_SIZE; ++nIndex)
			lpFcb -> fcb_fname[nIndex] = ' ';
	}
	if(!(wTestMode & PARSE_BLNK_FEXT))
	{
		for(nIndex = 0; nIndex < FEXT_SIZE; ++nIndex)
			lpFcb -> fcb_fext[nIndex] = ' ';
	}                              

	/* Undocumented behavior, set record number & record size to 0  */
	lpFcb -> fcb_cublock = lpFcb -> fcb_recsiz = 0;

	if(!(wTestMode & PARSE_SEP_STOP))
	{
		*lpFileName = ParseSkipWh(*lpFileName);
		if(TestCmnSeps(*lpFileName))
			++*lpFileName;
	}

	/* Undocumented "feature," we skip white space anyway           */
	*lpFileName = ParseSkipWh(*lpFileName);

	/* Now check for drive specification                            */
	if(*(*lpFileName + 1) == ':')
	{
		REG BYTE Drive = upChar(**lpFileName);

		/* non-portable construct to be changed                 */
		if(Drive < 'A' || Drive > 'Z')
			return PARSE_RET_BADDRIVE;
		Drive -= ('A' - 1);
		if(Drive > nblkdev)
			return PARSE_RET_BADDRIVE;
		else
			lpFcb -> fcb_drive = Drive;
		*lpFileName += 2;
	}

	/* Now to format the file name into the string                  */
	*lpFileName = GetNameField(*lpFileName, (BYTE FAR *)lpFcb -> fcb_fname, FNAME_SIZE, (BOOL *)&wRetCode);

	/* Do we have an extension? If do, format it else return        */
	if(**lpFileName == '.')
		*lpFileName = GetNameField(++*lpFileName, (BYTE FAR *)lpFcb -> fcb_fext, FEXT_SIZE, (BOOL *)&wRetCode);

	return wRetCode ? PARSE_RET_WILD : PARSE_RET_NOWILD;
}


BYTE FAR *
ParseSkipWh (BYTE FAR *lpFileName)
{
	while(*lpFileName == ' ' || *lpFileName == '\t')
		++lpFileName;
	return lpFileName;
}


BOOL 
TestCmnSeps (BYTE FAR *lpFileName)
{
	BYTE *pszTest, *pszCmnSeps = ":<|>+=,";

	for(pszTest = pszCmnSeps; *pszTest != '\0'; ++pszTest)
		if(*lpFileName == *pszTest)
			return TRUE;
	return FALSE;
}

BOOL 
TestFieldSeps (BYTE FAR *lpFileName)
{
	BYTE *pszTest, *pszCmnSeps = "/\"[]<>|.";

	/* Another non-portable construct                               */
	if(*lpFileName <= ' ')
		return TRUE;

	for(pszTest = pszCmnSeps; *pszTest != '\0'; ++pszTest)
		if(*lpFileName == *pszTest)
			return TRUE;
	return FALSE;
}

BYTE FAR *
GetNameField (BYTE FAR *lpFileName, BYTE FAR *lpDestField, COUNT nFieldSize, BOOL *pbWildCard)
{
	COUNT nIndex = 0;
	BYTE cFill = ' ';

	*pbWildCard = FALSE;
	while(*lpFileName != '\0' && !TestFieldSeps(lpFileName) && nIndex< nFieldSize)
	{
		if(*lpFileName == ' ')
			break;
		if(*lpFileName == '*')
		{
			*pbWildCard = TRUE;
			cFill = '?';
			++lpFileName;
			break;
		}
		if(*lpFileName == '?')
			*pbWildCard = TRUE;
		*lpDestField++ = upChar(*lpFileName++);
		++nIndex;
	}

	/* Blank out remainder of field on exit                         */
	for( ; nIndex < nFieldSize; ++nIndex)
		*lpDestField++ = cFill;
	return lpFileName;
}

static sft FAR *FcbGetSft(SftIndex)
COUNT SftIndex;
{
	/* Get the SFT block that contains the SFT      */
	for(lpCurSft = sfthead; lpCurSft != (sfttbl FAR *)-1;
	 lpCurSft = lpCurSft -> sftt_next)
	{
		if(SftIndex < lpCurSft -> sftt_count)
			break;
		else
			SftIndex -= lpCurSft -> sftt_count;
	}

	/* If not found, return an error                */
	if(lpCurSft == (sfttbl FAR *)-1)
		return (sft FAR *)-1;

	/* finally, point to the right entry            */
	return (sft FAR *)&(lpCurSft -> sftt_table[SftIndex]);
}


static VOID FcbNextRecord(lpFcb)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品亚洲人成人网在线播放| 国产精品成人免费在线| 亚洲成人av中文| 精品视频一区三区九区| 日韩国产欧美视频| 日韩欧美国产综合| 精品无人区卡一卡二卡三乱码免费卡| 26uuu亚洲婷婷狠狠天堂| 国产麻豆午夜三级精品| 欧美激情中文字幕一区二区| av电影在线观看不卡| 一个色在线综合| 欧美一区日韩一区| 国产高清在线精品| 一区二区久久久| 日韩美女在线视频| 成人午夜激情视频| 亚洲一区二区欧美日韩| 日韩三级中文字幕| 国产精一区二区三区| 最新热久久免费视频| 欧美日韩成人激情| 国产河南妇女毛片精品久久久| 亚洲色图19p| 精品国产凹凸成av人网站| 成人黄色一级视频| 亚洲444eee在线观看| 国产网红主播福利一区二区| 91亚洲国产成人精品一区二三| 亚洲永久免费av| 国产欧美视频一区二区三区| 欧美在线啊v一区| 国产精品123| 日日夜夜精品视频天天综合网| 国产欧美精品区一区二区三区 | 久久免费偷拍视频| 久久精品人人爽人人爽| 色琪琪一区二区三区亚洲区| 麻豆成人免费电影| 一区二区三区在线免费观看| 久久综合成人精品亚洲另类欧美| 在线免费观看视频一区| 国产美女在线精品| 日韩高清在线一区| 亚洲精品国产无套在线观| 久久亚洲精品国产精品紫薇| 欧美少妇一区二区| av午夜精品一区二区三区| 奇米四色…亚洲| 亚洲成在人线免费| 成人欧美一区二区三区黑人麻豆 | 亚洲丝袜自拍清纯另类| 精品99999| 欧美一卡在线观看| 在线国产亚洲欧美| 91在线视频18| 成人永久aaa| 国产精一区二区三区| 久久99国产精品麻豆| 亚洲一区二区三区激情| 亚洲精品成人天堂一二三| 中文字幕av一区二区三区高| 久久亚洲综合色一区二区三区| 欧美蜜桃一区二区三区| 在线国产电影不卡| 91精彩视频在线观看| 不卡一区二区三区四区| 风间由美一区二区三区在线观看 | 亚洲午夜精品在线| 依依成人综合视频| 亚洲三级电影全部在线观看高清| 久久久久久久综合狠狠综合| 日韩三级av在线播放| 制服丝袜日韩国产| 欧美久久一区二区| 69堂成人精品免费视频| 欧美电影一区二区三区| 自拍偷在线精品自拍偷无码专区| 中文字幕精品一区二区三区精品 | 成人av网站在线观看免费| 国产91在线观看丝袜| 成人小视频免费观看| 成人福利在线看| jvid福利写真一区二区三区| 成人精品视频一区二区三区 | 欧美一区二区网站| 欧美精品久久一区| 欧美一区二区三区成人| 日韩欧美激情在线| 精品国产91乱码一区二区三区 | 日本一区免费视频| 日本一区二区综合亚洲| 中文字幕亚洲电影| 有码一区二区三区| 日韩va亚洲va欧美va久久| 麻豆国产欧美日韩综合精品二区| 国产一区二区三区免费播放| 成人av综合在线| 欧美在线免费播放| 日韩欧美中文字幕精品| 国产欧美日韩三级| 亚洲免费观看在线视频| 日韩国产欧美一区二区三区| 激情综合亚洲精品| www.av亚洲| 91精品视频网| 国产精品色婷婷久久58| 一区二区三区蜜桃网| 久久狠狠亚洲综合| av福利精品导航| 5月丁香婷婷综合| 久久久久国产成人精品亚洲午夜| ...av二区三区久久精品| 午夜在线电影亚洲一区| 国产一区二区三区四区五区美女 | 精品一区二区三区在线观看国产| 成人精品视频一区二区三区| 欧美日韩精品综合在线| 久久亚洲二区三区| 亚洲综合视频在线| 国产精一区二区三区| 欧美性xxxxxxxx| 精品少妇一区二区三区免费观看| 国产精品免费看片| 日韩成人免费看| 99re这里都是精品| 日韩女优制服丝袜电影| 亚洲视频免费看| 精品一区二区三区久久久| 日本黄色一区二区| 久久综合久久99| 午夜影院久久久| 成人免费av在线| 欧美不卡一区二区三区| 亚洲午夜精品网| 99久久久国产精品| 午夜视频在线观看一区二区三区| 国产成人8x视频一区二区| 欧美日韩情趣电影| 中文字幕一区二区三区乱码在线| 久久66热re国产| 这里只有精品电影| 一区二区三区精品视频| 成人动漫av在线| 久久久美女毛片 | 久久99久久久久久久久久久| 欧美性色黄大片手机版| 中文字幕一区二区在线观看| 国产精品456露脸| 精品少妇一区二区三区在线播放| 午夜精品成人在线| 色婷婷综合久色| 国产精品午夜春色av| 国产在线精品一区二区 | 日韩欧美一级精品久久| 亚洲一区二区欧美激情| 92国产精品观看| 自拍偷拍亚洲综合| 国产91对白在线观看九色| 久久久午夜精品| 国产麻豆精品久久一二三| 日韩美女视频在线| 男男成人高潮片免费网站| 91精品在线免费观看| 亚洲国产婷婷综合在线精品| 日本久久精品电影| 亚洲综合久久久| 欧美最猛性xxxxx直播| 亚洲精品中文在线| 色哟哟国产精品| 亚洲人成亚洲人成在线观看图片| 99国产精品视频免费观看| 国产精品久久影院| 99久久免费视频.com| 国产精品三级视频| 豆国产96在线|亚洲| 国产精品伦一区二区三级视频| 成人sese在线| 亚洲精品第一国产综合野| 欧美性猛交xxxxxx富婆| 亚洲第一主播视频| 日韩视频在线一区二区| 韩国毛片一区二区三区| 精品处破学生在线二十三| 奇米精品一区二区三区四区 | 在线观看国产一区二区| 一区二区不卡在线播放 | 久久久精品黄色| 成人av在线电影| 亚洲综合激情小说| 欧美一级片在线| 国产精品一级片在线观看| 国产精品电影一区二区| 欧美色中文字幕| 九色综合狠狠综合久久| 国产精品久久久久久久久快鸭 | 久久精品国产网站| 国产亚洲成年网址在线观看| 99精品视频一区二区| 色乱码一区二区三区88|