1 /*---------------------------------------------------------------------------/ 
   2 /  FatFs - FAT file system module include file  R0.07e       (C)ChaN, 2010 
   3 /----------------------------------------------------------------------------/ 
   4 / FatFs module is a generic FAT file system module for small embedded systems. 
   5 / This is a free software that opened for education, research and commercial 
   6 / developments under license policy of following trems. 
   8 /  Copyright (C) 2010, ChaN, all right reserved. 
  10 / * The FatFs module is a free software and there is NO WARRANTY. 
  11 / * No restriction on use. You can use, modify and redistribute it for 
  12 /   personal, non-profit or commercial product UNDER YOUR RESPONSIBILITY. 
  13 / * Redistributions of source code must retain the above copyright notice. 
  14 /----------------------------------------------------------------------------*/ 
  19 #include "integer.h"    /* Basic integer types */ 
  20 #include "ffconf.h"             /* FatFs configuration options */ 
  22 #if _FATFS != _FFCONFIG 
  23 #error Wrong configuration file (ffconf.h). 
  27 /* DBCS code ranges and SBCS extend char conversion table */ 
  29 #if _CODE_PAGE == 932   /* Japanese Shift-JIS */ 
  30 #define _DF1S   0x81    /* DBC 1st byte range 1 start */ 
  31 #define _DF1E   0x9F    /* DBC 1st byte range 1 end */ 
  32 #define _DF2S   0xE0    /* DBC 1st byte range 2 start */ 
  33 #define _DF2E   0xFC    /* DBC 1st byte range 2 end */ 
  34 #define _DS1S   0x40    /* DBC 2nd byte range 1 start */ 
  35 #define _DS1E   0x7E    /* DBC 2nd byte range 1 end */ 
  36 #define _DS2S   0x80    /* DBC 2nd byte range 2 start */ 
  37 #define _DS2E   0xFC    /* DBC 2nd byte range 2 end */ 
  39 #elif _CODE_PAGE == 936 /* Simplified Chinese GBK */ 
  47 #elif _CODE_PAGE == 949 /* Korean */ 
  57 #elif _CODE_PAGE == 950 /* Traditional Chinese Big5 */ 
  65 #elif _CODE_PAGE == 437 /* U.S. (OEM) */ 
  67 #define _EXCVT {0x80,0x9A,0x90,0x41,0x8E,0x41,0x8F,0x80,0x45,0x45,0x45,0x49,0x49,0x49,0x8E,0x8F,0x90,0x92,0x92,0x4F,0x99,0x4F,0x55,0x55,0x59,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ 
  68                                 0x41,0x49,0x4F,0x55,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0x21,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ 
  69                                 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ 
  70                                 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} 
  72 #elif _CODE_PAGE == 720 /* Arabic (OEM) */ 
  74 #define _EXCVT {0x80,0x81,0x45,0x41,0x84,0x41,0x86,0x43,0x45,0x45,0x45,0x49,0x49,0x8D,0x8E,0x8F,0x90,0x92,0x92,0x93,0x94,0x95,0x49,0x49,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ 
  75                                 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ 
  76                                 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ 
  77                                 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} 
  79 #elif _CODE_PAGE == 737 /* Greek (OEM) */ 
  81 #define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x92,0x92,0x93,0x94,0x95,0x96,0x97,0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87, \ 
  82                                 0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0xAA,0x92,0x93,0x94,0x95,0x96,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ 
  83                                 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ 
  84                                 0x97,0xEA,0xEB,0xEC,0xE4,0xED,0xEE,0xE7,0xE8,0xF1,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} 
  86 #elif _CODE_PAGE == 775 /* Baltic (OEM) */ 
  88 #define _EXCVT {0x80,0x9A,0x91,0xA0,0x8E,0x95,0x8F,0x80,0xAD,0xED,0x8A,0x8A,0xA1,0x8D,0x8E,0x8F,0x90,0x92,0x92,0xE2,0x99,0x95,0x96,0x97,0x97,0x99,0x9A,0x9D,0x9C,0x9D,0x9E,0x9F, \ 
  89                                 0xA0,0xA1,0xE0,0xA3,0xA3,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ 
  90                                 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xB5,0xB6,0xB7,0xB8,0xBD,0xBE,0xC6,0xC7,0xA5,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ 
  91                                 0xE0,0xE1,0xE2,0xE3,0xE5,0xE5,0xE6,0xE3,0xE8,0xE8,0xEA,0xEA,0xEE,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} 
  93 #elif _CODE_PAGE == 850 /* Multilingual Latin 1 (OEM) */ 
  95 #define _EXCVT {0x80,0x9A,0x90,0xB6,0x8E,0xB7,0x8F,0x80,0xD2,0xD3,0xD4,0xD8,0xD7,0xDE,0x8E,0x8F,0x90,0x92,0x92,0xE2,0x99,0xE3,0xEA,0xEB,0x59,0x99,0x9A,0x9D,0x9C,0x9D,0x9E,0x9F, \ 
  96                                 0xB5,0xD6,0xE0,0xE9,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0x21,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ 
  97                                 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC7,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ 
  98                                 0xE0,0xE1,0xE2,0xE3,0xE5,0xE5,0xE6,0xE7,0xE7,0xE9,0xEA,0xEB,0xED,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} 
 100 #elif _CODE_PAGE == 852 /* Latin 2 (OEM) */ 
 102 #define _EXCVT {0x80,0x9A,0x90,0xB6,0x8E,0xDE,0x8F,0x80,0x9D,0xD3,0x8A,0x8A,0xD7,0x8D,0x8E,0x8F,0x90,0x91,0x91,0xE2,0x99,0x95,0x95,0x97,0x97,0x99,0x9A,0x9B,0x9B,0x9D,0x9E,0x9F, \ 
 103                                 0xB5,0xD6,0xE0,0xE9,0xA4,0xA4,0xA6,0xA6,0xA8,0xA8,0xAA,0x8D,0xAC,0xB8,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBD,0xBF, \ 
 104                                 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC6,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD1,0xD1,0xD2,0xD3,0xD2,0xD5,0xD6,0xD7,0xB7,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ 
 105                                 0xE0,0xE1,0xE2,0xE3,0xE3,0xD5,0xE6,0xE6,0xE8,0xE9,0xE8,0xEB,0xED,0xED,0xDD,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xEB,0xFC,0xFC,0xFE,0xFF} 
 107 #elif _CODE_PAGE == 855 /* Cyrillic (OEM) */ 
 109 #define _EXCVT {0x81,0x81,0x83,0x83,0x85,0x85,0x87,0x87,0x89,0x89,0x8B,0x8B,0x8D,0x8D,0x8F,0x8F,0x91,0x91,0x93,0x93,0x95,0x95,0x97,0x97,0x99,0x99,0x9B,0x9B,0x9D,0x9D,0x9F,0x9F, \ 
 110                                 0xA1,0xA1,0xA3,0xA3,0xA5,0xA5,0xA7,0xA7,0xA9,0xA9,0xAB,0xAB,0xAD,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB6,0xB6,0xB8,0xB8,0xB9,0xBA,0xBB,0xBC,0xBE,0xBE,0xBF, \ 
 111                                 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC7,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD1,0xD1,0xD3,0xD3,0xD5,0xD5,0xD7,0xD7,0xDD,0xD9,0xDA,0xDB,0xDC,0xDD,0xE0,0xDF, \ 
 112                                 0xE0,0xE2,0xE2,0xE4,0xE4,0xE6,0xE6,0xE8,0xE8,0xEA,0xEA,0xEC,0xEC,0xEE,0xEE,0xEF,0xF0,0xF2,0xF2,0xF4,0xF4,0xF6,0xF6,0xF8,0xF8,0xFA,0xFA,0xFC,0xFC,0xFD,0xFE,0xFF} 
 114 #elif _CODE_PAGE == 857 /* Turkish (OEM) */ 
 116 #define _EXCVT {0x80,0x9A,0x90,0xB6,0x8E,0xB7,0x8F,0x80,0xD2,0xD3,0xD4,0xD8,0xD7,0x98,0x8E,0x8F,0x90,0x92,0x92,0xE2,0x99,0xE3,0xEA,0xEB,0x98,0x99,0x9A,0x9D,0x9C,0x9D,0x9E,0x9E, \ 
 117                                 0xB5,0xD6,0xE0,0xE9,0xA5,0xA5,0xA6,0xA6,0xA8,0xA9,0xAA,0xAB,0xAC,0x21,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ 
 118                                 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC7,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ 
 119                                 0xE0,0xE1,0xE2,0xE3,0xE5,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xDE,0x59,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} 
 121 #elif _CODE_PAGE == 858 /* Multilingual Latin 1 + Euro (OEM) */ 
 123 #define _EXCVT {0x80,0x9A,0x90,0xB6,0x8E,0xB7,0x8F,0x80,0xD2,0xD3,0xD4,0xD8,0xD7,0xDE,0x8E,0x8F,0x90,0x92,0x92,0xE2,0x99,0xE3,0xEA,0xEB,0x59,0x99,0x9A,0x9D,0x9C,0x9D,0x9E,0x9F, \ 
 124                                 0xB5,0xD6,0xE0,0xE9,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0x21,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ 
 125                                 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC7,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD1,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ 
 126                                 0xE0,0xE1,0xE2,0xE3,0xE5,0xE5,0xE6,0xE7,0xE7,0xE9,0xEA,0xEB,0xED,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} 
 128 #elif _CODE_PAGE == 862 /* Hebrew (OEM) */ 
 130 #define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ 
 131                                 0x41,0x49,0x4F,0x55,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0x21,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ 
 132                                 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ 
 133                                 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} 
 135 #elif _CODE_PAGE == 866 /* Russian (OEM) */ 
 137 #define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ 
 138                                 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ 
 139                                 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ 
 140                                 0x90,0x91,0x92,0x93,0x9d,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F,0xF0,0xF0,0xF2,0xF2,0xF4,0xF4,0xF6,0xF6,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} 
 142 #elif _CODE_PAGE == 874 /* Thai (OEM, Windows) */ 
 144 #define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ 
 145                                 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ 
 146                                 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ 
 147                                 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} 
 149 #elif _CODE_PAGE == 1250 /* Central Europe (Windows) */ 
 151 #define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x8A,0x9B,0x8C,0x8D,0x8E,0x8F, \ 
 152                                 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xA3,0xB4,0xB5,0xB6,0xB7,0xB8,0xA5,0xAA,0xBB,0xBC,0xBD,0xBC,0xAF, \ 
 153                                 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ 
 154                                 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xF7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xFF} 
 156 #elif _CODE_PAGE == 1251 /* Cyrillic (Windows) */ 
 158 #define _EXCVT {0x80,0x81,0x82,0x82,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x80,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x8A,0x9B,0x8C,0x8D,0x8E,0x8F, \ 
 159                                 0xA0,0xA2,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB2,0xA5,0xB5,0xB6,0xB7,0xA8,0xB9,0xAA,0xBB,0xA3,0xBD,0xBD,0xAF, \ 
 160                                 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ 
 161                                 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF} 
 163 #elif _CODE_PAGE == 1252 /* Latin 1 (Windows) */ 
 165 #define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0xAd,0x9B,0x8C,0x9D,0xAE,0x9F, \ 
 166                                 0xA0,0x21,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ 
 167                                 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ 
 168                                 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xF7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0x9F} 
 170 #elif _CODE_PAGE == 1253 /* Greek (Windows) */ 
 172 #define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ 
 173                                 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ 
 174                                 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xA2,0xB8,0xB9,0xBA, \ 
 175                                 0xE0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xF2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xFB,0xBC,0xFD,0xBF,0xFF} 
 177 #elif _CODE_PAGE == 1254 /* Turkish (Windows) */ 
 179 #define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x8A,0x9B,0x8C,0x9D,0x9E,0x9F, \ 
 180                                 0xA0,0x21,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ 
 181                                 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ 
 182                                 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xF7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0x9F} 
 184 #elif _CODE_PAGE == 1255 /* Hebrew (Windows) */ 
 186 #define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ 
 187                                 0xA0,0x21,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ 
 188                                 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ 
 189                                 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} 
 191 #elif _CODE_PAGE == 1256 /* Arabic (Windows) */ 
 193 #define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x8C,0x9D,0x9E,0x9F, \ 
 194                                 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ 
 195                                 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ 
 196                                 0x41,0xE1,0x41,0xE3,0xE4,0xE5,0xE6,0x43,0x45,0x45,0x45,0x45,0xEC,0xED,0x49,0x49,0xF0,0xF1,0xF2,0xF3,0x4F,0xF5,0xF6,0xF7,0xF8,0x55,0xFA,0x55,0x55,0xFD,0xFE,0xFF} 
 198 #elif _CODE_PAGE == 1257 /* Baltic (Windows) */ 
 200 #define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ 
 201                                 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xA8,0xB9,0xAA,0xBB,0xBC,0xBD,0xBE,0xAF, \ 
 202                                 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ 
 203                                 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xF7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xFF} 
 205 #elif _CODE_PAGE == 1258 /* Vietnam (OEM, Windows) */ 
 207 #define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0xAC,0x9D,0x9E,0x9F, \ 
 208                                 0xA0,0x21,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ 
 209                                 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ 
 210                                 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xEC,0xCD,0xCE,0xCF,0xD0,0xD1,0xF2,0xD3,0xD4,0xD5,0xD6,0xF7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xFE,0x9F} 
 212 #elif _CODE_PAGE == 1   /* ASCII (for only non-LFN cfg) */ 
 216 #error Unknown code page 
 222 /* Character code support macros */ 
 224 #define IsUpper(c)      (((c)>='A')&&((c)<='Z')) 
 225 #define IsLower(c)      (((c)>='a')&&((c)<='z')) 
 227 #if _DF1S               /* DBCS configuration */ 
 229 #ifdef _DF2S    /* Two 1st byte areas */ 
 230 #define IsDBCS1(c)      (((BYTE)(c) >= _DF1S && (BYTE)(c) <= _DF1E) || ((BYTE)(c) >= _DF2S && (BYTE)(c) <= _DF2E)) 
 231 #else                   /* One 1st byte area */ 
 232 #define IsDBCS1(c)      ((BYTE)(c) >= _DF1S && (BYTE)(c) <= _DF1E) 
 235 #ifdef _DS3S    /* Three 2nd byte areas */ 
 236 #define IsDBCS2(c)      (((BYTE)(c) >= _DS1S && (BYTE)(c) <= _DS1E) || ((BYTE)(c) >= _DS2S && (BYTE)(c) <= _DS2E) || ((BYTE)(c) >= _DS3S && (BYTE)(c) <= _DS3E)) 
 237 #else                   /* Two 2nd byte areas */ 
 238 #define IsDBCS2(c)      (((BYTE)(c) >= _DS1S && (BYTE)(c) <= _DS1E) || ((BYTE)(c) >= _DS2S && (BYTE)(c) <= _DS2E)) 
 241 #else                   /* SBCS configuration */ 
 250 /* Definitions corresponds to multi partition */ 
 252 #if _MULTI_PARTITION            /* Multiple partition configuration */ 
 254 typedef struct _PARTITION 
{ 
 255         BYTE pd
;        /* Physical drive# */ 
 256         BYTE pt
;        /* Partition # (0-3) */ 
 260 const PARTITION Drives
[];                       /* Logical drive# to physical location conversion table */ 
 261 #define LD2PD(drv) (Drives[drv].pd)     /* Get physical drive# */ 
 262 #define LD2PT(drv) (Drives[drv].pt)     /* Get partition# */ 
 264 #else                                           /* Single partition configuration */ 
 266 #define LD2PD(drv) (drv)        /* Physical drive# is equal to the logical drive# */ 
 267 #define LD2PT(drv) 0            /* Always mounts the 1st partition */ 
 273 /* Definitions corresponds to multiple sector size */ 
 275 #if _MAX_SS == 512              /* Single sector size */ 
 278 #elif _MAX_SS == 1024 || _MAX_SS == 2048 || _MAX_SS == 4096     /* Multiple sector size */ 
 279 #define SS(fs)  ((fs)->s_size) 
 282 #error Sector size must be 512, 1024, 2048 or 4096. 
 288 /* Type of file name on FatFs API */ 
 290 #if _LFN_UNICODE && _USE_LFN 
 291 typedef WCHAR XCHAR
;    /* Unicode */ 
 293 typedef char XCHAR
;             /* SBCS, DBCS */ 
 298 /* File system object structure */ 
 300 typedef struct _FATFS_ 
{ 
 301         BYTE    fs_type
;        /* FAT sub type */ 
 302         BYTE    drive
;          /* Physical drive number */ 
 303         BYTE    csize
;          /* Number of sectors per cluster */ 
 304         BYTE    n_fats
;         /* Number of FAT copies */ 
 305         BYTE    wflag
;          /* win[] dirty flag (1:must be written back) */ 
 306         BYTE    fsi_flag
;       /* fsinfo dirty flag (1:must be written back) */ 
 307         WORD    id
;                     /* File system mount ID */ 
 308         WORD    n_rootdir
;      /* Number of root directory entries (0 on FAT32) */ 
 310         _SYNC_t sobj
;           /* Identifier of sync object */ 
 313         WORD    s_size
;         /* Sector size */ 
 316         DWORD   last_clust
;     /* Last allocated cluster */ 
 317         DWORD   free_clust
;     /* Number of free clusters */ 
 318         DWORD   fsi_sector
;     /* fsinfo sector */ 
 321         DWORD   cdir
;           /* Current directory (0:root)*/ 
 323         DWORD   sects_fat
;      /* Sectors per fat */ 
 324         DWORD   max_clust
;      /* Maximum cluster# + 1. Number of clusters is max_clust - 2 */ 
 325         DWORD   fatbase
;        /* FAT start sector */ 
 326         DWORD   dirbase
;        /* Root directory start sector (Cluster# on FAT32) */ 
 327         DWORD   database
;       /* Data start sector */ 
 328         DWORD   winsect
;        /* Current sector appearing in the win[] */ 
 329         BYTE    win
[_MAX_SS
];/* Disk access window for Directory/FAT */ 
 334 /* Directory object structure */ 
 336 typedef struct _DIR_ 
{ 
 337         FATFS
*  fs
;                     /* Pointer to the owner file system object */ 
 338         WORD    id
;                     /* Owner file system mount ID */ 
 339         WORD    index
;          /* Current read/write index number */ 
 340         DWORD   sclust
;         /* Table start cluster (0:Static table) */ 
 341         DWORD   clust
;          /* Current cluster */ 
 342         DWORD   sect
;           /* Current sector */ 
 343         BYTE
*   dir
;            /* Pointer to the current SFN entry in the win[] */ 
 344         BYTE
*   fn
;                     /* Pointer to the SFN (in/out) {file[8],ext[3],status[1]} */ 
 346         WCHAR
*  lfn
;            /* Pointer to the LFN working buffer */ 
 347         WORD    lfn_idx
;        /* Last matched LFN index number (0xFFFF:No LFN) */ 
 353 /* File object structure */ 
 355 typedef struct _FIL_ 
{ 
 356         FATFS
*  fs
;                     /* Pointer to the owner file system object */ 
 357         WORD    id
;                     /* Owner file system mount ID */ 
 358         BYTE    flag
;           /* File status flags */ 
 359         BYTE    csect
;          /* Sector address in the cluster */ 
 360         DWORD   fptr
;           /* File R/W pointer */ 
 361         DWORD   fsize
;          /* File size */ 
 362         DWORD   org_clust
;      /* File start cluster */ 
 363         DWORD   curr_clust
;     /* Current cluster */ 
 364         DWORD   dsect
;          /* Current data sector */ 
 366         DWORD   dir_sect
;       /* Sector containing the directory entry */ 
 367         BYTE
*   dir_ptr
;        /* Ponter to the directory entry in the window */ 
 370         BYTE    buf
[_MAX_SS
];/* File R/W buffer */ 
 376 /* File status structure */ 
 378 typedef struct _FILINFO_ 
{ 
 379         DWORD   fsize
;          /* File size */ 
 380         WORD    fdate
;          /* Last modified date */ 
 381         WORD    ftime
;          /* Last modified time */ 
 382         BYTE    fattrib
;        /* Attribute */ 
 383         char    fname
[13];      /* Short file name (8.3 format) */ 
 385         XCHAR
*  lfname
;         /* Pointer to the LFN buffer */ 
 386         int     lfsize
;         /* Size of LFN buffer [chrs] */ 
 392 /* File function return code (FRESULT) */ 
 398         FR_NOT_READY
,           /* 3 */ 
 401         FR_INVALID_NAME
,        /* 6 */ 
 404         FR_INVALID_OBJECT
,      /* 9 */ 
 405         FR_WRITE_PROTECTED
,     /* 10 */ 
 406         FR_INVALID_DRIVE
,       /* 11 */ 
 407         FR_NOT_ENABLED
,         /* 12 */ 
 408         FR_NO_FILESYSTEM
,       /* 13 */ 
 409         FR_MKFS_ABORTED
,        /* 14 */ 
 415 /*--------------------------------------------------------------*/ 
 416 /* FatFs module application interface                           */ 
 418 FRESULT 
f_mount (BYTE
, FATFS
*);                                         /* Mount/Unmount a logical drive */ 
 419 FRESULT 
f_open (FIL
*, const XCHAR
*, BYTE
);                      /* Open or create a file */ 
 420 FRESULT 
f_read (FIL
*, void*, UINT
, UINT
*);                      /* Read data from a file */ 
 421 FRESULT 
f_write (FIL
*, const void*, UINT
, UINT
*);       /* Write data to a file */ 
 422 FRESULT 
f_lseek (FIL
*, DWORD
);                                          /* Move file pointer of a file object */ 
 423 FRESULT 
f_close (FIL
*);                                                         /* Close an open file object */ 
 424 FRESULT 
f_opendir (DIR*, const XCHAR
*);                         /* Open an existing directory */ 
 425 FRESULT 
f_readdir (DIR*, FILINFO
*);                                     /* Read a directory item */ 
 426 FRESULT 
f_stat (const XCHAR
*, FILINFO
*);                        /* Get file status */ 
 427 FRESULT 
f_getfree (const XCHAR
*, DWORD
*, FATFS
**);      /* Get number of free clusters on the drive */ 
 428 FRESULT 
f_truncate (FIL
*);                                                      /* Truncate file */ 
 429 FRESULT 
f_sync (FIL
*);                                                          /* Flush cached data of a writing file */ 
 430 FRESULT 
f_unlink (const XCHAR
*);                                        /* Delete an existing file or directory */ 
 431 FRESULT 
f_mkdir (const XCHAR
*);                                         /* Create a new directory */ 
 432 FRESULT 
f_chmod (const XCHAR
*, BYTE
, BYTE
);                     /* Change attriburte of the file/dir */ 
 433 FRESULT 
f_utime (const XCHAR
*, const FILINFO
*);         /* Change timestamp of the file/dir */ 
 434 FRESULT 
f_rename (const XCHAR
*, const XCHAR
*);          /* Rename/Move a file or directory */ 
 435 FRESULT 
f_forward (FIL
*, UINT(*)(const BYTE
*,UINT
), UINT
, UINT
*);       /* Forward data to the stream */ 
 436 FRESULT 
f_mkfs (BYTE
, BYTE
, WORD
);                                      /* Create a file system on the drive */ 
 437 FRESULT 
f_chdir (const XCHAR
*);                                         /* Change current directory */ 
 438 FRESULT 
f_chdrive (BYTE
);                                                       /* Change current drive */ 
 441 int f_putc (int, FIL
*);                                                         /* Put a character to the file */ 
 442 int f_puts (const char*, FIL
*);                                         /* Put a string to the file */ 
 443 int f_printf (FIL
*, const char*, ...);                          /* Put a formatted string to the file */ 
 444 char* f_gets (char*, int, FIL
*);                                        /* Get a string from the file */ 
 445 #define f_eof(fp) (((fp)->fptr == (fp)->fsize) ? 1 : 0) 
 446 #define f_error(fp) (((fp)->flag & FA__ERROR) ? 1 : 0) 
 454 /*--------------------------------------------------------------*/ 
 455 /* User defined functions                                       */ 
 457 /* Real time clock */ 
 459 DWORD 
get_fattime (void);       /* 31-25: Year(0-127 org.1980), 24-21: Month(1-12), 20-16: Day(1-31) */ 
 460                                                         /* 15-11: Hour(0-23), 10-5: Minute(0-59), 4-0: Second(0-29 *2) */ 
 463 /* Unicode - OEM code conversion */ 
 465 WCHAR 
ff_convert (WCHAR
, UINT
); 
 466 WCHAR 
ff_wtoupper (WCHAR
); 
 471 BOOL 
ff_cre_syncobj(BYTE
, _SYNC_t
*); 
 472 BOOL 
ff_del_syncobj(_SYNC_t
); 
 473 BOOL 
ff_req_grant(_SYNC_t
); 
 474 void ff_rel_grant(_SYNC_t
); 
 479 /*--------------------------------------------------------------*/ 
 480 /* Flags and offset address                                     */ 
 483 /* File access control and file status flags (FIL.flag) */ 
 486 #define FA_OPEN_EXISTING        0x00 
 487 #if _FS_READONLY == 0 
 488 #define FA_WRITE                        0x02 
 489 #define FA_CREATE_NEW           0x04 
 490 #define FA_CREATE_ALWAYS        0x08 
 491 #define FA_OPEN_ALWAYS          0x10 
 492 #define FA__WRITTEN                     0x20 
 493 #define FA__DIRTY                       0x40 
 495 #define FA__ERROR                       0x80 
 498 /* FAT sub type (FATFS.fs_type) */ 
 505 /* File attribute bits for directory entry */ 
 507 #define AM_RDO  0x01    /* Read only */ 
 508 #define AM_HID  0x02    /* Hidden */ 
 509 #define AM_SYS  0x04    /* System */ 
 510 #define AM_VOL  0x08    /* Volume label */ 
 511 #define AM_LFN  0x0F    /* LFN entry */ 
 512 #define AM_DIR  0x10    /* Directory */ 
 513 #define AM_ARC  0x20    /* Archive */ 
 514 #define AM_MASK 0x3F    /* Mask of defined bits */ 
 517 /* FatFs refers the members in the FAT structures with byte offset instead 
 518 / of structure member because there are incompatibility of the packing option 
 519 / between various compilers. */ 
 523 #define BPB_BytsPerSec          11 
 524 #define BPB_SecPerClus          13 
 525 #define BPB_RsvdSecCnt          14 
 526 #define BPB_NumFATs                     16 
 527 #define BPB_RootEntCnt          17 
 528 #define BPB_TotSec16            19 
 530 #define BPB_FATSz16                     22 
 531 #define BPB_SecPerTrk           24 
 532 #define BPB_NumHeads            26 
 533 #define BPB_HiddSec                     28 
 534 #define BPB_TotSec32            32 
 538 #define BS_BootSig                      38 
 541 #define BS_FilSysType           54 
 543 #define BPB_FATSz32                     36 
 544 #define BPB_ExtFlags            40 
 546 #define BPB_RootClus            44 
 547 #define BPB_FSInfo                      48 
 548 #define BPB_BkBootSec           50 
 549 #define BS_DrvNum32                     64 
 550 #define BS_BootSig32            66 
 551 #define BS_VolID32                      67 
 552 #define BS_VolLab32                     71 
 553 #define BS_FilSysType32         82 
 555 #define FSI_LeadSig                     0 
 556 #define FSI_StrucSig            484 
 557 #define FSI_Free_Count          488 
 558 #define FSI_Nxt_Free            492 
 560 #define MBR_Table                       446 
 565 #define DIR_CrtTime                     14 
 566 #define DIR_CrtDate                     16 
 567 #define DIR_FstClusHI           20 
 568 #define DIR_WrtTime                     22 
 569 #define DIR_WrtDate                     24 
 570 #define DIR_FstClusLO           26 
 571 #define DIR_FileSize            28 
 575 #define LDIR_Chksum                     13 
 576 #define LDIR_FstClusLO          26 
 580 /*--------------------------------*/ 
 581 /* Multi-byte word access macros  */ 
 583 #if _WORD_ACCESS == 1   /* Enable word access to the FAT structure */ 
 584 #define LD_WORD(ptr)            (WORD)(*(WORD*)(BYTE*)(ptr)) 
 585 #define LD_DWORD(ptr)           (DWORD)(*(DWORD*)(BYTE*)(ptr)) 
 586 #define ST_WORD(ptr,val)        *(WORD*)(BYTE*)(ptr)=(WORD)(val) 
 587 #define ST_DWORD(ptr,val)       *(DWORD*)(BYTE*)(ptr)=(DWORD)(val) 
 588 #else                                   /* Use byte-by-byte access to the FAT structure */ 
 589 #define LD_WORD(ptr)            (WORD)(((WORD)*(BYTE*)((ptr)+1)<<8)|(WORD)*(BYTE*)(ptr)) 
 590 #define LD_DWORD(ptr)           (DWORD)(((DWORD)*(BYTE*)((ptr)+3)<<24)|((DWORD)*(BYTE*)((ptr)+2)<<16)|((WORD)*(BYTE*)((ptr)+1)<<8)|*(BYTE*)(ptr)) 
 591 #define ST_WORD(ptr,val)        *(BYTE*)(ptr)=(BYTE)(val); *(BYTE*)((ptr)+1)=(BYTE)((WORD)(val)>>8) 
 592 #define ST_DWORD(ptr,val)       *(BYTE*)(ptr)=(BYTE)(val); *(BYTE*)((ptr)+1)=(BYTE)((WORD)(val)>>8); *(BYTE*)((ptr)+2)=(BYTE)((DWORD)(val)>>16); *(BYTE*)((ptr)+3)=(BYTE)((DWORD)(val)>>24)