⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dir.c

📁 这是个重量级的东西
💻 C
字号:
/*
	dir.c copyright by Robin @2004.7.2
*/

#include "..\typedef\type.h"

#include "..\file\file.h"
#include "..\file\fat.h"
#include "..\file\fat16.h"
#include "..\hd\hd.h"
#include "txstdio.h"

#include "memory.h"

#define printf kprintf

extern PVOL CurVol;
extern DWORD CurDir;

void DirUsage();
void DirAll(PVOL pVol,DWORD dwCurDir);

int Dir(int argc,char ** argv)
{
	if(argc == 1){
		DirAll(CurVol,CurDir);
		return 1;
	}
	return 1;
}

void DirAll(PVOL pVol,DWORD dwCurDir)
{
	PFATV pFATV = 0;
	DAP dap;
	char buf[512];
	PDIRENTRY pDir = 0;
	char name[16];
	DWORD i,j;

	DWORD dwFileCnt = 0;
	DWORD dwDirCnt	= 0;
	DWORD cluster	= 0;
	DWORD dwSector	= 0;
	PFATPB pFATParam= 0;
	DWORD sector	= 0;
	DWORD secnum	= 0;
	DWORD secoff	= 0;
	DWORD done		= 0;


	dap.dwSecCnt	= 1;
	dap.pBuffer		= buf;
	pFATV = (PFATV)(pVol->dwVolParam);
	pFATParam = (PFATPB)(pVol->dwVolParam);

	if( dwCurDir == 0)
	{
		dwCurDir = pFATV->FATParamBlk.dwRootDirSec;
	for( i = 0 ; i < pFATV->FATParamBlk.dwRootDirSectors ; i++)
	{
		dap.dwDiskAddr	= dwCurDir + i;

		//printf("dir reading...\n");
		HDRead(pVol->dwDevID,&dap);
		//HDRead(0,&dap);
		//printf("dir read complete!\n");
		pDir = (PDIRENTRY)buf;

		for ( j = 0 ; j < 16  ; j++)
		{
			//printf("dir free infomation : 0x%02x\n",pDir[j].dir_Name[0] & 0xff);
			if(pDir[j].dir_Name[0] == 0x00)
				goto sum;
			if(pDir[j].dir_Name[0] == 0xe5)
				continue;
			memcpy(name,pDir[j].dir_Name,11);
			name[11] = 0;
			if(pDir[j].dir_Attr & 0x10){
				dwDirCnt++;
				printf("Fst Clus: %8d\t  <DIR>          \tName : %s\n",
					pDir[j].dir_FstClusHI * 0x10000 + pDir[j].dir_FstClusLO,
					name);
			}
			else{
				dwFileCnt++;
				printf("Fst Clus: %8d\tLength: %8d\tName : %s\n",
					pDir[j].dir_FstClusHI * 0x10000 + pDir[j].dir_FstClusLO,
					pDir[j].dir_FileSize,
					name);
			}
		}
	}
	}
	else
	{
		cluster = dwCurDir;
		for(;;)
		{
			dwSector = FATFirstSectorofCluster16(cluster,pFATParam) + pFATParam->dwVolStart;		
			
			for( i = 0 ; i < pFATParam->dwSecPerClus ; i++)
			{
				dap.dwDiskAddr	= dwSector + i;
		
				HDRead(pFATParam->dwDeviceID,&dap);
				pDir = (PDIRENTRY)buf;
				for( j = 0 ; j < 16 ; j++)
				{
					if(pDir[j].dir_Name[0] == 0x00)
						goto sum;
					if(pDir[j].dir_Name[0] == 0xe5)
						continue;
					memcpy(name,pDir[j].dir_Name,11);
					name[11] = 0;
					if(pDir[j].dir_Attr & 0x10)
					{
						dwDirCnt++;
						printf("Fst Clus: %8d\t  <DIR>          \tName : %s\n",
							pDir[j].dir_FstClusHI * 0x10000 + pDir[j].dir_FstClusLO,
							name);
					}
					else
					{
						dwFileCnt++;
						printf("Fst Clus: %8d\tLength: %8d\tName : %s\n",
							pDir[j].dir_FstClusHI * 0x10000 + pDir[j].dir_FstClusLO,
							pDir[j].dir_FileSize,
							name);
					}
				}
		
			}
			sector = FATOffset16(cluster);
			secnum = FATSecNum16(sector,pFATParam);
			secoff = FATEntOffset16(sector,pFATParam);
			cluster	= FATClusEntryVal16(secnum,secoff,(long)pFATParam);
			printf("entry value : 0x%04x\n",cluster & 0xffff);
			if(done == 1)
				break;
			if(cluster > 0xfff8)
				done = 1;
		}
	}
sum:
	printf("Device ID : %x,current sector : %d \n",pFATV->FATParamBlk.dwDeviceID,dwCurDir);
	printf("\tfile count: %d\n\tdir count: %d\n",dwFileCnt,dwDirCnt);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -