📄 tff_8c-source.html
字号:
<a name="l00349"></a>00349 idx = dirobj-><a class="code" href="struct__DIR.html#036a031851bde1b63d85c59293412a8d">index</a> + 1;<a name="l00350"></a>00350 <span class="keywordflow">if</span> ((idx & 15) == 0) { <span class="comment">/* Table sector changed? */</span><a name="l00351"></a>00351 dirobj-><a class="code" href="struct__DIR.html#edba9551167ea52746b5f2c57ddce945">sect</a>++; <span class="comment">/* Next sector */</span><a name="l00352"></a>00352 <span class="keywordflow">if</span> (!dirobj-><a class="code" href="struct__DIR.html#36b08a0927f70fb693aac83949ee19b8">clust</a>) { <span class="comment">/* In static table */</span><a name="l00353"></a>00353 <span class="keywordflow">if</span> (idx >= fs-><a class="code" href="struct__FATFS.html#c33c59bc32161ba408c0b7d4227a9d9e">n_rootdir</a>) <span class="keywordflow">return</span> <a class="code" href="common_8h.html#a93f0eb578d23995850d61f7d61c55c1">FALSE</a>; <span class="comment">/* Reached to end of table */</span><a name="l00354"></a>00354 } <span class="keywordflow">else</span> { <span class="comment">/* In dynamic table */</span><a name="l00355"></a>00355 <span class="keywordflow">if</span> (((idx / 16) & (fs-><a class="code" href="struct__FATFS.html#cf77b8f2c894bc68302efe617ed9e09e">sects_clust</a> - 1)) == 0) { <span class="comment">/* Cluster changed? */</span><a name="l00356"></a>00356 clust = get_cluster(dirobj-><a class="code" href="struct__DIR.html#36b08a0927f70fb693aac83949ee19b8">clust</a>); <span class="comment">/* Get next cluster */</span><a name="l00357"></a>00357 <span class="keywordflow">if</span> (clust < 2 || clust >= fs-><a class="code" href="struct__FATFS.html#7f5a5466252185cec7c0903feaf6d702">max_clust</a>) <span class="comment">/* Reached to end of table */</span><a name="l00358"></a>00358 <span class="keywordflow">return</span> <a class="code" href="common_8h.html#a93f0eb578d23995850d61f7d61c55c1">FALSE</a>;<a name="l00359"></a>00359 dirobj-><a class="code" href="struct__DIR.html#36b08a0927f70fb693aac83949ee19b8">clust</a> = clust; <span class="comment">/* Initialize for new cluster */</span><a name="l00360"></a>00360 dirobj-><a class="code" href="struct__DIR.html#edba9551167ea52746b5f2c57ddce945">sect</a> = clust2sect(clust);<a name="l00361"></a>00361 }<a name="l00362"></a>00362 }<a name="l00363"></a>00363 }<a name="l00364"></a>00364 dirobj-><a class="code" href="struct__DIR.html#036a031851bde1b63d85c59293412a8d">index</a> = idx; <span class="comment">/* Lower 4 bit of dirobj->index indicates offset in dirobj->sect */</span><a name="l00365"></a>00365 <span class="keywordflow">return</span> <a class="code" href="common_8h.html#a8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;<a name="l00366"></a>00366 }<a name="l00367"></a>00367 <a name="l00368"></a>00368 <a name="l00369"></a>00369 <a name="l00370"></a>00370 <a name="l00371"></a>00371 <span class="comment">/*-----------------------------------------------------------------------*/</span><a name="l00372"></a>00372 <span class="comment">/* Get file status from directory entry */</span><a name="l00373"></a>00373 <span class="comment">/*-----------------------------------------------------------------------*/</span><a name="l00374"></a>00374 <a name="l00375"></a>00375 <span class="preprocessor">#if _FS_MINIMIZE <= 1</span><a name="l00376"></a>00376 <span class="preprocessor"></span><span class="keyword">static</span><a name="l00377"></a>00377 <span class="keywordtype">void</span> get_fileinfo ( <span class="comment">/* No return code */</span><a name="l00378"></a>00378 <a class="code" href="struct__FILINFO.html">FILINFO</a> *finfo, <span class="comment">/* Ptr to store the File Information */</span><a name="l00379"></a>00379 <span class="keyword">const</span> BYTE *dir <span class="comment">/* Ptr to the directory entry */</span><a name="l00380"></a>00380 )<a name="l00381"></a>00381 {<a name="l00382"></a>00382 BYTE n, c, a;<a name="l00383"></a>00383 <span class="keywordtype">char</span> *p;<a name="l00384"></a>00384 <a name="l00385"></a>00385 <a name="l00386"></a>00386 p = &finfo-><a class="code" href="struct__FILINFO.html#7279fa6b57203d143e96021a099e7e57">fname</a>[0];<a name="l00387"></a>00387 a = _USE_NTFLAG ? dir[DIR_NTres] : 0; <span class="comment">/* NT flag */</span><a name="l00388"></a>00388 <span class="keywordflow">for</span> (n = 0; n < 8; n++) { <span class="comment">/* Convert file name (body) */</span><a name="l00389"></a>00389 c = dir[n];<a name="l00390"></a>00390 <span class="keywordflow">if</span> (c == <span class="charliteral">' '</span>) <span class="keywordflow">break</span>;<a name="l00391"></a>00391 <span class="keywordflow">if</span> (c == 0x05) c = 0xE5;<a name="l00392"></a>00392 <span class="keywordflow">if</span> (a & 0x08 && c >= <span class="charliteral">'A'</span> && c <= <span class="charliteral">'Z'</span>) c += 0x20;<a name="l00393"></a>00393 *p++ = c;<a name="l00394"></a>00394 }<a name="l00395"></a>00395 <span class="keywordflow">if</span> (dir[8] != <span class="charliteral">' '</span>) { <span class="comment">/* Convert file name (extension) */</span><a name="l00396"></a>00396 *p++ = <span class="charliteral">'.'</span>;<a name="l00397"></a>00397 <span class="keywordflow">for</span> (n = 8; n < 11; n++) {<a name="l00398"></a>00398 c = dir[n];<a name="l00399"></a>00399 <span class="keywordflow">if</span> (c == <span class="charliteral">' '</span>) <span class="keywordflow">break</span>;<a name="l00400"></a>00400 <span class="keywordflow">if</span> (a & 0x10 && c >= <span class="charliteral">'A'</span> && c <= <span class="charliteral">'Z'</span>) c += 0x20;<a name="l00401"></a>00401 *p++ = c;<a name="l00402"></a>00402 }<a name="l00403"></a>00403 }<a name="l00404"></a>00404 *p = <span class="charliteral">'\0'</span>;<a name="l00405"></a>00405 <a name="l00406"></a>00406 finfo-><a class="code" href="struct__FILINFO.html#983a99f79b704ced3a6cb640719aa679">fattrib</a> = dir[DIR_Attr]; <span class="comment">/* Attribute */</span><a name="l00407"></a>00407 finfo-><a class="code" href="struct__FILINFO.html#385f3afc63d4bcb8b3ffa9bf233d192e">fsize</a> = LD_DWORD(&dir[DIR_FileSize]); <span class="comment">/* Size */</span><a name="l00408"></a>00408 finfo-><a class="code" href="struct__FILINFO.html#02a8fc36e823eb9ebe84d9e7342c218e">fdate</a> = LD_WORD(&dir[DIR_WrtDate]); <span class="comment">/* Date */</span><a name="l00409"></a>00409 finfo-><a class="code" href="struct__FILINFO.html#c9b7c36ac48cb9b7fdd4ca0aae8b00b7">ftime</a> = LD_WORD(&dir[DIR_WrtTime]); <span class="comment">/* Time */</span><a name="l00410"></a>00410 }<a name="l00411"></a>00411 <span class="preprocessor">#endif </span><span class="comment">/* _FS_MINIMIZE <= 1 */</span><a name="l00412"></a>00412 <a name="l00413"></a>00413 <a name="l00414"></a>00414 <a name="l00415"></a>00415 <a name="l00416"></a>00416 <span class="comment">/*-----------------------------------------------------------------------*/</span><a name="l00417"></a>00417 <span class="comment">/* Pick a paragraph and create the name in format of directory entry */</span><a name="l00418"></a>00418 <span class="comment">/*-----------------------------------------------------------------------*/</span><a name="l00419"></a>00419 <a name="l00420"></a>00420 <span class="keyword">static</span><a name="l00421"></a>00421 <span class="keywordtype">char</span> make_dirfile ( <span class="comment">/* 1: error - detected an invalid format, '\0'or'/': next character */</span><a name="l00422"></a>00422 <span class="keyword">const</span> <span class="keywordtype">char</span> **path, <span class="comment">/* Pointer to the file path pointer */</span><a name="l00423"></a>00423 <span class="keywordtype">char</span> *dirname <span class="comment">/* Pointer to directory name buffer {Name(8), Ext(3), NT flag(1)} */</span><a name="l00424"></a>00424 )<a name="l00425"></a>00425 {<a name="l00426"></a>00426 BYTE n, t, c, a, b;<a name="l00427"></a>00427 <a name="l00428"></a>00428 <a name="l00429"></a>00429 memset(dirname, <span class="charliteral">' '</span>, 8+3); <span class="comment">/* Fill buffer with spaces */</span><a name="l00430"></a>00430 a = 0; b = 0x18; <span class="comment">/* NT flag */</span><a name="l00431"></a>00431 n = 0; t = 8;<a name="l00432"></a>00432 <span class="keywordflow">for</span> (;;) {<a name="l00433"></a>00433 c = *(*path)++;<a name="l00434"></a>00434 <span class="keywordflow">if</span> (c == <span class="charliteral">'\0'</span> || c == <span class="charliteral">'/'</span>) { <span class="comment">/* Reached to end of str or directory separator */</span><a name="l00435"></a>00435 <span class="keywordflow">if</span> (n == 0) <span class="keywordflow">break</span>;<a name="l00436"></a>00436 dirname[11] = _USE_NTFLAG ? (a & b) : 0;<a name="l00437"></a>00437 <span class="keywordflow">return</span> c;<a name="l00438"></a>00438 }<a name="l00439"></a>00439 <span class="keywordflow">if</span> (c <= <span class="charliteral">' '</span> || c == 0x7F) <span class="keywordflow">break</span>; <span class="comment">/* Reject invisible chars */</span><a name="l00440"></a>00440 <span class="keywordflow">if</span> (c == <span class="charliteral">'.'</span>) {<a name="l00441"></a>00441 <span class="keywordflow">if</span> (!(a & 1) && n >= 1 && n <= 8) { <span class="comment">/* Enter extension part */</span><a name="l00442"></a>00442 n = 8; t = 11; <span class="keywordflow">continue</span>;<a name="l00443"></a>00443 }<a name="l00444"></a>00444 <span class="keywordflow">break</span>;<a name="l00445"></a>00445 }<a name="l00446"></a>00446 <span class="keywordflow">if</span> (_USE_SJIS && <a name="l00447"></a>00447 ((c >= 0x81 && c <= 0x9F) || <span class="comment">/* Accept S-JIS code */</span><a name="l00448"></a>00448 (c >= 0xE0 && c <= 0xFC))) {<a name="l00449"></a>00449 <span class="keywordflow">if</span> (n == 0 && c == 0xE5) <span class="comment">/* Change heading \xE5 to \x05 */</span><a name="l00450"></a>00450 c = 0x05;<a name="l00451"></a>00451 a ^= 1; <span class="keywordflow">goto</span> md_l2;<a name="l00452"></a>00452 }<a name="l00453"></a>00453 <span class="keywordflow">if</span> (c == <span class="charliteral">'"'</span>) <span class="keywordflow">break</span>; <span class="comment">/* Reject " */</span><a name="l00454"></a>00454 <span class="keywordflow">if</span> (c <= <span class="charliteral">')'</span>) <span class="keywordflow">goto</span> md_l1; <span class="comment">/* Accept ! # $ % & ' ( ) */</span><a name="l00455"></a>00455 <span class="keywordflow">if</span> (c <= <span class="charliteral">','</span>) <span class="keywordflow">break</span>; <span class="comment">/* Reject * + , */</span><a name="l00456"></a>00456 <span class="keywordflow">if</span> (c <= <span class="charliteral">'9'</span>) <span class="keywordflow">goto</span> md_l1; <span class="comment">/* Accept - 0-9 */</span><a name="l00457"></a>00457 <span class="keywordflow">if</span> (c <= <span class="charliteral">'?'</span>) <span class="keywordflow">break</span>; <span class="comment">/* Reject : ; < = > ? */</span><a name="l00458"></a>00458 <span class="keywordflow">if</span> (!(a & 1)) { <span class="comment">/* These checks are not applied to S-JIS 2nd byte */</span><a name="l00459"></a>00459 <span class="keywordflow">if</span> (c == <span class="charliteral">'|'</span>) <span class="keywordflow">break</span>; <span class="comment">/* Reject | */</span><a name="l00460"></a>00460 <span class="keywordflow">if</span> (c >= <span class="charliteral">'['</span> && c <= <span class="charliteral">']'</span>) <span class="keywordflow">break</span>;<span class="comment">/* Reject [ \ ] */</span><a name="l00461"></a>00461 <span class="keywordflow">if</span> (_USE_NTFLAG && c >= <span class="charliteral">'A'</span> && c <= <span class="charliteral">'Z'</span>)<a name="l00462"></a>00462 (t == 8) ? (b &= ~0x08) : (b &= ~0x10);<a name="l00463"></a>00463 <span class="keywordflow">if</span> (c >= <span class="charliteral">'a'</span> && c <= <span class="charliteral">'z'</span>) { <span class="comment">/* Convert to upper case */</span><a name="l00464"></a>00464 c -= 0x20;<a name="l00465"></a>00465 <span class="keywordflow">if</span> (_USE_NTFLAG) (t == 8) ? (a |= 0x08) : (a |= 0x10);<a name="l00466"></a>00466 }<a name="l00467"></a>00467 }<a name="l00468"></a>00468 md_l1:<a name="l00469"></a>00469 a &= ~1;<a name="l00470"></a>00470 md_l2:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -