📄 filesys_8c-source.html
字号:
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>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> >> 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> & 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> & 222) == 0) 00678 && (<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 && (<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><<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<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<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<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> & 16) != 0) 00732 && (<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 && (<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 && (<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><<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><<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 + -