📄 dir.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 + -