1 /*---------------------------------------------------------------------------/ 
   2 /  FatFs - FAT file system module include file  R0.08     (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 terms. 
   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. 
  15 /----------------------------------------------------------------------------*/ 
  18 #define _FATFS  8085    /* Revision ID */ 
  24 #include "integer.h"    /* Basic integer types */ 
  25 #include "ffconf.h"             /* FatFs configuration options */ 
  28 #error Wrong configuration file (ffconf.h). 
  32 /* DBCS code ranges and SBCS extend char conversion table */ 
  34 #if _CODE_PAGE == 932   /* Japanese Shift-JIS */ 
  35 #define _DF1S   0x81    /* DBC 1st byte range 1 start */ 
  36 #define _DF1E   0x9F    /* DBC 1st byte range 1 end */ 
  37 #define _DF2S   0xE0    /* DBC 1st byte range 2 start */ 
  38 #define _DF2E   0xFC    /* DBC 1st byte range 2 end */ 
  39 #define _DS1S   0x40    /* DBC 2nd byte range 1 start */ 
  40 #define _DS1E   0x7E    /* DBC 2nd byte range 1 end */ 
  41 #define _DS2S   0x80    /* DBC 2nd byte range 2 start */ 
  42 #define _DS2E   0xFC    /* DBC 2nd byte range 2 end */ 
  44 #elif _CODE_PAGE == 936 /* Simplified Chinese GBK */ 
  52 #elif _CODE_PAGE == 949 /* Korean */ 
  62 #elif _CODE_PAGE == 950 /* Traditional Chinese Big5 */ 
  70 #elif _CODE_PAGE == 437 /* U.S. (OEM) */ 
  72 #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, \ 
  73                                 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, \ 
  74                                 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, \ 
  75                                 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} 
  77 #elif _CODE_PAGE == 720 /* Arabic (OEM) */ 
  79 #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, \ 
  80                                 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, \ 
  81                                 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, \ 
  82                                 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} 
  84 #elif _CODE_PAGE == 737 /* Greek (OEM) */ 
  86 #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, \ 
  87                                 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, \ 
  88                                 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, \ 
  89                                 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} 
  91 #elif _CODE_PAGE == 775 /* Baltic (OEM) */ 
  93 #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, \ 
  94                                 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, \ 
  95                                 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, \ 
  96                                 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} 
  98 #elif _CODE_PAGE == 850 /* Multilingual Latin 1 (OEM) */ 
 100 #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, \ 
 101                                 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, \ 
 102                                 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, \ 
 103                                 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} 
 105 #elif _CODE_PAGE == 852 /* Latin 2 (OEM) */ 
 107 #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, \ 
 108                                 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, \ 
 109                                 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, \ 
 110                                 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} 
 112 #elif _CODE_PAGE == 855 /* Cyrillic (OEM) */ 
 114 #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, \ 
 115                                 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, \ 
 116                                 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, \ 
 117                                 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} 
 119 #elif _CODE_PAGE == 857 /* Turkish (OEM) */ 
 121 #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, \ 
 122                                 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, \ 
 123                                 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, \ 
 124                                 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} 
 126 #elif _CODE_PAGE == 858 /* Multilingual Latin 1 + Euro (OEM) */ 
 128 #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, \ 
 129                                 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, \ 
 130                                 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, \ 
 131                                 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} 
 133 #elif _CODE_PAGE == 862 /* Hebrew (OEM) */ 
 135 #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, \ 
 136                                 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, \ 
 137                                 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, \ 
 138                                 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} 
 140 #elif _CODE_PAGE == 866 /* Russian (OEM) */ 
 142 #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, \ 
 143                                 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, \ 
 144                                 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, \ 
 145                                 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} 
 147 #elif _CODE_PAGE == 874 /* Thai (OEM, Windows) */ 
 149 #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, \ 
 150                                 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, \ 
 151                                 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, \ 
 152                                 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} 
 154 #elif _CODE_PAGE == 1250 /* Central Europe (Windows) */ 
 156 #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, \ 
 157                                 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, \ 
 158                                 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, \ 
 159                                 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} 
 161 #elif _CODE_PAGE == 1251 /* Cyrillic (Windows) */ 
 163 #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, \ 
 164                                 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, \ 
 165                                 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, \ 
 166                                 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 #elif _CODE_PAGE == 1252 /* Latin 1 (Windows) */ 
 170 #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, \ 
 171                                 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, \ 
 172                                 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, \ 
 173                                 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} 
 175 #elif _CODE_PAGE == 1253 /* Greek (Windows) */ 
 177 #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, \ 
 178                                 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, \ 
 179                                 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, \ 
 180                                 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} 
 182 #elif _CODE_PAGE == 1254 /* Turkish (Windows) */ 
 184 #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, \ 
 185                                 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, \ 
 186                                 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, \ 
 187                                 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} 
 189 #elif _CODE_PAGE == 1255 /* Hebrew (Windows) */ 
 191 #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, \ 
 192                                 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, \ 
 193                                 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, \ 
 194                                 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} 
 196 #elif _CODE_PAGE == 1256 /* Arabic (Windows) */ 
 198 #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, \ 
 199                                 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, \ 
 200                                 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, \ 
 201                                 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} 
 203 #elif _CODE_PAGE == 1257 /* Baltic (Windows) */ 
 205 #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, \ 
 206                                 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, \ 
 207                                 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, \ 
 208                                 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} 
 210 #elif _CODE_PAGE == 1258 /* Vietnam (OEM, Windows) */ 
 212 #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, \ 
 213                                 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, \ 
 214                                 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, \ 
 215                                 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} 
 217 #elif _CODE_PAGE == 1   /* ASCII (for only non-LFN cfg) */ 
 221 #error Unknown code page 
 227 /* Definitions corresponds to volume management */ 
 229 #if _MULTI_PARTITION            /* Multiple partition configuration */ 
 230 #define LD2PD(drv) (Drives[drv].pd)     /* Get physical drive# */ 
 231 #define LD2PT(drv) (Drives[drv].pt)     /* Get partition# */ 
 233         BYTE pd
;        /* Physical drive# */ 
 234         BYTE pt
;        /* Partition # (0-3) */ 
 236 extern const PARTITION Drives
[];        /* Logical drive# to physical location conversion table */ 
 238 #else                                           /* Single partition configuration */ 
 239 #define LD2PD(drv) (drv)        /* Physical drive# is equal to the logical drive# */ 
 240 #define LD2PT(drv) 0            /* Always mounts the 1st partition */ 
 246 /* Type of path name strings on FatFs API */ 
 248 #if _LFN_UNICODE                        /* Unicode string */ 
 250 #error _LFN_UNICODE must be 0 in non-LFN cfg. 
 255 #define _TEXT(x) L ## x 
 258 #else                                           /* ANSI/OEM string */ 
 269 /* Definitions corresponds to file sharing feature */ 
 273 #error _FS_SHARE must be 0 on R/O cfg. 
 276         DWORD clu
;                              /* File ID 1, directory */ 
 277         WORD idx
;                               /* File ID 2, index in the directory */ 
 278         WORD ctr
;                               /* File open counter, 0:none, 0x01..0xFF:read open count, 0x100:in write open */ 
 284 /* File system object structure (FATFS) */ 
 287         BYTE    fs_type
;                /* FAT sub-type (0:Not mounted) */ 
 288         BYTE    drv
;                    /* Physical drive number */ 
 289         BYTE    csize
;                  /* Sectors per cluster (1,2,4...128) */ 
 290         BYTE    n_fats
;                 /* Number of FAT copies (1,2) */ 
 291         BYTE    wflag
;                  /* win[] dirty flag (1:must be written back) */ 
 292         BYTE    fsi_flag
;               /* fsinfo dirty flag (1:must be written back) */ 
 293         WORD    id
;                             /* File system mount ID */ 
 294         WORD    n_rootdir
;              /* Number of root directory entries (FAT12/16) */ 
 296         WORD    ssize
;                  /* Bytes per sector (512,1024,2048,4096) */ 
 299         _SYNC_t sobj
;                   /* Identifier of sync object */ 
 302         DWORD   last_clust
;             /* Last allocated cluster */ 
 303         DWORD   free_clust
;             /* Number of free clusters */ 
 304         DWORD   fsi_sector
;             /* fsinfo sector (FAT32) */ 
 307         DWORD   cdir
;                   /* Current directory start cluster (0:root) */ 
 309         DWORD   n_fatent
;               /* Number of FAT entries (= number of clusters + 2) */ 
 310         DWORD   fsize
;                  /* Sectors per FAT */ 
 311         DWORD   fatbase
;                /* FAT start sector */ 
 312         DWORD   dirbase
;                /* Root directory start sector (FAT32:Cluster#) */ 
 313         DWORD   database
;               /* Data start sector */ 
 314         DWORD   winsect
;                /* Current sector appearing in the win[] */ 
 315         BYTE    win
