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

📄 filesys_8c-source.html

📁 MP3播放器源代码, VS1003B
💻 HTML
📖 第 1 页 / 共 5 页
字号:
00614   ConsolePutUInt(fileNumber);00615   ConsoleWrite(<span class="stringliteral">"... "</span>);00616   00617   <span class="comment">/* Start at the start of root directory. */</span>00618   <a class="code" href="filesys_8c.html#a9">dirLevel</a> = 0; <span class="comment">/* At root directory */</span>00619   <a class="code" href="filesys_8c.html#a8">dirStack</a>[<a class="code" href="filesys_8c.html#a9">dirLevel</a>].<a class="code" href="structdirectoryStack.html#o0">sector</a>=<a class="code" href="filesys_8c.html#a3">rootStart</a>;00620   <a class="code" href="filesys_8c.html#a8">dirStack</a>[<a class="code" href="filesys_8c.html#a9">dirLevel</a>].<a class="code" href="structdirectoryStack.html#o1">entry</a>=0;00621 00622 00623   <span class="keywordflow">if</span> (fileNumber==0){00624     fileNumber = 32766; <span class="comment">//use max-1 value for scanning for free entry</span>00625   }00626  00627   <span class="keywordflow">while</span> (fileNumber){00628     <span class="keywordflow">if</span> (<a class="code" href="filesys_8c.html#a8">dirStack</a>[<a class="code" href="filesys_8c.html#a9">dirLevel</a>].<a class="code" href="structdirectoryStack.html#o1">entry</a>==0){00629       <span class="comment">/* At the start of new dir, load first disk sector */</span>00630       <span class="keywordflow">while</span> (<a class="code" href="storage_8h.html#a2">ReadDiskSector</a>(<a class="code" href="filesys_8c.html#a8">dirStack</a>[<a class="code" href="filesys_8c.html#a9">dirLevel</a>].sector)){00631         <a class="code" href="mmc_8c.html#a5">InitMMC</a>;00632       }00633     }00634     <a class="code" href="board_8c.html#a0">temp</a>.<a class="code" href="unionTemp.html#o0">c</a> = <a class="code" href="filesys_8c.html#a8">dirStack</a>[<a class="code" href="filesys_8c.html#a9">dirLevel</a>].<a class="code" href="structdirectoryStack.html#o1">entry</a>;00635 00636     <span class="comment">/* We are now looking at FAT directory structure. */</span>00637 00638     <span class="comment">/* Is current entry empty? */</span>    00639     <span class="keywordflow">if</span> ((<a class="code" href="buffer_8c.html#a0">diskSect</a>.<a class="code" href="unionDiskBlock.html#o2">dir</a>[<a class="code" href="board_8c.html#a0">temp</a>.<a class="code" href="unionTemp.html#o0">c</a>].<a class="code" href="unionDirRecordUnion.html#o0">entry</a>.<a class="code" href="structDirRecordUnion_1_1Entry.html#o0">Name</a>[0]==0)00640         ||(<a class="code" href="buffer_8c.html#a0">diskSect</a>.<a class="code" href="unionDiskBlock.html#o2">dir</a>[<a class="code" href="board_8c.html#a0">temp</a>.<a class="code" href="unionTemp.html#o0">c</a>].<a class="code" href="unionDirRecordUnion.html#o0">entry</a>.<a class="code" href="structDirRecordUnion_1_1Entry.html#o0">Name</a>[0]==0xe5)){      00641       <span class="comment">/* Yes. Are we supposed to make an entry now? */</span>00642       <span class="keywordflow">if</span> (fileNumber&gt;30000){ 00643         <span class="comment">//yes, this is actually a request to write file directory entry!;</span>00644 00645         fileNumber = 32767-fileNumber;00646         00647         <a class="code" href="buffer_8c.html#a0">diskSect</a>.<a class="code" href="unionDiskBlock.html#o2">dir</a>[<a class="code" href="board_8c.html#a0">temp</a>.<a class="code" href="unionTemp.html#o0">c</a>].<a class="code" href="unionDirRecordUnion.html#o0">entry</a>.<a class="code" href="structDirRecordUnion_1_1Entry.html#o0">Name</a>[0] =<span class="charliteral">'R'</span>;00648         <a class="code" href="buffer_8c.html#a0">diskSect</a>.<a class="code" href="unionDiskBlock.html#o2">dir</a>[<a class="code" href="board_8c.html#a0">temp</a>.<a class="code" href="unionTemp.html#o0">c</a>].<a class="code" href="unionDirRecordUnion.html#o0">entry</a>.<a class="code" href="structDirRecordUnion_1_1Entry.html#o0">Name</a>[1] =<span class="charliteral">'E'</span>;00649         <a class="code" href="buffer_8c.html#a0">diskSect</a>.<a class="code" href="unionDiskBlock.html#o2">dir</a>[<a class="code" href="board_8c.html#a0">temp</a>.<a class="code" href="unionTemp.html#o0">c</a>].<a class="code" href="unionDirRecordUnion.html#o0">entry</a>.<a class="code" href="structDirRecordUnion_1_1Entry.html#o0">Name</a>[2] =<span class="charliteral">'C'</span>;00650         <a class="code" href="buffer_8c.html#a0">diskSect</a>.<a class="code" href="unionDiskBlock.html#o2">dir</a>[<a class="code" href="board_8c.html#a0">temp</a>.<a class="code" href="unionTemp.html#o0">c</a>].<a class="code" href="unionDirRecordUnion.html#o0">entry</a>.<a class="code" href="structDirRecordUnion_1_1Entry.html#o0">Name</a>[7] =(fileNumber%10)+<span class="charliteral">'0'</span>; 00651         fileNumber /= 10;00652         <a class="code" href="buffer_8c.html#a0">diskSect</a>.<a class="code" href="unionDiskBlock.html#o2">dir</a>[<a class="code" href="board_8c.html#a0">temp</a>.<a class="code" href="unionTemp.html#o0">c</a>].<a class="code" href="unionDirRecordUnion.html#o0">entry</a>.<a class="code" href="structDirRecordUnion_1_1Entry.html#o0">Name</a>[6] =(fileNumber%10)+<span class="charliteral">'0'</span>;00653         fileNumber /= 10;00654         <a class="code" href="buffer_8c.html#a0">diskSect</a>.<a class="code" href="unionDiskBlock.html#o2">dir</a>[<a class="code" href="board_8c.html#a0">temp</a>.<a class="code" href="unionTemp.html#o0">c</a>].<a class="code" href="unionDirRecordUnion.html#o0">entry</a>.<a class="code" href="structDirRecordUnion_1_1Entry.html#o0">Name</a>[5] =(fileNumber%10)+<span class="charliteral">'0'</span>;00655         fileNumber /= 10;00656         <a class="code" href="buffer_8c.html#a0">diskSect</a>.<a class="code" href="unionDiskBlock.html#o2">dir</a>[<a class="code" href="board_8c.html#a0">temp</a>.<a class="code" href="unionTemp.html#o0">c</a>].<a class="code" href="unionDirRecordUnion.html#o0">entry</a>.<a class="code" href="structDirRecordUnion_1_1Entry.html#o0">Name</a>[4] =(fileNumber%10)+<span class="charliteral">'0'</span>;00657         fileNumber /= 10;00658         <a class="code" href="buffer_8c.html#a0">diskSect</a>.<a class="code" href="unionDiskBlock.html#o2">dir</a>[<a class="code" href="board_8c.html#a0">temp</a>.<a class="code" href="unionTemp.html#o0">c</a>].<a class="code" href="unionDirRecordUnion.html#o0">entry</a>.<a class="code" href="structDirRecordUnion_1_1Entry.html#o0">Name</a>[3] =(fileNumber%10)+<span class="charliteral">'0'</span>;00659         <a class="code" href="buffer_8c.html#a0">diskSect</a>.<a class="code" href="unionDiskBlock.html#o2">dir</a>[<a class="code" href="board_8c.html#a0">temp</a>.<a class="code" href="unionTemp.html#o0">c</a>].<a class="code" href="unionDirRecordUnion.html#o0">entry</a>.<a class="code" href="structDirRecordUnion_1_1Entry.html#o0">Name</a>[8] =<span class="charliteral">'W'</span>;00660         <a class="code" href="buffer_8c.html#a0">diskSect</a>.<a class="code" href="unionDiskBlock.html#o2">dir</a>[<a class="code" href="board_8c.html#a0">temp</a>.<a class="code" href="unionTemp.html#o0">c</a>].<a class="code" href="unionDirRecordUnion.html#o0">entry</a>.<a class="code" href="structDirRecordUnion_1_1Entry.html#o0">Name</a>[9] =<span class="charliteral">'A'</span>;00661         <a class="code" href="buffer_8c.html#a0">diskSect</a>.<a class="code" href="unionDiskBlock.html#o2">dir</a>[<a class="code" href="board_8c.html#a0">temp</a>.<a class="code" href="unionTemp.html#o0">c</a>].<a class="code" href="unionDirRecordUnion.html#o0">entry</a>.<a class="code" href="structDirRecordUnion_1_1Entry.html#o0">Name</a>[10]=<span class="charliteral">'V'</span>;00662         <a class="code" href="buffer_8c.html#a0">diskSect</a>.<a class="code" href="unionDiskBlock.html#o2">dir</a>[<a class="code" href="board_8c.html#a0">temp</a>.<a class="code" href="unionTemp.html#o0">c</a>].<a class="code" href="unionDirRecordUnion.html#o0">entry</a>.<a class="code" href="structDirRecordUnion_1_1Entry.html#o1">Attr</a> = 0;00663         <a class="code" href="buffer_8c.html#a0">diskSect</a>.<a class="code" href="unionDiskBlock.html#o2">dir</a>[<a class="code" href="board_8c.html#a0">temp</a>.<a class="code" href="unionTemp.html#o0">c</a>].<a class="code" href="unionDirRecordUnion.html#o0">entry</a>.<a class="code" href="structDirRecordUnion_1_1Entry.html#o7">FstClusHi</a> = (<a class="code" href="filesys_8c.html#a6">fragment</a>[0].<a class="code" href="structfragmentEntry.html#o0">start</a> &gt;&gt; 16);00664         <a class="code" href="buffer_8c.html#a0">diskSect</a>.<a class="code" href="unionDiskBlock.html#o2">dir</a>[<a class="code" href="board_8c.html#a0">temp</a>.<a class="code" href="unionTemp.html#o0">c</a>].<a class="code" href="unionDirRecordUnion.html#o0">entry</a>.<a class="code" href="structDirRecordUnion_1_1Entry.html#o10">FstClusLo</a> = (<a class="code" href="filesys_8c.html#a6">fragment</a>[0].<a class="code" href="structfragmentEntry.html#o0">start</a> &amp; 0xffff);00665         <a class="code" href="buffer_8c.html#a0">diskSect</a>.<a class="code" href="unionDiskBlock.html#o2">dir</a>[<a class="code" href="board_8c.html#a0">temp</a>.<a class="code" href="unionTemp.html#o0">c</a>].<a class="code" href="unionDirRecordUnion.html#o0">entry</a>.<a class="code" href="structDirRecordUnion_1_1Entry.html#o11">FileSize</a> = (<a class="code" href="filesys_8c.html#a6">fragment</a>[0].<a class="code" href="structfragmentEntry.html#o1">length</a>);00666 00667         ConsoleWrite(<span class="stringliteral">" Making Directory Entry "</span>);00668         <a class="code" href="storage_8h.html#a4">WriteDiskSector</a>(<a class="code" href="buffer_8c.html#a2">sectorAddress</a>.<a class="code" href="unionAddress.html#o0">l</a>);00669         00670         <span class="keywordflow">return</span> 99; <span class="comment">//created a FAT entry</span>00671       } <span class="comment">//register file</span>00672     }00673     00674 00675     <span class="comment">/* Does current entry point to  a regular file? */</span>00676     <span class="comment">/* Attributes: NO directory, NO volume id, NO system, NO hidden */</span>00677     <span class="keywordflow">if</span> (((<a class="code" href="buffer_8c.html#a0">diskSect</a>.<a class="code" href="unionDiskBlock.html#o2">dir</a>[<a class="code" href="board_8c.html#a0">temp</a>.<a class="code" href="unionTemp.html#o0">c</a>].<a class="code" href="unionDirRecordUnion.html#o0">entry</a>.<a class="code" href="structDirRecordUnion_1_1Entry.html#o1">Attr</a> &amp; 222) == 0) 00678         &amp;&amp; (<a class="code" href="buffer_8c.html#a0">diskSect</a>.<a class="code" href="unionDiskBlock.html#o2">dir</a>[<a class="code" href="board_8c.html#a0">temp</a>.<a class="code" href="unionTemp.html#o0">c</a>].<a class="code" href="unionDirRecordUnion.html#o0">entry</a>.<a class="code" href="structDirRecordUnion_1_1Entry.html#o0">Name</a>[0] != 0xe5) 00679         &amp;&amp; (<a class="code" href="buffer_8c.html#a0">diskSect</a>.<a class="code" href="unionDiskBlock.html#o2">dir</a>[<a class="code" href="board_8c.html#a0">temp</a>.<a class="code" href="unionTemp.html#o0">c</a>].<a class="code" href="unionDirRecordUnion.html#o0">entry</a>.<a class="code" href="structDirRecordUnion_1_1Entry.html#o0">Name</a>[0] != 0)  ){00680       00681       <span class="comment">/* It is a regular file. */</span>00682       <span class="keywordflow">if</span> (!(--fileNumber)){00683 00684         <span class="comment">/* ------------ FILE FOUND ------------- */</span>00685 00686         <a class="code" href="buffer_8c.html#a2">sectorAddress</a>.<a class="code" href="unionAddress.html#o0">l</a> = 00687           ((<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>)<a class="code" href="buffer_8c.html#a0">diskSect</a>.<a class="code" href="unionDiskBlock.html#o2">dir</a>[<a class="code" href="board_8c.html#a0">temp</a>.<a class="code" href="unionTemp.html#o0">c</a>].<a class="code" href="unionDirRecordUnion.html#o0">entry</a>.<a class="code" href="structDirRecordUnion_1_1Entry.html#o7">FstClusHi</a>&lt;&lt;16) 00688           + <a class="code" href="buffer_8c.html#a0">diskSect</a>.<a class="code" href="unionDiskBlock.html#o2">dir</a>[<a class="code" href="board_8c.html#a0">temp</a>.<a class="code" href="unionTemp.html#o0">c</a>].<a class="code" href="unionDirRecordUnion.html#o0">entry</a>.<a class="code" href="structDirRecordUnion_1_1Entry.html#o10">FstClusLo</a>;00689         <a class="code" href="buffer_8c.html#a2">sectorAddress</a>.<a class="code" href="unionAddress.html#o0">l</a> *= <a class="code" href="filesys_8c.html#a5">fatSectorsPerCluster</a>;00690         <a class="code" href="buffer_8c.html#a2">sectorAddress</a>.<a class="code" href="unionAddress.html#o0">l</a> += <a class="code" href="filesys_8c.html#a4">dataStart</a>;00691         00692         <a class="code" href="filesys_8c.html#a7">fileSize</a> = <a class="code" href="buffer_8c.html#a0">diskSect</a>.<a class="code" href="unionDiskBlock.html#o2">dir</a>[<a class="code" href="board_8c.html#a0">temp</a>.<a class="code" href="unionTemp.html#o0">c</a>].<a class="code" href="unionDirRecordUnion.html#o0">entry</a>.<a class="code" href="structDirRecordUnion_1_1Entry.html#o11">FileSize</a>;00693         <a class="code" href="buffer_8c.html#a1">dataBufPtr</a> = 0; <span class="comment">/* Reset data buffer ptr for FGetChar */</span>00694 00695         ConsoleWrite(<span class="stringliteral">"found, FAT name is \""</span>);00696         <span class="keywordflow">for</span> (tempc=0; tempc&lt;11; tempc++){00697           ConsolePutChar(<a class="code" href="buffer_8c.html#a0">diskSect</a>.<a class="code" href="unionDiskBlock.html#o2">dir</a>[<a class="code" href="board_8c.html#a0">temp</a>.<a class="code" href="unionTemp.html#o0">c</a>].entry.Name[tempc]);00698         }00699 00700         <span class="comment">//Store file name nicely for displaying on screen :)</span>00701         <span class="keywordflow">for</span> (tempc=0; tempc&lt;8; tempc++){00702           <a class="code" href="filesys_8c.html#a11">currentFileName</a>[tempc]=<a class="code" href="buffer_8c.html#a0">diskSect</a>.<a class="code" href="unionDiskBlock.html#o2">dir</a>[<a class="code" href="board_8c.html#a0">temp</a>.<a class="code" href="unionTemp.html#o0">c</a>].<a class="code" href="unionDirRecordUnion.html#o0">entry</a>.<a class="code" href="structDirRecordUnion_1_1Entry.html#o0">Name</a>[tempc];00703         }00704         <a class="code" href="filesys_8c.html#a11">currentFileName</a>[8]=<span class="charliteral">'.'</span>;00705         <a class="code" href="filesys_8c.html#a11">currentFileName</a>[9]=<a class="code" href="buffer_8c.html#a0">diskSect</a>.<a class="code" href="unionDiskBlock.html#o2">dir</a>[<a class="code" href="board_8c.html#a0">temp</a>.<a class="code" href="unionTemp.html#o0">c</a>].<a class="code" href="unionDirRecordUnion.html#o0">entry</a>.<a class="code" href="structDirRecordUnion_1_1Entry.html#o0">Name</a>[8];00706         <a class="code" href="filesys_8c.html#a11">currentFileName</a>[10]=<a class="code" href="buffer_8c.html#a0">diskSect</a>.<a class="code" href="unionDiskBlock.html#o2">dir</a>[<a class="code" href="board_8c.html#a0">temp</a>.<a class="code" href="unionTemp.html#o0">c</a>].<a class="code" href="unionDirRecordUnion.html#o0">entry</a>.<a class="code" href="structDirRecordUnion_1_1Entry.html#o0">Name</a>[9];00707         <a class="code" href="filesys_8c.html#a11">currentFileName</a>[11]=<a class="code" href="buffer_8c.html#a0">diskSect</a>.<a class="code" href="unionDiskBlock.html#o2">dir</a>[<a class="code" href="board_8c.html#a0">temp</a>.<a class="code" href="unionTemp.html#o0">c</a>].<a class="code" href="unionDirRecordUnion.html#o0">entry</a>.<a class="code" href="structDirRecordUnion_1_1Entry.html#o0">Name</a>[10];00708         <a class="code" href="display_8c.html#a2">displayText</a>[0]=<span class="charliteral">' '</span>;00709         <span class="keywordflow">for</span> (tempc=0; tempc&lt;12; tempc++){00710           <a class="code" href="display_8c.html#a2">displayText</a>[tempc+1]=<a class="code" href="filesys_8c.html#a11">currentFileName</a>[tempc];00711         }00712 00713         ConsoleWrite(<span class="stringliteral">"\"\rFile size: "</span>);00714         ConsolePutUInt(<a class="code" href="filesys_8c.html#a7">fileSize</a>);00715         ConsoleWrite(<span class="stringliteral">"bytes. "</span>);00716 00717         ConsoleWrite(<span class="stringliteral">"Start cluster: "</span>);00718         ConsolePutHex8(<a class="code" href="buffer_8c.html#a0">diskSect</a>.<a class="code" href="unionDiskBlock.html#o2">dir</a>[<a class="code" href="board_8c.html#a0">temp</a>.<a class="code" href="unionTemp.html#o0">c</a>].entry.FstClusHi);00719         ConsolePutHex8(<a class="code" href="buffer_8c.html#a0">diskSect</a>.<a class="code" href="unionDiskBlock.html#o2">dir</a>[<a class="code" href="board_8c.html#a0">temp</a>.<a class="code" href="unionTemp.html#o0">c</a>].entry.FstClusLo);00720         ConsoleWrite(<span class="stringliteral">"h, sector "</span>);00721         ConsolePutUInt(<a class="code" href="buffer_8c.html#a2">sectorAddress</a>.<a class="code" href="unionAddress.html#o0">l</a>);00722         ConsoleWrite(<span class="stringliteral">"decimal.\r"</span>);00723         00724         <span class="keywordflow">return</span> 0; <span class="comment">/* File found, All OK return */</span>00725       }00726     } <span class="comment">/* it was a regular file */</span>00727     00728 00729 00730     <span class="comment">/* Is it a subdirectory? */</span>00731     <span class="keywordflow">if</span> (((<a class="code" href="buffer_8c.html#a0">diskSect</a>.<a class="code" href="unionDiskBlock.html#o2">dir</a>[<a class="code" href="board_8c.html#a0">temp</a>.<a class="code" href="unionTemp.html#o0">c</a>].<a class="code" href="unionDirRecordUnion.html#o0">entry</a>.<a class="code" href="structDirRecordUnion_1_1Entry.html#o1">Attr</a> &amp; 16) != 0) 00732         &amp;&amp; (<a class="code" href="buffer_8c.html#a0">diskSect</a>.<a class="code" href="unionDiskBlock.html#o2">dir</a>[<a class="code" href="board_8c.html#a0">temp</a>.<a class="code" href="unionTemp.html#o0">c</a>].<a class="code" href="unionDirRecordUnion.html#o0">entry</a>.<a class="code" href="structDirRecordUnion_1_1Entry.html#o0">Name</a>[0] != <span class="charliteral">'.'</span>) <span class="comment">/* skip . and .. */</span> 00733         &amp;&amp; (<a class="code" href="buffer_8c.html#a0">diskSect</a>.<a class="code" href="unionDiskBlock.html#o2">dir</a>[<a class="code" href="board_8c.html#a0">temp</a>.<a class="code" href="unionTemp.html#o0">c</a>].<a class="code" href="unionDirRecordUnion.html#o0">entry</a>.<a class="code" href="structDirRecordUnion_1_1Entry.html#o0">Name</a>[0] != 0xe5) 00734         &amp;&amp; (<a class="code" href="buffer_8c.html#a0">diskSect</a>.<a class="code" href="unionDiskBlock.html#o2">dir</a>[<a class="code" href="board_8c.html#a0">temp</a>.<a class="code" href="unionTemp.html#o0">c</a>].<a class="code" href="unionDirRecordUnion.html#o0">entry</a>.<a class="code" href="structDirRecordUnion_1_1Entry.html#o0">Name</a>[0] != 0)  ){00735 00736       <span class="comment">/* It is a subdirectory. */</span>00737 00738       <span class="keywordflow">if</span> (<a class="code" href="filesys_8c.html#a9">dirLevel</a>&lt;<a class="code" href="filesys_8c.html#a1">MAX_NUMBER_SUBDIRECTORIES</a>-1){00739         <span class="comment">/* Yes, we have room in dirStack to traverse deeper. */</span>00740         <a class="code" href="filesys_8c.html#a9">dirLevel</a>++; <span class="comment">/* Advance to next directory level */</span>       00741         <a class="code" href="buffer_8c.html#a2">sectorAddress</a>.<a class="code" href="unionAddress.html#o0">l</a> = 00742           ((<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>)<a class="code" href="buffer_8c.html#a0">diskSect</a>.<a class="code" href="unionDiskBlock.html#o2">dir</a>[<a class="code" href="board_8c.html#a0">temp</a>.<a class="code" href="unionTemp.html#o0">c</a>].<a class="code" href="unionDirRecordUnion.html#o0">entry</a>.<a class="code" href="structDirRecordUnion_1_1Entry.html#o7">FstClusHi</a>&lt;&lt;16) 00743           + <a class="code" href="buffer_8c.html#a0">diskSect</a>.<a class="code" href="unionDiskBlock.html#o2">dir</a>[<a class="code" href="board_8c.html#a0">temp</a>.<a class="code" href="unionTemp.html#o0">c</a>].<a class="code" href="unionDirRecordUnion.html#o0">entry</a>.<a class="code" href="structDirRecordUnion_1_1Entry.

⌨️ 快捷键说明

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