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

📄 fat_8c-source.html

📁 方便飞利浦arm7tdmi 处理器lpc2100开发的C函数库 Procyon ARMlib-LPC2100 C-Language Function Library for Philips LPC21
💻 HTML
📖 第 1 页 / 共 4 页
字号:
00489             <span class="comment">// set path string</span>00490             strcat(PathNameBuffer, FileNameBuffer);00491             strcat(PathNameBuffer, <span class="stringliteral">"\\"</span>);00492             <span class="comment">// return success</span>00493             <span class="keywordflow">return</span> TRUE;00494         }00495         <span class="keywordflow">else</span>00496         {00497             <span class="comment">// not a directory, cannot CD into a file!</span>00498             <span class="keywordflow">return</span> FALSE;00499         }00500     }00501     <span class="keywordflow">else</span>00502     {00503         <span class="comment">// not a valid entry, cannot CD!</span>00504         <span class="keywordflow">return</span> FALSE;00505     }00506 }00507 00508 <span class="keywordtype">void</span> fatPrintDirEntry(<span class="keywordtype">void</span>)00509 {00510     <span class="comment">// print a formatted dir-style output for most recent file</span>00511     <span class="comment">// print date</span>00512     <a class="code" href="rprintf_8h.html#a16">rprintfNum</a>(10, 2, FALSE, <span class="charliteral">'0'</span>, (FileInfo.CreateDate&amp;DD_MONTH_MASK)&gt;&gt;DD_MONTH_SHIFT );    <span class="comment">// month</span>00513     <a class="code" href="rprintf_8h.html#a7">rprintfChar</a>(<span class="charliteral">'/'</span>);00514     <a class="code" href="rprintf_8h.html#a16">rprintfNum</a>(10, 2, FALSE, <span class="charliteral">'0'</span>, (FileInfo.CreateDate&amp;DD_DAY_MASK)&gt;&gt;DD_DAY_SHIFT );        <span class="comment">// day</span>00515     <a class="code" href="rprintf_8h.html#a7">rprintfChar</a>(<span class="charliteral">'/'</span>);00516     <a class="code" href="rprintf_8h.html#a16">rprintfNum</a>(10, 4, FALSE, <span class="charliteral">'0'</span>, (FileInfo.CreateDate&amp;DD_YEAR_MASK)&gt;&gt;DD_YEAR_SHIFT );  <span class="comment">// year</span>00517     <a class="code" href="rprintf_8h.html#a7">rprintfChar</a>(<span class="charliteral">' '</span>);00518 00519     <span class="comment">// print time</span>00520     <a class="code" href="rprintf_8h.html#a16">rprintfNum</a>(10, 2, FALSE, <span class="charliteral">'0'</span>, (FileInfo.CreateTime&amp;DT_HOURS_MASK)&gt;&gt;DT_HOURS_SHIFT );    <span class="comment">// month</span>00521     <a class="code" href="rprintf_8h.html#a7">rprintfChar</a>(<span class="charliteral">':'</span>);00522     <a class="code" href="rprintf_8h.html#a16">rprintfNum</a>(10, 2, FALSE, <span class="charliteral">'0'</span>, (FileInfo.CreateTime&amp;DT_MINUTES_MASK)&gt;&gt;DT_MINUTES_SHIFT );        <span class="comment">// day</span>00523     <a class="code" href="rprintf_8h.html#a7">rprintfChar</a>(<span class="charliteral">':'</span>);00524     <a class="code" href="rprintf_8h.html#a16">rprintfNum</a>(10, 2, FALSE, <span class="charliteral">'0'</span>, 2*(FileInfo.CreateTime&amp;DT_2SECONDS_MASK)&gt;&gt;DT_2SECONDS_SHIFT );    <span class="comment">// seconds</span>00525     <a class="code" href="rprintf_8h.html#a7">rprintfChar</a>(<span class="charliteral">' '</span>);00526 00527     <span class="comment">// print attributes</span>00528     <span class="keywordflow">if</span>(FileInfo.Attr &amp; ATTR_VOLUME)     <a class="code" href="rprintf_8h.html#a7">rprintfChar</a>(<span class="charliteral">'V'</span>); <span class="keywordflow">else</span> <a class="code" href="rprintf_8h.html#a7">rprintfChar</a>(<span class="charliteral">'-'</span>);00529     <span class="keywordflow">if</span>(FileInfo.Attr &amp; ATTR_DIRECTORY)  <a class="code" href="rprintf_8h.html#a7">rprintfChar</a>(<span class="charliteral">'D'</span>); <span class="keywordflow">else</span> <a class="code" href="rprintf_8h.html#a7">rprintfChar</a>(<span class="charliteral">'-'</span>);00530     <span class="keywordflow">if</span>(FileInfo.Attr &amp; ATTR_READONLY)   <a class="code" href="rprintf_8h.html#a7">rprintfChar</a>(<span class="charliteral">'R'</span>); <span class="keywordflow">else</span> <a class="code" href="rprintf_8h.html#a7">rprintfChar</a>(<span class="charliteral">'-'</span>);00531     <span class="keywordflow">if</span>(FileInfo.Attr &amp; ATTR_HIDDEN)     <a class="code" href="rprintf_8h.html#a7">rprintfChar</a>(<span class="charliteral">'H'</span>); <span class="keywordflow">else</span> <a class="code" href="rprintf_8h.html#a7">rprintfChar</a>(<span class="charliteral">'-'</span>);00532     <span class="keywordflow">if</span>(FileInfo.Attr &amp; ATTR_SYSTEM)     <a class="code" href="rprintf_8h.html#a7">rprintfChar</a>(<span class="charliteral">'S'</span>); <span class="keywordflow">else</span> <a class="code" href="rprintf_8h.html#a7">rprintfChar</a>(<span class="charliteral">'-'</span>);00533     <span class="keywordflow">if</span>(FileInfo.Attr &amp; ATTR_ARCHIVE)    <a class="code" href="rprintf_8h.html#a7">rprintfChar</a>(<span class="charliteral">'A'</span>); <span class="keywordflow">else</span> <a class="code" href="rprintf_8h.html#a7">rprintfChar</a>(<span class="charliteral">'-'</span>);00534     <a class="code" href="rprintf_8h.html#a7">rprintfChar</a>(<span class="charliteral">' '</span>);00535 00536     <span class="comment">// print filesize</span>00537     <a class="code" href="rprintf_8h.html#a16">rprintfNum</a>(10, 8, FALSE, <span class="charliteral">' '</span>, FileInfo.Size);   <span class="comment">// filesize</span>00538     <a class="code" href="rprintf_8h.html#a7">rprintfChar</a>(<span class="charliteral">' '</span>);00539 00540     <span class="comment">// print filename</span>00541     <a class="code" href="rprintf_8h.html#a8">rprintfStr</a>(FileNameBuffer);00542 }00543 00544 <span class="keywordtype">void</span> fatDumpDirSlot(<span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> slot)00545 {00546     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> sector;00547     <span class="comment">// load correct sector</span>00548     sector = fatClustToSect(CurrentDirStartCluster);00549     sector += slot/DIRENTRIES_PER_SECTOR;00550     <span class="comment">// print the entry as a hex table</span>00551     <a class="code" href="debug_8h.html#a0">debugPrintHexTable</a>(32, SectorBuffer+(slot&lt;&lt;5) );00552 }00553 00554 <span class="keyword">struct </span>FileInfoStruct* fatGetFileInfo(<span class="keywordtype">void</span>)00555 {00556     <span class="keywordflow">return</span> &amp;FileInfo;00557 }00558 00559 <span class="comment">// return the size of the last directory entry</span>00560 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> fatGetFilesize(<span class="keywordtype">void</span>)00561 {00562     <span class="keywordflow">return</span> FileInfo.Size;00563 }00564 00565 <span class="comment">// return the long name of the last directory entry</span>00566 <span class="keywordtype">char</span>* fatGetFilename(<span class="keywordtype">void</span>)00567 {   00568     <span class="keywordflow">return</span> FileNameBuffer;00569 }00570 00571 <span class="comment">// return the directory of the last directory entry</span>00572 <span class="keywordtype">char</span>* fatGetDirname(<span class="keywordtype">void</span>)00573 {   00574     <span class="keywordflow">return</span> PathNameBuffer;00575 }00576 00577 <span class="comment">// load a clusterfull of data</span>00578 <span class="keywordtype">void</span> fatLoadCluster(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> cluster, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *buffer)00579 {00580     <span class="keyword">register</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> i;00581     <span class="comment">// read cluster</span>00582     <span class="comment">//while ( ataReadSectors( DRIVE0, clust2sect(cluster), SectorsPerCluster, buffer) != 0);</span>00583     <span class="keywordflow">for</span>(i=0; i&lt;SectorsPerCluster; i++)00584     {00585         ataReadSectors( DRIVE0, fatClustToSect(cluster)+i, 1, buffer+(i&lt;&lt;9) );00586         <span class="comment">// temporary fix for wierd misaligned cluster problem</span>00587         <span class="comment">// (only when using FAT16?)</span>00588 <span class="comment">//      ataReadSectors( DRIVE0, fatClustToSect(cluster+8)+i, 1, buffer+(i&lt;&lt;9) );</span>00589     }00590 }00591 00592 00593 <span class="comment">// find next cluster in the FAT chain</span>00594 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> fatNextCluster(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> cluster)00595 {00596     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> nextCluster;00597     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> fatMask;00598     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> fatOffset;00599     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> sector;00600     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> offset;00601     00602     <span class="comment">// get fat offset in bytes</span>00603     <span class="keywordflow">if</span>(Fat32Enabled)00604     {00605         <span class="comment">// four FAT bytes (32 bits) for every cluster</span>00606         fatOffset = cluster &lt;&lt; 2;00607         <span class="comment">// set the FAT bit mask</span>00608         fatMask = FAT32_MASK;00609     }00610     <span class="keywordflow">else</span>00611     {00612         <span class="comment">// two FAT bytes (16 bits) for every cluster</span>00613         fatOffset = cluster &lt;&lt; 1;00614         <span class="comment">// set the FAT bit mask</span>00615         fatMask = FAT16_MASK;00616     }00617     00618     <span class="comment">// calculate the FAT sector that we're interested in</span>00619     sector = FirstFATSector + (fatOffset / BytesPerSector);00620     <span class="comment">// calculate offset of the our entry within that FAT sector</span>00621     offset = fatOffset % BytesPerSector;00622 00623     <span class="comment">// if we don't already have this FAT chunk loaded, go get it</span>00624     <span class="keywordflow">if</span> (sector != FatInCache)00625     {00626         <span class="comment">// read sector of FAT table</span>00627         <span class="keywordflow">while</span> (ataReadSectors( DRIVE0, sector, 1, (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>*)FAT_CACHE_ADDR) != 0);00628         FatInCache = sector;00629     }00630 00631     <span class="comment">// read the nextCluster value</span>00632     nextCluster = (*((<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>*) &amp;((<span class="keywordtype">char</span>*)FAT_CACHE_ADDR)[offset])) &amp; fatMask;00633 00634     <span class="comment">// check to see if we're at the end of the chain</span>00635     <span class="keywordflow">if</span> (nextCluster == (CLUST_EOFE &amp; fatMask))00636         nextCluster = 0;00637 00638 <span class="preprocessor">#ifdef DEBUG_FAT</span>00639 <span class="preprocessor"></span>    <a class="code" href="rprintf_8h.html#a8">rprintfStr</a>(<span class="stringliteral">"&gt;"</span>);00640     <a class="code" href="rprintf_8h.html#a15">rprintfu32</a>(nextCluster);00641     <a class="code" href="rprintf_8c.html#a10">rprintfCRLF</a>();00642 <span class="preprocessor">#endif</span>00643 <span class="preprocessor"></span>    00644     <span class="keywordflow">return</span> nextCluster;00645 }</pre></div><hr size="1"><address style="align: right;"><small>Generated on Tue Jul 13 03:38:11 2004 for Procyon ARMlib-LPC2100 by<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border=0 > </a>1.3.6 </small></address></body></html>

⌨️ 快捷键说明

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