[_MAX_SS
];   /* Disk access window for Directory, FAT (and Data on tiny cfg) */ 
 317         FILESEM flsem
[_FS_SHARE
];       /* File lock semaphores */ 
 323 /* File object structure (FIL) */ 
 326         FATFS
*  fs
;                             /* Pointer to the owner file system object */ 
 327         WORD    id
;                             /* Owner file system mount ID */ 
 328         BYTE    flag
;                   /* File status flags */ 
 330         DWORD   fptr
;                   /* File read/write pointer */ 
 331         DWORD   fsize
;                  /* File size */ 
 332         DWORD   org_clust
;              /* File start cluster (0 when fsize==0) */ 
 333         DWORD   curr_clust
;             /* Current cluster */ 
 334         DWORD   dsect
;                  /* Current data sector */ 
 336         DWORD   dir_sect
;               /* Sector containing the directory entry */ 
 337         BYTE
*   dir_ptr
;                /* Pointer to the directory entry in the window */ 
 340         DWORD
*  cltbl
;                  /* Pointer to the cluster link map table */ 
 343         UINT    lockid
;                 /* File lock ID */ 
 346         BYTE    buf
[_MAX_SS
];   /* File data read/write buffer */ 
 352 /* Directory object structure (DIR) */ 
 355         FATFS
*  fs
;                             /* Pointer to the owner file system object */ 
 356         WORD    id
;                             /* Owner file system mount ID */ 
 357         WORD    index
;                  /* Current read/write index number */ 
 358         DWORD   sclust
;                 /* Table start cluster (0:Root dir) */ 
 359         DWORD   clust
;                  /* Current cluster */ 
 360         DWORD   sect
;                   /* Current sector */ 
 361         BYTE
*   dir
;                    /* Pointer to the current SFN entry in the win[] */ 
 362         BYTE
*   fn
;                             /* Pointer to the SFN (in/out) {file[8],ext[3],status[1]} */ 
 364         WCHAR
*  lfn
;                    /* Pointer to the LFN working buffer */ 
 365         WORD    lfn_idx
;                /* Last matched LFN index number (0xFFFF:No LFN) */ 
 371 /* File status structure (FILINFO) */ 
 374         DWORD   fsize
;                  /* File size */ 
 375         WORD    fdate
;                  /* Last modified date */ 
 376         WORD    ftime
;                  /* Last modified time */ 
 377         BYTE    fattrib
;                /* Attribute */ 
 378         TCHAR   fname
[13];              /* Short file name (8.3 format) */ 
 380         TCHAR
*  lfname
;                 /* Pointer to the LFN buffer */ 
 381         int     lfsize
;                 /* Size of LFN buffer [chrs] */ 
 387 /* File function return code (FRESULT) */ 
 390         FR_OK 
= 0,                              /* (0) Succeeded */ 
 391         FR_DISK_ERR
,                    /* (1) A hard error occurred in the low level disk I/O layer */ 
 392         FR_INT_ERR
,                             /* (2) Assertion failed */ 
 393         FR_NOT_READY
,                   /* (3) The physical drive cannot work */ 
 394         FR_NO_FILE
,                             /* (4) Could not find the file */ 
 395         FR_NO_PATH
,                             /* (5) Could not find the path */ 
 396         FR_INVALID_NAME
,                /* (6) The path name format is invalid */ 
 397         FR_DENIED
,                              /* (7) Access denied due to prohibited access or directory full */ 
 398         FR_EXIST
,                               /* (8) Access denied due to prohibited access */ 
 399         FR_INVALID_OBJECT
,              /* (9) The file/directory object is invalid */ 
 400         FR_WRITE_PROTECTED
,             /* (10) The physical drive is write protected */ 
 401         FR_INVALID_DRIVE
,               /* (11) The logical drive number is invalid */ 
 402         FR_NOT_ENABLED
,                 /* (12) The volume has no work area */ 
 403         FR_NO_FILESYSTEM
,               /* (13) There is no valid FAT volume on the physical drive */ 
 404         FR_MKFS_ABORTED
,                /* (14) The f_mkfs() aborted due to any parameter error */ 
 405         FR_TIMEOUT
,                             /* (15) Could not get a grant to access the volume within defined period */ 
 406         FR_LOCKED
,                              /* (16) The operation is rejected according to the file sharing policy */ 
 407         FR_NOT_ENOUGH_CORE
,             /* (17) LFN working buffer could not be allocated */ 
 408         FR_TOO_MANY_OPEN_FILES  
/* (18) Number of open files > _FS_SHARE */ 
 413 /*--------------------------------------------------------------*/ 
 414 /* FatFs module application interface                           */ 
 416 FRESULT 
f_mount (BYTE
, FATFS
*);                                         /* Mount/Unmount a logical drive */ 
 417 FRESULT 
f_open (FIL
*, const TCHAR
*, BYTE
);                      /* Open or create a file */ 
 418 FRESULT 
f_read (FIL
*, void*, UINT
, UINT
*);                      /* Read data from a file */ 
 419 FRESULT 
f_lseek (FIL
*, DWORD
);                                          /* Move file pointer of a file object */ 
 420 FRESULT 
f_close (FIL
*);                                                         /* Close an open file object */ 
 421 FRESULT 
f_opendir (DIR*, const TCHAR
*);                         /* Open an existing directory */ 
 422 FRESULT 
f_readdir (DIR*, FILINFO
*);                                     /* Read a directory item */ 
 423 FRESULT 
f_stat (const TCHAR
*, FILINFO
*);                        /* Get file status */ 
 425 FRESULT 
f_write (FIL
*, const void*, UINT
, UINT
*);       /* Write data to a file */ 
 426 FRESULT 
f_getfree (const TCHAR
*, DWORD
*, FATFS
**);      /* Get number of free clusters on the drive */ 
 427 FRESULT 
f_truncate (FIL
*);                                                      /* Truncate file */ 
 428 FRESULT 
f_sync (FIL
*);                                                          /* Flush cached data of a writing file */ 
 429 FRESULT 
f_unlink (const TCHAR
*);                                        /* Delete an existing file or directory */ 
 430 FRESULT 
f_mkdir (const TCHAR
*);                                         /* Create a new directory */ 
 431 FRESULT 
f_chmod (const TCHAR
*, BYTE
, BYTE
);                     /* Change attribute of the file/dir */ 
 432 FRESULT 
f_utime (const TCHAR
*, const FILINFO
*);         /* Change time-stamp of the file/dir */ 
 433 FRESULT 
f_rename (const TCHAR
*, const TCHAR
*);          /* Rename/Move a file or directory */ 
 436 FRESULT 
f_forward (FIL
*, UINT(*)(const BYTE
*,UINT
), UINT
, UINT
*);       /* Forward data to the stream */ 
 439 FRESULT 
f_mkfs (BYTE
, BYTE
, UINT
);                                      /* Create a file system on the drive */ 
 442 FRESULT 
f_chdir (const TCHAR
*);                                         /* Change current directory */ 
 443 FRESULT 
f_chdrive (BYTE
);                                                       /* Change current drive */ 
 446 int f_putc (TCHAR
, FIL
*);                                                       /* Put a character to the file */ 
 447 int f_puts (const TCHAR
*, FIL
*);                                        /* Put a string to the file */ 
 448 int f_printf (FIL
*, const TCHAR
*, ...);                         /* Put a formatted string to the file */ 
 449 TCHAR
* f_gets (TCHAR
*, int, FIL
*);                                      /* Get a string from the file */ 
 450 #define f_eof(fp) (((fp)->fptr == (fp)->fsize) ? 1 : 0) 
 451 #define f_error(fp) (((fp)->flag & FA__ERROR) ? 1 : 0) 
 459 /*--------------------------------------------------------------*/ 
 460 /* Additional user defined functions                            */ 
 464 DWORD 
get_fattime (void); 
 467 /* Unicode support functions */ 
 468 #if _USE_LFN                                            /* Unicode - OEM code conversion */ 
 469 WCHAR 
ff_convert (WCHAR
, UINT
);         /* OEM-Unicode bidirectional conversion */ 
 470 WCHAR 
ff_wtoupper (WCHAR
);                      /* Unicode upper-case conversion */ 
 471 #if _USE_LFN == 3                                       /* Memory functions */ 
 472 void* ff_memalloc (UINT
);                       /* Allocate memory block */ 
 473 void ff_memfree (void*);                        /* Free memory block */ 
 479 int ff_cre_syncobj (BYTE
, _SYNC_t
*);/* Create a sync object */ 
 480 int ff_del_syncobj (_SYNC_t
);           /* Delete a sync object */ 
 481 int ff_req_grant (_SYNC_t
);                     /* Lock sync object */ 
 482 void ff_rel_grant (_SYNC_t
);            /* Unlock sync object */ 
 488 /*--------------------------------------------------------------*/ 
 489 /* Flags and offset address                                     */ 
 492 /* File access control and file status flags (FIL.flag) */ 
 495 #define FA_OPEN_EXISTING        0x00 
 496 #define FA__ERROR                       0x80 
 499 #define FA_WRITE                        0x02 
 500 #define FA_CREATE_NEW           0x04 
 501 #define FA_CREATE_ALWAYS        0x08 
 502 #define FA_OPEN_ALWAYS          0x10 
 503 #define FA__WRITTEN                     0x20 
 504 #define FA__DIRTY                       0x40 
 508 /* FAT sub type (FATFS.fs_type) */ 
 515 /* File attribute bits for directory entry */ 
 517 #define AM_RDO  0x01    /* Read only */ 
 518 #define AM_HID  0x02    /* Hidden */ 
 519 #define AM_SYS  0x04    /* System */ 
 520 #define AM_VOL  0x08    /* Volume label */ 
 521 #define AM_LFN  0x0F    /* LFN entry */ 
 522 #define AM_DIR  0x10    /* Directory */ 
 523 #define AM_ARC  0x20    /* Archive */ 
 524 #define AM_MASK 0x3F    /* Mask of defined bits */ 
 527 /* Fast seek function */ 
 528 #define CREATE_LINKMAP  0xFFFFFFFF 
 531 /* FatFs refers the members in the FAT structures with byte offset instead of 
 532 / structure member because there are incompatibility of the packing option 
 533 / between various compilers. */ 
 537 #define BPB_BytsPerSec          11 
 538 #define BPB_SecPerClus          13 
 539 #define BPB_RsvdSecCnt          14 
 540 #define BPB_NumFATs                     16 
 541 #define BPB_RootEntCnt          17 
 542 #define BPB_TotSec16            19 
 544 #define BPB_FATSz16                     22 
 545 #define BPB_SecPerTrk           24 
 546 #define BPB_NumHeads            26 
 547 #define BPB_HiddSec                     28 
 548 #define BPB_TotSec32            32 
 552 #define BS_BootSig                      38 
 555 #define BS_FilSysType           54 
 557 #define BPB_FATSz32                     36 
 558 #define BPB_ExtFlags            40 
 560 #define BPB_RootClus            44 
 561 #define BPB_FSInfo                      48 
 562 #define BPB_BkBootSec           50 
 563 #define BS_DrvNum32                     64 
 564 #define BS_BootSig32            66 
 565 #define BS_VolID32                      67 
 566 #define BS_VolLab32                     71 
 567 #define BS_FilSysType32         82 
 569 #define FSI_LeadSig                     0 
 570 #define FSI_StrucSig            484 
 571 #define FSI_Free_Count          488 
 572 #define FSI_Nxt_Free            492 
 574 #define MBR_Table                       446 
 579 #define DIR_CrtTime                     14 
 580 #define DIR_CrtDate                     16 
 581 #define DIR_FstClusHI           20 
 582 #define DIR_WrtTime                     22 
 583 #define DIR_WrtDate                     24 
 584 #define DIR_FstClusLO           26 
 585 #define DIR_FileSize            28 
 589 #define LDIR_Chksum                     13 
 590 #define LDIR_FstClusLO          26 
 594 /*--------------------------------*/ 
 595 /* Multi-byte word access macros  */ 
 597 #if _WORD_ACCESS == 1   /* Enable word access to the FAT structure */ 
 598 #define LD_WORD(ptr)            (WORD)(*(WORD*)(BYTE*)(ptr)) 
 599 #define LD_DWORD(ptr)           (DWORD)(*(DWORD*)(BYTE*)(ptr)) 
 600 #define ST_WORD(ptr,val)        *(WORD*)(BYTE*)(ptr)=(WORD)(val) 
 601 #define ST_DWORD(ptr,val)       *(DWORD*)(BYTE*)(ptr)=(DWORD)(val) 
 602 #else                                   /* Use byte-by-byte access to the FAT structure */ 
 603 #define LD_WORD(ptr)            (WORD)(((WORD)*(BYTE*)((ptr)+1)<<8)|(WORD)*(BYTE*)(ptr)) 
 604 #define LD_DWORD(ptr)           (DWORD)(((DWORD)*(BYTE*)((ptr)+3)<<24)|((DWORD)*(BYTE*)((ptr)+2)<<16)|((WORD)*(BYTE*)((ptr)+1)<<8)|*(BYTE*)(ptr)) 
 605 #define ST_WORD(ptr,val)        *(BYTE*)(ptr)=(BYTE)(val); *(BYTE*)((ptr)+1)=(BYTE)((WORD)(val)>>8) 
 606 #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)