📄 fatchangedirectory.lst
字号:
50 =2 #define FAT_CLUSTER_END16 0xffff //簇链终点
51 =2 #define FAT_CLUSTER_END12 0xfff //簇链终点
52 =2 #define FAT_CLUSTER_RESERVED32 0xfffffff6 //保留簇
53 =2 #define FAT_CLUSTER_RESERVED16 0xfff6 //保留簇
54 =2 #define FAT_CLUSTER_RESERVED12 0xff6 //保留簇
55 =2 #define FAT_CLUSTER_BAD32 0xfffffff7 //坏簇
56 =2 #define FAT_CLUSTER_BAD16 0xfff7 //坏簇
57 =2 #define FAT_CLUSTER_BAD12 0xff7 //坏簇
58 =2
59 =2 #define FAT_MASK_FAT32 0x0fffffff
60 =2 #define FAT_MASK_FAT16 0x0000ffff
61 =2 #define FAT_MASK_FAT12 0x00000fff
62 =2
63 =2 #define FAT_MAX_PARTITIONS 0x10
64 =2 //#define IO_ERROR 0x00 //遇到io错误
65 =2 //#define NO_IO_ERROR 0x01 //没有遇到io错误
66 =2
67 =2 //计算指定簇的开始扇区号
68 =2 #define ClusterToSector(X) FAT.ClusSec + (X - 2) * FAT.SecPerClus
69 =2
70 =2 struct StorageMediaStr
71 =2 {
72 =2 WORD BytesPerSec; //每扇区字节数
73 =2 DWORD TotalSectors; //总扇区数
74 =2 BYTE TotalPartitions; //分区数
75 =2 BYTE CurrentPartition; //当前分区
76 =2 BYTE (*ReadSector)(DWORD Sector,BYTE *Buffer);
77 =2 BYTE (*WriteSector)(DWORD Sector,BYTE *Buffer);
78 =2 };
79 =2
80 =2 struct BootSecFAT16Str //引导扇区 FAT16 扩展结构
81 =2 {
82 =2 BYTE BS_DrvNum;
83 =2 BYTE BS_Reserved1;
84 =2 BYTE BS_BootSig;
85 =2 DWORD BS_VolID;
86 =2 char BS_VolLab[11];
87 =2 char BS_FilSysType[8];
88 =2 };
89 =2
90 =2 struct BootSecFAT32Str //引导扇区 FAT 扩展结构
91 =2 {
92 =2 DWORD BPB_FATSz32; //FAT扇区总数
93 =2 WORD BPB_ExtFlags;
94 =2 WORD BPB_FSVer;
95 =2 DWORD BPB_RootClus; //根目录开始的簇
96 =2 WORD BPB_FSInfo;
97 =2 WORD BPB_BkBootSec;
98 =2 char BPB_Reserved[12];
99 =2 BYTE BS_DrvNum;
100 =2 BYTE BS_Reserved1;
101 =2 BYTE BS_BootSig;
C51 COMPILER V7.50 FATCHANGEDIRECTORY 11/20/2006 15:49:27 PAGE 6
102 =2 DWORD BS_VolID;
103 =2 char BS_VolLab[11];
104 =2 char BS_FilSysType[8];
105 =2 };
106 =2
107 =2 struct BootSecStr //引导扇区结构
108 =2 {
109 =2 BYTE BS_jmpBoot[3];
110 =2 BYTE BS_OEMName[8];
111 =2 WORD BPB_BytesPerSec; //每扇区字节数 512
112 =2 BYTE BPB_SecPerClus; //每簇扇区数 1 2 4 8 16 32 64 128
113 =2 WORD BPB_RsvdSecCnt; //保留扇区数 0x20
114 =2 BYTE BPB_NumFATs; //FAT表个数 2
115 =2 WORD BPB_RootEntCnt;
116 =2 WORD BPB_TotSec16;
117 =2 BYTE BPB_Media;
118 =2 WORD BPB_FATSz16;
119 =2 WORD BPB_SecPerTrk;
120 =2 WORD BPB_NumHeads;
121 =2 DWORD BPB_HiddSec;
122 =2 DWORD BPB_TotSec32;
123 =2 union FATUni
124 =2 {
125 =2 struct BootSecFAT32Str F32;
126 =2 struct BootSecFAT16Str F16;
127 =2 }FAT;
128 =2
129 =2 };
130 =2
131 =2 struct DPTStr //分区表结构
132 =2 {
133 =2 BYTE BootFlag;
134 =2 BYTE CHSBegin[3];
135 =2 BYTE TypeCode;
136 =2 BYTE CHSEnd[3];
137 =2 DWORD LBABegin;
138 =2 DWORD CntSec;
139 =2 };
140 =2
141 =2 struct sDPTStr //简化的分区表
142 =2 {
143 =2 BYTE FATType;
144 =2 DWORD LBABegin;
145 =2 DWORD CntSec;
146 =2 };
147 =2
148 =2 struct FAT32FSInfoStr //FAT32扩展信息结构
149 =2 {
150 =2 DWORD LeadSig;
151 =2 BYTE Reserved1[480];
152 =2 DWORD StrucSig;
153 =2 DWORD FreeCount;
154 =2 DWORD NxtFree;
155 =2 BYTE Reserved2[12];
156 =2 DWORD TrailSig;
157 =2 };
158 =2
159 =2 struct FATSDirStr //FAT目录结构 短文件名
160 =2 {
161 =2 CHAR Name[11];
162 =2 BYTE Attr;
163 =2 BYTE NTRes;
C51 COMPILER V7.50 FATCHANGEDIRECTORY 11/20/2006 15:49:27 PAGE 7
164 =2 BYTE CrtTimeTenth;
165 =2 WORD CrtTime;
166 =2 WORD CrtDate;
167 =2 WORD LstAccDate;
168 =2 WORD FstClusHI;
169 =2 WORD WrtTime;
170 =2 WORD WrtDate;
171 =2 WORD FstClusLO;
172 =2 DWORD FileSize;
173 =2 };
174 =2
175 =2 struct FATLDirStr //FAT目录结构 长文件名
176 =2 {
177 =2 BYTE Ord;
178 =2 BYTE Name1[10];
179 =2 BYTE Attr;
180 =2 BYTE Type;
181 =2 BYTE Chksum;
182 =2 BYTE Name2[12];
183 =2 WORD FstClusLO;
184 =2 BYTE Name3[4];
185 =2 };
186 =2
187 =2 struct FATStr //FAT参数表
188 =2 {
189 =2 // BYTE ClusSecCnt; //当前簇扇区计数
190 =2 DWORD CurrentDirectory; //当前目录入口(簇号)
191 =2 BYTE SecPerClus; //每簇扇区数 1 2 4 8 16 32 64 128
192 =2 DWORD RootClus; //根目录开始的簇
193 =2 BYTE RootSectors; //根目录占用的扇区数
194 =2 DWORD ClusSec; //簇开始的扇区
195 =2 DWORD FATSz; //FAT表大小(扇区)
196 =2 DWORD FATSec; //FAT表开始扇区
197 =2 DWORD FSISec; //FSI所在扇区
198 =2 DWORD FSIFreeCount; //空闲簇数
199 =2 DWORD FSINxtFree; //空闲簇搜索指针
200 =2 };
201 =2
202 =2 struct FCBStr
203 =2 {
204 =2 CHAR FileName[12]; //文件名
205 =2 DWORD Size; //文件大小
206 =2 DWORD FirstCluster; //第一个簇
207 =2 DWORD LastCluster; //最近一次读到的簇号
208 =2 DWORD ClusSecCnt; //当前簇扇区计数
209 =2 DWORD ByteCnt; //当前字节计数
210 =2 };
211 =2
212 =2 struct FATTableStr
213 =2 {
214 =2 DWORD Sector;
215 =2 union FATUin
216 =2 {
217 =2 DWORD F32[128];
218 =2 WORD F16[256];
219 =2 BYTE F12[512];
220 =2 }FAT;
221 =2 };
222 =2
223 =2 struct FATClusterStr
224 =2 {
225 =2 BYTE SecOffset; //扇区偏移量
C51 COMPILER V7.50 FATCHANGEDIRECTORY 11/20/2006 15:49:27 PAGE 8
226 =2 DWORD Sector; //扇区号
227 =2 DWORD Cluster; //簇号
228 =2 };
229 =2
230 =2 #ifndef _LIBRARY_DEFINE
=2 xdata BYTE DiskBuffer[512];
=2
=2 xdata struct StorageMediaStr StorageMedia;
=2 xdata struct sDPTStr sDPT[FAT_MAX_PARTITIONS];
=2 xdata struct FATStr FAT;
=2 xdata struct FCBStr FCB[FAT_MAX_FCB];
=2 xdata CHAR LongFileName[256];
=2 xdata struct FATTableStr FATTable;
=2 xdata struct DPTStr *DPT; //分区表结构指针
=2 xdata struct BootSecStr *BOOTSEC; //引导扇区结构指针
=2 xdata struct FAT32FSInfoStr *FSI; //FAT32扩展信息
=2 xdata struct FATSDirStr *sDIR; //FAT目录结构指针
=2 xdata struct FATLDirStr *lDIR; //FAT目录结构指针
=2 #endif
245 =2 #endif
246 =2
247 =2 extern xdata BYTE DiskBuffer[512];
248 =2
249 =2 extern xdata struct StorageMediaStr StorageMedia;
250 =2 extern xdata struct sDPTStr sDPT[FAT_MAX_PARTITIONS];
251 =2 extern xdata struct FATStr FAT;
252 =2 extern xdata struct FCBStr FCB[FAT_MAX_FCB];
253 =2 extern xdata CHAR LongFileName[256];
254 =2 extern xdata struct FATTableStr FATTable;
255 =2 extern xdata struct DPTStr *DPT; //分区表结构指针
256 =2 extern xdata struct BootSecStr *BOOTSEC; //引导扇区结构指针
257 =2 extern xdata struct FAT32FSInfoStr *FSI; //FAT32扩展信息
258 =2 extern xdata struct FATSDirStr *sDIR; //FAT目录结构指针
259 =2 extern xdata struct FATLDirStr *lDIR; //FAT目录结构指针
260 =2
261 =2 extern void FATInit(void);
262 =2 extern BYTE FATSelectMedia(BYTE Media);
263 =2 extern BYTE FATFindPartitions(void);
264 =2 extern BYTE FATMountPartition(void);
265 =2 extern BYTE FATMountVolumeID(BYTE Partition);
266 =2 extern void FATGetPartLongName(struct FATLDirStr *ldp,CHAR *name);
267 =2 extern DWORD FATDiskSize(void);
268 =2 extern DWORD FATDiskFreeSize(void);
269 =2 extern BYTE FATFindDIREntry(CHAR *DirName);
270 =2 extern BYTE FAT32FindDIREntry(CHAR *DirName);
271 =2 extern BYTE FAT16FindDIREntry(CHAR *DirName);
272 =2 void FATReadCluster(struct FATClusterStr *Cluster,BYTE *Buffer);
273 =2 extern BYTE FATChangeDirectory(CHAR *DirName);
274 =2 extern BYTE FATListDirectory(void);
275 =2 extern BYTE FAT32ListDirectory(void);
276 =2 extern BYTE FAT16ListDirectory(void);
277 =2 extern void FATNextCluster(DWORD *CurrentCluster);
278 =2 extern BYTE FATGetDirName(WORD SecNum);
279 =2 extern BYTE FATOpenFile(CHAR *filename);
280 =2 extern void FATCloseFile(BYTE fp);
281 =2 extern WORD FATReadFile(BYTE fp);
282 =2
11 =1
3 #endif
4
5 BYTE FATChangeDirectory(CHAR *DirName);
6
C51 COMPILER V7.50 FATCHANGEDIRECTORY 11/20/2006 15:49:27 PAGE 9
7 BYTE FATChangeDirectory(CHAR *DirName)
8 {
9 1 register DWORD cluster;
10 1 register BYTE i;
11 1
12 1 i=FATFindDIREntry(DirName);
13 1 printf("find:%bx\n",i);
14 1 if (i<16&&(sDIR[i].Attr&FAT_ATTR_DIRECTORY)) //找到目录入口
15 1 {
16 2 cluster=(MEMSwap16(sDIR[i].FstClusHI)<<16)|MEMSwap16(sDIR[i].FstClusLO);
*** WARNING C206 IN LINE 16 OF FATCHANGEDIRECTORY.C: 'MEMSwap16': missing function-prototype
*** ERROR C267 IN LINE 16 OF FATCHANGEDIRECTORY.C: 'MEMSwap16': requires ANSI-style prototype
17 2 if (cluster) FAT.CurrentDirectory=cluster; else FAT.CurrentDirectory=FAT.RootClus;
18 2 return(0);
19 2 }
20 1 else if (!(sDIR[i].Attr&FAT_ATTR_DIRECTORY)) return(FAT_ERR_NOT_DIR); //目录项不是一个目录入口
21 1 else return(FAT_ERR_DIR_NOT_FOUND); //目录入口为找到
22 1 }
C51 COMPILATION COMPLETE. 4 WARNING(S), 1 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -