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

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

?? dir.c

?? Free Dos 源代碼 操作系統 可以參照學習操作系統
?? C
字號:
/****************************************************************/
/*								*/
/*			      dir.c				*/
/*								*/
/*		        DOS "dir" Command 			*/
/*								*/
/*			 November 6, 1991			*/
/*								*/
/*			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.					*/
/****************************************************************/


/* $Logfile:   C:/dos-c/src/command/dir.c_v  $ */

/* $Log:   C:/dos-c/src/command/dir.c_v  $ 
 * 
 *    Rev 1.4   31 Jan 1998  8:12:26   patv
 * Put preprocessor switch for version strings and changed log strings
 * 
 *    Rev 1.3   22 Jan 1998  4:51:42   patv
 * Fixed bug in bytes free calculation.
 * 
 *    Rev 1.2   29 Aug 1996 13:07:00   patv
 * Bug fixes for v0.91b
 * 
 *    Rev 1.1   01 Sep 1995 18:04:32   patv
 * First GPL release.
 * 
 *    Rev 1.0   02 Jul 1995 10:01:40   patv
 * Initial revision.
 */
/* $EndLog$ */

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

#ifdef VERSION_STRINGS
static BYTE *RcsId = "$Header:   C:/dos-c/src/command/dir.c_v   1.4   31 Jan 1998  8:12:26   patv  $";
#endif

#ifdef PROTO
COUNT chk_line(COUNT);
#else
COUNT chk_line();
#endif


#define D_ALL	D_NORMAL | D_RDONLY | D_HIDDEN | D_SYSTEM | D_DIR | D_ARCHIVE


BOOL dir(argc, argv)
COUNT argc;
BYTE *argv[];
{
	WORD count = 0, disp_line, columns = 0;
	ULONG total = 0l;
	BYTE vid[67], *ext;
	BYTE cudir[67];
	BYTE sdrive[2];
	dmatch dmp;
	COUNT at_mask, at_pat;
	UCOUNT free_clst, sec_size, clst_size, n_clst;
	BOOL wflag, pflag, lflag, bflag;
	COUNT driveno = -1, cudrvno;
	BYTE pattern[MAX_CMDLINE] = "", formatted[MAX_CMDLINE];
	BYTE path[MAX_CMDLINE] = "", sopt[MAX_CMDLINE] = "";

	/* parse for options						*/
	wflag = pflag = lflag = bflag = count = FALSE;
	dosopt("$d$p*[a:wplb]+", (BYTE FAR *)tail,
		&driveno, path, pattern, sopt, &wflag, &pflag, &lflag, &bflag);

	/* Set defaults for file name and path if not supplied.		*/
	if(strcmp(path, "") == 0)
		strcpy(path, ".");
	if(strcmp(pattern,"") == 0)
		strcpy(pattern,"*.*");

	/* Intialize the dta to put the dir info into			*/
	DosSetDta((BYTE FAR *)&dmp);

	/* Get the current drive, so we can switch back.		*/
	cudrvno = DosGetDrive();

	/* Switch to the requested directory to list			*/
	DosSetDrive(driveno < 0 ? cudrvno : driveno);

	/* Get the current directory. Note that the DOS system call	*/
	/* does not return drive or leading '\', so we need to add	*/
	/* them.							*/
	cudir[0] = '\\';
	DosPwd(DosGetDrive() + 1, (BYTE FAR *)&cudir[1]);

	/* Change to the path and then test the file name. If it is a	*/
	/* directory, switch to it, because the user wants a listing of	*/
	/* its content.							*/
	if(DosCd((BYTE FAR *)path) != SUCCESS)
	{
		error_message(INV_DIR);
		DosSetDrive(cudrvno);
		return FALSE;
	}
	if(!iswild(pattern))
	{
		if(DosFindFirst(D_DIR, (BYTE FAR *)pattern) != SUCCESS)
		{
			error_message(FILE_NOT_FOUND);
			return TRUE;
		}
		else
		{
			if(dmp.dm_attr_fnd & D_DIR)
			{
				if(DosCd((BYTE FAR *)pattern) != SUCCESS)
				{
					error_message(INV_DIR);
					DosSetDrive(cudrvno);
					return FALSE;
				}
				else
					strcpy(pattern, "*.*");
			}
		}
	}


	/* Get the new directory.					*/
	path[0] = '\\';
	DosPwd(DosGetDrive() + 1, (BYTE FAR *)&path[1]);

	/* Intialize the dta to put the dir info into			*/
	DosSetDta((BYTE FAR *)&dmp);

	/* Get the volume label				*/
	if(DosFindFirst(D_VOLID, (BYTE FAR *)"*.*") != SUCCESS)
		sprintf(vid, "has no label");
	else
	{
		for(ext = dmp.dm_name; *ext != NULL; ext++)
			if(*ext == '.')
			{
				*ext++ = NULL;
				break;
			}
		sprintf(vid, "is %s%s", dmp.dm_name, ext);
	}

	/* Display the header, if not turned off			*/
	sdrive[0] = 'A' + DosGetDrive();
	sdrive[1] = NULL;
	if(bflag)
		disp_line = 0;
	else
		disp_line = 4;
	if(!bflag)
	{
		printf("\n Volume in drive %s %s\n", sdrive, vid);
		printf(" Directory of %s:%s\n\n", sdrive, path);
	}

	/* Build the attribute mask and pattern				*/
	at_mask = *sopt == '\0' ? D_RDONLY | D_HIDDEN | D_SYSTEM : 0;
	at_pat = 0;
	for(ext = sopt; *ext != '\0'; ++ext)
	{
		if(*ext == '-')
		{
			++ext;
			switch(tolower(*ext))
			{
			case 'a':
				at_mask |= D_ARCHIVE;
				at_pat &= ~D_ARCHIVE;
				break;

			case 'd':
				at_mask |= D_DIR;
				at_pat &= ~D_DIR;
				break;

			case 'r':
				at_mask |= D_RDONLY;
				at_pat &= ~D_RDONLY;
				break;

			case 'h':
				at_mask |= D_HIDDEN;
				at_pat &= ~D_HIDDEN;
				break;

			case 's':
				at_mask |= D_SYSTEM;
				at_pat &= ~D_SYSTEM;
				break;
			}
		}
		else
		{
			switch(tolower(*ext))
			{
			case 'a':
				at_mask |= D_ARCHIVE;
				at_pat |= D_ARCHIVE;
				break;

			case 'd':
				at_mask |= D_DIR;
				at_pat |= D_DIR;
				break;

			case 'r':
				at_mask |= D_RDONLY;
				at_pat |= D_RDONLY;
				break;

			case 'h':
				at_mask |= D_HIDDEN;
				at_pat |= D_HIDDEN;
				break;

			case 's':
				at_mask |= D_SYSTEM;
				at_pat |= D_SYSTEM;
				break;
			}
		}
	}

	if(DosFindFirst(D_ALL, (BYTE FAR *)pattern) != SUCCESS)
	{
		error_message(FILE_NOT_FOUND);
		return TRUE;
	}

	if(wflag)
	{
		do
		{
			char *p;

			if((*sopt != 0) && !((dmp.dm_attr_fnd & at_mask) == at_pat))
				continue;
			if(dmp.dm_attr_fnd & D_DIR)
			{
				if(bflag && *dmp.dm_name == '.')
					continue;
				sprintf(formatted, "[%s]", dmp.dm_name);
				if(lflag)
					strlwr(formatted);
				printf("%-14s ", formatted);
				++columns;
				if(columns == 5)
				{
					if(pflag)
						disp_line = chk_line(disp_line);
					printf("\n");
					columns = 0;
				}
			}
			else
			{
				ext = "   ";
				sprintf(formatted, "%s", dmp.dm_name);
				if(lflag)
					strlwr(formatted);
				printf("%-15s",formatted);
				++columns;
				if(columns == 5)
				{
					if(pflag)
						disp_line = chk_line(disp_line);
					printf("\n");
					columns = 0;
				}
			}
		++count;
		total += dmp.dm_size;
		}
		while(DosFindNext() == SUCCESS);
	}
	else
	{
		do
		{
			WORD hour = TM_HOUR(dmp.dm_time);

			if((*sopt != 0) && !((dmp.dm_attr_fnd & at_mask) == at_pat))
				continue;
			if(dmp.dm_name[0] == '.')
				ext = "";
			else
				for(ext = dmp.dm_name; *ext != NULL; ext++)
				{
					if(*ext == '.')
					{
						*ext++ = NULL;
						break;
					}
				}
			if(lflag)
			{
				strlwr(dmp.dm_name);
				strlwr(ext);
			}
			if(dmp.dm_attr_fnd & D_DIR)
			{
				if(bflag && *dmp.dm_name == '.')
					continue;
				if(pflag)
					disp_line = chk_line(disp_line);
				printf(bflag ? "\n%s.%s" : "\n   %8s %3s  <DIR>      %-2d-%-02d-%-02d  %-2d:%-02d%s",
					dmp.dm_name, ext,
					DT_MONTH(dmp.dm_date),
					DT_DAY(dmp.dm_date),
					(DT_YEAR(dmp.dm_date) + 1980) % 100,
					hour > 12 ? hour - 12 : (hour == 0) ? 12 : hour,
					TM_MIN(dmp.dm_time),
					hour >= 12 ? "p" : "a");
			}
			else
			{
				if(pflag)
					disp_line = chk_line(disp_line);
				printf(bflag ? "\n%s.%s" : "\n   %8s %3s %-10ld  %-2d-%-02d-%-02d  %-2d:%-02d%s",
					dmp.dm_name, ext, dmp.dm_size,
					DT_MONTH(dmp.dm_date),
					DT_DAY(dmp.dm_date),
					(DT_YEAR(dmp.dm_date) + 1980) % 100,
					hour > 12 ? hour - 12 : (hour == 0) ? 12 : hour,
					TM_MIN(dmp.dm_time),
					hour >= 12 ? "p" : "a");
			}
			++count;
			total += dmp.dm_size;
		}
		while(DosFindNext() == SUCCESS);
	}

	/* /b does not print any statistics				*/
	if(bflag)
	{
		printf("\n\n");
	}
	else
	/* Now print the available free bytes (It's really clusters	*/
	/* translated to bytes.						*/
	{
		DosFree(0, (COUNT FAR *)&clst_size,(COUNT FAR *) &free_clst, (COUNT FAR *)&sec_size, (COUNT FAR *)&n_clst);
		printf("\n  %-10d file(s)   %-10ld bytes\n", count, total);
		printf(  "                       %-10lu bytes free\n\n",
			(ULONG)free_clst
			* (ULONG)sec_size
			* (ULONG)clst_size);
	}

	/* Change back to the current drive and directory, so that we	*/
	/* look like we just did a listing without all the gymnastics.	*/
	if((DosCd((BYTE FAR *)cudir)) != SUCCESS)
	{
		DosSetDrive(cudrvno);
		error_message(INV_DIR);
		return FALSE;
	}
	else
	{
		DosSetDrive(cudrvno);
		return TRUE;
	}
}

static COUNT chk_line(disp_line)
COUNT disp_line;
{
	BYTE line[MAX_CMDLINE];

	if(disp_line == 23)
	{
		printf("\nStrike a key when ready . . .");
		DosRead(STDIN, line, MAX_CMDLINE);
		return 0;
	}
	return ++disp_line;
}




?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
天天色 色综合| 国产亚洲制服色| 丝袜脚交一区二区| 8x福利精品第一导航| 五月天亚洲婷婷| 日韩视频免费观看高清完整版在线观看| 偷拍一区二区三区四区| 日韩一区二区电影在线| 国产盗摄女厕一区二区三区| 国产亚洲一区二区三区四区| 91丝袜美腿高跟国产极品老师 | 久久精品久久综合| 日韩女优av电影| 成人综合婷婷国产精品久久蜜臀| 国产精品乱码久久久久久| 精品国产乱码久久久久久夜甘婷婷 | 色成人在线视频| 国产精品久久一级| 欧美老肥妇做.爰bbww| 久久99久久99小草精品免视看| 国产亚洲欧美一区在线观看| 色综合天天在线| 欧美aaaaa成人免费观看视频| 久久久午夜电影| 色婷婷久久久亚洲一区二区三区| 婷婷久久综合九色综合绿巨人| 久久嫩草精品久久久久| 色婷婷一区二区三区四区| 美女免费视频一区二区| 国产精品麻豆一区二区| 欧美高清hd18日本| 成人免费视频网站在线观看| 午夜视频一区在线观看| 亚洲国产精品ⅴa在线观看| 欧美日韩在线精品一区二区三区激情 | 狠狠色丁香久久婷婷综合丁香| 久久久久88色偷偷免费| 欧美色综合天天久久综合精品| 久久狠狠亚洲综合| 亚洲资源中文字幕| 久久奇米777| 欧美在线|欧美| 成人精品鲁一区一区二区| 天天综合网 天天综合色| 国产精品黄色在线观看| 欧美精品一区二区三区蜜桃视频| 欧美性三三影院| 99国产精品久| 成人永久免费视频| 国产综合色精品一区二区三区| 无码av中文一区二区三区桃花岛| 亚洲欧洲成人自拍| 久久精品日产第一区二区三区高清版| 欧美日本在线观看| 在线中文字幕一区二区| 成人网男人的天堂| 精品捆绑美女sm三区| av在线播放不卡| 成人av在线一区二区三区| 精品亚洲aⅴ乱码一区二区三区| 亚洲国产成人av网| 亚洲国产综合视频在线观看| 中文字幕在线不卡国产视频| 国产日韩影视精品| 久久久久久毛片| 欧美精品一区二区在线观看| 日韩欧美国产电影| 欧美va亚洲va在线观看蝴蝶网| 欧美日韩亚洲丝袜制服| 91久久香蕉国产日韩欧美9色| 91在线视频免费观看| jiyouzz国产精品久久| 成人午夜视频福利| 成人av手机在线观看| 成人精品视频.| 91丨国产丨九色丨pron| 91亚洲国产成人精品一区二区三 | 制服丝袜av成人在线看| 欧美日韩国产一级片| 欧美日韩午夜影院| 欧美丰满一区二区免费视频| 欧美三级日韩三级国产三级| 精品视频免费在线| 欧美一区二区三区精品| 日韩欧美国产系列| 欧美精品一区二区久久久| 久久综合九色综合97婷婷女人| 精品国内二区三区| 国产欧美va欧美不卡在线| 中文字幕 久热精品 视频在线| 国产夜色精品一区二区av| 欧美国产成人在线| 亚洲欧美日韩国产成人精品影院| 亚洲美腿欧美偷拍| 偷窥少妇高潮呻吟av久久免费| 日韩精品免费专区| 精油按摩中文字幕久久| 国产成人午夜精品5599| 色综合视频在线观看| 在线电影院国产精品| 精品粉嫩超白一线天av| 中日韩免费视频中文字幕| 亚洲黄色性网站| 麻豆成人91精品二区三区| 国产成人日日夜夜| 在线免费观看一区| 欧美成人精品高清在线播放| 国产精品乱人伦中文| 亚洲国产成人精品视频| 九一九一国产精品| 91丨九色丨国产丨porny| 欧美一区二区在线观看| 欧美国产乱子伦| 视频一区欧美日韩| 福利电影一区二区三区| 欧美日韩mp4| 中文在线免费一区三区高中清不卡| 亚洲欧美日韩综合aⅴ视频| 奇米影视一区二区三区小说| 高清视频一区二区| 91精品在线免费观看| 国产精品久久久久久久久免费丝袜| 亚洲香蕉伊在人在线观| 粉嫩aⅴ一区二区三区四区五区| 欧洲色大大久久| 欧美激情一区在线| 日韩av成人高清| 色狠狠av一区二区三区| 国产嫩草影院久久久久| 日韩电影在线一区二区三区| 91麻豆视频网站| 久久精品一区四区| 日韩不卡在线观看日韩不卡视频| 一区二区三区四区在线| 国产一区二区女| 精品视频一区三区九区| 国产精品乱码人人做人人爱| 国内久久精品视频| 在线91免费看| 一区二区三区在线不卡| 成人免费视频caoporn| 26uuu久久天堂性欧美| 亚洲电影你懂得| 色综合天天做天天爱| 国产日韩综合av| 国产精品亚洲专一区二区三区| 在线成人免费视频| 亚洲一卡二卡三卡四卡| 91一区在线观看| 日韩理论片在线| 成人性生交大片| 国产欧美日产一区| 国产精品一区二区三区网站| 欧美一区二区三区免费观看视频| 亚洲在线成人精品| 91免费国产在线观看| 中文字幕亚洲一区二区va在线| 国产伦精一区二区三区| 久久午夜色播影院免费高清| 免费成人美女在线观看| 717成人午夜免费福利电影| 亚洲国产精品一区二区www在线| 9色porny自拍视频一区二区| 国产农村妇女毛片精品久久麻豆 | 精品一区二区综合| 欧美一级黄色大片| 蜜桃久久久久久| 日韩一区二区三区视频| 日本不卡视频在线观看| 日韩一区二区在线看片| 另类中文字幕网| 精品国产免费久久| 激情综合一区二区三区| 久久综合久久综合久久综合| 国产麻豆精品视频| 国产精品久久久久天堂| caoporn国产精品| 亚洲综合色自拍一区| 精品婷婷伊人一区三区三| 婷婷中文字幕一区三区| 欧美xxxxx裸体时装秀| 国产在线一区观看| 国产精品美女久久久久久久久| eeuss鲁片一区二区三区在线观看| 综合精品久久久| 欧美日韩激情一区二区三区| 男男视频亚洲欧美| 国产亚洲人成网站| 成人综合在线视频| 一个色在线综合| 欧美xxxxx裸体时装秀| 不卡视频在线看| 亚洲观看高清完整版在线观看| 4438成人网| 成人av先锋影音| 亚洲第一精品在线| 久久久久国产精品人| 91久久免费观看| 免费av网站大全久久| 国产精品热久久久久夜色精品三区|