📄 fat32listdirectory.lst
字号:
159 =2 WORD RsvdSecCnt; //保留扇区数 0x20
160 =2 BYTE NumFATs; //FAT表个数 2
161 =2 DWORD RootClus; //根目录开始的簇
162 =2 DWORD ClusSec; //簇开始的扇区
163 =2 DWORD FATSz; //FAT表大小(扇区)
164 =2 DWORD FATSec; //FAT表开始扇区
165 =2 DWORD FSISec; //FSI所在扇区
166 =2 DWORD FSIFreeCount; //空闲簇数
167 =2 DWORD FSINxtFree; //空闲簇搜索指针
168 =2 };
169 =2
170 =2 struct FCBStr
171 =2 {
172 =2 CHAR FileName[12]; //文件名
173 =2 DWORD Size; //文件大小
174 =2 DWORD FirstCluster; //第一个簇
175 =2 DWORD LastCluster; //最近一次读到的簇号
176 =2 DWORD ClusSecCnt; //当前簇扇区计数
177 =2 DWORD ByteCnt; //当前字节计数
178 =2 };
179 =2
180 =2 struct FATStr
181 =2 {
182 =2 DWORD Sector;
183 =2 DWORD FAT[128];
184 =2 };
185 =2
186 =2 #ifndef _LIBRARY_DEFINE
C51 COMPILER V6.23a FAT32LISTDIRECTORY 12/24/2004 00:11:42 PAGE 10
=2 xdata BYTE DiskBuffer[512];
=2
=2 xdata struct sDPTStr sDPT[4];
=2 xdata struct FAT32Str FAT32;
=2 xdata struct FCBStr FCB[FAT32_MAX_FCB];
=2 xdata CHAR LongFileName[256];
=2 xdata struct FATStr FAT;
=2 xdata struct DPTStr *DPT; //分区表结构指针
=2 xdata struct BootSecStr *BOOTSEC; //引导扇区结构指针
=2 xdata struct FAT32FSInfoStr *FSI; //FAT32扩展信息
=2 xdata struct FAT32SDirStr *sDIR; //FAT目录结构指针
=2 xdata struct FAT32LDirStr *lDIR; //FAT目录结构指针
=2 #endif
200 =2 #endif
201 =2
202 =2 extern xdata BYTE DiskBuffer[512];
203 =2
204 =2 extern xdata struct sDPTStr sDPT[4];
205 =2 extern xdata struct FAT32Str FAT32;
206 =2 extern xdata struct FCBStr FCB[FAT32_MAX_FCB];
207 =2 extern xdata CHAR LongFileName[256];
208 =2 extern xdata struct FATStr FAT;
209 =2 extern xdata struct DPTStr *DPT; //分区表结构指针
210 =2 extern xdata struct BootSecStr *BOOTSEC; //引导扇区结构指针
211 =2 extern xdata struct FAT32FSInfoStr *FSI; //FAT32扩展信息
212 =2 extern xdata struct FAT32SDirStr *sDIR; //FAT目录结构指针
213 =2 extern xdata struct FAT32LDirStr *lDIR; //FAT目录结构指针
214 =2
215 =2 extern void FAT32Init(void);
216 =2 extern BYTE FAT32MountPartition(void);
217 =2 extern BYTE FAT32MountVolumeID(BYTE Partition);
218 =2 extern BYTE FAT32GetDirName(WORD SecNum);
219 =2 extern void FAT32GetPartLongName(struct FAT32LDirStr *ldp,CHAR *name);
220 =2 extern DWORD FAT32DiskSize(void);
221 =2 extern DWORD FAT32DiskFreeSize(void);
222 =2 extern BYTE FAT32FindDIREntry(CHAR *DirName);
223 =2 extern void FAT32ReadCluster(DWORD *Cluster);
224 =2 extern BYTE FAT32ChangeDirectory(CHAR *DirName);
225 =2 extern BYTE FAT32ListDirectory(void);
226 =2 extern DWORD FAT32NextCluster(DWORD CurrentCluster);
227 =2 extern BYTE FAT32OpenFile(CHAR *filename);
228 =2 extern void FAT32CloseFile(BYTE fp);
229 =2 extern WORD FAT32ReadFile(BYTE fp);
11 =1
12 =1
3 #endif
4
5 BYTE FAT32ListDirectory(void);
6
7 BYTE FAT32ListDirectory(void)
8 {
9 1 xdata BYTE i,j,k,m,n;
10 1 xdata DWORD chain;
11 1 xdata CHAR temp[27];
12 1
13 1 // filename=(CHAR *)malloc(sizeof(j*26+1));
14 1
15 1 chain=FAT32.CurrentDirectory;
16 1 FAT32.ClusSecCnt=0;
17 1 while(chain!=0x0fffffff)
18 1 {
19 2 FAT32ReadCluster(&chain);
C51 COMPILER V6.23a FAT32LISTDIRECTORY 12/24/2004 00:11:42 PAGE 11
20 2 for (i=0;i<16;i++)
21 2 {
22 3 if (sDIR[i].Name[0]==0xe5||sDIR[i].Name[0]==0x00) continue; //空目录项跳过
23 3 MEMSwap32(sDIR[i].FileSize);
24 3 if ((sDIR[i].Attr&FAT32_ATTR_LONG_NAME_MASK)==FAT32_ATTR_LONG_NAME)
25 3 //长文件名
26 3 {
27 4 j=lDIR[i].Ord - FAT32_LAST_LONG_ENTRY;
28 4 LongFileName[0]=0;n=0;
29 4 for(;j>0;j--)
30 4 {
31 5 FAT32GetPartLongName(lDIR+i,temp);
32 5 m=strlen((char *)temp);
33 5 k=m+n;
34 5 for(;n>0;n--)
35 5 LongFileName[m+n]=LongFileName[n];
36 5 LongFileName[m+n]=LongFileName[n];
37 5 m--;
38 5 for(;m>0;m--)
39 5 LongFileName[m]=temp[m];
40 5 LongFileName[m]=temp[m];
41 5 n=k;
42 5 i++;
43 5 if (i==16)
44 5 {
45 6 FAT32ReadCluster(&chain);
46 6 i=0;
47 6 }
48 5 }
49 4 printf("%s\t",LongFileName);
50 4 if (sDIR[i].Attr&FAT32_ATTR_DIRECTORY) printf("\t<DIR>"); else printf("\t<FILE>");
51 4 printf("\t%ld",MEMSwap32(sDIR[i].FileSize));
52 4 printf("\n");
53 4 }
54 3 else
55 3 {
56 4 //短文件名
57 4 if (sDIR[i].Name[0]!=0xe5&&sDIR[i].Name[0]!=0x00)
58 4 {
59 5 if (sDIR[i].Attr&FAT32_ATTR_VOLUME_ID)
60 5 printf("Driver Volume:");
61 5 for(j=0;j<11;j++)
62 5 printf("%c",sDIR[i].Name[j]);
63 5 if (sDIR[i].Attr&FAT32_ATTR_DIRECTORY) printf("\t<DIR>"); else printf("\t<FILE>");
64 5 printf("\t%ld",MEMSwap32(sDIR[i].FileSize));
65 5 printf("\n");
66 5 }
67 4 }
68 3 }
69 2 }
70 1 return(0);
71 1 }
C51 COMPILER V6.23a FAT32LISTDIRECTORY 12/24/2004 00:11:42 PAGE 12
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION FAT32ListDirectory (BEGIN)
; SOURCE LINE # 7
; SOURCE LINE # 8
; SOURCE LINE # 15
0000 900000 E MOV DPTR,#FAT32+01H
0003 E0 MOVX A,@DPTR
0004 FC MOV R4,A
0005 A3 INC DPTR
0006 E0 MOVX A,@DPTR
0007 FD MOV R5,A
0008 A3 INC DPTR
0009 E0 MOVX A,@DPTR
000A FE MOV R6,A
000B A3 INC DPTR
000C E0 MOVX A,@DPTR
000D FF MOV R7,A
000E 900000 R MOV DPTR,#chain
0011 120000 E LCALL ?C?LSTXDATA
; SOURCE LINE # 16
0014 E4 CLR A
0015 900000 E MOV DPTR,#FAT32
0018 F0 MOVX @DPTR,A
0019 ?C0001:
; SOURCE LINE # 17
0019 74FF MOV A,#0FFH
001B FF MOV R7,A
001C FE MOV R6,A
001D FD MOV R5,A
001E 7C0F MOV R4,#0FH
0020 900000 R MOV DPTR,#chain
0023 E0 MOVX A,@DPTR
0024 F8 MOV R0,A
0025 A3 INC DPTR
0026 E0 MOVX A,@DPTR
0027 F9 MOV R1,A
0028 A3 INC DPTR
0029 E0 MOVX A,@DPTR
002A FA MOV R2,A
002B A3 INC DPTR
002C E0 MOVX A,@DPTR
002D FB MOV R3,A
002E C3 CLR C
002F 120000 E LCALL ?C?ULCMP
0032 7003 JNZ $ + 5H
0034 020000 R LJMP ?C0002
; SOURCE LINE # 18
; SOURCE LINE # 19
0037 7B01 MOV R3,#01H
0039 7A00 R MOV R2,#HIGH chain
003B 7900 R MOV R1,#LOW chain
003D 120000 E LCALL _FAT32ReadCluster
; SOURCE LINE # 20
0040 E4 CLR A
0041 900000 R MOV DPTR,#i
0044 F0 MOVX @DPTR,A
0045 ?C0003:
0045 900000 R MOV DPTR,#i
0048 E0 MOVX A,@DPTR
0049 FF MOV R7,A
C51 COMPILER V6.23a FAT32LISTDIRECTORY 12/24/2004 00:11:42 PAGE 13
004A C3 CLR C
004B 9410 SUBB A,#010H
004D 50CA JNC ?C0001
; SOURCE LINE # 21
; SOURCE LINE # 22
004F 900000 E MOV DPTR,#sDIR
0052 E0 MOVX A,@DPTR
0053 FB MOV R3,A
0054 A3 INC DPTR
0055 E0 MOVX A,@DPTR
0056 FA MOV R2,A
0057 A3 INC DPTR
0058 E0 MOVX A,@DPTR
0059 F9 MOV R1,A
005A 75F020 MOV B,#020H
005D EF MOV A,R7
005E A4 MUL AB
005F F582 MOV DPL,A
0061 85F083 MOV DPH,B
0064 120000 E LCALL ?C?CLDOPTR
0067 FF MOV R7,A
0068 64E5 XRL A,#0E5H
006A 7003 JNZ $ + 5H
006C 020000 R LJMP ?C0005
006F EF MOV A,R7
0070 7003 JNZ $ + 5H
0072 020000 R LJMP ?C0005
0075 ?C0006:
; SOURCE LINE # 23
0075 900000 R MOV DPTR,#i
0078 E0 MOVX A,@DPTR
0079 75F020 MOV B,#020H
007C A4 MUL AB
007D FF MOV R7,A
007E 900000 E MOV DPTR,#sDIR
0081 E0 MOVX A,@DPTR
0082 FB MOV R3,A
0083 A3 INC DPTR
0084 E0 MOVX A,@DPTR
0085 FA MOV R2,A
0086 A3 INC DPTR
0087 E0 MOVX A,@DPTR
0088 2F ADD A,R7
0089 F9 MOV R1,A
008A EA MOV A,R2
008B 35F0 ADDC A,B
008D FA MOV R2,A
008E 90001C MOV DPTR,#01CH
0091 120000 E LCALL ?C?LLDOPTR
0094 120000 E LCALL _MEMSwap32
; SOURCE LINE # 24
0097 900000 R MOV DPTR,#i
009A E0 MOVX A,@DPTR
009B 75F020 MOV B,#020H
009E A4 MUL AB
009F FF MOV R7,A
00A0 900000 E MOV DPTR,#sDIR
00A3 E0 MOVX A,@DPTR
00A4 FB MOV R3,A
00A5 A3 INC DPTR
00A6 E0 MOVX A,@DPTR
00A7 FA MOV R2,A
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -