Update FatFs
This commit is contained in:
parent
4180261f1f
commit
6d06ea6975
@ -18,7 +18,7 @@ include $(DEVKITARM)/3ds_rules
|
|||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
export TARGET := $(shell basename $(CURDIR))
|
export TARGET := $(shell basename $(CURDIR))
|
||||||
BUILD := build
|
BUILD := build
|
||||||
SOURCES := source source/fatfs source/fatfs/sdmmc
|
SOURCES := source source/fatfs source/fatfs/sdmmc source/fatfs/option
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
# Setup some defines
|
# Setup some defines
|
||||||
|
65
loader/source/fatfs/history.txt → loader/source/fatfs/00history.txt
Normal file → Executable file
65
loader/source/fatfs/history.txt → loader/source/fatfs/00history.txt
Normal file → Executable file
@ -3,73 +3,98 @@
|
|||||||
----------------------------------------------------------------------------
|
----------------------------------------------------------------------------
|
||||||
|
|
||||||
R0.00 (February 26, 2006)
|
R0.00 (February 26, 2006)
|
||||||
|
|
||||||
Prototype.
|
Prototype.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
R0.01 (April 29, 2006)
|
R0.01 (April 29, 2006)
|
||||||
|
|
||||||
First stable version.
|
First stable version.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
R0.02 (June 01, 2006)
|
R0.02 (June 01, 2006)
|
||||||
|
|
||||||
Added FAT12 support.
|
Added FAT12 support.
|
||||||
Removed unbuffered mode.
|
Removed unbuffered mode.
|
||||||
Fixed a problem on small (<32M) partition.
|
Fixed a problem on small (<32M) partition.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
R0.02a (June 10, 2006)
|
R0.02a (June 10, 2006)
|
||||||
|
|
||||||
Added a configuration option (_FS_MINIMUM).
|
Added a configuration option (_FS_MINIMUM).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
R0.03 (September 22, 2006)
|
R0.03 (September 22, 2006)
|
||||||
|
|
||||||
Added f_rename().
|
Added f_rename().
|
||||||
Changed option _FS_MINIMUM to _FS_MINIMIZE.
|
Changed option _FS_MINIMUM to _FS_MINIMIZE.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
R0.03a (December 11, 2006)
|
R0.03a (December 11, 2006)
|
||||||
|
|
||||||
Improved cluster scan algorithm to write files fast.
|
Improved cluster scan algorithm to write files fast.
|
||||||
Fixed f_mkdir() creates incorrect directory on FAT32.
|
Fixed f_mkdir() creates incorrect directory on FAT32.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
R0.04 (February 04, 2007)
|
R0.04 (February 04, 2007)
|
||||||
|
|
||||||
Added f_mkfs().
|
Added f_mkfs().
|
||||||
Supported multiple drive system.
|
Supported multiple drive system.
|
||||||
Changed some interfaces for multiple drive system.
|
Changed some interfaces for multiple drive system.
|
||||||
Changed f_mountdrv() to f_mount().
|
Changed f_mountdrv() to f_mount().
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
R0.04a (April 01, 2007)
|
R0.04a (April 01, 2007)
|
||||||
|
|
||||||
Supported multiple partitions on a physical drive.
|
Supported multiple partitions on a physical drive.
|
||||||
Added a capability of extending file size to f_lseek().
|
Added a capability of extending file size to f_lseek().
|
||||||
Added minimization level 3.
|
Added minimization level 3.
|
||||||
Fixed an endian sensitive code in f_mkfs().
|
Fixed an endian sensitive code in f_mkfs().
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
R0.04b (May 05, 2007)
|
R0.04b (May 05, 2007)
|
||||||
|
|
||||||
Added a configuration option _USE_NTFLAG.
|
Added a configuration option _USE_NTFLAG.
|
||||||
Added FSINFO support.
|
Added FSINFO support.
|
||||||
Fixed DBCS name can result FR_INVALID_NAME.
|
Fixed DBCS name can result FR_INVALID_NAME.
|
||||||
Fixed short seek (<= csize) collapses the file object.
|
Fixed short seek (<= csize) collapses the file object.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
R0.05 (August 25, 2007)
|
R0.05 (August 25, 2007)
|
||||||
|
|
||||||
Changed arguments of f_read(), f_write() and f_mkfs().
|
Changed arguments of f_read(), f_write() and f_mkfs().
|
||||||
Fixed f_mkfs() on FAT32 creates incorrect FSINFO.
|
Fixed f_mkfs() on FAT32 creates incorrect FSINFO.
|
||||||
Fixed f_mkdir() on FAT32 creates incorrect directory.
|
Fixed f_mkdir() on FAT32 creates incorrect directory.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
R0.05a (February 03, 2008)
|
R0.05a (February 03, 2008)
|
||||||
|
|
||||||
Added f_truncate() and f_utime().
|
Added f_truncate() and f_utime().
|
||||||
Fixed off by one error at FAT sub-type determination.
|
Fixed off by one error at FAT sub-type determination.
|
||||||
Fixed btr in f_read() can be mistruncated.
|
Fixed btr in f_read() can be mistruncated.
|
||||||
Fixed cached sector is not flushed when create and close without write.
|
Fixed cached sector is not flushed when create and close without write.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
R0.06 (April 01, 2008)
|
R0.06 (April 01, 2008)
|
||||||
|
|
||||||
Added fputc(), fputs(), fprintf() and fgets().
|
Added fputc(), fputs(), fprintf() and fgets().
|
||||||
Improved performance of f_lseek() on moving to the same or following cluster.
|
Improved performance of f_lseek() on moving to the same or following cluster.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
R0.07 (April 01, 2009)
|
R0.07 (April 01, 2009)
|
||||||
|
|
||||||
Merged Tiny-FatFs as a configuration option. (_FS_TINY)
|
Merged Tiny-FatFs as a configuration option. (_FS_TINY)
|
||||||
Added long file name feature. (_USE_LFN)
|
Added long file name feature. (_USE_LFN)
|
||||||
Added multiple code page feature. (_CODE_PAGE)
|
Added multiple code page feature. (_CODE_PAGE)
|
||||||
@ -80,12 +105,16 @@ R0.07 (April 01, 2009)
|
|||||||
Renamed string functions to avoid name collision.
|
Renamed string functions to avoid name collision.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
R0.07a (April 14, 2009)
|
R0.07a (April 14, 2009)
|
||||||
|
|
||||||
Septemberarated out OS dependent code on reentrant cfg.
|
Septemberarated out OS dependent code on reentrant cfg.
|
||||||
Added multiple sector size feature.
|
Added multiple sector size feature.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
R0.07c (June 21, 2009)
|
R0.07c (June 21, 2009)
|
||||||
|
|
||||||
Fixed f_unlink() can return FR_OK on error.
|
Fixed f_unlink() can return FR_OK on error.
|
||||||
Fixed wrong cache control in f_lseek().
|
Fixed wrong cache control in f_lseek().
|
||||||
Added relative path feature.
|
Added relative path feature.
|
||||||
@ -93,7 +122,9 @@ R0.07c (June 21, 2009)
|
|||||||
Added proper case conversion to extended character.
|
Added proper case conversion to extended character.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
R0.07e (November 03, 2009)
|
R0.07e (November 03, 2009)
|
||||||
|
|
||||||
Septemberarated out configuration options from ff.h to ffconf.h.
|
Septemberarated out configuration options from ff.h to ffconf.h.
|
||||||
Fixed f_unlink() fails to remove a sub-directory on _FS_RPATH.
|
Fixed f_unlink() fails to remove a sub-directory on _FS_RPATH.
|
||||||
Fixed name matching error on the 13 character boundary.
|
Fixed name matching error on the 13 character boundary.
|
||||||
@ -101,7 +132,9 @@ R0.07e (November 03, 2009)
|
|||||||
Changed f_readdir() to return the SFN with always upper case on non-LFN cfg.
|
Changed f_readdir() to return the SFN with always upper case on non-LFN cfg.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
R0.08 (May 15, 2010)
|
R0.08 (May 15, 2010)
|
||||||
|
|
||||||
Added a memory configuration option. (_USE_LFN = 3)
|
Added a memory configuration option. (_USE_LFN = 3)
|
||||||
Added file lock feature. (_FS_SHARE)
|
Added file lock feature. (_FS_SHARE)
|
||||||
Added fast seek feature. (_USE_FASTSEEK)
|
Added fast seek feature. (_USE_FASTSEEK)
|
||||||
@ -110,36 +143,48 @@ R0.08 (May 15, 2010)
|
|||||||
String functions support UTF-8 encoding files on Unicode cfg.
|
String functions support UTF-8 encoding files on Unicode cfg.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
R0.08a (August 16, 2010)
|
R0.08a (August 16, 2010)
|
||||||
|
|
||||||
Added f_getcwd(). (_FS_RPATH = 2)
|
Added f_getcwd(). (_FS_RPATH = 2)
|
||||||
Added sector erase feature. (_USE_ERASE)
|
Added sector erase feature. (_USE_ERASE)
|
||||||
Moved file lock semaphore table from fs object to the bss.
|
Moved file lock semaphore table from fs object to the bss.
|
||||||
Fixed f_mkfs() creates wrong FAT32 volume.
|
Fixed f_mkfs() creates wrong FAT32 volume.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
R0.08b (January 15, 2011)
|
R0.08b (January 15, 2011)
|
||||||
|
|
||||||
Fast seek feature is also applied to f_read() and f_write().
|
Fast seek feature is also applied to f_read() and f_write().
|
||||||
f_lseek() reports required table size on creating CLMP.
|
f_lseek() reports required table size on creating CLMP.
|
||||||
Extended format syntax of f_printf().
|
Extended format syntax of f_printf().
|
||||||
Ignores duplicated directory separators in given path name.
|
Ignores duplicated directory separators in given path name.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
R0.09 (September 06, 2011)
|
R0.09 (September 06, 2011)
|
||||||
|
|
||||||
f_mkfs() supports multiple partition to complete the multiple partition feature.
|
f_mkfs() supports multiple partition to complete the multiple partition feature.
|
||||||
Added f_fdisk().
|
Added f_fdisk().
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
R0.09a (August 27, 2012)
|
R0.09a (August 27, 2012)
|
||||||
|
|
||||||
Changed f_open() and f_opendir() reject null object pointer to avoid crash.
|
Changed f_open() and f_opendir() reject null object pointer to avoid crash.
|
||||||
Changed option name _FS_SHARE to _FS_LOCK.
|
Changed option name _FS_SHARE to _FS_LOCK.
|
||||||
Fixed assertion failure due to OS/2 EA on FAT12/16 volume.
|
Fixed assertion failure due to OS/2 EA on FAT12/16 volume.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
R0.09b (January 24, 2013)
|
R0.09b (January 24, 2013)
|
||||||
|
|
||||||
Added f_setlabel() and f_getlabel().
|
Added f_setlabel() and f_getlabel().
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
R0.10 (October 02, 2013)
|
R0.10 (October 02, 2013)
|
||||||
|
|
||||||
Added selection of character encoding on the file. (_STRF_ENCODE)
|
Added selection of character encoding on the file. (_STRF_ENCODE)
|
||||||
Added f_closedir().
|
Added f_closedir().
|
||||||
Added forced full FAT scan for f_getfree(). (_FS_NOFSINFO)
|
Added forced full FAT scan for f_getfree(). (_FS_NOFSINFO)
|
||||||
@ -151,7 +196,9 @@ R0.10 (October 02, 2013)
|
|||||||
Fixed f_open(), f_mkdir() and f_setlabel() can return incorrect error code.
|
Fixed f_open(), f_mkdir() and f_setlabel() can return incorrect error code.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
R0.10a (January 15, 2014)
|
R0.10a (January 15, 2014)
|
||||||
|
|
||||||
Added arbitrary strings as drive number in the path name. (_STR_VOLUME_ID)
|
Added arbitrary strings as drive number in the path name. (_STR_VOLUME_ID)
|
||||||
Added a configuration option of minimum sector size. (_MIN_SS)
|
Added a configuration option of minimum sector size. (_MIN_SS)
|
||||||
2nd argument of f_rename() can have a drive number and it will be ignored.
|
2nd argument of f_rename() can have a drive number and it will be ignored.
|
||||||
@ -161,12 +208,16 @@ R0.10a (January 15, 2014)
|
|||||||
Fixed creation of an entry with LFN fails on too many SFN collisions. (appeared at R0.07)
|
Fixed creation of an entry with LFN fails on too many SFN collisions. (appeared at R0.07)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
R0.10b (May 19, 2014)
|
R0.10b (May 19, 2014)
|
||||||
|
|
||||||
Fixed a hard error in the disk I/O layer can collapse the directory entry.
|
Fixed a hard error in the disk I/O layer can collapse the directory entry.
|
||||||
Fixed LFN entry is not deleted on delete/rename an object with lossy converted SFN. (appeared at R0.07)
|
Fixed LFN entry is not deleted on delete/rename an object with lossy converted SFN. (appeared at R0.07)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
R0.10c (November 09, 2014)
|
R0.10c (November 09, 2014)
|
||||||
|
|
||||||
Added a configuration option for the platforms without RTC. (_FS_NORTC)
|
Added a configuration option for the platforms without RTC. (_FS_NORTC)
|
||||||
Changed option name _USE_ERASE to _USE_TRIM.
|
Changed option name _USE_ERASE to _USE_TRIM.
|
||||||
Fixed volume label created by Mac OS X cannot be retrieved with f_getlabel(). (appeared at R0.09b)
|
Fixed volume label created by Mac OS X cannot be retrieved with f_getlabel(). (appeared at R0.09b)
|
||||||
@ -174,7 +225,21 @@ R0.10c (November 09, 2014)
|
|||||||
Fixed null pointer dereference on attempting to delete the root direcotry. (appeared at R0.08)
|
Fixed null pointer dereference on attempting to delete the root direcotry. (appeared at R0.08)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
R0.11 (February 09, 2015)
|
R0.11 (February 09, 2015)
|
||||||
|
|
||||||
Added f_findfirst(), f_findnext() and f_findclose(). (_USE_FIND)
|
Added f_findfirst(), f_findnext() and f_findclose(). (_USE_FIND)
|
||||||
Fixed f_unlink() does not remove cluster chain of the file. (appeared at R0.10c)
|
Fixed f_unlink() does not remove cluster chain of the file. (appeared at R0.10c)
|
||||||
Fixed _FS_NORTC option does not work properly. (appeared at R0.10c)
|
Fixed _FS_NORTC option does not work properly. (appeared at R0.10c)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
R0.11a (September 05, 2015)
|
||||||
|
|
||||||
|
Fixed wrong media change can lead a deadlock at thread-safe configuration.
|
||||||
|
Added code page 771, 860, 861, 863, 864, 865 and 869. (_CODE_PAGE)
|
||||||
|
Removed some code pages actually not exist on the standard systems. (_CODE_PAGE)
|
||||||
|
Fixed errors in the case conversion teble of code page 437 and 850 (ff.c).
|
||||||
|
Fixed errors in the case conversion teble of Unicode (cc*.c).
|
||||||
|
|
||||||
|
|
@ -35,6 +35,7 @@ DSTATUS disk_initialize (
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
sdmmc_sdcard_init();
|
sdmmc_sdcard_init();
|
||||||
|
|
||||||
return RES_OK;
|
return RES_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -52,9 +53,8 @@ DRESULT disk_read (
|
|||||||
UINT count /* Number of sectors to read */
|
UINT count /* Number of sectors to read */
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
if (sdmmc_sdcard_readsectors(sector, count, buff)) {
|
if(sdmmc_sdcard_readsectors(sector, count, buff))
|
||||||
return RES_PARERR;
|
return RES_PARERR;
|
||||||
}
|
|
||||||
|
|
||||||
return RES_OK;
|
return RES_OK;
|
||||||
}
|
}
|
||||||
@ -74,9 +74,8 @@ DRESULT disk_write (
|
|||||||
UINT count /* Number of sectors to write */
|
UINT count /* Number of sectors to write */
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
if (sdmmc_sdcard_writesectors(sector, count, (BYTE *)buff)) {
|
if(sdmmc_sdcard_writesectors(sector, count, (BYTE *)buff))
|
||||||
return RES_PARERR;
|
return RES_PARERR;
|
||||||
}
|
|
||||||
|
|
||||||
return RES_OK;
|
return RES_OK;
|
||||||
}
|
}
|
||||||
|
545
loader/source/fatfs/ff.c
Normal file → Executable file
545
loader/source/fatfs/ff.c
Normal file → Executable file
@ -1,5 +1,5 @@
|
|||||||
/*----------------------------------------------------------------------------/
|
/*----------------------------------------------------------------------------/
|
||||||
/ FatFs - FAT file system module R0.11 (C)ChaN, 2015
|
/ FatFs - FAT file system module R0.11a (C)ChaN, 2015 /
|
||||||
/-----------------------------------------------------------------------------/
|
/-----------------------------------------------------------------------------/
|
||||||
/ FatFs module is a free software that opened under license policy of
|
/ FatFs module is a free software that opened under license policy of
|
||||||
/ following conditions.
|
/ following conditions.
|
||||||
@ -26,7 +26,7 @@
|
|||||||
|
|
||||||
---------------------------------------------------------------------------*/
|
---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#if _FATFS != 32020 /* Revision ID */
|
#if _FATFS != 64180 /* Revision ID */
|
||||||
#error Wrong include file (ff.h).
|
#error Wrong include file (ff.h).
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -83,7 +83,7 @@ typedef struct {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* DBCS code ranges and SBCS extend character conversion table */
|
/* DBCS code ranges and SBCS upper conversion tables */
|
||||||
|
|
||||||
#if _CODE_PAGE == 932 /* Japanese Shift-JIS */
|
#if _CODE_PAGE == 932 /* Japanese Shift-JIS */
|
||||||
#define _DF1S 0x81 /* DBC 1st byte range 1 start */
|
#define _DF1S 0x81 /* DBC 1st byte range 1 start */
|
||||||
@ -121,211 +121,192 @@ typedef struct {
|
|||||||
#define _DS2S 0xA1
|
#define _DS2S 0xA1
|
||||||
#define _DS2E 0xFE
|
#define _DS2E 0xFE
|
||||||
|
|
||||||
#elif _CODE_PAGE == 437 /* U.S. (OEM) */
|
#elif _CODE_PAGE == 437 /* U.S. */
|
||||||
#define _DF1S 0
|
#define _DF1S 0
|
||||||
/*#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, \
|
#define _EXCVT {0x80,0x9A,0x45,0x41,0x8E,0x41,0x8F,0x80,0x45,0x45,0x45,0x49,0x49,0x49,0x8E,0x8F, \
|
||||||
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, \
|
0x90,0x92,0x92,0x4F,0x99,0x4F,0x55,0x55,0x59,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \
|
||||||
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, \
|
0x41,0x49,0x4F,0x55,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \
|
||||||
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}*/
|
0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \
|
||||||
|
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, \
|
||||||
|
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}
|
||||||
|
|
||||||
static
|
#elif _CODE_PAGE == 720 /* Arabic */
|
||||||
const unsigned short Tbl[] = { /* CP437(0x80-0xFF) to Unicode conversion table */
|
|
||||||
0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7,
|
|
||||||
0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x00C4, 0x00C5,
|
|
||||||
0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9,
|
|
||||||
0x00FF, 0x00D6, 0x00DC, 0x00A2, 0x00A3, 0x00A5, 0x20A7, 0x0192,
|
|
||||||
0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA,
|
|
||||||
0x00BF, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB,
|
|
||||||
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556,
|
|
||||||
0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510,
|
|
||||||
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F,
|
|
||||||
0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
|
|
||||||
0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B,
|
|
||||||
0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
|
|
||||||
0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4,
|
|
||||||
0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229,
|
|
||||||
0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248,
|
|
||||||
0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0
|
|
||||||
};
|
|
||||||
|
|
||||||
WCHAR ff_convert( /* Converted character, Returns zero on error */
|
|
||||||
WCHAR src, /* Character code to be converted */
|
|
||||||
UINT dir /* 0: Unicode to OEMCP, 1: OEMCP to Unicode */
|
|
||||||
)
|
|
||||||
{
|
|
||||||
WCHAR c;
|
|
||||||
|
|
||||||
if(src < 0x80)
|
|
||||||
{ /* ASCII */
|
|
||||||
c = src;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if(dir)
|
|
||||||
{ /* OEMCP to Unicode */
|
|
||||||
c = (src >= 0x100) ? 0 : Tbl[src - 0x80];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{ /* Unicode to OEMCP */
|
|
||||||
for(c = 0; c < 0x80; c++)
|
|
||||||
{
|
|
||||||
if(src == Tbl[c])
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
c = (c + 0x80) & 0xFF;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return c;
|
|
||||||
}
|
|
||||||
|
|
||||||
WCHAR ff_wtoupper(WCHAR chr)
|
|
||||||
{
|
|
||||||
if(chr >= 'a' && chr <= 'z')
|
|
||||||
return (chr - 32);
|
|
||||||
else
|
|
||||||
return chr;
|
|
||||||
}
|
|
||||||
|
|
||||||
#elif _CODE_PAGE == 720 /* Arabic (OEM) */
|
|
||||||
#define _DF1S 0
|
#define _DF1S 0
|
||||||
#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, \
|
#define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, \
|
||||||
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, \
|
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \
|
||||||
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, \
|
0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \
|
||||||
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}
|
0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \
|
||||||
|
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, \
|
||||||
|
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}
|
||||||
|
|
||||||
#elif _CODE_PAGE == 737 /* Greek (OEM) */
|
#elif _CODE_PAGE == 737 /* Greek */
|
||||||
#define _DF1S 0
|
#define _DF1S 0
|
||||||
#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, \
|
#define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, \
|
||||||
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, \
|
0x90,0x92,0x92,0x93,0x94,0x95,0x96,0x97,0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87, \
|
||||||
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, \
|
0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0xAA,0x92,0x93,0x94,0x95,0x96, \
|
||||||
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}
|
0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \
|
||||||
|
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, \
|
||||||
|
0x97,0xEA,0xEB,0xEC,0xE4,0xED,0xEE,0xEF,0xF5,0xF0,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, \
|
||||||
|
0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF}
|
||||||
|
|
||||||
#elif _CODE_PAGE == 775 /* Baltic (OEM) */
|
#elif _CODE_PAGE == 771 /* KBL */
|
||||||
#define _DF1S 0
|
#define _DF1S 0
|
||||||
#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, \
|
#define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, \
|
||||||
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, \
|
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \
|
||||||
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, \
|
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, \
|
||||||
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}
|
0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \
|
||||||
|
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,0xDC,0xDE,0xDE, \
|
||||||
|
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \
|
||||||
|
0xF0,0xF0,0xF2,0xF2,0xF4,0xF4,0xF6,0xF6,0xF8,0xF8,0xFA,0xFA,0xFC,0xFC,0xFE,0xFF}
|
||||||
|
|
||||||
#elif _CODE_PAGE == 850 /* Multilingual Latin 1 (OEM) */
|
#elif _CODE_PAGE == 775 /* Baltic */
|
||||||
#define _DF1S 0
|
#define _DF1S 0
|
||||||
#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, \
|
#define _EXCVT {0x80,0x9A,0x91,0xA0,0x8E,0x95,0x8F,0x80,0xAD,0xED,0x8A,0x8A,0xA1,0x8D,0x8E,0x8F, \
|
||||||
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, \
|
0x90,0x92,0x92,0xE2,0x99,0x95,0x96,0x97,0x97,0x99,0x9A,0x9D,0x9C,0x9D,0x9E,0x9F, \
|
||||||
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, \
|
0xA0,0xA1,0xE0,0xA3,0xA3,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \
|
||||||
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}
|
0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \
|
||||||
|
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, \
|
||||||
|
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}
|
||||||
|
|
||||||
#elif _CODE_PAGE == 852 /* Latin 2 (OEM) */
|
#elif _CODE_PAGE == 850 /* Latin 1 */
|
||||||
#define _DF1S 0
|
#define _DF1S 0
|
||||||
#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, \
|
#define _EXCVT {0x43,0x55,0x45,0x41,0x41,0x41,0x41,0x43,0x45,0x45,0x45,0x49,0x49,0x49,0x41,0x41, \
|
||||||
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, \
|
0x45,0x92,0x92,0x4F,0x4F,0x4F,0x55,0x55,0x59,0x4F,0x55,0x4F,0x9C,0x4F,0x9E,0x9F, \
|
||||||
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, \
|
0x41,0x49,0x4F,0x55,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \
|
||||||
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}
|
0xB0,0xB1,0xB2,0xB3,0xB4,0x41,0x41,0x41,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \
|
||||||
|
0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0x41,0x41,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, \
|
||||||
|
0xD1,0xD1,0x45,0x45,0x45,0x49,0x49,0x49,0x49,0xD9,0xDA,0xDB,0xDC,0xDD,0x49,0xDF, \
|
||||||
|
0x4F,0xE1,0x4F,0x4F,0x4F,0x4F,0xE6,0xE8,0xE8,0x55,0x55,0x55,0x59,0x59,0xEE,0xEF, \
|
||||||
|
0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF}
|
||||||
|
|
||||||
#elif _CODE_PAGE == 855 /* Cyrillic (OEM) */
|
#elif _CODE_PAGE == 852 /* Latin 2 */
|
||||||
#define _DF1S 0
|
#define _DF1S 0
|
||||||
#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, \
|
#define _EXCVT {0x80,0x9A,0x90,0xB6,0x8E,0xDE,0x8F,0x80,0x9D,0xD3,0x8A,0x8A,0xD7,0x8D,0x8E,0x8F, \
|
||||||
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, \
|
0x90,0x91,0x91,0xE2,0x99,0x95,0x95,0x97,0x97,0x99,0x9A,0x9B,0x9B,0x9D,0x9E,0xAC, \
|
||||||
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, \
|
0xB5,0xD6,0xE0,0xE9,0xA4,0xA4,0xA6,0xA6,0xA8,0xA8,0xAA,0x8D,0xAC,0xB8,0xAE,0xAF, \
|
||||||
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}
|
0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBD,0xBF, \
|
||||||
|
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, \
|
||||||
|
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}
|
||||||
|
|
||||||
#elif _CODE_PAGE == 857 /* Turkish (OEM) */
|
#elif _CODE_PAGE == 855 /* Cyrillic */
|
||||||
#define _DF1S 0
|
#define _DF1S 0
|
||||||
#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, \
|
#define _EXCVT {0x81,0x81,0x83,0x83,0x85,0x85,0x87,0x87,0x89,0x89,0x8B,0x8B,0x8D,0x8D,0x8F,0x8F, \
|
||||||
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, \
|
0x91,0x91,0x93,0x93,0x95,0x95,0x97,0x97,0x99,0x99,0x9B,0x9B,0x9D,0x9D,0x9F,0x9F, \
|
||||||
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, \
|
0xA1,0xA1,0xA3,0xA3,0xA5,0xA5,0xA7,0xA7,0xA9,0xA9,0xAB,0xAB,0xAD,0xAD,0xAE,0xAF, \
|
||||||
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}
|
0xB0,0xB1,0xB2,0xB3,0xB4,0xB6,0xB6,0xB8,0xB8,0xB9,0xBA,0xBB,0xBC,0xBE,0xBE,0xBF, \
|
||||||
|
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, \
|
||||||
|
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}
|
||||||
|
|
||||||
#elif _CODE_PAGE == 858 /* Multilingual Latin 1 + Euro (OEM) */
|
#elif _CODE_PAGE == 857 /* Turkish */
|
||||||
#define _DF1S 0
|
#define _DF1S 0
|
||||||
#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, \
|
#define _EXCVT {0x80,0x9A,0x90,0xB6,0x8E,0xB7,0x8F,0x80,0xD2,0xD3,0xD4,0xD8,0xD7,0x49,0x8E,0x8F, \
|
||||||
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, \
|
0x90,0x92,0x92,0xE2,0x99,0xE3,0xEA,0xEB,0x98,0x99,0x9A,0x9D,0x9C,0x9D,0x9E,0x9E, \
|
||||||
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, \
|
0xB5,0xD6,0xE0,0xE9,0xA5,0xA5,0xA6,0xA6,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \
|
||||||
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}
|
0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \
|
||||||
|
0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC7,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, \
|
||||||
|
0xD0,0xD1,0xD2,0xD3,0xD4,0x49,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \
|
||||||
|
0xE0,0xE1,0xE2,0xE3,0xE5,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xDE,0xED,0xEE,0xEF, \
|
||||||
|
0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF}
|
||||||
|
|
||||||
#elif _CODE_PAGE == 862 /* Hebrew (OEM) */
|
#elif _CODE_PAGE == 860 /* Portuguese */
|
||||||
#define _DF1S 0
|
#define _DF1S 0
|
||||||
#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, \
|
#define _EXCVT {0x80,0x9A,0x90,0x8F,0x8E,0x91,0x86,0x80,0x89,0x89,0x92,0x8B,0x8C,0x98,0x8E,0x8F, \
|
||||||
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, \
|
0x90,0x91,0x92,0x8C,0x99,0xA9,0x96,0x9D,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \
|
||||||
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, \
|
0x86,0x8B,0x9F,0x96,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \
|
||||||
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}
|
0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \
|
||||||
|
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, \
|
||||||
|
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}
|
||||||
|
|
||||||
#elif _CODE_PAGE == 866 /* Russian (OEM) */
|
#elif _CODE_PAGE == 861 /* Icelandic */
|
||||||
#define _DF1S 0
|
#define _DF1S 0
|
||||||
#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, \
|
#define _EXCVT {0x80,0x9A,0x90,0x41,0x8E,0x41,0x8F,0x80,0x45,0x45,0x45,0x8B,0x8B,0x8D,0x8E,0x8F, \
|
||||||
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, \
|
0x90,0x92,0x92,0x4F,0x99,0x8D,0x55,0x97,0x97,0x99,0x9A,0x9D,0x9C,0x9D,0x9E,0x9F, \
|
||||||
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, \
|
0xA4,0xA5,0xA6,0xA7,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \
|
||||||
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}
|
0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \
|
||||||
|
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, \
|
||||||
|
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}
|
||||||
|
|
||||||
#elif _CODE_PAGE == 874 /* Thai (OEM, Windows) */
|
#elif _CODE_PAGE == 862 /* Hebrew */
|
||||||
#define _DF1S 0
|
#define _DF1S 0
|
||||||
#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, \
|
#define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, \
|
||||||
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, \
|
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \
|
||||||
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, \
|
0x41,0x49,0x4F,0x55,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \
|
||||||
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}
|
0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \
|
||||||
|
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, \
|
||||||
|
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}
|
||||||
|
|
||||||
#elif _CODE_PAGE == 1250 /* Central Europe (Windows) */
|
#elif _CODE_PAGE == 863 /* Canadian-French */
|
||||||
#define _DF1S 0
|
#define _DF1S 0
|
||||||
#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, \
|
#define _EXCVT {0x43,0x55,0x45,0x41,0x41,0x41,0x86,0x43,0x45,0x45,0x45,0x49,0x49,0x8D,0x41,0x8F, \
|
||||||
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, \
|
0x45,0x45,0x45,0x4F,0x45,0x49,0x55,0x55,0x98,0x4F,0x55,0x9B,0x9C,0x55,0x55,0x9F, \
|
||||||
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, \
|
0xA0,0xA1,0x4F,0x55,0xA4,0xA5,0xA6,0xA7,0x49,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \
|
||||||
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}
|
0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \
|
||||||
|
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, \
|
||||||
|
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}
|
||||||
|
|
||||||
#elif _CODE_PAGE == 1251 /* Cyrillic (Windows) */
|
#elif _CODE_PAGE == 864 /* Arabic */
|
||||||
#define _DF1S 0
|
#define _DF1S 0
|
||||||
#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, \
|
#define _EXCVT {0x80,0x9A,0x45,0x41,0x8E,0x41,0x8F,0x80,0x45,0x45,0x45,0x49,0x49,0x49,0x8E,0x8F, \
|
||||||
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, \
|
0x90,0x92,0x92,0x4F,0x99,0x4F,0x55,0x55,0x59,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \
|
||||||
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, \
|
0x41,0x49,0x4F,0x55,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \
|
||||||
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}
|
0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \
|
||||||
|
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, \
|
||||||
|
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}
|
||||||
|
|
||||||
#elif _CODE_PAGE == 1252 /* Latin 1 (Windows) */
|
#elif _CODE_PAGE == 865 /* Nordic */
|
||||||
#define _DF1S 0
|
#define _DF1S 0
|
||||||
#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, \
|
#define _EXCVT {0x80,0x9A,0x90,0x41,0x8E,0x41,0x8F,0x80,0x45,0x45,0x45,0x49,0x49,0x49,0x8E,0x8F, \
|
||||||
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, \
|
0x90,0x92,0x92,0x4F,0x99,0x4F,0x55,0x55,0x59,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \
|
||||||
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, \
|
0x41,0x49,0x4F,0x55,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \
|
||||||
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}
|
0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \
|
||||||
|
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, \
|
||||||
|
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}
|
||||||
|
|
||||||
#elif _CODE_PAGE == 1253 /* Greek (Windows) */
|
#elif _CODE_PAGE == 866 /* Russian */
|
||||||
#define _DF1S 0
|
#define _DF1S 0
|
||||||
#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, \
|
#define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, \
|
||||||
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, \
|
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \
|
||||||
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, \
|
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, \
|
||||||
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}
|
0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \
|
||||||
|
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, \
|
||||||
|
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}
|
||||||
|
|
||||||
#elif _CODE_PAGE == 1254 /* Turkish (Windows) */
|
#elif _CODE_PAGE == 869 /* Greek 2 */
|
||||||
#define _DF1S 0
|
#define _DF1S 0
|
||||||
#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, \
|
#define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, \
|
||||||
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, \
|
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x86,0x9C,0x8D,0x8F,0x90, \
|
||||||
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, \
|
0x91,0x90,0x92,0x95,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \
|
||||||
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}
|
0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \
|
||||||
|
0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, \
|
||||||
#elif _CODE_PAGE == 1255 /* Hebrew (Windows) */
|
0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xA4,0xA5,0xA6,0xD9,0xDA,0xDB,0xDC,0xA7,0xA8,0xDF, \
|
||||||
#define _DF1S 0
|
0xA9,0xAA,0xAC,0xAD,0xB5,0xB6,0xB7,0xB8,0xBD,0xBE,0xC6,0xC7,0xCF,0xCF,0xD0,0xEF, \
|
||||||
#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, \
|
0xF0,0xF1,0xD1,0xD2,0xD3,0xF5,0xD4,0xF7,0xF8,0xF9,0xD5,0x96,0x95,0x98,0xFE,0xFF}
|
||||||
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, \
|
|
||||||
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, \
|
|
||||||
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}
|
|
||||||
|
|
||||||
#elif _CODE_PAGE == 1256 /* Arabic (Windows) */
|
|
||||||
#define _DF1S 0
|
|
||||||
#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, \
|
|
||||||
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, \
|
|
||||||
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, \
|
|
||||||
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}
|
|
||||||
|
|
||||||
#elif _CODE_PAGE == 1257 /* Baltic (Windows) */
|
|
||||||
#define _DF1S 0
|
|
||||||
#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, \
|
|
||||||
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, \
|
|
||||||
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, \
|
|
||||||
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}
|
|
||||||
|
|
||||||
#elif _CODE_PAGE == 1258 /* Vietnam (OEM, Windows) */
|
|
||||||
#define _DF1S 0
|
|
||||||
#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, \
|
|
||||||
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, \
|
|
||||||
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, \
|
|
||||||
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}
|
|
||||||
|
|
||||||
#elif _CODE_PAGE == 1 /* ASCII (for only non-LFN cfg) */
|
#elif _CODE_PAGE == 1 /* ASCII (for only non-LFN cfg) */
|
||||||
#if _USE_LFN
|
#if _USE_LFN
|
||||||
@ -377,12 +358,12 @@ WCHAR ff_wtoupper(WCHAR chr)
|
|||||||
|
|
||||||
|
|
||||||
/* FAT sub-type boundaries (Differ from specs but correct for real DOS/Windows) */
|
/* FAT sub-type boundaries (Differ from specs but correct for real DOS/Windows) */
|
||||||
#define MIN_FAT16 4086U /* Minimum number of clusters as FAT16 */
|
#define MIN_FAT16 4086U /* Minimum number of clusters of FAT16 */
|
||||||
#define MIN_FAT32 65526U /* Minimum number of clusters as FAT32 */
|
#define MIN_FAT32 65526U /* Minimum number of clusters of FAT32 */
|
||||||
|
|
||||||
|
|
||||||
/* FatFs refers the members in the FAT structures as byte array instead of
|
/* FatFs refers the members in the FAT structures as byte array instead of
|
||||||
/ structure member because the structure is not binary compatible between
|
/ structure members because the structure is not binary compatible between
|
||||||
/ different platforms */
|
/ different platforms */
|
||||||
|
|
||||||
#define BS_jmpBoot 0 /* x86 jump instruction (3) */
|
#define BS_jmpBoot 0 /* x86 jump instruction (3) */
|
||||||
@ -399,7 +380,8 @@ WCHAR ff_wtoupper(WCHAR chr)
|
|||||||
#define BPB_NumHeads 26 /* Number of heads (2) */
|
#define BPB_NumHeads 26 /* Number of heads (2) */
|
||||||
#define BPB_HiddSec 28 /* Number of special hidden sectors (4) */
|
#define BPB_HiddSec 28 /* Number of special hidden sectors (4) */
|
||||||
#define BPB_TotSec32 32 /* Volume size [sector] (4) */
|
#define BPB_TotSec32 32 /* Volume size [sector] (4) */
|
||||||
#define BS_DrvNum 36 /* Physical drive number (2) */
|
#define BS_DrvNum 36 /* Physical drive number (1) */
|
||||||
|
#define BS_NTres 37 /* Error flag (1) */
|
||||||
#define BS_BootSig 38 /* Extended boot signature (1) */
|
#define BS_BootSig 38 /* Extended boot signature (1) */
|
||||||
#define BS_VolID 39 /* Volume serial number (4) */
|
#define BS_VolID 39 /* Volume serial number (4) */
|
||||||
#define BS_VolLab 43 /* Volume label (8) */
|
#define BS_VolLab 43 /* Volume label (8) */
|
||||||
@ -410,7 +392,8 @@ WCHAR ff_wtoupper(WCHAR chr)
|
|||||||
#define BPB_RootClus 44 /* Root directory first cluster (4) */
|
#define BPB_RootClus 44 /* Root directory first cluster (4) */
|
||||||
#define BPB_FSInfo 48 /* Offset of FSINFO sector (2) */
|
#define BPB_FSInfo 48 /* Offset of FSINFO sector (2) */
|
||||||
#define BPB_BkBootSec 50 /* Offset of backup boot sector (2) */
|
#define BPB_BkBootSec 50 /* Offset of backup boot sector (2) */
|
||||||
#define BS_DrvNum32 64 /* Physical drive number (2) */
|
#define BS_DrvNum32 64 /* Physical drive number (1) */
|
||||||
|
#define BS_NTres32 65 /* Error flag (1) */
|
||||||
#define BS_BootSig32 66 /* Extended boot signature (1) */
|
#define BS_BootSig32 66 /* Extended boot signature (1) */
|
||||||
#define BS_VolID32 67 /* Volume serial number (4) */
|
#define BS_VolID32 67 /* Volume serial number (4) */
|
||||||
#define BS_VolLab32 71 /* Volume label (8) */
|
#define BS_VolLab32 71 /* Volume label (8) */
|
||||||
@ -438,7 +421,7 @@ WCHAR ff_wtoupper(WCHAR chr)
|
|||||||
#define LDIR_Ord 0 /* LFN entry order and LLE flag (1) */
|
#define LDIR_Ord 0 /* LFN entry order and LLE flag (1) */
|
||||||
#define LDIR_Attr 11 /* LFN attribute (1) */
|
#define LDIR_Attr 11 /* LFN attribute (1) */
|
||||||
#define LDIR_Type 12 /* LFN type (1) */
|
#define LDIR_Type 12 /* LFN type (1) */
|
||||||
#define LDIR_Chksum 13 /* Sum of corresponding SFN entry */
|
#define LDIR_Chksum 13 /* Checksum of corresponding SFN entry */
|
||||||
#define LDIR_FstClusLO 26 /* Must be zero (0) */
|
#define LDIR_FstClusLO 26 /* Must be zero (0) */
|
||||||
#define SZ_DIRE 32 /* Size of a directory entry */
|
#define SZ_DIRE 32 /* Size of a directory entry */
|
||||||
#define LLEF 0x40 /* Last long entry flag in LDIR_Ord */
|
#define LLEF 0x40 /* Last long entry flag in LDIR_Ord */
|
||||||
@ -448,12 +431,15 @@ WCHAR ff_wtoupper(WCHAR chr)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*------------------------------------------------------------*/
|
/*--------------------------------------------------------------------------
|
||||||
/* Module private work area */
|
|
||||||
/*------------------------------------------------------------*/
|
Module Private Work Area
|
||||||
/* Remark: Uninitialized variables with static duration are
|
|
||||||
/ guaranteed zero/null at start-up. If not, either the linker
|
---------------------------------------------------------------------------*/
|
||||||
/ or start-up routine being used is out of ANSI-C standard.
|
|
||||||
|
/* Remark: Uninitialized variables with static duration are guaranteed
|
||||||
|
/ zero/null at start-up. If not, either the linker or start-up routine
|
||||||
|
/ being used is not compliance with ANSI-C standard.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#if _VOLUMES < 1 || _VOLUMES > 9
|
#if _VOLUMES < 1 || _VOLUMES > 9
|
||||||
@ -497,7 +483,7 @@ static WCHAR LfnBuf[_MAX_LFN + 1];
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef _EXCVT
|
#ifdef _EXCVT
|
||||||
static const BYTE ExCvt[] = _EXCVT; /* Upper conversion table for extended characters */
|
static const BYTE ExCvt[] = _EXCVT; /* Upper conversion table for SBCS extended characters */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
@ -711,7 +697,7 @@ void clear_lock ( /* Clear lock entries of the volume */
|
|||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
#if !_FS_READONLY
|
#if !_FS_READONLY
|
||||||
static
|
static
|
||||||
FRESULT sync_window (
|
FRESULT sync_window ( /* FR_OK:succeeded, !=0:error */
|
||||||
FATFS* fs /* File system object */
|
FATFS* fs /* File system object */
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
@ -740,7 +726,7 @@ FRESULT sync_window (
|
|||||||
|
|
||||||
|
|
||||||
static
|
static
|
||||||
FRESULT move_window (
|
FRESULT move_window ( /* FR_OK(0):succeeded, !=0:error */
|
||||||
FATFS* fs, /* File system object */
|
FATFS* fs, /* File system object */
|
||||||
DWORD sector /* Sector number to make appearance in the fs->win[] */
|
DWORD sector /* Sector number to make appearance in the fs->win[] */
|
||||||
)
|
)
|
||||||
@ -771,7 +757,7 @@ FRESULT move_window (
|
|||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
#if !_FS_READONLY
|
#if !_FS_READONLY
|
||||||
static
|
static
|
||||||
FRESULT sync_fs ( /* FR_OK: successful, FR_DISK_ERR: failed */
|
FRESULT sync_fs ( /* FR_OK:succeeded, !=0:error */
|
||||||
FATFS* fs /* File system object */
|
FATFS* fs /* File system object */
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
@ -780,16 +766,16 @@ FRESULT sync_fs ( /* FR_OK: successful, FR_DISK_ERR: failed */
|
|||||||
|
|
||||||
res = sync_window(fs);
|
res = sync_window(fs);
|
||||||
if (res == FR_OK) {
|
if (res == FR_OK) {
|
||||||
/* Update FSINFO sector if needed */
|
/* Update FSInfo sector if needed */
|
||||||
if (fs->fs_type == FS_FAT32 && fs->fsi_flag == 1) {
|
if (fs->fs_type == FS_FAT32 && fs->fsi_flag == 1) {
|
||||||
/* Create FSINFO structure */
|
/* Create FSInfo structure */
|
||||||
mem_set(fs->win, 0, SS(fs));
|
mem_set(fs->win, 0, SS(fs));
|
||||||
ST_WORD(fs->win + BS_55AA, 0xAA55);
|
ST_WORD(fs->win + BS_55AA, 0xAA55);
|
||||||
ST_DWORD(fs->win + FSI_LeadSig, 0x41615252);
|
ST_DWORD(fs->win + FSI_LeadSig, 0x41615252);
|
||||||
ST_DWORD(fs->win + FSI_StrucSig, 0x61417272);
|
ST_DWORD(fs->win + FSI_StrucSig, 0x61417272);
|
||||||
ST_DWORD(fs->win + FSI_Free_Count, fs->free_clust);
|
ST_DWORD(fs->win + FSI_Free_Count, fs->free_clust);
|
||||||
ST_DWORD(fs->win + FSI_Nxt_Free, fs->last_clust);
|
ST_DWORD(fs->win + FSI_Nxt_Free, fs->last_clust);
|
||||||
/* Write it into the FSINFO sector */
|
/* Write it into the FSInfo sector */
|
||||||
fs->winsect = fs->volbase + 1;
|
fs->winsect = fs->volbase + 1;
|
||||||
disk_write(fs->drv, fs->win, fs->winsect, 1);
|
disk_write(fs->drv, fs->win, fs->winsect, 1);
|
||||||
fs->fsi_flag = 0;
|
fs->fsi_flag = 0;
|
||||||
@ -811,7 +797,7 @@ FRESULT sync_fs ( /* FR_OK: successful, FR_DISK_ERR: failed */
|
|||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
/* Hidden API for hacks and disk tools */
|
/* Hidden API for hacks and disk tools */
|
||||||
|
|
||||||
static DWORD clust2sect ( /* !=0: Sector number, 0: Failed - invalid cluster# */
|
DWORD clust2sect ( /* !=0:Sector number, 0:Failed (invalid cluster#) */
|
||||||
FATFS* fs, /* File system object */
|
FATFS* fs, /* File system object */
|
||||||
DWORD clst /* Cluster# to be converted */
|
DWORD clst /* Cluster# to be converted */
|
||||||
)
|
)
|
||||||
@ -829,7 +815,7 @@ static DWORD clust2sect ( /* !=0: Sector number, 0: Failed - invalid cluster# */
|
|||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
/* Hidden API for hacks and disk tools */
|
/* Hidden API for hacks and disk tools */
|
||||||
|
|
||||||
static DWORD get_fat ( /* 0xFFFFFFFF:Disk error, 1:Internal error, 2..0x0FFFFFFF:Cluster status */
|
DWORD get_fat ( /* 0xFFFFFFFF:Disk error, 1:Internal error, 2..0x0FFFFFFF:Cluster status */
|
||||||
FATFS* fs, /* File system object */
|
FATFS* fs, /* File system object */
|
||||||
DWORD clst /* FAT index number (cluster number) to get the value */
|
DWORD clst /* FAT index number (cluster number) to get the value */
|
||||||
)
|
)
|
||||||
@ -839,7 +825,7 @@ static DWORD get_fat ( /* 0xFFFFFFFF:Disk error, 1:Internal error, 2..0x0FFFFFFF
|
|||||||
DWORD val;
|
DWORD val;
|
||||||
|
|
||||||
|
|
||||||
if (clst < 2 || clst >= fs->n_fatent) { /* Check range */
|
if (clst < 2 || clst >= fs->n_fatent) { /* Check if in valid range */
|
||||||
val = 1; /* Internal error */
|
val = 1; /* Internal error */
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
@ -884,7 +870,7 @@ static DWORD get_fat ( /* 0xFFFFFFFF:Disk error, 1:Internal error, 2..0x0FFFFFFF
|
|||||||
/* Hidden API for hacks and disk tools */
|
/* Hidden API for hacks and disk tools */
|
||||||
|
|
||||||
#if !_FS_READONLY
|
#if !_FS_READONLY
|
||||||
static FRESULT put_fat (
|
FRESULT put_fat ( /* FR_OK(0):succeeded, !=0:error */
|
||||||
FATFS* fs, /* File system object */
|
FATFS* fs, /* File system object */
|
||||||
DWORD clst, /* FAT index number (cluster number) to be changed */
|
DWORD clst, /* FAT index number (cluster number) to be changed */
|
||||||
DWORD val /* New value to be set to the entry */
|
DWORD val /* New value to be set to the entry */
|
||||||
@ -895,7 +881,7 @@ static FRESULT put_fat (
|
|||||||
FRESULT res;
|
FRESULT res;
|
||||||
|
|
||||||
|
|
||||||
if (clst < 2 || clst >= fs->n_fatent) { /* Check range */
|
if (clst < 2 || clst >= fs->n_fatent) { /* Check if in valid range */
|
||||||
res = FR_INT_ERR;
|
res = FR_INT_ERR;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
@ -948,7 +934,7 @@ static FRESULT put_fat (
|
|||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
#if !_FS_READONLY
|
#if !_FS_READONLY
|
||||||
static
|
static
|
||||||
FRESULT remove_chain (
|
FRESULT remove_chain ( /* FR_OK(0):succeeded, !=0:error */
|
||||||
FATFS* fs, /* File system object */
|
FATFS* fs, /* File system object */
|
||||||
DWORD clst /* Cluster# to remove a chain from */
|
DWORD clst /* Cluster# to remove a chain from */
|
||||||
)
|
)
|
||||||
@ -959,7 +945,7 @@ FRESULT remove_chain (
|
|||||||
DWORD scl = clst, ecl = clst, rt[2];
|
DWORD scl = clst, ecl = clst, rt[2];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (clst < 2 || clst >= fs->n_fatent) { /* Check range */
|
if (clst < 2 || clst >= fs->n_fatent) { /* Check if in valid range */
|
||||||
res = FR_INT_ERR;
|
res = FR_INT_ERR;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
@ -1003,7 +989,7 @@ FRESULT remove_chain (
|
|||||||
static
|
static
|
||||||
DWORD create_chain ( /* 0:No free cluster, 1:Internal error, 0xFFFFFFFF:Disk error, >=2:New cluster# */
|
DWORD create_chain ( /* 0:No free cluster, 1:Internal error, 0xFFFFFFFF:Disk error, >=2:New cluster# */
|
||||||
FATFS* fs, /* File system object */
|
FATFS* fs, /* File system object */
|
||||||
DWORD clst /* Cluster# to stretch. 0 means create a new chain. */
|
DWORD clst /* Cluster# to stretch, 0:Create a new chain */
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
DWORD cs, ncl, scl;
|
DWORD cs, ncl, scl;
|
||||||
@ -1091,7 +1077,7 @@ DWORD clmt_clust ( /* <2:Error, >=2:Cluster number */
|
|||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
|
|
||||||
static
|
static
|
||||||
FRESULT dir_sdi (
|
FRESULT dir_sdi ( /* FR_OK(0):succeeded, !=0:error */
|
||||||
DIR* dp, /* Pointer to directory object */
|
DIR* dp, /* Pointer to directory object */
|
||||||
UINT idx /* Index of directory table */
|
UINT idx /* Index of directory table */
|
||||||
)
|
)
|
||||||
@ -1139,7 +1125,7 @@ FRESULT dir_sdi (
|
|||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
|
|
||||||
static
|
static
|
||||||
FRESULT dir_next ( /* FR_OK:Succeeded, FR_NO_FILE:End of table, FR_DENIED:Could not stretch */
|
FRESULT dir_next ( /* FR_OK(0):succeeded, FR_NO_FILE:End of table, FR_DENIED:Could not stretch */
|
||||||
DIR* dp, /* Pointer to the directory object */
|
DIR* dp, /* Pointer to the directory object */
|
||||||
int stretch /* 0: Do not stretch table, 1: Stretch table if needed */
|
int stretch /* 0: Do not stretch table, 1: Stretch table if needed */
|
||||||
)
|
)
|
||||||
@ -1210,7 +1196,7 @@ FRESULT dir_next ( /* FR_OK:Succeeded, FR_NO_FILE:End of table, FR_DENIED:Could
|
|||||||
|
|
||||||
#if !_FS_READONLY
|
#if !_FS_READONLY
|
||||||
static
|
static
|
||||||
FRESULT dir_alloc (
|
FRESULT dir_alloc ( /* FR_OK(0):succeeded, !=0:error */
|
||||||
DIR* dp, /* Pointer to the directory object */
|
DIR* dp, /* Pointer to the directory object */
|
||||||
UINT nent /* Number of contiguous entries to allocate (1-21) */
|
UINT nent /* Number of contiguous entries to allocate (1-21) */
|
||||||
)
|
)
|
||||||
@ -1246,9 +1232,9 @@ FRESULT dir_alloc (
|
|||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
|
|
||||||
static
|
static
|
||||||
DWORD ld_clust (
|
DWORD ld_clust ( /* Returns the top cluster value of the SFN entry */
|
||||||
FATFS* fs, /* Pointer to the fs object */
|
FATFS* fs, /* Pointer to the fs object */
|
||||||
BYTE* dir /* Pointer to the directory entry */
|
const BYTE* dir /* Pointer to the SFN entry */
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
DWORD cl;
|
DWORD cl;
|
||||||
@ -1264,7 +1250,7 @@ DWORD ld_clust (
|
|||||||
#if !_FS_READONLY
|
#if !_FS_READONLY
|
||||||
static
|
static
|
||||||
void st_clust (
|
void st_clust (
|
||||||
BYTE* dir, /* Pointer to the directory entry */
|
BYTE* dir, /* Pointer to the SFN entry */
|
||||||
DWORD cl /* Value to be set */
|
DWORD cl /* Value to be set */
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
@ -1285,27 +1271,29 @@ const BYTE LfnOfs[] = {1,3,5,7,9,14,16,18,20,22,24,28,30}; /* Offset of LFN char
|
|||||||
|
|
||||||
|
|
||||||
static
|
static
|
||||||
int cmp_lfn ( /* 1:Matched, 0:Not matched */
|
int cmp_lfn ( /* 1:matched, 0:not matched */
|
||||||
WCHAR* lfnbuf, /* Pointer to the LFN to be compared */
|
WCHAR* lfnbuf, /* Pointer to the LFN working buffer to be compared */
|
||||||
BYTE* dir /* Pointer to the directory entry containing a part of LFN */
|
BYTE* dir /* Pointer to the directory entry containing the part of LFN */
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINT i, s;
|
UINT i, s;
|
||||||
WCHAR wc, uc;
|
WCHAR wc, uc;
|
||||||
|
|
||||||
|
|
||||||
i = ((dir[LDIR_Ord] & ~LLEF) - 1) * 13; /* Get offset in the LFN buffer */
|
if (LD_WORD(dir + LDIR_FstClusLO) != 0) return 0; /* Check LDIR_FstClusLO */
|
||||||
s = 0; wc = 1;
|
|
||||||
do {
|
i = ((dir[LDIR_Ord] & 0x3F) - 1) * 13; /* Offset in the LFN buffer */
|
||||||
uc = LD_WORD(dir + LfnOfs[s]); /* Pick an LFN character from the entry */
|
|
||||||
if (wc) { /* Last character has not been processed */
|
for (wc = 1, s = 0; s < 13; s++) { /* Process all characters in the entry */
|
||||||
wc = ff_wtoupper(uc); /* Convert it to upper case */
|
uc = LD_WORD(dir + LfnOfs[s]); /* Pick an LFN character */
|
||||||
if (i >= _MAX_LFN || wc != ff_wtoupper(lfnbuf[i++])) /* Compare it */
|
if (wc) {
|
||||||
|
if (i >= _MAX_LFN || ff_wtoupper(uc) != ff_wtoupper(lfnbuf[i++])) /* Compare it */
|
||||||
return 0; /* Not matched */
|
return 0; /* Not matched */
|
||||||
|
wc = uc;
|
||||||
} else {
|
} else {
|
||||||
if (uc != 0xFFFF) return 0; /* Check filler */
|
if (uc != 0xFFFF) return 0; /* Check filler */
|
||||||
}
|
}
|
||||||
} while (++s < 13); /* Repeat until all characters in the entry are checked */
|
}
|
||||||
|
|
||||||
if ((dir[LDIR_Ord] & LLEF) && wc && lfnbuf[i]) /* Last segment matched but different length */
|
if ((dir[LDIR_Ord] & LLEF) && wc && lfnbuf[i]) /* Last segment matched but different length */
|
||||||
return 0;
|
return 0;
|
||||||
@ -1316,34 +1304,35 @@ int cmp_lfn ( /* 1:Matched, 0:Not matched */
|
|||||||
|
|
||||||
#if _FS_MINIMIZE <= 1 || _USE_LABEL || _FS_RPATH >= 2
|
#if _FS_MINIMIZE <= 1 || _USE_LABEL || _FS_RPATH >= 2
|
||||||
static
|
static
|
||||||
int pick_lfn ( /* 1:Succeeded, 0:Buffer overflow */
|
int pick_lfn ( /* 1:succeeded, 0:buffer overflow or invalid LFN entry */
|
||||||
WCHAR* lfnbuf, /* Pointer to the Unicode-LFN buffer */
|
WCHAR* lfnbuf, /* Pointer to the LFN working buffer */
|
||||||
BYTE* dir /* Pointer to the directory entry */
|
BYTE* dir /* Pointer to the LFN entry */
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINT i, s;
|
UINT i, s;
|
||||||
WCHAR wc, uc;
|
WCHAR wc, uc;
|
||||||
|
|
||||||
|
|
||||||
|
if (LD_WORD(dir + LDIR_FstClusLO) != 0) return 0; /* Check LDIR_FstClusLO */
|
||||||
|
|
||||||
i = ((dir[LDIR_Ord] & 0x3F) - 1) * 13; /* Offset in the LFN buffer */
|
i = ((dir[LDIR_Ord] & 0x3F) - 1) * 13; /* Offset in the LFN buffer */
|
||||||
|
|
||||||
s = 0; wc = 1;
|
for (wc = 1, s = 0; s < 13; s++) { /* Process all characters in the entry */
|
||||||
do {
|
uc = LD_WORD(dir + LfnOfs[s]); /* Pick an LFN character */
|
||||||
uc = LD_WORD(dir + LfnOfs[s]); /* Pick an LFN character from the entry */
|
if (wc) {
|
||||||
if (wc) { /* Last character has not been processed */
|
|
||||||
if (i >= _MAX_LFN) return 0; /* Buffer overflow? */
|
if (i >= _MAX_LFN) return 0; /* Buffer overflow? */
|
||||||
lfnbuf[i++] = wc = uc; /* Store it */
|
lfnbuf[i++] = wc = uc; /* Store it */
|
||||||
} else {
|
} else {
|
||||||
if (uc != 0xFFFF) return 0; /* Check filler */
|
if (uc != 0xFFFF) return 0; /* Check filler */
|
||||||
}
|
}
|
||||||
} while (++s < 13); /* Read all character in the entry */
|
}
|
||||||
|
|
||||||
if (dir[LDIR_Ord] & LLEF) { /* Put terminator if it is the last LFN part */
|
if (dir[LDIR_Ord] & LLEF) { /* Put terminator if it is the last LFN part */
|
||||||
if (i >= _MAX_LFN) return 0; /* Buffer overflow? */
|
if (i >= _MAX_LFN) return 0; /* Buffer overflow? */
|
||||||
lfnbuf[i] = 0;
|
lfnbuf[i] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
return 1; /* The part of LFN is valid */
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -1351,10 +1340,10 @@ int pick_lfn ( /* 1:Succeeded, 0:Buffer overflow */
|
|||||||
#if !_FS_READONLY
|
#if !_FS_READONLY
|
||||||
static
|
static
|
||||||
void fit_lfn (
|
void fit_lfn (
|
||||||
const WCHAR* lfnbuf, /* Pointer to the LFN buffer */
|
const WCHAR* lfnbuf, /* Pointer to the LFN working buffer */
|
||||||
BYTE* dir, /* Pointer to the directory entry */
|
BYTE* dir, /* Pointer to the LFN entry to be processed */
|
||||||
BYTE ord, /* LFN order (1-20) */
|
BYTE ord, /* LFN order (1-20) */
|
||||||
BYTE sum /* SFN sum */
|
BYTE sum /* Checksum of the corresponding SFN */
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINT i, s;
|
UINT i, s;
|
||||||
@ -1366,7 +1355,7 @@ void fit_lfn (
|
|||||||
dir[LDIR_Type] = 0;
|
dir[LDIR_Type] = 0;
|
||||||
ST_WORD(dir + LDIR_FstClusLO, 0);
|
ST_WORD(dir + LDIR_FstClusLO, 0);
|
||||||
|
|
||||||
i = (ord - 1) * 13; /* Get offset in the LFN buffer */
|
i = (ord - 1) * 13; /* Get offset in the LFN working buffer */
|
||||||
s = wc = 0;
|
s = wc = 0;
|
||||||
do {
|
do {
|
||||||
if (wc != 0xFFFF) wc = lfnbuf[i++]; /* Get an effective character */
|
if (wc != 0xFFFF) wc = lfnbuf[i++]; /* Get an effective character */
|
||||||
@ -1443,7 +1432,7 @@ void gen_numname (
|
|||||||
|
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
/* Calculate sum of an SFN */
|
/* Calculate checksum of an SFN entry */
|
||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
#if _USE_LFN
|
#if _USE_LFN
|
||||||
static
|
static
|
||||||
@ -1467,7 +1456,7 @@ BYTE sum_sfn (
|
|||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
|
|
||||||
static
|
static
|
||||||
FRESULT dir_find (
|
FRESULT dir_find ( /* FR_OK(0):succeeded, !=0:error */
|
||||||
DIR* dp /* Pointer to the directory object linked to the file name */
|
DIR* dp /* Pointer to the directory object linked to the file name */
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
@ -1587,7 +1576,7 @@ FRESULT dir_read (
|
|||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
#if !_FS_READONLY
|
#if !_FS_READONLY
|
||||||
static
|
static
|
||||||
FRESULT dir_register ( /* FR_OK:Successful, FR_DENIED:No free entry or too many SFN collision, FR_DISK_ERR:Disk error */
|
FRESULT dir_register ( /* FR_OK:succeeded, FR_DENIED:no free entry or too many SFN collision, FR_DISK_ERR:disk error */
|
||||||
DIR* dp /* Target directory with object name to be created */
|
DIR* dp /* Target directory with object name to be created */
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
@ -1627,7 +1616,7 @@ FRESULT dir_register ( /* FR_OK:Successful, FR_DENIED:No free entry or too many
|
|||||||
if (res == FR_OK && --nent) { /* Set LFN entry if needed */
|
if (res == FR_OK && --nent) { /* Set LFN entry if needed */
|
||||||
res = dir_sdi(dp, dp->index - nent);
|
res = dir_sdi(dp, dp->index - nent);
|
||||||
if (res == FR_OK) {
|
if (res == FR_OK) {
|
||||||
sum = sum_sfn(dp->fn); /* Sum value of the SFN tied to the LFN */
|
sum = sum_sfn(dp->fn); /* Checksum value of the SFN tied to the LFN */
|
||||||
do { /* Store LFN entries in bottom first */
|
do { /* Store LFN entries in bottom first */
|
||||||
res = move_window(dp->fs, dp->sect);
|
res = move_window(dp->fs, dp->sect);
|
||||||
if (res != FR_OK) break;
|
if (res != FR_OK) break;
|
||||||
@ -1665,7 +1654,7 @@ FRESULT dir_register ( /* FR_OK:Successful, FR_DENIED:No free entry or too many
|
|||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
#if !_FS_READONLY && !_FS_MINIMIZE
|
#if !_FS_READONLY && !_FS_MINIMIZE
|
||||||
static
|
static
|
||||||
FRESULT dir_remove ( /* FR_OK: Successful, FR_DISK_ERR: A disk error */
|
FRESULT dir_remove ( /* FR_OK:Succeeded, FR_DISK_ERR:A disk error */
|
||||||
DIR* dp /* Directory object pointing the entry to be removed */
|
DIR* dp /* Directory object pointing the entry to be removed */
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
@ -1804,7 +1793,7 @@ WCHAR get_achar ( /* Get a character and advances ptr 1 or 2 */
|
|||||||
|
|
||||||
|
|
||||||
static
|
static
|
||||||
int pattern_matching ( /* Return value: 0:mismatched, 1:matched */
|
int pattern_matching ( /* 0:mismatched, 1:matched */
|
||||||
const TCHAR* pat, /* Matching pattern */
|
const TCHAR* pat, /* Matching pattern */
|
||||||
const TCHAR* nam, /* String to be tested */
|
const TCHAR* nam, /* String to be tested */
|
||||||
int skip, /* Number of pre-skip chars (number of ?s) */
|
int skip, /* Number of pre-skip chars (number of ?s) */
|
||||||
@ -1848,11 +1837,11 @@ int pattern_matching ( /* Return value: 0:mismatched, 1:matched */
|
|||||||
|
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
/* Pick a segment and create the object name in directory form */
|
/* Pick a top segment and create the object name in directory form */
|
||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
|
|
||||||
static
|
static
|
||||||
FRESULT create_name (
|
FRESULT create_name ( /* FR_OK: successful, FR_INVALID_NAME: could not create */
|
||||||
DIR* dp, /* Pointer to the directory object */
|
DIR* dp, /* Pointer to the directory object */
|
||||||
const TCHAR** path /* Pointer to pointer to the segment in the path string */
|
const TCHAR** path /* Pointer to pointer to the segment in the path string */
|
||||||
)
|
)
|
||||||
@ -1890,22 +1879,21 @@ FRESULT create_name (
|
|||||||
*path = &p[si]; /* Return pointer to the next segment */
|
*path = &p[si]; /* Return pointer to the next segment */
|
||||||
cf = (w < ' ') ? NS_LAST : 0; /* Set last segment flag if end of path */
|
cf = (w < ' ') ? NS_LAST : 0; /* Set last segment flag if end of path */
|
||||||
#if _FS_RPATH
|
#if _FS_RPATH
|
||||||
if ((di == 1 && lfn[di - 1] == '.') || /* Is this a dot entry? */
|
if ((di == 1 && lfn[di - 1] == '.') ||
|
||||||
(di == 2 && lfn[di - 1] == '.' && lfn[di - 2] == '.')) {
|
(di == 2 && lfn[di - 1] == '.' && lfn[di - 2] == '.')) { /* Is this segment a dot entry? */
|
||||||
lfn[di] = 0;
|
lfn[di] = 0;
|
||||||
for (i = 0; i < 11; i++)
|
for (i = 0; i < 11; i++) /* Create dot name for SFN entry */
|
||||||
dp->fn[i] = (i < di) ? '.' : ' ';
|
dp->fn[i] = (i < di) ? '.' : ' ';
|
||||||
dp->fn[i] = cf | NS_DOT; /* This is a dot entry */
|
dp->fn[i] = cf | NS_DOT; /* This is a dot entry */
|
||||||
return FR_OK;
|
return FR_OK;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
while (di) { /* Strip trailing spaces and dots */
|
while (di) { /* Snip off trailing spaces and dots if exist */
|
||||||
w = lfn[di - 1];
|
w = lfn[di - 1];
|
||||||
if (w != ' ' && w != '.') break;
|
if (w != ' ' && w != '.') break;
|
||||||
di--;
|
di--;
|
||||||
}
|
}
|
||||||
if (!di) return FR_INVALID_NAME; /* Reject nul string */
|
if (!di) return FR_INVALID_NAME; /* Reject nul string */
|
||||||
|
|
||||||
lfn[di] = 0; /* LFN is created */
|
lfn[di] = 0; /* LFN is created */
|
||||||
|
|
||||||
/* Create SFN in directory form */
|
/* Create SFN in directory form */
|
||||||
@ -1942,7 +1930,7 @@ FRESULT create_name (
|
|||||||
cf |= NS_LFN; /* Force create LFN entry */
|
cf |= NS_LFN; /* Force create LFN entry */
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_DF1S && w >= 0x100) { /* DBC (always false at SBCS cfg) */
|
if (_DF1S && w >= 0x100) { /* Is this DBC? (always false at SBCS cfg) */
|
||||||
if (i >= ni - 1) {
|
if (i >= ni - 1) {
|
||||||
cf |= NS_LOSS | NS_LFN; i = ni; continue;
|
cf |= NS_LOSS | NS_LFN; i = ni; continue;
|
||||||
}
|
}
|
||||||
@ -1963,7 +1951,7 @@ FRESULT create_name (
|
|||||||
dp->fn[i++] = (BYTE)w;
|
dp->fn[i++] = (BYTE)w;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dp->fn[0] == DDEM) dp->fn[0] = RDDEM; /* If the first character collides with deleted mark, replace it with RDDEM */
|
if (dp->fn[0] == DDEM) dp->fn[0] = RDDEM; /* If the first character collides with DDEM, replace it with RDDEM */
|
||||||
|
|
||||||
if (ni == 8) b <<= 2;
|
if (ni == 8) b <<= 2;
|
||||||
if ((b & 0x0C) == 0x0C || (b & 0x03) == 0x03) /* Create LFN entry when there are composite capitals */
|
if ((b & 0x0C) == 0x0C || (b & 0x03) == 0x03) /* Create LFN entry when there are composite capitals */
|
||||||
@ -1984,7 +1972,7 @@ FRESULT create_name (
|
|||||||
const char *p;
|
const char *p;
|
||||||
|
|
||||||
/* Create file name in directory form */
|
/* Create file name in directory form */
|
||||||
for (p = *path; *p == '/' || *p == '\\'; p++) ; /* Strip duplicated separator */
|
for (p = *path; *p == '/' || *p == '\\'; p++) ; /* Skip duplicated separator */
|
||||||
sfn = dp->fn;
|
sfn = dp->fn;
|
||||||
mem_set(sfn, ' ', 11);
|
mem_set(sfn, ' ', 11);
|
||||||
si = i = b = 0; ni = 8;
|
si = i = b = 0; ni = 8;
|
||||||
@ -2019,7 +2007,7 @@ FRESULT create_name (
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
if (IsDBCS1(c)) { /* Check if it is a DBC 1st byte (always false on SBCS cfg) */
|
if (IsDBCS1(c)) { /* Check if it is a DBC 1st byte (always false at SBCS cfg.) */
|
||||||
d = (BYTE)p[si++]; /* Get 2nd byte */
|
d = (BYTE)p[si++]; /* Get 2nd byte */
|
||||||
if (!IsDBCS2(d) || i >= ni - 1) /* Reject invalid DBC */
|
if (!IsDBCS2(d) || i >= ni - 1) /* Reject invalid DBC */
|
||||||
return FR_INVALID_NAME;
|
return FR_INVALID_NAME;
|
||||||
@ -2185,7 +2173,7 @@ int get_ldnumber ( /* Returns logical drive number (-1:invalid drive) */
|
|||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
|
|
||||||
static
|
static
|
||||||
BYTE check_fs ( /* 0:FAT boor sector, 1:Valid boor sector but not FAT, 2:Not a boot sector, 3:Disk error */
|
BYTE check_fs ( /* 0:Valid FAT-BS, 1:Valid BS but not FAT, 2:Not a BS, 3:Disk error */
|
||||||
FATFS* fs, /* File system object */
|
FATFS* fs, /* File system object */
|
||||||
DWORD sect /* Sector# (lba) to check if it is an FAT boot record or not */
|
DWORD sect /* Sector# (lba) to check if it is an FAT boot record or not */
|
||||||
)
|
)
|
||||||
@ -2343,7 +2331,7 @@ FRESULT find_volume ( /* FR_OK(0): successful, !=0: any error occurred */
|
|||||||
/* Get fsinfo if available */
|
/* Get fsinfo if available */
|
||||||
fs->fsi_flag = 0x80;
|
fs->fsi_flag = 0x80;
|
||||||
#if (_FS_NOFSINFO & 3) != 3
|
#if (_FS_NOFSINFO & 3) != 3
|
||||||
if (fmt == FS_FAT32 /* Enable FSINFO only if FAT32 and BPB_FSInfo is 1 */
|
if (fmt == FS_FAT32 /* Enable FSINFO only if FAT32 and BPB_FSInfo == 1 */
|
||||||
&& LD_WORD(fs->win + BPB_FSInfo) == 1
|
&& LD_WORD(fs->win + BPB_FSInfo) == 1
|
||||||
&& move_window(fs, bsect + 1) == FR_OK)
|
&& move_window(fs, bsect + 1) == FR_OK)
|
||||||
{
|
{
|
||||||
@ -2389,14 +2377,11 @@ FRESULT validate ( /* FR_OK(0): The object is valid, !=0: Invalid */
|
|||||||
FIL *fil = (FIL*)obj; /* Assuming offset of .fs and .id in the FIL/DIR structure is identical */
|
FIL *fil = (FIL*)obj; /* Assuming offset of .fs and .id in the FIL/DIR structure is identical */
|
||||||
|
|
||||||
|
|
||||||
if (!fil || !fil->fs || !fil->fs->fs_type || fil->fs->id != fil->id)
|
if (!fil || !fil->fs || !fil->fs->fs_type || fil->fs->id != fil->id || (disk_status(fil->fs->drv) & STA_NOINIT))
|
||||||
return FR_INVALID_OBJECT;
|
return FR_INVALID_OBJECT;
|
||||||
|
|
||||||
ENTER_FF(fil->fs); /* Lock file system */
|
ENTER_FF(fil->fs); /* Lock file system */
|
||||||
|
|
||||||
if (disk_status(fil->fs->drv) & STA_NOINIT)
|
|
||||||
return FR_NOT_READY;
|
|
||||||
|
|
||||||
return FR_OK;
|
return FR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2407,7 +2392,7 @@ FRESULT validate ( /* FR_OK(0): The object is valid, !=0: Invalid */
|
|||||||
|
|
||||||
Public Functions
|
Public Functions
|
||||||
|
|
||||||
--------------------------------------------------------------------------*/
|
---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -2522,12 +2507,13 @@ FRESULT f_open (
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (res == FR_OK && (mode & FA_CREATE_ALWAYS)) { /* Truncate it if overwrite mode */
|
if (res == FR_OK && (mode & FA_CREATE_ALWAYS)) { /* Truncate it if overwrite mode */
|
||||||
dw = GET_FATTIME(); /* Created time */
|
dw = GET_FATTIME();
|
||||||
ST_DWORD(dir + DIR_CrtTime, dw);
|
ST_DWORD(dir + DIR_CrtTime, dw);/* Set created time */
|
||||||
|
ST_DWORD(dir + DIR_WrtTime, dw);/* Set modified time */
|
||||||
dir[DIR_Attr] = 0; /* Reset attribute */
|
dir[DIR_Attr] = 0; /* Reset attribute */
|
||||||
ST_DWORD(dir + DIR_FileSize, 0);/* size = 0 */
|
ST_DWORD(dir + DIR_FileSize, 0);/* Reset file size */
|
||||||
cl = ld_clust(dj.fs, dir); /* Get start cluster */
|
cl = ld_clust(dj.fs, dir); /* Get cluster chain */
|
||||||
st_clust(dir, 0); /* cluster = 0 */
|
st_clust(dir, 0); /* Reset cluster */
|
||||||
dj.fs->wflag = 1;
|
dj.fs->wflag = 1;
|
||||||
if (cl) { /* Remove the cluster chain if exist */
|
if (cl) { /* Remove the cluster chain if exist */
|
||||||
dw = dj.fs->winsect;
|
dw = dj.fs->winsect;
|
||||||
@ -2540,7 +2526,7 @@ FRESULT f_open (
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else { /* Open an existing file */
|
else { /* Open an existing file */
|
||||||
if (res == FR_OK) { /* Follow succeeded */
|
if (res == FR_OK) { /* Following succeeded */
|
||||||
if (dir[DIR_Attr] & AM_DIR) { /* It is a directory */
|
if (dir[DIR_Attr] & AM_DIR) { /* It is a directory */
|
||||||
res = FR_NO_FILE;
|
res = FR_NO_FILE;
|
||||||
} else {
|
} else {
|
||||||
@ -2832,10 +2818,9 @@ FRESULT f_sync (
|
|||||||
|
|
||||||
res = validate(fp); /* Check validity of the object */
|
res = validate(fp); /* Check validity of the object */
|
||||||
if (res == FR_OK) {
|
if (res == FR_OK) {
|
||||||
if (fp->flag & FA__WRITTEN) { /* Has the file been written? */
|
if (fp->flag & FA__WRITTEN) { /* Is there any change to the file? */
|
||||||
/* Write-back dirty buffer */
|
|
||||||
#if !_FS_TINY
|
#if !_FS_TINY
|
||||||
if (fp->flag & FA__DIRTY) {
|
if (fp->flag & FA__DIRTY) { /* Write-back cached data if needed */
|
||||||
if (disk_write(fp->fs->drv, fp->buf, fp->dsect, 1) != RES_OK)
|
if (disk_write(fp->fs->drv, fp->buf, fp->dsect, 1) != RES_OK)
|
||||||
LEAVE_FF(fp->fs, FR_DISK_ERR);
|
LEAVE_FF(fp->fs, FR_DISK_ERR);
|
||||||
fp->flag &= ~FA__DIRTY;
|
fp->flag &= ~FA__DIRTY;
|
||||||
@ -2848,7 +2833,7 @@ FRESULT f_sync (
|
|||||||
dir[DIR_Attr] |= AM_ARC; /* Set archive bit */
|
dir[DIR_Attr] |= AM_ARC; /* Set archive bit */
|
||||||
ST_DWORD(dir + DIR_FileSize, fp->fsize); /* Update file size */
|
ST_DWORD(dir + DIR_FileSize, fp->fsize); /* Update file size */
|
||||||
st_clust(dir, fp->sclust); /* Update start cluster */
|
st_clust(dir, fp->sclust); /* Update start cluster */
|
||||||
tm = GET_FATTIME(); /* Update updated time */
|
tm = GET_FATTIME(); /* Update modified time */
|
||||||
ST_DWORD(dir + DIR_WrtTime, tm);
|
ST_DWORD(dir + DIR_WrtTime, tm);
|
||||||
ST_WORD(dir + DIR_LstAccDate, 0);
|
ST_WORD(dir + DIR_LstAccDate, 0);
|
||||||
fp->flag &= ~FA__WRITTEN;
|
fp->flag &= ~FA__WRITTEN;
|
||||||
@ -3425,7 +3410,7 @@ FRESULT f_getfree (
|
|||||||
{
|
{
|
||||||
FRESULT res;
|
FRESULT res;
|
||||||
FATFS *fs;
|
FATFS *fs;
|
||||||
DWORD n, clst, sect, stat;
|
DWORD nfree, clst, sect, stat;
|
||||||
UINT i;
|
UINT i;
|
||||||
BYTE fat, *p;
|
BYTE fat, *p;
|
||||||
|
|
||||||
@ -3440,18 +3425,17 @@ FRESULT f_getfree (
|
|||||||
} else {
|
} else {
|
||||||
/* Get number of free clusters */
|
/* Get number of free clusters */
|
||||||
fat = fs->fs_type;
|
fat = fs->fs_type;
|
||||||
n = 0;
|
nfree = 0;
|
||||||
if (fat == FS_FAT12) {
|
if (fat == FS_FAT12) { /* Sector unalighed entries: Search FAT via regular routine. */
|
||||||
clst = 2;
|
clst = 2;
|
||||||
do {
|
do {
|
||||||
stat = get_fat(fs, clst);
|
stat = get_fat(fs, clst);
|
||||||
if (stat == 0xFFFFFFFF) { res = FR_DISK_ERR; break; }
|
if (stat == 0xFFFFFFFF) { res = FR_DISK_ERR; break; }
|
||||||
if (stat == 1) { res = FR_INT_ERR; break; }
|
if (stat == 1) { res = FR_INT_ERR; break; }
|
||||||
if (stat == 0) n++;
|
if (stat == 0) nfree++;
|
||||||
} while (++clst < fs->n_fatent);
|
} while (++clst < fs->n_fatent);
|
||||||
} else {
|
} else { /* Sector alighed entries: Accelerate the FAT search. */
|
||||||
clst = fs->n_fatent;
|
clst = fs->n_fatent; sect = fs->fatbase;
|
||||||
sect = fs->fatbase;
|
|
||||||
i = 0; p = 0;
|
i = 0; p = 0;
|
||||||
do {
|
do {
|
||||||
if (!i) {
|
if (!i) {
|
||||||
@ -3461,17 +3445,17 @@ FRESULT f_getfree (
|
|||||||
i = SS(fs);
|
i = SS(fs);
|
||||||
}
|
}
|
||||||
if (fat == FS_FAT16) {
|
if (fat == FS_FAT16) {
|
||||||
if (LD_WORD(p) == 0) n++;
|
if (LD_WORD(p) == 0) nfree++;
|
||||||
p += 2; i -= 2;
|
p += 2; i -= 2;
|
||||||
} else {
|
} else {
|
||||||
if ((LD_DWORD(p) & 0x0FFFFFFF) == 0) n++;
|
if ((LD_DWORD(p) & 0x0FFFFFFF) == 0) nfree++;
|
||||||
p += 4; i -= 4;
|
p += 4; i -= 4;
|
||||||
}
|
}
|
||||||
} while (--clst);
|
} while (--clst);
|
||||||
}
|
}
|
||||||
fs->free_clust = n;
|
fs->free_clust = nfree; /* free_clust is valid */
|
||||||
fs->fsi_flag |= 1;
|
fs->fsi_flag |= 1; /* FSInfo is to be updated */
|
||||||
*nclst = n;
|
*nclst = nfree; /* Return the free clusters */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
LEAVE_FF(fs, res);
|
LEAVE_FF(fs, res);
|
||||||
@ -3695,8 +3679,7 @@ FRESULT f_chmod (
|
|||||||
DEFINE_NAMEBUF;
|
DEFINE_NAMEBUF;
|
||||||
|
|
||||||
|
|
||||||
/* Get logical drive number */
|
res = find_volume(&dj.fs, &path, 1); /* Get logical drive number */
|
||||||
res = find_volume(&dj.fs, &path, 1);
|
|
||||||
if (res == FR_OK) {
|
if (res == FR_OK) {
|
||||||
INIT_BUF(dj);
|
INIT_BUF(dj);
|
||||||
res = follow_path(&dj, path); /* Follow the file path */
|
res = follow_path(&dj, path); /* Follow the file path */
|
||||||
@ -4263,7 +4246,7 @@ FRESULT f_mkfs (
|
|||||||
ST_WORD(tbl + BS_55AA, 0xAA55); /* Signature (Offset is fixed here regardless of sector size) */
|
ST_WORD(tbl + BS_55AA, 0xAA55); /* Signature (Offset is fixed here regardless of sector size) */
|
||||||
if (disk_write(pdrv, tbl, b_vol, 1) != RES_OK) /* Write it to the VBR sector */
|
if (disk_write(pdrv, tbl, b_vol, 1) != RES_OK) /* Write it to the VBR sector */
|
||||||
return FR_DISK_ERR;
|
return FR_DISK_ERR;
|
||||||
if (fmt == FS_FAT32) /* Write backup VBR if needed (VBR + 6) */
|
if (fmt == FS_FAT32) /* Write it to the backup VBR if needed (VBR + 6) */
|
||||||
disk_write(pdrv, tbl, b_vol + 6, 1);
|
disk_write(pdrv, tbl, b_vol + 6, 1);
|
||||||
|
|
||||||
/* Initialize FAT area */
|
/* Initialize FAT area */
|
||||||
|
6
loader/source/fatfs/ff.h
Normal file → Executable file
6
loader/source/fatfs/ff.h
Normal file → Executable file
@ -1,5 +1,5 @@
|
|||||||
/*---------------------------------------------------------------------------/
|
/*---------------------------------------------------------------------------/
|
||||||
/ FatFs - FAT file system module include R0.11 (C)ChaN, 2015
|
/ FatFs - FAT file system module include R0.11a (C)ChaN, 2015
|
||||||
/----------------------------------------------------------------------------/
|
/----------------------------------------------------------------------------/
|
||||||
/ FatFs module is a free software that opened under license policy of
|
/ FatFs module is a free software that opened under license policy of
|
||||||
/ following conditions.
|
/ following conditions.
|
||||||
@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
|
|
||||||
#ifndef _FATFS
|
#ifndef _FATFS
|
||||||
#define _FATFS 32020 /* Revision ID */
|
#define _FATFS 64180 /* Revision ID */
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
@ -200,7 +200,7 @@ typedef enum {
|
|||||||
FR_TIMEOUT, /* (15) Could not get a grant to access the volume within defined period */
|
FR_TIMEOUT, /* (15) Could not get a grant to access the volume within defined period */
|
||||||
FR_LOCKED, /* (16) The operation is rejected according to the file sharing policy */
|
FR_LOCKED, /* (16) The operation is rejected according to the file sharing policy */
|
||||||
FR_NOT_ENOUGH_CORE, /* (17) LFN working buffer could not be allocated */
|
FR_NOT_ENOUGH_CORE, /* (17) LFN working buffer could not be allocated */
|
||||||
FR_TOO_MANY_OPEN_FILES, /* (18) Number of open files > _FS_SHARE */
|
FR_TOO_MANY_OPEN_FILES, /* (18) Number of open files > _FS_LOCK */
|
||||||
FR_INVALID_PARAMETER /* (19) Given parameter is invalid */
|
FR_INVALID_PARAMETER /* (19) Given parameter is invalid */
|
||||||
} FRESULT;
|
} FRESULT;
|
||||||
|
|
||||||
|
45
loader/source/fatfs/ffconf.h
Normal file → Executable file
45
loader/source/fatfs/ffconf.h
Normal file → Executable file
@ -1,21 +1,13 @@
|
|||||||
/*---------------------------------------------------------------------------/
|
/*---------------------------------------------------------------------------/
|
||||||
/ FatFs - FAT file system module configuration file R0.11 (C)ChaN, 2015
|
/ FatFs - FAT file system module configuration file R0.11a (C)ChaN, 2015
|
||||||
/---------------------------------------------------------------------------*/
|
/---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#define _FFCONF 32020 /* Revision ID */
|
#define _FFCONF 64180 /* Revision ID */
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------/
|
/*---------------------------------------------------------------------------/
|
||||||
/ Functions and Buffer Configurations
|
/ Function Configurations
|
||||||
/---------------------------------------------------------------------------*/
|
/---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#define _FS_TINY 0
|
|
||||||
/* This option switches tiny buffer configuration. (0:Normal or 1:Tiny)
|
|
||||||
/ At the tiny configuration, size of the file object (FIL) is reduced _MAX_SS
|
|
||||||
/ bytes. Instead of private sector buffer eliminated from the file object,
|
|
||||||
/ common sector buffer in the file system object (FATFS) is used for the file
|
|
||||||
/ data transfer. */
|
|
||||||
|
|
||||||
|
|
||||||
#define _FS_READONLY 1
|
#define _FS_READONLY 1
|
||||||
/* This option switches read-only configuration. (0:Read/Write or 1:Read-only)
|
/* This option switches read-only configuration. (0:Read/Write or 1:Read-only)
|
||||||
/ Read-only configuration removes writing API functions, f_write(), f_sync(),
|
/ Read-only configuration removes writing API functions, f_write(), f_sync(),
|
||||||
@ -77,19 +69,24 @@
|
|||||||
/ 437 - U.S.
|
/ 437 - U.S.
|
||||||
/ 720 - Arabic
|
/ 720 - Arabic
|
||||||
/ 737 - Greek
|
/ 737 - Greek
|
||||||
|
/ 771 - KBL
|
||||||
/ 775 - Baltic
|
/ 775 - Baltic
|
||||||
/ 850 - Multilingual Latin 1
|
/ 850 - Latin 1
|
||||||
/ 852 - Latin 2
|
/ 852 - Latin 2
|
||||||
/ 855 - Cyrillic
|
/ 855 - Cyrillic
|
||||||
/ 857 - Turkish
|
/ 857 - Turkish
|
||||||
/ 858 - Multilingual Latin 1 + Euro
|
/ 860 - Portuguese
|
||||||
|
/ 861 - Icelandic
|
||||||
/ 862 - Hebrew
|
/ 862 - Hebrew
|
||||||
|
/ 863 - Canadian French
|
||||||
|
/ 864 - Arabic
|
||||||
|
/ 865 - Nordic
|
||||||
/ 866 - Russian
|
/ 866 - Russian
|
||||||
/ 874 - Thai
|
/ 869 - Greek 2
|
||||||
/ 932 - Japanese Shift_JIS (DBCS)
|
/ 932 - Japanese (DBCS)
|
||||||
/ 936 - Simplified Chinese GBK (DBCS)
|
/ 936 - Simplified Chinese (DBCS)
|
||||||
/ 949 - Korean (DBCS)
|
/ 949 - Korean (DBCS)
|
||||||
/ 950 - Traditional Chinese Big5 (DBCS)
|
/ 950 - Traditional Chinese (DBCS)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
@ -115,7 +112,7 @@
|
|||||||
/ to 1. This option also affects behavior of string I/O functions. */
|
/ to 1. This option also affects behavior of string I/O functions. */
|
||||||
|
|
||||||
|
|
||||||
#define _STRF_ENCODE 0
|
#define _STRF_ENCODE 3
|
||||||
/* When _LFN_UNICODE is 1, this option selects the character encoding on the file to
|
/* When _LFN_UNICODE is 1, this option selects the character encoding on the file to
|
||||||
/ be read/written via string I/O functions, f_gets(), f_putc(), f_puts and f_printf().
|
/ be read/written via string I/O functions, f_gets(), f_putc(), f_puts and f_printf().
|
||||||
/
|
/
|
||||||
@ -195,8 +192,16 @@
|
|||||||
/ System Configurations
|
/ System Configurations
|
||||||
/---------------------------------------------------------------------------*/
|
/---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#define _FS_TINY 0
|
||||||
|
/* This option switches tiny buffer configuration. (0:Normal or 1:Tiny)
|
||||||
|
/ At the tiny configuration, size of the file object (FIL) is reduced _MAX_SS
|
||||||
|
/ bytes. Instead of private sector buffer eliminated from the file object,
|
||||||
|
/ common sector buffer in the file system object (FATFS) is used for the file
|
||||||
|
/ data transfer. */
|
||||||
|
|
||||||
|
|
||||||
#define _FS_NORTC 1
|
#define _FS_NORTC 1
|
||||||
#define _NORTC_MON 2
|
#define _NORTC_MON 1
|
||||||
#define _NORTC_MDAY 1
|
#define _NORTC_MDAY 1
|
||||||
#define _NORTC_YEAR 2015
|
#define _NORTC_YEAR 2015
|
||||||
/* The _FS_NORTC option switches timestamp feature. If the system does not have
|
/* The _FS_NORTC option switches timestamp feature. If the system does not have
|
||||||
@ -253,7 +258,7 @@
|
|||||||
/ * Byte order on the memory is little-endian.
|
/ * Byte order on the memory is little-endian.
|
||||||
/
|
/
|
||||||
/ If it is the case, _WORD_ACCESS can also be set to 1 to reduce code size.
|
/ If it is the case, _WORD_ACCESS can also be set to 1 to reduce code size.
|
||||||
/ Following table shows allowable settings of some processor types.
|
/ Following table shows allowable settings of some type of processors.
|
||||||
/
|
/
|
||||||
/ ARM7TDMI 0 *2 ColdFire 0 *1 V850E 0 *2
|
/ ARM7TDMI 0 *2 ColdFire 0 *1 V850E 0 *2
|
||||||
/ Cortex-M3 0 *3 Z80 0/1 V850ES 0/1
|
/ Cortex-M3 0 *3 Z80 0/1 V850ES 0/1
|
||||||
|
10
loader/source/fatfs/integer.h
Normal file → Executable file
10
loader/source/fatfs/integer.h
Normal file → Executable file
@ -5,26 +5,26 @@
|
|||||||
#ifndef _FF_INTEGER
|
#ifndef _FF_INTEGER
|
||||||
#define _FF_INTEGER
|
#define _FF_INTEGER
|
||||||
|
|
||||||
#ifdef _WIN32 /* FatFs development platform */
|
#ifdef _WIN32 /* Development platform */
|
||||||
|
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <tchar.h>
|
#include <tchar.h>
|
||||||
|
|
||||||
#else /* Embedded platform */
|
#else /* Embedded platform */
|
||||||
|
|
||||||
/* This type MUST be 8 bit */
|
/* This type MUST be 8-bit */
|
||||||
typedef unsigned char BYTE;
|
typedef unsigned char BYTE;
|
||||||
|
|
||||||
/* These types MUST be 16 bit */
|
/* These types MUST be 16-bit */
|
||||||
typedef short SHORT;
|
typedef short SHORT;
|
||||||
typedef unsigned short WORD;
|
typedef unsigned short WORD;
|
||||||
typedef unsigned short WCHAR;
|
typedef unsigned short WCHAR;
|
||||||
|
|
||||||
/* These types MUST be 16 bit or 32 bit */
|
/* These types MUST be 16-bit or 32-bit */
|
||||||
typedef int INT;
|
typedef int INT;
|
||||||
typedef unsigned int UINT;
|
typedef unsigned int UINT;
|
||||||
|
|
||||||
/* These types MUST be 32 bit */
|
/* These types MUST be 32-bit */
|
||||||
typedef long LONG;
|
typedef long LONG;
|
||||||
typedef unsigned long DWORD;
|
typedef unsigned long DWORD;
|
||||||
|
|
||||||
|
348
loader/source/fatfs/option/ccsbcs.c
Executable file
348
loader/source/fatfs/option/ccsbcs.c
Executable file
@ -0,0 +1,348 @@
|
|||||||
|
/*------------------------------------------------------------------------*/
|
||||||
|
/* Unicode - Local code bidirectional converter (C)ChaN, 2015 */
|
||||||
|
/* (SBCS code pages) */
|
||||||
|
/*------------------------------------------------------------------------*/
|
||||||
|
/* 437 U.S.
|
||||||
|
/ 720 Arabic
|
||||||
|
/ 737 Greek
|
||||||
|
/ 771 KBL
|
||||||
|
/ 775 Baltic
|
||||||
|
/ 850 Latin 1
|
||||||
|
/ 852 Latin 2
|
||||||
|
/ 855 Cyrillic
|
||||||
|
/ 857 Turkish
|
||||||
|
/ 860 Portuguese
|
||||||
|
/ 861 Icelandic
|
||||||
|
/ 862 Hebrew
|
||||||
|
/ 863 Canadian French
|
||||||
|
/ 864 Arabic
|
||||||
|
/ 865 Nordic
|
||||||
|
/ 866 Russian
|
||||||
|
/ 869 Greek 2
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "../ff.h"
|
||||||
|
|
||||||
|
|
||||||
|
#if _CODE_PAGE == 437
|
||||||
|
#define _TBLDEF 1
|
||||||
|
static
|
||||||
|
const WCHAR Tbl[] = { /* CP437(0x80-0xFF) to Unicode conversion table */
|
||||||
|
0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x00C4, 0x00C5,
|
||||||
|
0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9, 0x00FF, 0x00D6, 0x00DC, 0x00A2, 0x00A3, 0x00A5, 0x20A7, 0x0192,
|
||||||
|
0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, 0x00BF, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB,
|
||||||
|
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510,
|
||||||
|
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
|
||||||
|
0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
|
||||||
|
0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229,
|
||||||
|
0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0
|
||||||
|
};
|
||||||
|
|
||||||
|
#elif _CODE_PAGE == 720
|
||||||
|
#define _TBLDEF 1
|
||||||
|
static
|
||||||
|
const WCHAR Tbl[] = { /* CP720(0x80-0xFF) to Unicode conversion table */
|
||||||
|
0x0000, 0x0000, 0x00E9, 0x00E2, 0x0000, 0x00E0, 0x0000, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x0000, 0x0000, 0x0000,
|
||||||
|
0x0000, 0x0651, 0x0652, 0x00F4, 0x00A4, 0x0640, 0x00FB, 0x00F9, 0x0621, 0x0622, 0x0623, 0x0624, 0x00A3, 0x0625, 0x0626, 0x0627,
|
||||||
|
0x0628, 0x0629, 0x062A, 0x062B, 0x062C, 0x062D, 0x062E, 0x062F, 0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x00AB, 0x00BB,
|
||||||
|
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510,
|
||||||
|
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
|
||||||
|
0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
|
||||||
|
0x0636, 0x0637, 0x0638, 0x0639, 0x063A, 0x0641, 0x00B5, 0x0642, 0x0643, 0x0644, 0x0645, 0x0646, 0x0647, 0x0648, 0x0649, 0x064A,
|
||||||
|
0x2261, 0x064B, 0x064C, 0x064D, 0x064E, 0x064F, 0x0650, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0
|
||||||
|
};
|
||||||
|
|
||||||
|
#elif _CODE_PAGE == 737
|
||||||
|
#define _TBLDEF 1
|
||||||
|
static
|
||||||
|
const WCHAR Tbl[] = { /* CP737(0x80-0xFF) to Unicode conversion table */
|
||||||
|
0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F, 0x03A0,
|
||||||
|
0x03A1, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8, 0x03A9, 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, 0x03B8,
|
||||||
|
0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF, 0x03C0, 0x03C1, 0x03C3, 0x03C2, 0x03C4, 0x03C5, 0x03C6, 0x03C7, 0x03C8,
|
||||||
|
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510,
|
||||||
|
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
|
||||||
|
0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
|
||||||
|
0x03C9, 0x03AC, 0x03AD, 0x03AE, 0x03CA, 0x03AF, 0x03CC, 0x03CD, 0x03CB, 0x03CE, 0x0386, 0x0388, 0x0389, 0x038A, 0x038C, 0x038E,
|
||||||
|
0x038F, 0x00B1, 0x2265, 0x2264, 0x03AA, 0x03AB, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0
|
||||||
|
};
|
||||||
|
|
||||||
|
#elif _CODE_PAGE == 771
|
||||||
|
#define _TBLDEF 1
|
||||||
|
static
|
||||||
|
const WCHAR Tbl[] = { /* CP771(0x80-0xFF) to Unicode conversion table */
|
||||||
|
0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F,
|
||||||
|
0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F,
|
||||||
|
0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F,
|
||||||
|
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x2558, 0x2510,
|
||||||
|
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
|
||||||
|
0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x0104, 0x0105, 0x010C, 0x010D,
|
||||||
|
0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F,
|
||||||
|
0x0118, 0x0119, 0x0116, 0x0117, 0x012E, 0x012F, 0x0160, 0x0161, 0x0172, 0x0173, 0x016A, 0x016B, 0x017D, 0x017E, 0x25A0, 0x00A0
|
||||||
|
};
|
||||||
|
|
||||||
|
#elif _CODE_PAGE == 775
|
||||||
|
#define _TBLDEF 1
|
||||||
|
static
|
||||||
|
const WCHAR Tbl[] = { /* CP775(0x80-0xFF) to Unicode conversion table */
|
||||||
|
0x0106, 0x00FC, 0x00E9, 0x0101, 0x00E4, 0x0123, 0x00E5, 0x0107, 0x0142, 0x0113, 0x0156, 0x0157, 0x012B, 0x0179, 0x00C4, 0x00C5,
|
||||||
|
0x00C9, 0x00E6, 0x00C6, 0x014D, 0x00F6, 0x0122, 0x00A2, 0x015A, 0x015B, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x00D7, 0x00A4,
|
||||||
|
0x0100, 0x012A, 0x00F3, 0x017B, 0x017C, 0x017A, 0x201D, 0x00A6, 0x00A9, 0x00AE, 0x00AC, 0x00BD, 0x00BC, 0x0141, 0x00AB, 0x00BB,
|
||||||
|
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x0104, 0x010C, 0x0118, 0x0116, 0x2563, 0x2551, 0x2557, 0x255D, 0x012E, 0x0160, 0x2510,
|
||||||
|
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x0172, 0x016A, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x017D,
|
||||||
|
0x0105, 0x010D, 0x0119, 0x0117, 0x012F, 0x0161, 0x0173, 0x016B, 0x017E, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
|
||||||
|
0x00D3, 0x00DF, 0x014C, 0x0143, 0x00F5, 0x00D5, 0x00B5, 0x0144, 0x0136, 0x0137, 0x013B, 0x013C, 0x0146, 0x0112, 0x0145, 0x2019,
|
||||||
|
0x00AD, 0x00B1, 0x201C, 0x00BE, 0x00B6, 0x00A7, 0x00F7, 0x201E, 0x00B0, 0x2219, 0x00B7, 0x00B9, 0x00B3, 0x00B2, 0x25A0, 0x00A0
|
||||||
|
};
|
||||||
|
|
||||||
|
#elif _CODE_PAGE == 850
|
||||||
|
#define _TBLDEF 1
|
||||||
|
static
|
||||||
|
const WCHAR Tbl[] = { /* CP850(0x80-0xFF) to Unicode conversion table */
|
||||||
|
0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x00C4, 0x00C5,
|
||||||
|
0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9, 0x00FF, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x00D7, 0x0192,
|
||||||
|
0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, 0x00BF, 0x00AE, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB,
|
||||||
|
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00C1, 0x00C2, 0x00C0, 0x00A9, 0x2563, 0x2551, 0x2557, 0x255D, 0x00A2, 0x00A5, 0x2510,
|
||||||
|
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x00E3, 0x00C3, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x00A4,
|
||||||
|
0x00F0, 0x00D0, 0x00CA, 0x00CB, 0x00C8, 0x0131, 0x00CD, 0x00CE, 0x00CF, 0x2518, 0x250C, 0x2588, 0x2584, 0x00A6, 0x00CC, 0x2580,
|
||||||
|
0x00D3, 0x00DF, 0x00D4, 0x00D2, 0x00F5, 0x00D5, 0x00B5, 0x00FE, 0x00DE, 0x00DA, 0x00DB, 0x00D9, 0x00FD, 0x00DD, 0x00AF, 0x00B4,
|
||||||
|
0x00AD, 0x00B1, 0x2017, 0x00BE, 0x00B6, 0x00A7, 0x00F7, 0x00B8, 0x00B0, 0x00A8, 0x00B7, 0x00B9, 0x00B3, 0x00B2, 0x25A0, 0x00A0
|
||||||
|
};
|
||||||
|
|
||||||
|
#elif _CODE_PAGE == 852
|
||||||
|
#define _TBLDEF 1
|
||||||
|
static
|
||||||
|
const WCHAR Tbl[] = { /* CP852(0x80-0xFF) to Unicode conversion table */
|
||||||
|
0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x016F, 0x0107, 0x00E7, 0x0142, 0x00EB, 0x0150, 0x0151, 0x00EE, 0x0179, 0x00C4, 0x0106,
|
||||||
|
0x00C9, 0x0139, 0x013A, 0x00F4, 0x00F6, 0x013D, 0x013E, 0x015A, 0x015B, 0x00D6, 0x00DC, 0x0164, 0x0165, 0x0141, 0x00D7, 0x010D,
|
||||||
|
0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x0104, 0x0105, 0x017D, 0x017E, 0x0118, 0x0119, 0x00AC, 0x017A, 0x010C, 0x015F, 0x00AB, 0x00BB,
|
||||||
|
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00C1, 0x00C2, 0x011A, 0x015E, 0x2563, 0x2551, 0x2557, 0x255D, 0x017B, 0x017C, 0x2510,
|
||||||
|
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x0102, 0x0103, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x00A4,
|
||||||
|
0x0111, 0x0110, 0x010E, 0x00CB, 0x010F, 0x0147, 0x00CD, 0x00CE, 0x011B, 0x2518, 0x250C, 0x2588, 0x2584, 0x0162, 0x016E, 0x2580,
|
||||||
|
0x00D3, 0x00DF, 0x00D4, 0x0143, 0x0144, 0x0148, 0x0160, 0x0161, 0x0154, 0x00DA, 0x0155, 0x0170, 0x00FD, 0x00DD, 0x0163, 0x00B4,
|
||||||
|
0x00AD, 0x02DD, 0x02DB, 0x02C7, 0x02D8, 0x00A7, 0x00F7, 0x00B8, 0x00B0, 0x00A8, 0x02D9, 0x0171, 0x0158, 0x0159, 0x25A0, 0x00A0
|
||||||
|
};
|
||||||
|
|
||||||
|
#elif _CODE_PAGE == 855
|
||||||
|
#define _TBLDEF 1
|
||||||
|
static
|
||||||
|
const WCHAR Tbl[] = { /* CP855(0x80-0xFF) to Unicode conversion table */
|
||||||
|
0x0452, 0x0402, 0x0453, 0x0403, 0x0451, 0x0401, 0x0454, 0x0404, 0x0455, 0x0405, 0x0456, 0x0406, 0x0457, 0x0407, 0x0458, 0x0408,
|
||||||
|
0x0459, 0x0409, 0x045A, 0x040A, 0x045B, 0x040B, 0x045C, 0x040C, 0x045E, 0x040E, 0x045F, 0x040F, 0x044E, 0x042E, 0x044A, 0x042A,
|
||||||
|
0x0430, 0x0410, 0x0431, 0x0411, 0x0446, 0x0426, 0x0434, 0x0414, 0x0435, 0x0415, 0x0444, 0x0424, 0x0433, 0x0413, 0x00AB, 0x00BB,
|
||||||
|
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x0445, 0x0425, 0x0438, 0x0418, 0x2563, 0x2551, 0x2557, 0x255D, 0x0439, 0x0419, 0x2510,
|
||||||
|
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x043A, 0x041A, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x00A4,
|
||||||
|
0x043B, 0x041B, 0x043C, 0x041C, 0x043D, 0x041D, 0x043E, 0x041E, 0x043F, 0x2518, 0x250C, 0x2588, 0x2584, 0x041F, 0x044F, 0x2580,
|
||||||
|
0x042F, 0x0440, 0x0420, 0x0441, 0x0421, 0x0442, 0x0422, 0x0443, 0x0423, 0x0436, 0x0416, 0x0432, 0x0412, 0x044C, 0x042C, 0x2116,
|
||||||
|
0x00AD, 0x044B, 0x042B, 0x0437, 0x0417, 0x0448, 0x0428, 0x044D, 0x042D, 0x0449, 0x0429, 0x0447, 0x0427, 0x00A7, 0x25A0, 0x00A0
|
||||||
|
};
|
||||||
|
|
||||||
|
#elif _CODE_PAGE == 857
|
||||||
|
#define _TBLDEF 1
|
||||||
|
static
|
||||||
|
const WCHAR Tbl[] = { /* CP857(0x80-0xFF) to Unicode conversion table */
|
||||||
|
0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x0131, 0x00C4, 0x00C5,
|
||||||
|
0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9, 0x0130, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x015E, 0x015F,
|
||||||
|
0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x011E, 0x011F, 0x00BF, 0x00AE, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB,
|
||||||
|
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00C1, 0x00C2, 0x00C0, 0x00A9, 0x2563, 0x2551, 0x2557, 0x255D, 0x00A2, 0x00A5, 0x2510,
|
||||||
|
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x00E3, 0x00C3, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x00A4,
|
||||||
|
0x00BA, 0x00AA, 0x00CA, 0x00CB, 0x00C8, 0x0000, 0x00CD, 0x00CE, 0x00CF, 0x2518, 0x250C, 0x2588, 0x2584, 0x00A6, 0x00CC, 0x2580,
|
||||||
|
0x00D3, 0x00DF, 0x00D4, 0x00D2, 0x00F5, 0x00D5, 0x00B5, 0x0000, 0x00D7, 0x00DA, 0x00DB, 0x00D9, 0x00EC, 0x00FF, 0x00AF, 0x00B4,
|
||||||
|
0x00AD, 0x00B1, 0x0000, 0x00BE, 0x00B6, 0x00A7, 0x00F7, 0x00B8, 0x00B0, 0x00A8, 0x00B7, 0x00B9, 0x00B3, 0x00B2, 0x25A0, 0x00A0
|
||||||
|
};
|
||||||
|
|
||||||
|
#elif _CODE_PAGE == 860
|
||||||
|
#define _TBLDEF 1
|
||||||
|
static
|
||||||
|
const WCHAR Tbl[] = { /* CP860(0x80-0xFF) to Unicode conversion table */
|
||||||
|
0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E3, 0x00E0, 0x00C1, 0x00E7, 0x00EA, 0x00CA, 0x00E8, 0x00CD, 0x00D4, 0x00EC, 0x00C3, 0x00C2,
|
||||||
|
0x00C9, 0x00C0, 0x00C8, 0x00F4, 0x00F5, 0x00F2, 0x00DA, 0x00F9, 0x00CC, 0x00D5, 0x00DC, 0x00A2, 0x00A3, 0x00D9, 0x20A7, 0x00D3,
|
||||||
|
0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, 0x00BF, 0x00D2, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB,
|
||||||
|
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x2558, 0x2510,
|
||||||
|
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
|
||||||
|
0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
|
||||||
|
0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229,
|
||||||
|
0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0
|
||||||
|
};
|
||||||
|
|
||||||
|
#elif _CODE_PAGE == 861
|
||||||
|
#define _TBLDEF 1
|
||||||
|
static
|
||||||
|
const WCHAR Tbl[] = { /* CP861(0x80-0xFF) to Unicode conversion table */
|
||||||
|
0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E6, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00D0, 0x00F0, 0x00DE, 0x00C4, 0x00C5,
|
||||||
|
0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00FE, 0x00FB, 0x00DD, 0x00FD, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x20A7, 0x0192,
|
||||||
|
0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00C1, 0x00CD, 0x00D3, 0x00DA, 0x00BF, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB,
|
||||||
|
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510,
|
||||||
|
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
|
||||||
|
0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
|
||||||
|
0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229,
|
||||||
|
0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0
|
||||||
|
};
|
||||||
|
|
||||||
|
#elif _CODE_PAGE == 862
|
||||||
|
#define _TBLDEF 1
|
||||||
|
static
|
||||||
|
const WCHAR Tbl[] = { /* CP862(0x80-0xFF) to Unicode conversion table */
|
||||||
|
0x05D0, 0x05D1, 0x05D2, 0x05D3, 0x05D4, 0x05D5, 0x05D6, 0x05D7, 0x05D8, 0x05D9, 0x05DA, 0x05DB, 0x05DC, 0x05DD, 0x05DE, 0x05DF,
|
||||||
|
0x05E0, 0x05E1, 0x05E2, 0x05E3, 0x05E4, 0x05E5, 0x05E6, 0x05E7, 0x05E8, 0x05E9, 0x05EA, 0x00A2, 0x00A3, 0x00A5, 0x20A7, 0x0192,
|
||||||
|
0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, 0x00BF, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB,
|
||||||
|
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510,
|
||||||
|
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
|
||||||
|
0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
|
||||||
|
0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229,
|
||||||
|
0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0
|
||||||
|
};
|
||||||
|
|
||||||
|
#elif _CODE_PAGE == 863
|
||||||
|
#define _TBLDEF 1
|
||||||
|
static
|
||||||
|
const WCHAR Tbl[] = { /* CP863(0x80-0xFF) to Unicode conversion table */
|
||||||
|
0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00C2, 0x00E0, 0x00B6, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x2017, 0x00C0,
|
||||||
|
0x00C9, 0x00C8, 0x00CA, 0x00F4, 0x00CB, 0x00CF, 0x00FB, 0x00F9, 0x00A4, 0x00D4, 0x00DC, 0x00A2, 0x00A3, 0x00D9, 0x00DB, 0x0192,
|
||||||
|
0x00A6, 0x00B4, 0x00F3, 0x00FA, 0x00A8, 0x00BB, 0x00B3, 0x00AF, 0x00CE, 0x3210, 0x00AC, 0x00BD, 0x00BC, 0x00BE, 0x00AB, 0x00BB,
|
||||||
|
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510,
|
||||||
|
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
|
||||||
|
0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
|
||||||
|
0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2219,
|
||||||
|
0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0
|
||||||
|
};
|
||||||
|
|
||||||
|
#elif _CODE_PAGE == 864
|
||||||
|
#define _TBLDEF 1
|
||||||
|
static
|
||||||
|
const WCHAR Tbl[] = { /* CP864(0x80-0xFF) to Unicode conversion table */
|
||||||
|
0x00B0, 0x00B7, 0x2219, 0x221A, 0x2592, 0x2500, 0x2502, 0x253C, 0x2524, 0x252C, 0x251C, 0x2534, 0x2510, 0x250C, 0x2514, 0x2518,
|
||||||
|
0x03B2, 0x221E, 0x03C6, 0x00B1, 0x00BD, 0x00BC, 0x2248, 0x00AB, 0x00BB, 0xFEF7, 0xFEF8, 0x0000, 0x0000, 0xFEFB, 0xFEFC, 0x0000,
|
||||||
|
0x00A0, 0x00AD, 0xFE82, 0x00A3, 0x00A4, 0xFE84, 0x0000, 0x20AC, 0xFE8E, 0xFE8F, 0xFE95, 0xFE99, 0x060C, 0xFE9D, 0xFEA1, 0xFEA5,
|
||||||
|
0x0660, 0x0661, 0x0662, 0x0663, 0x0664, 0x0665, 0x0666, 0x0667, 0x0668, 0x0669, 0xFED1, 0x061B, 0xFEB1, 0xFEB5, 0xFEB9, 0x061F,
|
||||||
|
0x00A2, 0xFE80, 0xFE81, 0xFE83, 0xFE85, 0xFECA, 0xFE8B, 0xFE8D, 0xFE91, 0xFE93, 0xFE97, 0xFE9B, 0xFE9F, 0xFEA3, 0xFEA7, 0xFEA9,
|
||||||
|
0xFEAB, 0xFEAD, 0xFEAF, 0xFEB3, 0xFEB7, 0xFEBB, 0xFEBF, 0xFEC1, 0xFEC5, 0xFECB, 0xFECF, 0x00A6, 0x00AC, 0x00F7, 0x00D7, 0xFEC9,
|
||||||
|
0x0640, 0xFED3, 0xFED7, 0xFEDB, 0xFEDF, 0xFEE3, 0xFEE7, 0xFEEB, 0xFEED, 0xFEEF, 0xFEF3, 0xFEBD, 0xFECC, 0xFECE, 0xFECD, 0xFEE1,
|
||||||
|
0xFE7D, 0x0651, 0xFEE5, 0xFEE9, 0xFEEC, 0xFEF0, 0xFEF2, 0xFED0, 0xFED5, 0xFEF5, 0xFEF6, 0xFEDD, 0xFED9, 0xFEF1, 0x25A0, 0x0000
|
||||||
|
};
|
||||||
|
|
||||||
|
#elif _CODE_PAGE == 865
|
||||||
|
#define _TBLDEF 1
|
||||||
|
static
|
||||||
|
const WCHAR Tbl[] = { /* CP865(0x80-0xFF) to Unicode conversion table */
|
||||||
|
0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x00C4, 0x00C5,
|
||||||
|
0x00C5, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9, 0x00FF, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x20A7, 0x0192,
|
||||||
|
0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, 0x00BF, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00A4,
|
||||||
|
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x2558, 0x2510,
|
||||||
|
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
|
||||||
|
0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
|
||||||
|
0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229,
|
||||||
|
0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0
|
||||||
|
};
|
||||||
|
|
||||||
|
#elif _CODE_PAGE == 866
|
||||||
|
#define _TBLDEF 1
|
||||||
|
static
|
||||||
|
const WCHAR Tbl[] = { /* CP866(0x80-0xFF) to Unicode conversion table */
|
||||||
|
0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F,
|
||||||
|
0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F,
|
||||||
|
0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F,
|
||||||
|
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510,
|
||||||
|
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
|
||||||
|
0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
|
||||||
|
0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F,
|
||||||
|
0x0401, 0x0451, 0x0404, 0x0454, 0x0407, 0x0457, 0x040E, 0x045E, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x2116, 0x00A4, 0x25A0, 0x00A0
|
||||||
|
};
|
||||||
|
|
||||||
|
#elif _CODE_PAGE == 869
|
||||||
|
#define _TBLDEF 1
|
||||||
|
static
|
||||||
|
const WCHAR Tbl[] = { /* CP869(0x80-0xFF) to Unicode conversion table */
|
||||||
|
0x00B7, 0x00B7, 0x00B7, 0x00B7, 0x00B7, 0x00B7, 0x0386, 0x00B7, 0x00B7, 0x00AC, 0x00A6, 0x2018, 0x2019, 0x0388, 0x2015, 0x0389,
|
||||||
|
0x038A, 0x03AA, 0x038C, 0x00B7, 0x00B7, 0x038E, 0x03AB, 0x00A9, 0x038F, 0x00B2, 0x00B3, 0x03AC, 0x00A3, 0x03AD, 0x03AE, 0x03AF,
|
||||||
|
0x03CA, 0x0390, 0x03CC, 0x03CD, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x00BD, 0x0398, 0x0399, 0x00AB, 0x00BB,
|
||||||
|
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x039A, 0x039B, 0x039C, 0x039D, 0x2563, 0x2551, 0x2557, 0x255D, 0x039E, 0x039F, 0x2510,
|
||||||
|
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x0A30, 0x03A1, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x03A3,
|
||||||
|
0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8, 0x03A9, 0x03B1, 0x03B2, 0x03B3, 0x2518, 0x250C, 0x2588, 0x2584, 0x03B4, 0x03B5, 0x2580,
|
||||||
|
0x03B6, 0x03B7, 0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF, 0x03C0, 0x03C1, 0x03C3, 0x03C2, 0x03C4, 0x0384,
|
||||||
|
0x00AD, 0x00B1, 0x03C5, 0x03C6, 0x03C7, 0x00A7, 0x03C8, 0x0385, 0x00B0, 0x00A8, 0x03C9, 0x03CB, 0x03B0, 0x03CE, 0x25A0, 0x00A0
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if !_TBLDEF || !_USE_LFN
|
||||||
|
#error This file is not needed at current configuration. Remove from the project.
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
WCHAR ff_convert ( /* Converted character, Returns zero on error */
|
||||||
|
WCHAR chr, /* Character code to be converted */
|
||||||
|
UINT dir /* 0: Unicode to OEM code, 1: OEM code to Unicode */
|
||||||
|
)
|
||||||
|
{
|
||||||
|
WCHAR c;
|
||||||
|
|
||||||
|
|
||||||
|
if (chr < 0x80) { /* ASCII */
|
||||||
|
c = chr;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
if (dir) { /* OEM code to Unicode */
|
||||||
|
c = (chr >= 0x100) ? 0 : Tbl[chr - 0x80];
|
||||||
|
|
||||||
|
} else { /* Unicode to OEM code */
|
||||||
|
for (c = 0; c < 0x80; c++) {
|
||||||
|
if (chr == Tbl[c]) break;
|
||||||
|
}
|
||||||
|
c = (c + 0x80) & 0xFF;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
WCHAR ff_wtoupper ( /* Returns upper converted character */
|
||||||
|
WCHAR chr /* Unicode character to be upper converted */
|
||||||
|
)
|
||||||
|
{
|
||||||
|
static const WCHAR lower[] = { /* Lower case characters to be converted */
|
||||||
|
/* Latin Supplement */ 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF,
|
||||||
|
/* Latin Extended-A */ 0x101,0x103,0x105,0x107,0x109,0x10B,0x10D,0x10F,0x111,0x113,0x115,0x117,0x119,0x11B,0x11D,0x11F,0x121,0x123,0x125,0x127,0x129,0x12B,0x12D,0x12F,0x131,0x133,0x135,0x137,0x13A,0x13C,0x13E,0x140,0x142,0x144,0x146,0x148,0x14B,0x14D,0x14F,0x151,0x153,0x155,0x157,0x159,0x15B,0x15D,0x15F,0x161,0x163,0x165,0x167,0x169,0x16B,0x16D,0x16F,0x171,0x173,0x175,0x177,0x17A,0x17C,0x17E,
|
||||||
|
/* Latin Extended-B */ 0x183,0x185,0x188,0x18C,0x192,0x199,0x1A1,0x1A3,0x1A8,0x1AD,0x1B0,0x1B4,0x1B6,0x1B9,0x1BD,0x1C6,0x1C9,0x1CC,0x1CE,0x1D0,0x1D2,0x1D4,0x1D6,0x1D8,0x1DA,0x1DC,0x1DD,0x1DF,0x1E1,0x1E3,0x1E5,0x1E7,0x1E9,0x1EB,0x1ED,0x1EF,0x1F3,0x1F5,0x1FB,0x1FD,0x1FF,0x201,0x203,0x205,0x207,0x209,0x20B,0x20D,0x20F,0x211,0x213,0x215,0x217,
|
||||||
|
/* Greek, Coptic */ 0x3B1,0x3B2,0x3B3,0x3B4,0x3B5,0x3B6,0x3B7,0x3B8,0x3B9,0x3BA,0x3BB,0x3BC,0x3BD,0x3BE,0x3BF,0x3C0,0x3C1,0x3C3,0x3C4,0x3C5,0x3C6,0x3C7,0x3C8,0x3C9,0x3CA,0x3CB,0x3CC,0x3CD,0x3CE,0x3E3,0x3E5,0x3E7,0x3E9,0x3EB,
|
||||||
|
/* Cyrillic */ 0x430,0x431,0x432,0x433,0x434,0x435,0x436,0x437,0x438,0x439,0x43A,0x43B,0x43C,0x43D,0x43E,0x43F,0x440,0x441,0x442,0x443,0x444,0x445,0x446,0x447,0x448,0x449,0x44A,0x44B,0x44C,0x44D,0x44E,0x44F,0x452,0x453,0x454,0x455,0x456,0x457,0x458,0x459,0x45A,0x45B,0x45C,0x45E,0x45F,0x461,0x463,0x465,0x467,0x469,0x46B,0x46D,0x46F,0x471,0x473,0x475,0x477,0x479,0x47B,0x47D,0x47F,0x481,0x491,0x493,0x495,0x497,0x499,0x49B,0x49D,0x49F,0x4A1,0x4A3,0x4A5,0x4A7,0x4A9,0x4AB,0x4AD,0x4AF,0x4B1,0x4B3,0x4B5,0x4B7,0x4B9,0x4BB,0x4BD,0x4BF,0x4C2,0x4C4,0x4C8,0x4D1,0x4D3,0x4D5,0x4D7,0x4D9,0x4DB,0x4DD,0x4DF,0x4E1,0x4E3,0x4E5,0x4E7,0x4E9,0x4EB,0x4ED,0x4EF,0x4F1,0x4F3,0x4F5,0x4F9,
|
||||||
|
/* Armenian */ 0x561,0x562,0x563,0x564,0x565,0x566,0x567,0x568,0x569,0x56A,0x56B,0x56C,0x56D,0x56E,0x56F,0x570,0x571,0x572,0x573,0x574,0x575,0x576,0x577,0x578,0x579,0x57A,0x57B,0x57C,0x57D,0x57E,0x57F,0x580,0x581,0x582,0x583,0x584,0x585,0x586,
|
||||||
|
/* Latin Extended Additional */ 0x1E01,0x1E03,0x1E05,0x1E07,0x1E09,0x1E0B,0x1E0D,0x1E0F,0x1E11,0x1E13,0x1E15,0x1E17,0x1E19,0x1E1B,0x1E1D,0x1E1F,0x1E21,0x1E23,0x1E25,0x1E27,0x1E29,0x1E2B,0x1E2D,0x1E2F,0x1E31,0x1E33,0x1E35,0x1E37,0x1E39,0x1E3B,0x1E3D,0x1E3F,0x1E41,0x1E43,0x1E45,0x1E47,0x1E49,0x1E4B,0x1E4D,0x1E4F,0x1E51,0x1E53,0x1E55,0x1E57,0x1E59,0x1E5B,0x1E5D,0x1E5F,0x1E61,0x1E63,0x1E65,0x1E67,0x1E69,0x1E6B,0x1E6D,0x1E6F,0x1E71,0x1E73,0x1E75,0x1E77,0x1E79,0x1E7B,0x1E7D,0x1E7F,0x1E81,0x1E83,0x1E85,0x1E87,0x1E89,0x1E8B,0x1E8D,0x1E8F,0x1E91,0x1E93,0x1E95,0x1E97,0x1E99,0x1E9B,0x1E9D,0x1E9F,0x1EA1,0x1EA3,0x1EA5,0x1EA7,0x1EA9,0x1EAB,0x1EAD,0x1EAF,0x1EB1,0x1EB3,0x1EB5,0x1EB7,0x1EB9,0x1EBB,0x1EBD,0x1EBF,0x1EC1,0x1EC3,0x1EC5,0x1EC7,0x1EC9,0x1ECB,0x1ECD,0x1ECF,0x1ED1,0x1ED3,0x1ED5,0x1ED7,0x1ED9,0x1EDB,0x1EDD,0x1EDF,0x1EE1,0x1EE3,0x1EE5,0x1EE7,0x1EE9,0x1EEB,0x1EED,0x1EEF,0x1EF1,0x1EF3,0x1EF5,0x1EF7,0x1EF9,
|
||||||
|
/* Number forms */ 0x2170,0x2171,0x2172,0x2173,0x2174,0x2175,0x2176,0x2177,0x2178,0x2179,0x217A,0x217B,0x217C,0x217D,0x217E,0x217F,
|
||||||
|
/* Full-width */ 0xFF41,0xFF42,0xFF43,0xFF44,0xFF45,0xFF46,0xFF47,0xFF48,0xFF49,0xFF4A,0xFF4B,0xFF4C,0xFF4D,0xFF4E,0xFF4F,0xFF50,0xFF51,0xFF52,0xFF53,0xFF54,0xFF55,0xFF56,0xFF57,0xFF58,0xFF59,0xFF5A
|
||||||
|
};
|
||||||
|
static const WCHAR upper[] = { /* Upper case characters correspond to lower[] */
|
||||||
|
0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0x178,
|
||||||
|
0x100,0x102,0x104,0x106,0x108,0x10A,0x10C,0x10E,0x110,0x112,0x114,0x116,0x118,0x11A,0x11C,0x11E,0x120,0x122,0x124,0x126,0x128,0x12A,0x12C,0x12E,0x130,0x132,0x134,0x136,0x139,0x13B,0x13D,0x13F,0x141,0x143,0x145,0x147,0x14A,0x14C,0x14E,0x150,0x152,0x154,0x156,0x158,0x15A,0x15C,0x15E,0x160,0x162,0x164,0x166,0x168,0x16A,0x16C,0x16E,0x170,0x172,0x174,0x176,0x179,0x17B,0x17D,
|
||||||
|
0x182,0x184,0x187,0x18B,0x191,0x198,0x1A0,0x1A2,0x1A7,0x1AC,0x1AF,0x1B3,0x1B5,0x1B8,0x1BC,0x1C4,0x1C7,0x1CA,0x1CD,0x1CF,0x1D1,0x1D3,0x1D5,0x1D7,0x1D9,0x1DB,0x18E,0x1DE,0x1E0,0x1E2,0x1E4,0x1E6,0x1E8,0x1EA,0x1EC,0x1EE,0x1F1,0x1F4,0x1FA,0x1FC,0x1FE,0x200,0x202,0x204,0x206,0x208,0x20A,0x20C,0x20E,0x210,0x212,0x214,0x216,
|
||||||
|
0x391,0x392,0x393,0x394,0x395,0x396,0x397,0x398,0x399,0x39A,0x39B,0x39C,0x39D,0x39E,0x39F,0x3A0,0x3A1,0x3A3,0x3A4,0x3A5,0x3A6,0x3A7,0x3A8,0x3A9,0x3AA,0x3AB,0x38C,0x38E,0x38F,0x3E2,0x3E4,0x3E6,0x3E8,0x3EA,
|
||||||
|
0x410,0x411,0x412,0x413,0x414,0x415,0x416,0x417,0x418,0x419,0x41A,0x41B,0x41C,0x41D,0x41E,0x41F,0x420,0x421,0x422,0x423,0x424,0x425,0x426,0x427,0x428,0x429,0x42A,0x42B,0x42C,0x42D,0x42E,0x42F,0x402,0x403,0x404,0x405,0x406,0x407,0x408,0x409,0x40A,0x40B,0x40C,0x40E,0x40F,0x460,0x462,0x464,0x466,0x468,0x46A,0x46C,0x46E,0x470,0x472,0x474,0x476,0x478,0x47A,0x47C,0x47E,0x480,0x490,0x492,0x494,0x496,0x498,0x49A,0x49C,0x49E,0x4A0,0x4A2,0x4A4,0x4A6,0x4A8,0x4AA,0x4AC,0x4AE,0x4B0,0x4B2,0x4B4,0x4B6,0x4B8,0x4BA,0x4BC,0x4BE,0x4C1,0x4C3,0x5C7,0x4D0,0x4D2,0x4D4,0x4D6,0x4D8,0x4DA,0x4DC,0x4DE,0x4E0,0x4E2,0x4E4,0x4E6,0x4E8,0x4EA,0x4EC,0x4EE,0x4F0,0x4F2,0x4F4,0x4F8,
|
||||||
|
0x531,0x532,0x533,0x534,0x535,0x536,0x537,0x538,0x539,0x53A,0x53B,0x53C,0x53D,0x53E,0x53F,0x540,0x541,0x542,0x543,0x544,0x545,0x546,0x547,0x548,0x549,0x54A,0x54B,0x54C,0x54D,0x54E,0x54F,0x550,0x551,0x552,0x553,0x554,0x555,0x556,
|
||||||
|
0x1E00,0x1E02,0x1E04,0x1E06,0x1E08,0x1E0A,0x1E0C,0x1E0E,0x1E10,0x1E12,0x1E14,0x1E16,0x1E18,0x1E1A,0x1E1C,0x1E1E,0x1E20,0x1E22,0x1E24,0x1E26,0x1E28,0x1E2A,0x1E2C,0x1E2E,0x1E30,0x1E32,0x1E34,0x1E36,0x1E38,0x1E3A,0x1E3C,0x1E3E,0x1E40,0x1E42,0x1E44,0x1E46,0x1E48,0x1E4A,0x1E4C,0x1E4E,0x1E50,0x1E52,0x1E54,0x1E56,0x1E58,0x1E5A,0x1E5C,0x1E5E,0x1E60,0x1E62,0x1E64,0x1E66,0x1E68,0x1E6A,0x1E6C,0x1E6E,0x1E70,0x1E72,0x1E74,0x1E76,0x1E78,0x1E7A,0x1E7C,0x1E7E,0x1E80,0x1E82,0x1E84,0x1E86,0x1E88,0x1E8A,0x1E8C,0x1E8E,0x1E90,0x1E92,0x1E94,0x1E96,0x1E98,0x1E9A,0x1E9C,0x1E9E,0x1EA0,0x1EA2,0x1EA4,0x1EA6,0x1EA8,0x1EAA,0x1EAC,0x1EAE,0x1EB0,0x1EB2,0x1EB4,0x1EB6,0x1EB8,0x1EBA,0x1EBC,0x1EBE,0x1EC0,0x1EC2,0x1EC4,0x1EC6,0x1EC8,0x1ECA,0x1ECC,0x1ECE,0x1ED0,0x1ED2,0x1ED4,0x1ED6,0x1ED8,0x1EDA,0x1EDC,0x1EDE,0x1EE0,0x1EE2,0x1EE4,0x1EE6,0x1EE8,0x1EEA,0x1EEC,0x1EEE,0x1EF0,0x1EF2,0x1EF4,0x1EF6,0x1EF8,
|
||||||
|
0x2160,0x2161,0x2162,0x2163,0x2164,0x2165,0x2166,0x2167,0x2168,0x2169,0x216A,0x216B,0x216C,0x216D,0x216E,0x216F,
|
||||||
|
0xFF21,0xFF22,0xFF23,0xFF24,0xFF25,0xFF26,0xFF27,0xFF28,0xFF29,0xFF2A,0xFF2B,0xFF2C,0xFF2D,0xFF2E,0xFF2F,0xFF30,0xFF31,0xFF32,0xFF33,0xFF34,0xFF35,0xFF36,0xFF37,0xFF38,0xFF39,0xFF3A
|
||||||
|
};
|
||||||
|
UINT i, n, hi, li;
|
||||||
|
|
||||||
|
|
||||||
|
if (chr < 0x80) { /* ASCII characters (acceleration) */
|
||||||
|
if (chr >= 0x61 && chr <= 0x7A) chr -= 0x20;
|
||||||
|
|
||||||
|
} else { /* Non ASCII characters (table search) */
|
||||||
|
n = 12; li = 0; hi = sizeof lower / sizeof lower[0];
|
||||||
|
do {
|
||||||
|
i = li + (hi - li) / 2;
|
||||||
|
if (chr == lower[i]) break;
|
||||||
|
if (chr > lower[i]) li = i; else hi = i;
|
||||||
|
} while (--n);
|
||||||
|
if (n) chr = upper[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
return chr;
|
||||||
|
}
|
||||||
|
|
65
source/fatfs/history.txt → source/fatfs/00history.txt
Normal file → Executable file
65
source/fatfs/history.txt → source/fatfs/00history.txt
Normal file → Executable file
@ -3,73 +3,98 @@
|
|||||||
----------------------------------------------------------------------------
|
----------------------------------------------------------------------------
|
||||||
|
|
||||||
R0.00 (February 26, 2006)
|
R0.00 (February 26, 2006)
|
||||||
|
|
||||||
Prototype.
|
Prototype.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
R0.01 (April 29, 2006)
|
R0.01 (April 29, 2006)
|
||||||
|
|
||||||
First stable version.
|
First stable version.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
R0.02 (June 01, 2006)
|
R0.02 (June 01, 2006)
|
||||||
|
|
||||||
Added FAT12 support.
|
Added FAT12 support.
|
||||||
Removed unbuffered mode.
|
Removed unbuffered mode.
|
||||||
Fixed a problem on small (<32M) partition.
|
Fixed a problem on small (<32M) partition.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
R0.02a (June 10, 2006)
|
R0.02a (June 10, 2006)
|
||||||
|
|
||||||
Added a configuration option (_FS_MINIMUM).
|
Added a configuration option (_FS_MINIMUM).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
R0.03 (September 22, 2006)
|
R0.03 (September 22, 2006)
|
||||||
|
|
||||||
Added f_rename().
|
Added f_rename().
|
||||||
Changed option _FS_MINIMUM to _FS_MINIMIZE.
|
Changed option _FS_MINIMUM to _FS_MINIMIZE.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
R0.03a (December 11, 2006)
|
R0.03a (December 11, 2006)
|
||||||
|
|
||||||
Improved cluster scan algorithm to write files fast.
|
Improved cluster scan algorithm to write files fast.
|
||||||
Fixed f_mkdir() creates incorrect directory on FAT32.
|
Fixed f_mkdir() creates incorrect directory on FAT32.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
R0.04 (February 04, 2007)
|
R0.04 (February 04, 2007)
|
||||||
|
|
||||||
Added f_mkfs().
|
Added f_mkfs().
|
||||||
Supported multiple drive system.
|
Supported multiple drive system.
|
||||||
Changed some interfaces for multiple drive system.
|
Changed some interfaces for multiple drive system.
|
||||||
Changed f_mountdrv() to f_mount().
|
Changed f_mountdrv() to f_mount().
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
R0.04a (April 01, 2007)
|
R0.04a (April 01, 2007)
|
||||||
|
|
||||||
Supported multiple partitions on a physical drive.
|
Supported multiple partitions on a physical drive.
|
||||||
Added a capability of extending file size to f_lseek().
|
Added a capability of extending file size to f_lseek().
|
||||||
Added minimization level 3.
|
Added minimization level 3.
|
||||||
Fixed an endian sensitive code in f_mkfs().
|
Fixed an endian sensitive code in f_mkfs().
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
R0.04b (May 05, 2007)
|
R0.04b (May 05, 2007)
|
||||||
|
|
||||||
Added a configuration option _USE_NTFLAG.
|
Added a configuration option _USE_NTFLAG.
|
||||||
Added FSINFO support.
|
Added FSINFO support.
|
||||||
Fixed DBCS name can result FR_INVALID_NAME.
|
Fixed DBCS name can result FR_INVALID_NAME.
|
||||||
Fixed short seek (<= csize) collapses the file object.
|
Fixed short seek (<= csize) collapses the file object.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
R0.05 (August 25, 2007)
|
R0.05 (August 25, 2007)
|
||||||
|
|
||||||
Changed arguments of f_read(), f_write() and f_mkfs().
|
Changed arguments of f_read(), f_write() and f_mkfs().
|
||||||
Fixed f_mkfs() on FAT32 creates incorrect FSINFO.
|
Fixed f_mkfs() on FAT32 creates incorrect FSINFO.
|
||||||
Fixed f_mkdir() on FAT32 creates incorrect directory.
|
Fixed f_mkdir() on FAT32 creates incorrect directory.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
R0.05a (February 03, 2008)
|
R0.05a (February 03, 2008)
|
||||||
|
|
||||||
Added f_truncate() and f_utime().
|
Added f_truncate() and f_utime().
|
||||||
Fixed off by one error at FAT sub-type determination.
|
Fixed off by one error at FAT sub-type determination.
|
||||||
Fixed btr in f_read() can be mistruncated.
|
Fixed btr in f_read() can be mistruncated.
|
||||||
Fixed cached sector is not flushed when create and close without write.
|
Fixed cached sector is not flushed when create and close without write.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
R0.06 (April 01, 2008)
|
R0.06 (April 01, 2008)
|
||||||
|
|
||||||
Added fputc(), fputs(), fprintf() and fgets().
|
Added fputc(), fputs(), fprintf() and fgets().
|
||||||
Improved performance of f_lseek() on moving to the same or following cluster.
|
Improved performance of f_lseek() on moving to the same or following cluster.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
R0.07 (April 01, 2009)
|
R0.07 (April 01, 2009)
|
||||||
|
|
||||||
Merged Tiny-FatFs as a configuration option. (_FS_TINY)
|
Merged Tiny-FatFs as a configuration option. (_FS_TINY)
|
||||||
Added long file name feature. (_USE_LFN)
|
Added long file name feature. (_USE_LFN)
|
||||||
Added multiple code page feature. (_CODE_PAGE)
|
Added multiple code page feature. (_CODE_PAGE)
|
||||||
@ -80,12 +105,16 @@ R0.07 (April 01, 2009)
|
|||||||
Renamed string functions to avoid name collision.
|
Renamed string functions to avoid name collision.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
R0.07a (April 14, 2009)
|
R0.07a (April 14, 2009)
|
||||||
|
|
||||||
Septemberarated out OS dependent code on reentrant cfg.
|
Septemberarated out OS dependent code on reentrant cfg.
|
||||||
Added multiple sector size feature.
|
Added multiple sector size feature.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
R0.07c (June 21, 2009)
|
R0.07c (June 21, 2009)
|
||||||
|
|
||||||
Fixed f_unlink() can return FR_OK on error.
|
Fixed f_unlink() can return FR_OK on error.
|
||||||
Fixed wrong cache control in f_lseek().
|
Fixed wrong cache control in f_lseek().
|
||||||
Added relative path feature.
|
Added relative path feature.
|
||||||
@ -93,7 +122,9 @@ R0.07c (June 21, 2009)
|
|||||||
Added proper case conversion to extended character.
|
Added proper case conversion to extended character.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
R0.07e (November 03, 2009)
|
R0.07e (November 03, 2009)
|
||||||
|
|
||||||
Septemberarated out configuration options from ff.h to ffconf.h.
|
Septemberarated out configuration options from ff.h to ffconf.h.
|
||||||
Fixed f_unlink() fails to remove a sub-directory on _FS_RPATH.
|
Fixed f_unlink() fails to remove a sub-directory on _FS_RPATH.
|
||||||
Fixed name matching error on the 13 character boundary.
|
Fixed name matching error on the 13 character boundary.
|
||||||
@ -101,7 +132,9 @@ R0.07e (November 03, 2009)
|
|||||||
Changed f_readdir() to return the SFN with always upper case on non-LFN cfg.
|
Changed f_readdir() to return the SFN with always upper case on non-LFN cfg.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
R0.08 (May 15, 2010)
|
R0.08 (May 15, 2010)
|
||||||
|
|
||||||
Added a memory configuration option. (_USE_LFN = 3)
|
Added a memory configuration option. (_USE_LFN = 3)
|
||||||
Added file lock feature. (_FS_SHARE)
|
Added file lock feature. (_FS_SHARE)
|
||||||
Added fast seek feature. (_USE_FASTSEEK)
|
Added fast seek feature. (_USE_FASTSEEK)
|
||||||
@ -110,36 +143,48 @@ R0.08 (May 15, 2010)
|
|||||||
String functions support UTF-8 encoding files on Unicode cfg.
|
String functions support UTF-8 encoding files on Unicode cfg.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
R0.08a (August 16, 2010)
|
R0.08a (August 16, 2010)
|
||||||
|
|
||||||
Added f_getcwd(). (_FS_RPATH = 2)
|
Added f_getcwd(). (_FS_RPATH = 2)
|
||||||
Added sector erase feature. (_USE_ERASE)
|
Added sector erase feature. (_USE_ERASE)
|
||||||
Moved file lock semaphore table from fs object to the bss.
|
Moved file lock semaphore table from fs object to the bss.
|
||||||
Fixed f_mkfs() creates wrong FAT32 volume.
|
Fixed f_mkfs() creates wrong FAT32 volume.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
R0.08b (January 15, 2011)
|
R0.08b (January 15, 2011)
|
||||||
|
|
||||||
Fast seek feature is also applied to f_read() and f_write().
|
Fast seek feature is also applied to f_read() and f_write().
|
||||||
f_lseek() reports required table size on creating CLMP.
|
f_lseek() reports required table size on creating CLMP.
|
||||||
Extended format syntax of f_printf().
|
Extended format syntax of f_printf().
|
||||||
Ignores duplicated directory separators in given path name.
|
Ignores duplicated directory separators in given path name.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
R0.09 (September 06, 2011)
|
R0.09 (September 06, 2011)
|
||||||
|
|
||||||
f_mkfs() supports multiple partition to complete the multiple partition feature.
|
f_mkfs() supports multiple partition to complete the multiple partition feature.
|
||||||
Added f_fdisk().
|
Added f_fdisk().
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
R0.09a (August 27, 2012)
|
R0.09a (August 27, 2012)
|
||||||
|
|
||||||
Changed f_open() and f_opendir() reject null object pointer to avoid crash.
|
Changed f_open() and f_opendir() reject null object pointer to avoid crash.
|
||||||
Changed option name _FS_SHARE to _FS_LOCK.
|
Changed option name _FS_SHARE to _FS_LOCK.
|
||||||
Fixed assertion failure due to OS/2 EA on FAT12/16 volume.
|
Fixed assertion failure due to OS/2 EA on FAT12/16 volume.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
R0.09b (January 24, 2013)
|
R0.09b (January 24, 2013)
|
||||||
|
|
||||||
Added f_setlabel() and f_getlabel().
|
Added f_setlabel() and f_getlabel().
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
R0.10 (October 02, 2013)
|
R0.10 (October 02, 2013)
|
||||||
|
|
||||||
Added selection of character encoding on the file. (_STRF_ENCODE)
|
Added selection of character encoding on the file. (_STRF_ENCODE)
|
||||||
Added f_closedir().
|
Added f_closedir().
|
||||||
Added forced full FAT scan for f_getfree(). (_FS_NOFSINFO)
|
Added forced full FAT scan for f_getfree(). (_FS_NOFSINFO)
|
||||||
@ -151,7 +196,9 @@ R0.10 (October 02, 2013)
|
|||||||
Fixed f_open(), f_mkdir() and f_setlabel() can return incorrect error code.
|
Fixed f_open(), f_mkdir() and f_setlabel() can return incorrect error code.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
R0.10a (January 15, 2014)
|
R0.10a (January 15, 2014)
|
||||||
|
|
||||||
Added arbitrary strings as drive number in the path name. (_STR_VOLUME_ID)
|
Added arbitrary strings as drive number in the path name. (_STR_VOLUME_ID)
|
||||||
Added a configuration option of minimum sector size. (_MIN_SS)
|
Added a configuration option of minimum sector size. (_MIN_SS)
|
||||||
2nd argument of f_rename() can have a drive number and it will be ignored.
|
2nd argument of f_rename() can have a drive number and it will be ignored.
|
||||||
@ -161,12 +208,16 @@ R0.10a (January 15, 2014)
|
|||||||
Fixed creation of an entry with LFN fails on too many SFN collisions. (appeared at R0.07)
|
Fixed creation of an entry with LFN fails on too many SFN collisions. (appeared at R0.07)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
R0.10b (May 19, 2014)
|
R0.10b (May 19, 2014)
|
||||||
|
|
||||||
Fixed a hard error in the disk I/O layer can collapse the directory entry.
|
Fixed a hard error in the disk I/O layer can collapse the directory entry.
|
||||||
Fixed LFN entry is not deleted on delete/rename an object with lossy converted SFN. (appeared at R0.07)
|
Fixed LFN entry is not deleted on delete/rename an object with lossy converted SFN. (appeared at R0.07)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
R0.10c (November 09, 2014)
|
R0.10c (November 09, 2014)
|
||||||
|
|
||||||
Added a configuration option for the platforms without RTC. (_FS_NORTC)
|
Added a configuration option for the platforms without RTC. (_FS_NORTC)
|
||||||
Changed option name _USE_ERASE to _USE_TRIM.
|
Changed option name _USE_ERASE to _USE_TRIM.
|
||||||
Fixed volume label created by Mac OS X cannot be retrieved with f_getlabel(). (appeared at R0.09b)
|
Fixed volume label created by Mac OS X cannot be retrieved with f_getlabel(). (appeared at R0.09b)
|
||||||
@ -174,7 +225,21 @@ R0.10c (November 09, 2014)
|
|||||||
Fixed null pointer dereference on attempting to delete the root direcotry. (appeared at R0.08)
|
Fixed null pointer dereference on attempting to delete the root direcotry. (appeared at R0.08)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
R0.11 (February 09, 2015)
|
R0.11 (February 09, 2015)
|
||||||
|
|
||||||
Added f_findfirst(), f_findnext() and f_findclose(). (_USE_FIND)
|
Added f_findfirst(), f_findnext() and f_findclose(). (_USE_FIND)
|
||||||
Fixed f_unlink() does not remove cluster chain of the file. (appeared at R0.10c)
|
Fixed f_unlink() does not remove cluster chain of the file. (appeared at R0.10c)
|
||||||
Fixed _FS_NORTC option does not work properly. (appeared at R0.10c)
|
Fixed _FS_NORTC option does not work properly. (appeared at R0.10c)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
R0.11a (September 05, 2015)
|
||||||
|
|
||||||
|
Fixed wrong media change can lead a deadlock at thread-safe configuration.
|
||||||
|
Added code page 771, 860, 861, 863, 864, 865 and 869. (_CODE_PAGE)
|
||||||
|
Removed some code pages actually not exist on the standard systems. (_CODE_PAGE)
|
||||||
|
Fixed errors in the case conversion teble of code page 437 and 850 (ff.c).
|
||||||
|
Fixed errors in the case conversion teble of Unicode (cc*.c).
|
||||||
|
|
||||||
|
|
0
source/fatfs/00readme.txt
Normal file → Executable file
0
source/fatfs/00readme.txt
Normal file → Executable file
@ -35,6 +35,7 @@ DSTATUS disk_initialize (
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
sdmmc_sdcard_init();
|
sdmmc_sdcard_init();
|
||||||
|
|
||||||
return RES_OK;
|
return RES_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -52,9 +53,8 @@ DRESULT disk_read (
|
|||||||
UINT count /* Number of sectors to read */
|
UINT count /* Number of sectors to read */
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
if (sdmmc_sdcard_readsectors(sector, count, buff)) {
|
if(sdmmc_sdcard_readsectors(sector, count, buff))
|
||||||
return RES_PARERR;
|
return RES_PARERR;
|
||||||
}
|
|
||||||
|
|
||||||
return RES_OK;
|
return RES_OK;
|
||||||
}
|
}
|
||||||
@ -74,9 +74,8 @@ DRESULT disk_write (
|
|||||||
UINT count /* Number of sectors to write */
|
UINT count /* Number of sectors to write */
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
if (sdmmc_sdcard_writesectors(sector, count, (BYTE *)buff)) {
|
if(sdmmc_sdcard_writesectors(sector, count, (BYTE *)buff))
|
||||||
return RES_PARERR;
|
return RES_PARERR;
|
||||||
}
|
|
||||||
|
|
||||||
return RES_OK;
|
return RES_OK;
|
||||||
}
|
}
|
||||||
|
545
source/fatfs/ff.c
Normal file → Executable file
545
source/fatfs/ff.c
Normal file → Executable file
@ -1,5 +1,5 @@
|
|||||||
/*----------------------------------------------------------------------------/
|
/*----------------------------------------------------------------------------/
|
||||||
/ FatFs - FAT file system module R0.11 (C)ChaN, 2015
|
/ FatFs - FAT file system module R0.11a (C)ChaN, 2015 /
|
||||||
/-----------------------------------------------------------------------------/
|
/-----------------------------------------------------------------------------/
|
||||||
/ FatFs module is a free software that opened under license policy of
|
/ FatFs module is a free software that opened under license policy of
|
||||||
/ following conditions.
|
/ following conditions.
|
||||||
@ -26,7 +26,7 @@
|
|||||||
|
|
||||||
---------------------------------------------------------------------------*/
|
---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#if _FATFS != 32020 /* Revision ID */
|
#if _FATFS != 64180 /* Revision ID */
|
||||||
#error Wrong include file (ff.h).
|
#error Wrong include file (ff.h).
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -83,7 +83,7 @@ typedef struct {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* DBCS code ranges and SBCS extend character conversion table */
|
/* DBCS code ranges and SBCS upper conversion tables */
|
||||||
|
|
||||||
#if _CODE_PAGE == 932 /* Japanese Shift-JIS */
|
#if _CODE_PAGE == 932 /* Japanese Shift-JIS */
|
||||||
#define _DF1S 0x81 /* DBC 1st byte range 1 start */
|
#define _DF1S 0x81 /* DBC 1st byte range 1 start */
|
||||||
@ -121,211 +121,192 @@ typedef struct {
|
|||||||
#define _DS2S 0xA1
|
#define _DS2S 0xA1
|
||||||
#define _DS2E 0xFE
|
#define _DS2E 0xFE
|
||||||
|
|
||||||
#elif _CODE_PAGE == 437 /* U.S. (OEM) */
|
#elif _CODE_PAGE == 437 /* U.S. */
|
||||||
#define _DF1S 0
|
#define _DF1S 0
|
||||||
/*#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, \
|
#define _EXCVT {0x80,0x9A,0x45,0x41,0x8E,0x41,0x8F,0x80,0x45,0x45,0x45,0x49,0x49,0x49,0x8E,0x8F, \
|
||||||
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, \
|
0x90,0x92,0x92,0x4F,0x99,0x4F,0x55,0x55,0x59,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \
|
||||||
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, \
|
0x41,0x49,0x4F,0x55,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \
|
||||||
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}*/
|
0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \
|
||||||
|
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, \
|
||||||
|
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}
|
||||||
|
|
||||||
static
|
#elif _CODE_PAGE == 720 /* Arabic */
|
||||||
const unsigned short Tbl[] = { /* CP437(0x80-0xFF) to Unicode conversion table */
|
|
||||||
0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7,
|
|
||||||
0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x00C4, 0x00C5,
|
|
||||||
0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9,
|
|
||||||
0x00FF, 0x00D6, 0x00DC, 0x00A2, 0x00A3, 0x00A5, 0x20A7, 0x0192,
|
|
||||||
0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA,
|
|
||||||
0x00BF, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB,
|
|
||||||
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556,
|
|
||||||
0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510,
|
|
||||||
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F,
|
|
||||||
0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
|
|
||||||
0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B,
|
|
||||||
0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
|
|
||||||
0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4,
|
|
||||||
0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229,
|
|
||||||
0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248,
|
|
||||||
0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0
|
|
||||||
};
|
|
||||||
|
|
||||||
WCHAR ff_convert( /* Converted character, Returns zero on error */
|
|
||||||
WCHAR src, /* Character code to be converted */
|
|
||||||
UINT dir /* 0: Unicode to OEMCP, 1: OEMCP to Unicode */
|
|
||||||
)
|
|
||||||
{
|
|
||||||
WCHAR c;
|
|
||||||
|
|
||||||
if(src < 0x80)
|
|
||||||
{ /* ASCII */
|
|
||||||
c = src;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if(dir)
|
|
||||||
{ /* OEMCP to Unicode */
|
|
||||||
c = (src >= 0x100) ? 0 : Tbl[src - 0x80];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{ /* Unicode to OEMCP */
|
|
||||||
for(c = 0; c < 0x80; c++)
|
|
||||||
{
|
|
||||||
if(src == Tbl[c])
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
c = (c + 0x80) & 0xFF;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return c;
|
|
||||||
}
|
|
||||||
|
|
||||||
WCHAR ff_wtoupper(WCHAR chr)
|
|
||||||
{
|
|
||||||
if(chr >= 'a' && chr <= 'z')
|
|
||||||
return (chr - 32);
|
|
||||||
else
|
|
||||||
return chr;
|
|
||||||
}
|
|
||||||
|
|
||||||
#elif _CODE_PAGE == 720 /* Arabic (OEM) */
|
|
||||||
#define _DF1S 0
|
#define _DF1S 0
|
||||||
#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, \
|
#define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, \
|
||||||
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, \
|
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \
|
||||||
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, \
|
0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \
|
||||||
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}
|
0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \
|
||||||
|
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, \
|
||||||
|
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}
|
||||||
|
|
||||||
#elif _CODE_PAGE == 737 /* Greek (OEM) */
|
#elif _CODE_PAGE == 737 /* Greek */
|
||||||
#define _DF1S 0
|
#define _DF1S 0
|
||||||
#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, \
|
#define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, \
|
||||||
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, \
|
0x90,0x92,0x92,0x93,0x94,0x95,0x96,0x97,0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87, \
|
||||||
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, \
|
0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0xAA,0x92,0x93,0x94,0x95,0x96, \
|
||||||
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}
|
0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \
|
||||||
|
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, \
|
||||||
|
0x97,0xEA,0xEB,0xEC,0xE4,0xED,0xEE,0xEF,0xF5,0xF0,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, \
|
||||||
|
0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF}
|
||||||
|
|
||||||
#elif _CODE_PAGE == 775 /* Baltic (OEM) */
|
#elif _CODE_PAGE == 771 /* KBL */
|
||||||
#define _DF1S 0
|
#define _DF1S 0
|
||||||
#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, \
|
#define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, \
|
||||||
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, \
|
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \
|
||||||
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, \
|
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, \
|
||||||
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}
|
0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \
|
||||||
|
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,0xDC,0xDE,0xDE, \
|
||||||
|
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \
|
||||||
|
0xF0,0xF0,0xF2,0xF2,0xF4,0xF4,0xF6,0xF6,0xF8,0xF8,0xFA,0xFA,0xFC,0xFC,0xFE,0xFF}
|
||||||
|
|
||||||
#elif _CODE_PAGE == 850 /* Multilingual Latin 1 (OEM) */
|
#elif _CODE_PAGE == 775 /* Baltic */
|
||||||
#define _DF1S 0
|
#define _DF1S 0
|
||||||
#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, \
|
#define _EXCVT {0x80,0x9A,0x91,0xA0,0x8E,0x95,0x8F,0x80,0xAD,0xED,0x8A,0x8A,0xA1,0x8D,0x8E,0x8F, \
|
||||||
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, \
|
0x90,0x92,0x92,0xE2,0x99,0x95,0x96,0x97,0x97,0x99,0x9A,0x9D,0x9C,0x9D,0x9E,0x9F, \
|
||||||
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, \
|
0xA0,0xA1,0xE0,0xA3,0xA3,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \
|
||||||
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}
|
0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \
|
||||||
|
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, \
|
||||||
|
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}
|
||||||
|
|
||||||
#elif _CODE_PAGE == 852 /* Latin 2 (OEM) */
|
#elif _CODE_PAGE == 850 /* Latin 1 */
|
||||||
#define _DF1S 0
|
#define _DF1S 0
|
||||||
#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, \
|
#define _EXCVT {0x43,0x55,0x45,0x41,0x41,0x41,0x41,0x43,0x45,0x45,0x45,0x49,0x49,0x49,0x41,0x41, \
|
||||||
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, \
|
0x45,0x92,0x92,0x4F,0x4F,0x4F,0x55,0x55,0x59,0x4F,0x55,0x4F,0x9C,0x4F,0x9E,0x9F, \
|
||||||
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, \
|
0x41,0x49,0x4F,0x55,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \
|
||||||
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}
|
0xB0,0xB1,0xB2,0xB3,0xB4,0x41,0x41,0x41,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \
|
||||||
|
0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0x41,0x41,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, \
|
||||||
|
0xD1,0xD1,0x45,0x45,0x45,0x49,0x49,0x49,0x49,0xD9,0xDA,0xDB,0xDC,0xDD,0x49,0xDF, \
|
||||||
|
0x4F,0xE1,0x4F,0x4F,0x4F,0x4F,0xE6,0xE8,0xE8,0x55,0x55,0x55,0x59,0x59,0xEE,0xEF, \
|
||||||
|
0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF}
|
||||||
|
|
||||||
#elif _CODE_PAGE == 855 /* Cyrillic (OEM) */
|
#elif _CODE_PAGE == 852 /* Latin 2 */
|
||||||
#define _DF1S 0
|
#define _DF1S 0
|
||||||
#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, \
|
#define _EXCVT {0x80,0x9A,0x90,0xB6,0x8E,0xDE,0x8F,0x80,0x9D,0xD3,0x8A,0x8A,0xD7,0x8D,0x8E,0x8F, \
|
||||||
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, \
|
0x90,0x91,0x91,0xE2,0x99,0x95,0x95,0x97,0x97,0x99,0x9A,0x9B,0x9B,0x9D,0x9E,0xAC, \
|
||||||
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, \
|
0xB5,0xD6,0xE0,0xE9,0xA4,0xA4,0xA6,0xA6,0xA8,0xA8,0xAA,0x8D,0xAC,0xB8,0xAE,0xAF, \
|
||||||
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}
|
0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBD,0xBF, \
|
||||||
|
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, \
|
||||||
|
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}
|
||||||
|
|
||||||
#elif _CODE_PAGE == 857 /* Turkish (OEM) */
|
#elif _CODE_PAGE == 855 /* Cyrillic */
|
||||||
#define _DF1S 0
|
#define _DF1S 0
|
||||||
#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, \
|
#define _EXCVT {0x81,0x81,0x83,0x83,0x85,0x85,0x87,0x87,0x89,0x89,0x8B,0x8B,0x8D,0x8D,0x8F,0x8F, \
|
||||||
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, \
|
0x91,0x91,0x93,0x93,0x95,0x95,0x97,0x97,0x99,0x99,0x9B,0x9B,0x9D,0x9D,0x9F,0x9F, \
|
||||||
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, \
|
0xA1,0xA1,0xA3,0xA3,0xA5,0xA5,0xA7,0xA7,0xA9,0xA9,0xAB,0xAB,0xAD,0xAD,0xAE,0xAF, \
|
||||||
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}
|
0xB0,0xB1,0xB2,0xB3,0xB4,0xB6,0xB6,0xB8,0xB8,0xB9,0xBA,0xBB,0xBC,0xBE,0xBE,0xBF, \
|
||||||
|
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, \
|
||||||
|
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}
|
||||||
|
|
||||||
#elif _CODE_PAGE == 858 /* Multilingual Latin 1 + Euro (OEM) */
|
#elif _CODE_PAGE == 857 /* Turkish */
|
||||||
#define _DF1S 0
|
#define _DF1S 0
|
||||||
#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, \
|
#define _EXCVT {0x80,0x9A,0x90,0xB6,0x8E,0xB7,0x8F,0x80,0xD2,0xD3,0xD4,0xD8,0xD7,0x49,0x8E,0x8F, \
|
||||||
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, \
|
0x90,0x92,0x92,0xE2,0x99,0xE3,0xEA,0xEB,0x98,0x99,0x9A,0x9D,0x9C,0x9D,0x9E,0x9E, \
|
||||||
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, \
|
0xB5,0xD6,0xE0,0xE9,0xA5,0xA5,0xA6,0xA6,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \
|
||||||
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}
|
0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \
|
||||||
|
0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC7,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, \
|
||||||
|
0xD0,0xD1,0xD2,0xD3,0xD4,0x49,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \
|
||||||
|
0xE0,0xE1,0xE2,0xE3,0xE5,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xDE,0xED,0xEE,0xEF, \
|
||||||
|
0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF}
|
||||||
|
|
||||||
#elif _CODE_PAGE == 862 /* Hebrew (OEM) */
|
#elif _CODE_PAGE == 860 /* Portuguese */
|
||||||
#define _DF1S 0
|
#define _DF1S 0
|
||||||
#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, \
|
#define _EXCVT {0x80,0x9A,0x90,0x8F,0x8E,0x91,0x86,0x80,0x89,0x89,0x92,0x8B,0x8C,0x98,0x8E,0x8F, \
|
||||||
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, \
|
0x90,0x91,0x92,0x8C,0x99,0xA9,0x96,0x9D,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \
|
||||||
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, \
|
0x86,0x8B,0x9F,0x96,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \
|
||||||
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}
|
0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \
|
||||||
|
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, \
|
||||||
|
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}
|
||||||
|
|
||||||
#elif _CODE_PAGE == 866 /* Russian (OEM) */
|
#elif _CODE_PAGE == 861 /* Icelandic */
|
||||||
#define _DF1S 0
|
#define _DF1S 0
|
||||||
#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, \
|
#define _EXCVT {0x80,0x9A,0x90,0x41,0x8E,0x41,0x8F,0x80,0x45,0x45,0x45,0x8B,0x8B,0x8D,0x8E,0x8F, \
|
||||||
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, \
|
0x90,0x92,0x92,0x4F,0x99,0x8D,0x55,0x97,0x97,0x99,0x9A,0x9D,0x9C,0x9D,0x9E,0x9F, \
|
||||||
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, \
|
0xA4,0xA5,0xA6,0xA7,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \
|
||||||
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}
|
0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \
|
||||||
|
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, \
|
||||||
|
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}
|
||||||
|
|
||||||
#elif _CODE_PAGE == 874 /* Thai (OEM, Windows) */
|
#elif _CODE_PAGE == 862 /* Hebrew */
|
||||||
#define _DF1S 0
|
#define _DF1S 0
|
||||||
#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, \
|
#define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, \
|
||||||
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, \
|
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \
|
||||||
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, \
|
0x41,0x49,0x4F,0x55,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \
|
||||||
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}
|
0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \
|
||||||
|
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, \
|
||||||
|
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}
|
||||||
|
|
||||||
#elif _CODE_PAGE == 1250 /* Central Europe (Windows) */
|
#elif _CODE_PAGE == 863 /* Canadian-French */
|
||||||
#define _DF1S 0
|
#define _DF1S 0
|
||||||
#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, \
|
#define _EXCVT {0x43,0x55,0x45,0x41,0x41,0x41,0x86,0x43,0x45,0x45,0x45,0x49,0x49,0x8D,0x41,0x8F, \
|
||||||
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, \
|
0x45,0x45,0x45,0x4F,0x45,0x49,0x55,0x55,0x98,0x4F,0x55,0x9B,0x9C,0x55,0x55,0x9F, \
|
||||||
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, \
|
0xA0,0xA1,0x4F,0x55,0xA4,0xA5,0xA6,0xA7,0x49,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \
|
||||||
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}
|
0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \
|
||||||
|
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, \
|
||||||
|
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}
|
||||||
|
|
||||||
#elif _CODE_PAGE == 1251 /* Cyrillic (Windows) */
|
#elif _CODE_PAGE == 864 /* Arabic */
|
||||||
#define _DF1S 0
|
#define _DF1S 0
|
||||||
#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, \
|
#define _EXCVT {0x80,0x9A,0x45,0x41,0x8E,0x41,0x8F,0x80,0x45,0x45,0x45,0x49,0x49,0x49,0x8E,0x8F, \
|
||||||
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, \
|
0x90,0x92,0x92,0x4F,0x99,0x4F,0x55,0x55,0x59,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \
|
||||||
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, \
|
0x41,0x49,0x4F,0x55,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \
|
||||||
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}
|
0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \
|
||||||
|
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, \
|
||||||
|
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}
|
||||||
|
|
||||||
#elif _CODE_PAGE == 1252 /* Latin 1 (Windows) */
|
#elif _CODE_PAGE == 865 /* Nordic */
|
||||||
#define _DF1S 0
|
#define _DF1S 0
|
||||||
#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, \
|
#define _EXCVT {0x80,0x9A,0x90,0x41,0x8E,0x41,0x8F,0x80,0x45,0x45,0x45,0x49,0x49,0x49,0x8E,0x8F, \
|
||||||
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, \
|
0x90,0x92,0x92,0x4F,0x99,0x4F,0x55,0x55,0x59,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \
|
||||||
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, \
|
0x41,0x49,0x4F,0x55,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \
|
||||||
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}
|
0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \
|
||||||
|
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, \
|
||||||
|
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}
|
||||||
|
|
||||||
#elif _CODE_PAGE == 1253 /* Greek (Windows) */
|
#elif _CODE_PAGE == 866 /* Russian */
|
||||||
#define _DF1S 0
|
#define _DF1S 0
|
||||||
#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, \
|
#define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, \
|
||||||
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, \
|
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \
|
||||||
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, \
|
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, \
|
||||||
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}
|
0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \
|
||||||
|
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, \
|
||||||
|
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}
|
||||||
|
|
||||||
#elif _CODE_PAGE == 1254 /* Turkish (Windows) */
|
#elif _CODE_PAGE == 869 /* Greek 2 */
|
||||||
#define _DF1S 0
|
#define _DF1S 0
|
||||||
#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, \
|
#define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, \
|
||||||
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, \
|
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x86,0x9C,0x8D,0x8F,0x90, \
|
||||||
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, \
|
0x91,0x90,0x92,0x95,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \
|
||||||
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}
|
0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \
|
||||||
|
0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, \
|
||||||
#elif _CODE_PAGE == 1255 /* Hebrew (Windows) */
|
0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xA4,0xA5,0xA6,0xD9,0xDA,0xDB,0xDC,0xA7,0xA8,0xDF, \
|
||||||
#define _DF1S 0
|
0xA9,0xAA,0xAC,0xAD,0xB5,0xB6,0xB7,0xB8,0xBD,0xBE,0xC6,0xC7,0xCF,0xCF,0xD0,0xEF, \
|
||||||
#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, \
|
0xF0,0xF1,0xD1,0xD2,0xD3,0xF5,0xD4,0xF7,0xF8,0xF9,0xD5,0x96,0x95,0x98,0xFE,0xFF}
|
||||||
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, \
|
|
||||||
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, \
|
|
||||||
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}
|
|
||||||
|
|
||||||
#elif _CODE_PAGE == 1256 /* Arabic (Windows) */
|
|
||||||
#define _DF1S 0
|
|
||||||
#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, \
|
|
||||||
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, \
|
|
||||||
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, \
|
|
||||||
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}
|
|
||||||
|
|
||||||
#elif _CODE_PAGE == 1257 /* Baltic (Windows) */
|
|
||||||
#define _DF1S 0
|
|
||||||
#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, \
|
|
||||||
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, \
|
|
||||||
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, \
|
|
||||||
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}
|
|
||||||
|
|
||||||
#elif _CODE_PAGE == 1258 /* Vietnam (OEM, Windows) */
|
|
||||||
#define _DF1S 0
|
|
||||||
#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, \
|
|
||||||
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, \
|
|
||||||
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, \
|
|
||||||
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}
|
|
||||||
|
|
||||||
#elif _CODE_PAGE == 1 /* ASCII (for only non-LFN cfg) */
|
#elif _CODE_PAGE == 1 /* ASCII (for only non-LFN cfg) */
|
||||||
#if _USE_LFN
|
#if _USE_LFN
|
||||||
@ -377,12 +358,12 @@ WCHAR ff_wtoupper(WCHAR chr)
|
|||||||
|
|
||||||
|
|
||||||
/* FAT sub-type boundaries (Differ from specs but correct for real DOS/Windows) */
|
/* FAT sub-type boundaries (Differ from specs but correct for real DOS/Windows) */
|
||||||
#define MIN_FAT16 4086U /* Minimum number of clusters as FAT16 */
|
#define MIN_FAT16 4086U /* Minimum number of clusters of FAT16 */
|
||||||
#define MIN_FAT32 65526U /* Minimum number of clusters as FAT32 */
|
#define MIN_FAT32 65526U /* Minimum number of clusters of FAT32 */
|
||||||
|
|
||||||
|
|
||||||
/* FatFs refers the members in the FAT structures as byte array instead of
|
/* FatFs refers the members in the FAT structures as byte array instead of
|
||||||
/ structure member because the structure is not binary compatible between
|
/ structure members because the structure is not binary compatible between
|
||||||
/ different platforms */
|
/ different platforms */
|
||||||
|
|
||||||
#define BS_jmpBoot 0 /* x86 jump instruction (3) */
|
#define BS_jmpBoot 0 /* x86 jump instruction (3) */
|
||||||
@ -399,7 +380,8 @@ WCHAR ff_wtoupper(WCHAR chr)
|
|||||||
#define BPB_NumHeads 26 /* Number of heads (2) */
|
#define BPB_NumHeads 26 /* Number of heads (2) */
|
||||||
#define BPB_HiddSec 28 /* Number of special hidden sectors (4) */
|
#define BPB_HiddSec 28 /* Number of special hidden sectors (4) */
|
||||||
#define BPB_TotSec32 32 /* Volume size [sector] (4) */
|
#define BPB_TotSec32 32 /* Volume size [sector] (4) */
|
||||||
#define BS_DrvNum 36 /* Physical drive number (2) */
|
#define BS_DrvNum 36 /* Physical drive number (1) */
|
||||||
|
#define BS_NTres 37 /* Error flag (1) */
|
||||||
#define BS_BootSig 38 /* Extended boot signature (1) */
|
#define BS_BootSig 38 /* Extended boot signature (1) */
|
||||||
#define BS_VolID 39 /* Volume serial number (4) */
|
#define BS_VolID 39 /* Volume serial number (4) */
|
||||||
#define BS_VolLab 43 /* Volume label (8) */
|
#define BS_VolLab 43 /* Volume label (8) */
|
||||||
@ -410,7 +392,8 @@ WCHAR ff_wtoupper(WCHAR chr)
|
|||||||
#define BPB_RootClus 44 /* Root directory first cluster (4) */
|
#define BPB_RootClus 44 /* Root directory first cluster (4) */
|
||||||
#define BPB_FSInfo 48 /* Offset of FSINFO sector (2) */
|
#define BPB_FSInfo 48 /* Offset of FSINFO sector (2) */
|
||||||
#define BPB_BkBootSec 50 /* Offset of backup boot sector (2) */
|
#define BPB_BkBootSec 50 /* Offset of backup boot sector (2) */
|
||||||
#define BS_DrvNum32 64 /* Physical drive number (2) */
|
#define BS_DrvNum32 64 /* Physical drive number (1) */
|
||||||
|
#define BS_NTres32 65 /* Error flag (1) */
|
||||||
#define BS_BootSig32 66 /* Extended boot signature (1) */
|
#define BS_BootSig32 66 /* Extended boot signature (1) */
|
||||||
#define BS_VolID32 67 /* Volume serial number (4) */
|
#define BS_VolID32 67 /* Volume serial number (4) */
|
||||||
#define BS_VolLab32 71 /* Volume label (8) */
|
#define BS_VolLab32 71 /* Volume label (8) */
|
||||||
@ -438,7 +421,7 @@ WCHAR ff_wtoupper(WCHAR chr)
|
|||||||
#define LDIR_Ord 0 /* LFN entry order and LLE flag (1) */
|
#define LDIR_Ord 0 /* LFN entry order and LLE flag (1) */
|
||||||
#define LDIR_Attr 11 /* LFN attribute (1) */
|
#define LDIR_Attr 11 /* LFN attribute (1) */
|
||||||
#define LDIR_Type 12 /* LFN type (1) */
|
#define LDIR_Type 12 /* LFN type (1) */
|
||||||
#define LDIR_Chksum 13 /* Sum of corresponding SFN entry */
|
#define LDIR_Chksum 13 /* Checksum of corresponding SFN entry */
|
||||||
#define LDIR_FstClusLO 26 /* Must be zero (0) */
|
#define LDIR_FstClusLO 26 /* Must be zero (0) */
|
||||||
#define SZ_DIRE 32 /* Size of a directory entry */
|
#define SZ_DIRE 32 /* Size of a directory entry */
|
||||||
#define LLEF 0x40 /* Last long entry flag in LDIR_Ord */
|
#define LLEF 0x40 /* Last long entry flag in LDIR_Ord */
|
||||||
@ -448,12 +431,15 @@ WCHAR ff_wtoupper(WCHAR chr)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*------------------------------------------------------------*/
|
/*--------------------------------------------------------------------------
|
||||||
/* Module private work area */
|
|
||||||
/*------------------------------------------------------------*/
|
Module Private Work Area
|
||||||
/* Remark: Uninitialized variables with static duration are
|
|
||||||
/ guaranteed zero/null at start-up. If not, either the linker
|
---------------------------------------------------------------------------*/
|
||||||
/ or start-up routine being used is out of ANSI-C standard.
|
|
||||||
|
/* Remark: Uninitialized variables with static duration are guaranteed
|
||||||
|
/ zero/null at start-up. If not, either the linker or start-up routine
|
||||||
|
/ being used is not compliance with ANSI-C standard.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#if _VOLUMES < 1 || _VOLUMES > 9
|
#if _VOLUMES < 1 || _VOLUMES > 9
|
||||||
@ -497,7 +483,7 @@ static WCHAR LfnBuf[_MAX_LFN + 1];
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef _EXCVT
|
#ifdef _EXCVT
|
||||||
static const BYTE ExCvt[] = _EXCVT; /* Upper conversion table for extended characters */
|
static const BYTE ExCvt[] = _EXCVT; /* Upper conversion table for SBCS extended characters */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
@ -711,7 +697,7 @@ void clear_lock ( /* Clear lock entries of the volume */
|
|||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
#if !_FS_READONLY
|
#if !_FS_READONLY
|
||||||
static
|
static
|
||||||
FRESULT sync_window (
|
FRESULT sync_window ( /* FR_OK:succeeded, !=0:error */
|
||||||
FATFS* fs /* File system object */
|
FATFS* fs /* File system object */
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
@ -740,7 +726,7 @@ FRESULT sync_window (
|
|||||||
|
|
||||||
|
|
||||||
static
|
static
|
||||||
FRESULT move_window (
|
FRESULT move_window ( /* FR_OK(0):succeeded, !=0:error */
|
||||||
FATFS* fs, /* File system object */
|
FATFS* fs, /* File system object */
|
||||||
DWORD sector /* Sector number to make appearance in the fs->win[] */
|
DWORD sector /* Sector number to make appearance in the fs->win[] */
|
||||||
)
|
)
|
||||||
@ -771,7 +757,7 @@ FRESULT move_window (
|
|||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
#if !_FS_READONLY
|
#if !_FS_READONLY
|
||||||
static
|
static
|
||||||
FRESULT sync_fs ( /* FR_OK: successful, FR_DISK_ERR: failed */
|
FRESULT sync_fs ( /* FR_OK:succeeded, !=0:error */
|
||||||
FATFS* fs /* File system object */
|
FATFS* fs /* File system object */
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
@ -780,16 +766,16 @@ FRESULT sync_fs ( /* FR_OK: successful, FR_DISK_ERR: failed */
|
|||||||
|
|
||||||
res = sync_window(fs);
|
res = sync_window(fs);
|
||||||
if (res == FR_OK) {
|
if (res == FR_OK) {
|
||||||
/* Update FSINFO sector if needed */
|
/* Update FSInfo sector if needed */
|
||||||
if (fs->fs_type == FS_FAT32 && fs->fsi_flag == 1) {
|
if (fs->fs_type == FS_FAT32 && fs->fsi_flag == 1) {
|
||||||
/* Create FSINFO structure */
|
/* Create FSInfo structure */
|
||||||
mem_set(fs->win, 0, SS(fs));
|
mem_set(fs->win, 0, SS(fs));
|
||||||
ST_WORD(fs->win + BS_55AA, 0xAA55);
|
ST_WORD(fs->win + BS_55AA, 0xAA55);
|
||||||
ST_DWORD(fs->win + FSI_LeadSig, 0x41615252);
|
ST_DWORD(fs->win + FSI_LeadSig, 0x41615252);
|
||||||
ST_DWORD(fs->win + FSI_StrucSig, 0x61417272);
|
ST_DWORD(fs->win + FSI_StrucSig, 0x61417272);
|
||||||
ST_DWORD(fs->win + FSI_Free_Count, fs->free_clust);
|
ST_DWORD(fs->win + FSI_Free_Count, fs->free_clust);
|
||||||
ST_DWORD(fs->win + FSI_Nxt_Free, fs->last_clust);
|
ST_DWORD(fs->win + FSI_Nxt_Free, fs->last_clust);
|
||||||
/* Write it into the FSINFO sector */
|
/* Write it into the FSInfo sector */
|
||||||
fs->winsect = fs->volbase + 1;
|
fs->winsect = fs->volbase + 1;
|
||||||
disk_write(fs->drv, fs->win, fs->winsect, 1);
|
disk_write(fs->drv, fs->win, fs->winsect, 1);
|
||||||
fs->fsi_flag = 0;
|
fs->fsi_flag = 0;
|
||||||
@ -811,7 +797,7 @@ FRESULT sync_fs ( /* FR_OK: successful, FR_DISK_ERR: failed */
|
|||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
/* Hidden API for hacks and disk tools */
|
/* Hidden API for hacks and disk tools */
|
||||||
|
|
||||||
static DWORD clust2sect ( /* !=0: Sector number, 0: Failed - invalid cluster# */
|
DWORD clust2sect ( /* !=0:Sector number, 0:Failed (invalid cluster#) */
|
||||||
FATFS* fs, /* File system object */
|
FATFS* fs, /* File system object */
|
||||||
DWORD clst /* Cluster# to be converted */
|
DWORD clst /* Cluster# to be converted */
|
||||||
)
|
)
|
||||||
@ -829,7 +815,7 @@ static DWORD clust2sect ( /* !=0: Sector number, 0: Failed - invalid cluster# */
|
|||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
/* Hidden API for hacks and disk tools */
|
/* Hidden API for hacks and disk tools */
|
||||||
|
|
||||||
static DWORD get_fat ( /* 0xFFFFFFFF:Disk error, 1:Internal error, 2..0x0FFFFFFF:Cluster status */
|
DWORD get_fat ( /* 0xFFFFFFFF:Disk error, 1:Internal error, 2..0x0FFFFFFF:Cluster status */
|
||||||
FATFS* fs, /* File system object */
|
FATFS* fs, /* File system object */
|
||||||
DWORD clst /* FAT index number (cluster number) to get the value */
|
DWORD clst /* FAT index number (cluster number) to get the value */
|
||||||
)
|
)
|
||||||
@ -839,7 +825,7 @@ static DWORD get_fat ( /* 0xFFFFFFFF:Disk error, 1:Internal error, 2..0x0FFFFFFF
|
|||||||
DWORD val;
|
DWORD val;
|
||||||
|
|
||||||
|
|
||||||
if (clst < 2 || clst >= fs->n_fatent) { /* Check range */
|
if (clst < 2 || clst >= fs->n_fatent) { /* Check if in valid range */
|
||||||
val = 1; /* Internal error */
|
val = 1; /* Internal error */
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
@ -884,7 +870,7 @@ static DWORD get_fat ( /* 0xFFFFFFFF:Disk error, 1:Internal error, 2..0x0FFFFFFF
|
|||||||
/* Hidden API for hacks and disk tools */
|
/* Hidden API for hacks and disk tools */
|
||||||
|
|
||||||
#if !_FS_READONLY
|
#if !_FS_READONLY
|
||||||
static FRESULT put_fat (
|
FRESULT put_fat ( /* FR_OK(0):succeeded, !=0:error */
|
||||||
FATFS* fs, /* File system object */
|
FATFS* fs, /* File system object */
|
||||||
DWORD clst, /* FAT index number (cluster number) to be changed */
|
DWORD clst, /* FAT index number (cluster number) to be changed */
|
||||||
DWORD val /* New value to be set to the entry */
|
DWORD val /* New value to be set to the entry */
|
||||||
@ -895,7 +881,7 @@ static FRESULT put_fat (
|
|||||||
FRESULT res;
|
FRESULT res;
|
||||||
|
|
||||||
|
|
||||||
if (clst < 2 || clst >= fs->n_fatent) { /* Check range */
|
if (clst < 2 || clst >= fs->n_fatent) { /* Check if in valid range */
|
||||||
res = FR_INT_ERR;
|
res = FR_INT_ERR;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
@ -948,7 +934,7 @@ static FRESULT put_fat (
|
|||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
#if !_FS_READONLY
|
#if !_FS_READONLY
|
||||||
static
|
static
|
||||||
FRESULT remove_chain (
|
FRESULT remove_chain ( /* FR_OK(0):succeeded, !=0:error */
|
||||||
FATFS* fs, /* File system object */
|
FATFS* fs, /* File system object */
|
||||||
DWORD clst /* Cluster# to remove a chain from */
|
DWORD clst /* Cluster# to remove a chain from */
|
||||||
)
|
)
|
||||||
@ -959,7 +945,7 @@ FRESULT remove_chain (
|
|||||||
DWORD scl = clst, ecl = clst, rt[2];
|
DWORD scl = clst, ecl = clst, rt[2];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (clst < 2 || clst >= fs->n_fatent) { /* Check range */
|
if (clst < 2 || clst >= fs->n_fatent) { /* Check if in valid range */
|
||||||
res = FR_INT_ERR;
|
res = FR_INT_ERR;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
@ -1003,7 +989,7 @@ FRESULT remove_chain (
|
|||||||
static
|
static
|
||||||
DWORD create_chain ( /* 0:No free cluster, 1:Internal error, 0xFFFFFFFF:Disk error, >=2:New cluster# */
|
DWORD create_chain ( /* 0:No free cluster, 1:Internal error, 0xFFFFFFFF:Disk error, >=2:New cluster# */
|
||||||
FATFS* fs, /* File system object */
|
FATFS* fs, /* File system object */
|
||||||
DWORD clst /* Cluster# to stretch. 0 means create a new chain. */
|
DWORD clst /* Cluster# to stretch, 0:Create a new chain */
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
DWORD cs, ncl, scl;
|
DWORD cs, ncl, scl;
|
||||||
@ -1091,7 +1077,7 @@ DWORD clmt_clust ( /* <2:Error, >=2:Cluster number */
|
|||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
|
|
||||||
static
|
static
|
||||||
FRESULT dir_sdi (
|
FRESULT dir_sdi ( /* FR_OK(0):succeeded, !=0:error */
|
||||||
DIR* dp, /* Pointer to directory object */
|
DIR* dp, /* Pointer to directory object */
|
||||||
UINT idx /* Index of directory table */
|
UINT idx /* Index of directory table */
|
||||||
)
|
)
|
||||||
@ -1139,7 +1125,7 @@ FRESULT dir_sdi (
|
|||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
|
|
||||||
static
|
static
|
||||||
FRESULT dir_next ( /* FR_OK:Succeeded, FR_NO_FILE:End of table, FR_DENIED:Could not stretch */
|
FRESULT dir_next ( /* FR_OK(0):succeeded, FR_NO_FILE:End of table, FR_DENIED:Could not stretch */
|
||||||
DIR* dp, /* Pointer to the directory object */
|
DIR* dp, /* Pointer to the directory object */
|
||||||
int stretch /* 0: Do not stretch table, 1: Stretch table if needed */
|
int stretch /* 0: Do not stretch table, 1: Stretch table if needed */
|
||||||
)
|
)
|
||||||
@ -1210,7 +1196,7 @@ FRESULT dir_next ( /* FR_OK:Succeeded, FR_NO_FILE:End of table, FR_DENIED:Could
|
|||||||
|
|
||||||
#if !_FS_READONLY
|
#if !_FS_READONLY
|
||||||
static
|
static
|
||||||
FRESULT dir_alloc (
|
FRESULT dir_alloc ( /* FR_OK(0):succeeded, !=0:error */
|
||||||
DIR* dp, /* Pointer to the directory object */
|
DIR* dp, /* Pointer to the directory object */
|
||||||
UINT nent /* Number of contiguous entries to allocate (1-21) */
|
UINT nent /* Number of contiguous entries to allocate (1-21) */
|
||||||
)
|
)
|
||||||
@ -1246,9 +1232,9 @@ FRESULT dir_alloc (
|
|||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
|
|
||||||
static
|
static
|
||||||
DWORD ld_clust (
|
DWORD ld_clust ( /* Returns the top cluster value of the SFN entry */
|
||||||
FATFS* fs, /* Pointer to the fs object */
|
FATFS* fs, /* Pointer to the fs object */
|
||||||
BYTE* dir /* Pointer to the directory entry */
|
const BYTE* dir /* Pointer to the SFN entry */
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
DWORD cl;
|
DWORD cl;
|
||||||
@ -1264,7 +1250,7 @@ DWORD ld_clust (
|
|||||||
#if !_FS_READONLY
|
#if !_FS_READONLY
|
||||||
static
|
static
|
||||||
void st_clust (
|
void st_clust (
|
||||||
BYTE* dir, /* Pointer to the directory entry */
|
BYTE* dir, /* Pointer to the SFN entry */
|
||||||
DWORD cl /* Value to be set */
|
DWORD cl /* Value to be set */
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
@ -1285,27 +1271,29 @@ const BYTE LfnOfs[] = {1,3,5,7,9,14,16,18,20,22,24,28,30}; /* Offset of LFN char
|
|||||||
|
|
||||||
|
|
||||||
static
|
static
|
||||||
int cmp_lfn ( /* 1:Matched, 0:Not matched */
|
int cmp_lfn ( /* 1:matched, 0:not matched */
|
||||||
WCHAR* lfnbuf, /* Pointer to the LFN to be compared */
|
WCHAR* lfnbuf, /* Pointer to the LFN working buffer to be compared */
|
||||||
BYTE* dir /* Pointer to the directory entry containing a part of LFN */
|
BYTE* dir /* Pointer to the directory entry containing the part of LFN */
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINT i, s;
|
UINT i, s;
|
||||||
WCHAR wc, uc;
|
WCHAR wc, uc;
|
||||||
|
|
||||||
|
|
||||||
i = ((dir[LDIR_Ord] & ~LLEF) - 1) * 13; /* Get offset in the LFN buffer */
|
if (LD_WORD(dir + LDIR_FstClusLO) != 0) return 0; /* Check LDIR_FstClusLO */
|
||||||
s = 0; wc = 1;
|
|
||||||
do {
|
i = ((dir[LDIR_Ord] & 0x3F) - 1) * 13; /* Offset in the LFN buffer */
|
||||||
uc = LD_WORD(dir + LfnOfs[s]); /* Pick an LFN character from the entry */
|
|
||||||
if (wc) { /* Last character has not been processed */
|
for (wc = 1, s = 0; s < 13; s++) { /* Process all characters in the entry */
|
||||||
wc = ff_wtoupper(uc); /* Convert it to upper case */
|
uc = LD_WORD(dir + LfnOfs[s]); /* Pick an LFN character */
|
||||||
if (i >= _MAX_LFN || wc != ff_wtoupper(lfnbuf[i++])) /* Compare it */
|
if (wc) {
|
||||||
|
if (i >= _MAX_LFN || ff_wtoupper(uc) != ff_wtoupper(lfnbuf[i++])) /* Compare it */
|
||||||
return 0; /* Not matched */
|
return 0; /* Not matched */
|
||||||
|
wc = uc;
|
||||||
} else {
|
} else {
|
||||||
if (uc != 0xFFFF) return 0; /* Check filler */
|
if (uc != 0xFFFF) return 0; /* Check filler */
|
||||||
}
|
}
|
||||||
} while (++s < 13); /* Repeat until all characters in the entry are checked */
|
}
|
||||||
|
|
||||||
if ((dir[LDIR_Ord] & LLEF) && wc && lfnbuf[i]) /* Last segment matched but different length */
|
if ((dir[LDIR_Ord] & LLEF) && wc && lfnbuf[i]) /* Last segment matched but different length */
|
||||||
return 0;
|
return 0;
|
||||||
@ -1316,34 +1304,35 @@ int cmp_lfn ( /* 1:Matched, 0:Not matched */
|
|||||||
|
|
||||||
#if _FS_MINIMIZE <= 1 || _USE_LABEL || _FS_RPATH >= 2
|
#if _FS_MINIMIZE <= 1 || _USE_LABEL || _FS_RPATH >= 2
|
||||||
static
|
static
|
||||||
int pick_lfn ( /* 1:Succeeded, 0:Buffer overflow */
|
int pick_lfn ( /* 1:succeeded, 0:buffer overflow or invalid LFN entry */
|
||||||
WCHAR* lfnbuf, /* Pointer to the Unicode-LFN buffer */
|
WCHAR* lfnbuf, /* Pointer to the LFN working buffer */
|
||||||
BYTE* dir /* Pointer to the directory entry */
|
BYTE* dir /* Pointer to the LFN entry */
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINT i, s;
|
UINT i, s;
|
||||||
WCHAR wc, uc;
|
WCHAR wc, uc;
|
||||||
|
|
||||||
|
|
||||||
|
if (LD_WORD(dir + LDIR_FstClusLO) != 0) return 0; /* Check LDIR_FstClusLO */
|
||||||
|
|
||||||
i = ((dir[LDIR_Ord] & 0x3F) - 1) * 13; /* Offset in the LFN buffer */
|
i = ((dir[LDIR_Ord] & 0x3F) - 1) * 13; /* Offset in the LFN buffer */
|
||||||
|
|
||||||
s = 0; wc = 1;
|
for (wc = 1, s = 0; s < 13; s++) { /* Process all characters in the entry */
|
||||||
do {
|
uc = LD_WORD(dir + LfnOfs[s]); /* Pick an LFN character */
|
||||||
uc = LD_WORD(dir + LfnOfs[s]); /* Pick an LFN character from the entry */
|
if (wc) {
|
||||||
if (wc) { /* Last character has not been processed */
|
|
||||||
if (i >= _MAX_LFN) return 0; /* Buffer overflow? */
|
if (i >= _MAX_LFN) return 0; /* Buffer overflow? */
|
||||||
lfnbuf[i++] = wc = uc; /* Store it */
|
lfnbuf[i++] = wc = uc; /* Store it */
|
||||||
} else {
|
} else {
|
||||||
if (uc != 0xFFFF) return 0; /* Check filler */
|
if (uc != 0xFFFF) return 0; /* Check filler */
|
||||||
}
|
}
|
||||||
} while (++s < 13); /* Read all character in the entry */
|
}
|
||||||
|
|
||||||
if (dir[LDIR_Ord] & LLEF) { /* Put terminator if it is the last LFN part */
|
if (dir[LDIR_Ord] & LLEF) { /* Put terminator if it is the last LFN part */
|
||||||
if (i >= _MAX_LFN) return 0; /* Buffer overflow? */
|
if (i >= _MAX_LFN) return 0; /* Buffer overflow? */
|
||||||
lfnbuf[i] = 0;
|
lfnbuf[i] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
return 1; /* The part of LFN is valid */
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -1351,10 +1340,10 @@ int pick_lfn ( /* 1:Succeeded, 0:Buffer overflow */
|
|||||||
#if !_FS_READONLY
|
#if !_FS_READONLY
|
||||||
static
|
static
|
||||||
void fit_lfn (
|
void fit_lfn (
|
||||||
const WCHAR* lfnbuf, /* Pointer to the LFN buffer */
|
const WCHAR* lfnbuf, /* Pointer to the LFN working buffer */
|
||||||
BYTE* dir, /* Pointer to the directory entry */
|
BYTE* dir, /* Pointer to the LFN entry to be processed */
|
||||||
BYTE ord, /* LFN order (1-20) */
|
BYTE ord, /* LFN order (1-20) */
|
||||||
BYTE sum /* SFN sum */
|
BYTE sum /* Checksum of the corresponding SFN */
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINT i, s;
|
UINT i, s;
|
||||||
@ -1366,7 +1355,7 @@ void fit_lfn (
|
|||||||
dir[LDIR_Type] = 0;
|
dir[LDIR_Type] = 0;
|
||||||
ST_WORD(dir + LDIR_FstClusLO, 0);
|
ST_WORD(dir + LDIR_FstClusLO, 0);
|
||||||
|
|
||||||
i = (ord - 1) * 13; /* Get offset in the LFN buffer */
|
i = (ord - 1) * 13; /* Get offset in the LFN working buffer */
|
||||||
s = wc = 0;
|
s = wc = 0;
|
||||||
do {
|
do {
|
||||||
if (wc != 0xFFFF) wc = lfnbuf[i++]; /* Get an effective character */
|
if (wc != 0xFFFF) wc = lfnbuf[i++]; /* Get an effective character */
|
||||||
@ -1443,7 +1432,7 @@ void gen_numname (
|
|||||||
|
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
/* Calculate sum of an SFN */
|
/* Calculate checksum of an SFN entry */
|
||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
#if _USE_LFN
|
#if _USE_LFN
|
||||||
static
|
static
|
||||||
@ -1467,7 +1456,7 @@ BYTE sum_sfn (
|
|||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
|
|
||||||
static
|
static
|
||||||
FRESULT dir_find (
|
FRESULT dir_find ( /* FR_OK(0):succeeded, !=0:error */
|
||||||
DIR* dp /* Pointer to the directory object linked to the file name */
|
DIR* dp /* Pointer to the directory object linked to the file name */
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
@ -1587,7 +1576,7 @@ FRESULT dir_read (
|
|||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
#if !_FS_READONLY
|
#if !_FS_READONLY
|
||||||
static
|
static
|
||||||
FRESULT dir_register ( /* FR_OK:Successful, FR_DENIED:No free entry or too many SFN collision, FR_DISK_ERR:Disk error */
|
FRESULT dir_register ( /* FR_OK:succeeded, FR_DENIED:no free entry or too many SFN collision, FR_DISK_ERR:disk error */
|
||||||
DIR* dp /* Target directory with object name to be created */
|
DIR* dp /* Target directory with object name to be created */
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
@ -1627,7 +1616,7 @@ FRESULT dir_register ( /* FR_OK:Successful, FR_DENIED:No free entry or too many
|
|||||||
if (res == FR_OK && --nent) { /* Set LFN entry if needed */
|
if (res == FR_OK && --nent) { /* Set LFN entry if needed */
|
||||||
res = dir_sdi(dp, dp->index - nent);
|
res = dir_sdi(dp, dp->index - nent);
|
||||||
if (res == FR_OK) {
|
if (res == FR_OK) {
|
||||||
sum = sum_sfn(dp->fn); /* Sum value of the SFN tied to the LFN */
|
sum = sum_sfn(dp->fn); /* Checksum value of the SFN tied to the LFN */
|
||||||
do { /* Store LFN entries in bottom first */
|
do { /* Store LFN entries in bottom first */
|
||||||
res = move_window(dp->fs, dp->sect);
|
res = move_window(dp->fs, dp->sect);
|
||||||
if (res != FR_OK) break;
|
if (res != FR_OK) break;
|
||||||
@ -1665,7 +1654,7 @@ FRESULT dir_register ( /* FR_OK:Successful, FR_DENIED:No free entry or too many
|
|||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
#if !_FS_READONLY && !_FS_MINIMIZE
|
#if !_FS_READONLY && !_FS_MINIMIZE
|
||||||
static
|
static
|
||||||
FRESULT dir_remove ( /* FR_OK: Successful, FR_DISK_ERR: A disk error */
|
FRESULT dir_remove ( /* FR_OK:Succeeded, FR_DISK_ERR:A disk error */
|
||||||
DIR* dp /* Directory object pointing the entry to be removed */
|
DIR* dp /* Directory object pointing the entry to be removed */
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
@ -1804,7 +1793,7 @@ WCHAR get_achar ( /* Get a character and advances ptr 1 or 2 */
|
|||||||
|
|
||||||
|
|
||||||
static
|
static
|
||||||
int pattern_matching ( /* Return value: 0:mismatched, 1:matched */
|
int pattern_matching ( /* 0:mismatched, 1:matched */
|
||||||
const TCHAR* pat, /* Matching pattern */
|
const TCHAR* pat, /* Matching pattern */
|
||||||
const TCHAR* nam, /* String to be tested */
|
const TCHAR* nam, /* String to be tested */
|
||||||
int skip, /* Number of pre-skip chars (number of ?s) */
|
int skip, /* Number of pre-skip chars (number of ?s) */
|
||||||
@ -1848,11 +1837,11 @@ int pattern_matching ( /* Return value: 0:mismatched, 1:matched */
|
|||||||
|
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
/* Pick a segment and create the object name in directory form */
|
/* Pick a top segment and create the object name in directory form */
|
||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
|
|
||||||
static
|
static
|
||||||
FRESULT create_name (
|
FRESULT create_name ( /* FR_OK: successful, FR_INVALID_NAME: could not create */
|
||||||
DIR* dp, /* Pointer to the directory object */
|
DIR* dp, /* Pointer to the directory object */
|
||||||
const TCHAR** path /* Pointer to pointer to the segment in the path string */
|
const TCHAR** path /* Pointer to pointer to the segment in the path string */
|
||||||
)
|
)
|
||||||
@ -1890,22 +1879,21 @@ FRESULT create_name (
|
|||||||
*path = &p[si]; /* Return pointer to the next segment */
|
*path = &p[si]; /* Return pointer to the next segment */
|
||||||
cf = (w < ' ') ? NS_LAST : 0; /* Set last segment flag if end of path */
|
cf = (w < ' ') ? NS_LAST : 0; /* Set last segment flag if end of path */
|
||||||
#if _FS_RPATH
|
#if _FS_RPATH
|
||||||
if ((di == 1 && lfn[di - 1] == '.') || /* Is this a dot entry? */
|
if ((di == 1 && lfn[di - 1] == '.') ||
|
||||||
(di == 2 && lfn[di - 1] == '.' && lfn[di - 2] == '.')) {
|
(di == 2 && lfn[di - 1] == '.' && lfn[di - 2] == '.')) { /* Is this segment a dot entry? */
|
||||||
lfn[di] = 0;
|
lfn[di] = 0;
|
||||||
for (i = 0; i < 11; i++)
|
for (i = 0; i < 11; i++) /* Create dot name for SFN entry */
|
||||||
dp->fn[i] = (i < di) ? '.' : ' ';
|
dp->fn[i] = (i < di) ? '.' : ' ';
|
||||||
dp->fn[i] = cf | NS_DOT; /* This is a dot entry */
|
dp->fn[i] = cf | NS_DOT; /* This is a dot entry */
|
||||||
return FR_OK;
|
return FR_OK;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
while (di) { /* Strip trailing spaces and dots */
|
while (di) { /* Snip off trailing spaces and dots if exist */
|
||||||
w = lfn[di - 1];
|
w = lfn[di - 1];
|
||||||
if (w != ' ' && w != '.') break;
|
if (w != ' ' && w != '.') break;
|
||||||
di--;
|
di--;
|
||||||
}
|
}
|
||||||
if (!di) return FR_INVALID_NAME; /* Reject nul string */
|
if (!di) return FR_INVALID_NAME; /* Reject nul string */
|
||||||
|
|
||||||
lfn[di] = 0; /* LFN is created */
|
lfn[di] = 0; /* LFN is created */
|
||||||
|
|
||||||
/* Create SFN in directory form */
|
/* Create SFN in directory form */
|
||||||
@ -1942,7 +1930,7 @@ FRESULT create_name (
|
|||||||
cf |= NS_LFN; /* Force create LFN entry */
|
cf |= NS_LFN; /* Force create LFN entry */
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_DF1S && w >= 0x100) { /* DBC (always false at SBCS cfg) */
|
if (_DF1S && w >= 0x100) { /* Is this DBC? (always false at SBCS cfg) */
|
||||||
if (i >= ni - 1) {
|
if (i >= ni - 1) {
|
||||||
cf |= NS_LOSS | NS_LFN; i = ni; continue;
|
cf |= NS_LOSS | NS_LFN; i = ni; continue;
|
||||||
}
|
}
|
||||||
@ -1963,7 +1951,7 @@ FRESULT create_name (
|
|||||||
dp->fn[i++] = (BYTE)w;
|
dp->fn[i++] = (BYTE)w;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dp->fn[0] == DDEM) dp->fn[0] = RDDEM; /* If the first character collides with deleted mark, replace it with RDDEM */
|
if (dp->fn[0] == DDEM) dp->fn[0] = RDDEM; /* If the first character collides with DDEM, replace it with RDDEM */
|
||||||
|
|
||||||
if (ni == 8) b <<= 2;
|
if (ni == 8) b <<= 2;
|
||||||
if ((b & 0x0C) == 0x0C || (b & 0x03) == 0x03) /* Create LFN entry when there are composite capitals */
|
if ((b & 0x0C) == 0x0C || (b & 0x03) == 0x03) /* Create LFN entry when there are composite capitals */
|
||||||
@ -1984,7 +1972,7 @@ FRESULT create_name (
|
|||||||
const char *p;
|
const char *p;
|
||||||
|
|
||||||
/* Create file name in directory form */
|
/* Create file name in directory form */
|
||||||
for (p = *path; *p == '/' || *p == '\\'; p++) ; /* Strip duplicated separator */
|
for (p = *path; *p == '/' || *p == '\\'; p++) ; /* Skip duplicated separator */
|
||||||
sfn = dp->fn;
|
sfn = dp->fn;
|
||||||
mem_set(sfn, ' ', 11);
|
mem_set(sfn, ' ', 11);
|
||||||
si = i = b = 0; ni = 8;
|
si = i = b = 0; ni = 8;
|
||||||
@ -2019,7 +2007,7 @@ FRESULT create_name (
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
if (IsDBCS1(c)) { /* Check if it is a DBC 1st byte (always false on SBCS cfg) */
|
if (IsDBCS1(c)) { /* Check if it is a DBC 1st byte (always false at SBCS cfg.) */
|
||||||
d = (BYTE)p[si++]; /* Get 2nd byte */
|
d = (BYTE)p[si++]; /* Get 2nd byte */
|
||||||
if (!IsDBCS2(d) || i >= ni - 1) /* Reject invalid DBC */
|
if (!IsDBCS2(d) || i >= ni - 1) /* Reject invalid DBC */
|
||||||
return FR_INVALID_NAME;
|
return FR_INVALID_NAME;
|
||||||
@ -2185,7 +2173,7 @@ int get_ldnumber ( /* Returns logical drive number (-1:invalid drive) */
|
|||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
|
|
||||||
static
|
static
|
||||||
BYTE check_fs ( /* 0:FAT boor sector, 1:Valid boor sector but not FAT, 2:Not a boot sector, 3:Disk error */
|
BYTE check_fs ( /* 0:Valid FAT-BS, 1:Valid BS but not FAT, 2:Not a BS, 3:Disk error */
|
||||||
FATFS* fs, /* File system object */
|
FATFS* fs, /* File system object */
|
||||||
DWORD sect /* Sector# (lba) to check if it is an FAT boot record or not */
|
DWORD sect /* Sector# (lba) to check if it is an FAT boot record or not */
|
||||||
)
|
)
|
||||||
@ -2343,7 +2331,7 @@ FRESULT find_volume ( /* FR_OK(0): successful, !=0: any error occurred */
|
|||||||
/* Get fsinfo if available */
|
/* Get fsinfo if available */
|
||||||
fs->fsi_flag = 0x80;
|
fs->fsi_flag = 0x80;
|
||||||
#if (_FS_NOFSINFO & 3) != 3
|
#if (_FS_NOFSINFO & 3) != 3
|
||||||
if (fmt == FS_FAT32 /* Enable FSINFO only if FAT32 and BPB_FSInfo is 1 */
|
if (fmt == FS_FAT32 /* Enable FSINFO only if FAT32 and BPB_FSInfo == 1 */
|
||||||
&& LD_WORD(fs->win + BPB_FSInfo) == 1
|
&& LD_WORD(fs->win + BPB_FSInfo) == 1
|
||||||
&& move_window(fs, bsect + 1) == FR_OK)
|
&& move_window(fs, bsect + 1) == FR_OK)
|
||||||
{
|
{
|
||||||
@ -2389,14 +2377,11 @@ FRESULT validate ( /* FR_OK(0): The object is valid, !=0: Invalid */
|
|||||||
FIL *fil = (FIL*)obj; /* Assuming offset of .fs and .id in the FIL/DIR structure is identical */
|
FIL *fil = (FIL*)obj; /* Assuming offset of .fs and .id in the FIL/DIR structure is identical */
|
||||||
|
|
||||||
|
|
||||||
if (!fil || !fil->fs || !fil->fs->fs_type || fil->fs->id != fil->id)
|
if (!fil || !fil->fs || !fil->fs->fs_type || fil->fs->id != fil->id || (disk_status(fil->fs->drv) & STA_NOINIT))
|
||||||
return FR_INVALID_OBJECT;
|
return FR_INVALID_OBJECT;
|
||||||
|
|
||||||
ENTER_FF(fil->fs); /* Lock file system */
|
ENTER_FF(fil->fs); /* Lock file system */
|
||||||
|
|
||||||
if (disk_status(fil->fs->drv) & STA_NOINIT)
|
|
||||||
return FR_NOT_READY;
|
|
||||||
|
|
||||||
return FR_OK;
|
return FR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2407,7 +2392,7 @@ FRESULT validate ( /* FR_OK(0): The object is valid, !=0: Invalid */
|
|||||||
|
|
||||||
Public Functions
|
Public Functions
|
||||||
|
|
||||||
--------------------------------------------------------------------------*/
|
---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -2522,12 +2507,13 @@ FRESULT f_open (
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (res == FR_OK && (mode & FA_CREATE_ALWAYS)) { /* Truncate it if overwrite mode */
|
if (res == FR_OK && (mode & FA_CREATE_ALWAYS)) { /* Truncate it if overwrite mode */
|
||||||
dw = GET_FATTIME(); /* Created time */
|
dw = GET_FATTIME();
|
||||||
ST_DWORD(dir + DIR_CrtTime, dw);
|
ST_DWORD(dir + DIR_CrtTime, dw);/* Set created time */
|
||||||
|
ST_DWORD(dir + DIR_WrtTime, dw);/* Set modified time */
|
||||||
dir[DIR_Attr] = 0; /* Reset attribute */
|
dir[DIR_Attr] = 0; /* Reset attribute */
|
||||||
ST_DWORD(dir + DIR_FileSize, 0);/* size = 0 */
|
ST_DWORD(dir + DIR_FileSize, 0);/* Reset file size */
|
||||||
cl = ld_clust(dj.fs, dir); /* Get start cluster */
|
cl = ld_clust(dj.fs, dir); /* Get cluster chain */
|
||||||
st_clust(dir, 0); /* cluster = 0 */
|
st_clust(dir, 0); /* Reset cluster */
|
||||||
dj.fs->wflag = 1;
|
dj.fs->wflag = 1;
|
||||||
if (cl) { /* Remove the cluster chain if exist */
|
if (cl) { /* Remove the cluster chain if exist */
|
||||||
dw = dj.fs->winsect;
|
dw = dj.fs->winsect;
|
||||||
@ -2540,7 +2526,7 @@ FRESULT f_open (
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else { /* Open an existing file */
|
else { /* Open an existing file */
|
||||||
if (res == FR_OK) { /* Follow succeeded */
|
if (res == FR_OK) { /* Following succeeded */
|
||||||
if (dir[DIR_Attr] & AM_DIR) { /* It is a directory */
|
if (dir[DIR_Attr] & AM_DIR) { /* It is a directory */
|
||||||
res = FR_NO_FILE;
|
res = FR_NO_FILE;
|
||||||
} else {
|
} else {
|
||||||
@ -2832,10 +2818,9 @@ FRESULT f_sync (
|
|||||||
|
|
||||||
res = validate(fp); /* Check validity of the object */
|
res = validate(fp); /* Check validity of the object */
|
||||||
if (res == FR_OK) {
|
if (res == FR_OK) {
|
||||||
if (fp->flag & FA__WRITTEN) { /* Has the file been written? */
|
if (fp->flag & FA__WRITTEN) { /* Is there any change to the file? */
|
||||||
/* Write-back dirty buffer */
|
|
||||||
#if !_FS_TINY
|
#if !_FS_TINY
|
||||||
if (fp->flag & FA__DIRTY) {
|
if (fp->flag & FA__DIRTY) { /* Write-back cached data if needed */
|
||||||
if (disk_write(fp->fs->drv, fp->buf, fp->dsect, 1) != RES_OK)
|
if (disk_write(fp->fs->drv, fp->buf, fp->dsect, 1) != RES_OK)
|
||||||
LEAVE_FF(fp->fs, FR_DISK_ERR);
|
LEAVE_FF(fp->fs, FR_DISK_ERR);
|
||||||
fp->flag &= ~FA__DIRTY;
|
fp->flag &= ~FA__DIRTY;
|
||||||
@ -2848,7 +2833,7 @@ FRESULT f_sync (
|
|||||||
dir[DIR_Attr] |= AM_ARC; /* Set archive bit */
|
dir[DIR_Attr] |= AM_ARC; /* Set archive bit */
|
||||||
ST_DWORD(dir + DIR_FileSize, fp->fsize); /* Update file size */
|
ST_DWORD(dir + DIR_FileSize, fp->fsize); /* Update file size */
|
||||||
st_clust(dir, fp->sclust); /* Update start cluster */
|
st_clust(dir, fp->sclust); /* Update start cluster */
|
||||||
tm = GET_FATTIME(); /* Update updated time */
|
tm = GET_FATTIME(); /* Update modified time */
|
||||||
ST_DWORD(dir + DIR_WrtTime, tm);
|
ST_DWORD(dir + DIR_WrtTime, tm);
|
||||||
ST_WORD(dir + DIR_LstAccDate, 0);
|
ST_WORD(dir + DIR_LstAccDate, 0);
|
||||||
fp->flag &= ~FA__WRITTEN;
|
fp->flag &= ~FA__WRITTEN;
|
||||||
@ -3425,7 +3410,7 @@ FRESULT f_getfree (
|
|||||||
{
|
{
|
||||||
FRESULT res;
|
FRESULT res;
|
||||||
FATFS *fs;
|
FATFS *fs;
|
||||||
DWORD n, clst, sect, stat;
|
DWORD nfree, clst, sect, stat;
|
||||||
UINT i;
|
UINT i;
|
||||||
BYTE fat, *p;
|
BYTE fat, *p;
|
||||||
|
|
||||||
@ -3440,18 +3425,17 @@ FRESULT f_getfree (
|
|||||||
} else {
|
} else {
|
||||||
/* Get number of free clusters */
|
/* Get number of free clusters */
|
||||||
fat = fs->fs_type;
|
fat = fs->fs_type;
|
||||||
n = 0;
|
nfree = 0;
|
||||||
if (fat == FS_FAT12) {
|
if (fat == FS_FAT12) { /* Sector unalighed entries: Search FAT via regular routine. */
|
||||||
clst = 2;
|
clst = 2;
|
||||||
do {
|
do {
|
||||||
stat = get_fat(fs, clst);
|
stat = get_fat(fs, clst);
|
||||||
if (stat == 0xFFFFFFFF) { res = FR_DISK_ERR; break; }
|
if (stat == 0xFFFFFFFF) { res = FR_DISK_ERR; break; }
|
||||||
if (stat == 1) { res = FR_INT_ERR; break; }
|
if (stat == 1) { res = FR_INT_ERR; break; }
|
||||||
if (stat == 0) n++;
|
if (stat == 0) nfree++;
|
||||||
} while (++clst < fs->n_fatent);
|
} while (++clst < fs->n_fatent);
|
||||||
} else {
|
} else { /* Sector alighed entries: Accelerate the FAT search. */
|
||||||
clst = fs->n_fatent;
|
clst = fs->n_fatent; sect = fs->fatbase;
|
||||||
sect = fs->fatbase;
|
|
||||||
i = 0; p = 0;
|
i = 0; p = 0;
|
||||||
do {
|
do {
|
||||||
if (!i) {
|
if (!i) {
|
||||||
@ -3461,17 +3445,17 @@ FRESULT f_getfree (
|
|||||||
i = SS(fs);
|
i = SS(fs);
|
||||||
}
|
}
|
||||||
if (fat == FS_FAT16) {
|
if (fat == FS_FAT16) {
|
||||||
if (LD_WORD(p) == 0) n++;
|
if (LD_WORD(p) == 0) nfree++;
|
||||||
p += 2; i -= 2;
|
p += 2; i -= 2;
|
||||||
} else {
|
} else {
|
||||||
if ((LD_DWORD(p) & 0x0FFFFFFF) == 0) n++;
|
if ((LD_DWORD(p) & 0x0FFFFFFF) == 0) nfree++;
|
||||||
p += 4; i -= 4;
|
p += 4; i -= 4;
|
||||||
}
|
}
|
||||||
} while (--clst);
|
} while (--clst);
|
||||||
}
|
}
|
||||||
fs->free_clust = n;
|
fs->free_clust = nfree; /* free_clust is valid */
|
||||||
fs->fsi_flag |= 1;
|
fs->fsi_flag |= 1; /* FSInfo is to be updated */
|
||||||
*nclst = n;
|
*nclst = nfree; /* Return the free clusters */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
LEAVE_FF(fs, res);
|
LEAVE_FF(fs, res);
|
||||||
@ -3695,8 +3679,7 @@ FRESULT f_chmod (
|
|||||||
DEFINE_NAMEBUF;
|
DEFINE_NAMEBUF;
|
||||||
|
|
||||||
|
|
||||||
/* Get logical drive number */
|
res = find_volume(&dj.fs, &path, 1); /* Get logical drive number */
|
||||||
res = find_volume(&dj.fs, &path, 1);
|
|
||||||
if (res == FR_OK) {
|
if (res == FR_OK) {
|
||||||
INIT_BUF(dj);
|
INIT_BUF(dj);
|
||||||
res = follow_path(&dj, path); /* Follow the file path */
|
res = follow_path(&dj, path); /* Follow the file path */
|
||||||
@ -4263,7 +4246,7 @@ FRESULT f_mkfs (
|
|||||||
ST_WORD(tbl + BS_55AA, 0xAA55); /* Signature (Offset is fixed here regardless of sector size) */
|
ST_WORD(tbl + BS_55AA, 0xAA55); /* Signature (Offset is fixed here regardless of sector size) */
|
||||||
if (disk_write(pdrv, tbl, b_vol, 1) != RES_OK) /* Write it to the VBR sector */
|
if (disk_write(pdrv, tbl, b_vol, 1) != RES_OK) /* Write it to the VBR sector */
|
||||||
return FR_DISK_ERR;
|
return FR_DISK_ERR;
|
||||||
if (fmt == FS_FAT32) /* Write backup VBR if needed (VBR + 6) */
|
if (fmt == FS_FAT32) /* Write it to the backup VBR if needed (VBR + 6) */
|
||||||
disk_write(pdrv, tbl, b_vol + 6, 1);
|
disk_write(pdrv, tbl, b_vol + 6, 1);
|
||||||
|
|
||||||
/* Initialize FAT area */
|
/* Initialize FAT area */
|
||||||
|
6
source/fatfs/ff.h
Normal file → Executable file
6
source/fatfs/ff.h
Normal file → Executable file
@ -1,5 +1,5 @@
|
|||||||
/*---------------------------------------------------------------------------/
|
/*---------------------------------------------------------------------------/
|
||||||
/ FatFs - FAT file system module include R0.11 (C)ChaN, 2015
|
/ FatFs - FAT file system module include R0.11a (C)ChaN, 2015
|
||||||
/----------------------------------------------------------------------------/
|
/----------------------------------------------------------------------------/
|
||||||
/ FatFs module is a free software that opened under license policy of
|
/ FatFs module is a free software that opened under license policy of
|
||||||
/ following conditions.
|
/ following conditions.
|
||||||
@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
|
|
||||||
#ifndef _FATFS
|
#ifndef _FATFS
|
||||||
#define _FATFS 32020 /* Revision ID */
|
#define _FATFS 64180 /* Revision ID */
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
@ -200,7 +200,7 @@ typedef enum {
|
|||||||
FR_TIMEOUT, /* (15) Could not get a grant to access the volume within defined period */
|
FR_TIMEOUT, /* (15) Could not get a grant to access the volume within defined period */
|
||||||
FR_LOCKED, /* (16) The operation is rejected according to the file sharing policy */
|
FR_LOCKED, /* (16) The operation is rejected according to the file sharing policy */
|
||||||
FR_NOT_ENOUGH_CORE, /* (17) LFN working buffer could not be allocated */
|
FR_NOT_ENOUGH_CORE, /* (17) LFN working buffer could not be allocated */
|
||||||
FR_TOO_MANY_OPEN_FILES, /* (18) Number of open files > _FS_SHARE */
|
FR_TOO_MANY_OPEN_FILES, /* (18) Number of open files > _FS_LOCK */
|
||||||
FR_INVALID_PARAMETER /* (19) Given parameter is invalid */
|
FR_INVALID_PARAMETER /* (19) Given parameter is invalid */
|
||||||
} FRESULT;
|
} FRESULT;
|
||||||
|
|
||||||
|
45
source/fatfs/ffconf.h
Normal file → Executable file
45
source/fatfs/ffconf.h
Normal file → Executable file
@ -1,21 +1,13 @@
|
|||||||
/*---------------------------------------------------------------------------/
|
/*---------------------------------------------------------------------------/
|
||||||
/ FatFs - FAT file system module configuration file R0.11 (C)ChaN, 2015
|
/ FatFs - FAT file system module configuration file R0.11a (C)ChaN, 2015
|
||||||
/---------------------------------------------------------------------------*/
|
/---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#define _FFCONF 32020 /* Revision ID */
|
#define _FFCONF 64180 /* Revision ID */
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------/
|
/*---------------------------------------------------------------------------/
|
||||||
/ Functions and Buffer Configurations
|
/ Function Configurations
|
||||||
/---------------------------------------------------------------------------*/
|
/---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#define _FS_TINY 0
|
|
||||||
/* This option switches tiny buffer configuration. (0:Normal or 1:Tiny)
|
|
||||||
/ At the tiny configuration, size of the file object (FIL) is reduced _MAX_SS
|
|
||||||
/ bytes. Instead of private sector buffer eliminated from the file object,
|
|
||||||
/ common sector buffer in the file system object (FATFS) is used for the file
|
|
||||||
/ data transfer. */
|
|
||||||
|
|
||||||
|
|
||||||
#define _FS_READONLY 0
|
#define _FS_READONLY 0
|
||||||
/* This option switches read-only configuration. (0:Read/Write or 1:Read-only)
|
/* This option switches read-only configuration. (0:Read/Write or 1:Read-only)
|
||||||
/ Read-only configuration removes writing API functions, f_write(), f_sync(),
|
/ Read-only configuration removes writing API functions, f_write(), f_sync(),
|
||||||
@ -77,19 +69,24 @@
|
|||||||
/ 437 - U.S.
|
/ 437 - U.S.
|
||||||
/ 720 - Arabic
|
/ 720 - Arabic
|
||||||
/ 737 - Greek
|
/ 737 - Greek
|
||||||
|
/ 771 - KBL
|
||||||
/ 775 - Baltic
|
/ 775 - Baltic
|
||||||
/ 850 - Multilingual Latin 1
|
/ 850 - Latin 1
|
||||||
/ 852 - Latin 2
|
/ 852 - Latin 2
|
||||||
/ 855 - Cyrillic
|
/ 855 - Cyrillic
|
||||||
/ 857 - Turkish
|
/ 857 - Turkish
|
||||||
/ 858 - Multilingual Latin 1 + Euro
|
/ 860 - Portuguese
|
||||||
|
/ 861 - Icelandic
|
||||||
/ 862 - Hebrew
|
/ 862 - Hebrew
|
||||||
|
/ 863 - Canadian French
|
||||||
|
/ 864 - Arabic
|
||||||
|
/ 865 - Nordic
|
||||||
/ 866 - Russian
|
/ 866 - Russian
|
||||||
/ 874 - Thai
|
/ 869 - Greek 2
|
||||||
/ 932 - Japanese Shift_JIS (DBCS)
|
/ 932 - Japanese (DBCS)
|
||||||
/ 936 - Simplified Chinese GBK (DBCS)
|
/ 936 - Simplified Chinese (DBCS)
|
||||||
/ 949 - Korean (DBCS)
|
/ 949 - Korean (DBCS)
|
||||||
/ 950 - Traditional Chinese Big5 (DBCS)
|
/ 950 - Traditional Chinese (DBCS)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
@ -115,7 +112,7 @@
|
|||||||
/ to 1. This option also affects behavior of string I/O functions. */
|
/ to 1. This option also affects behavior of string I/O functions. */
|
||||||
|
|
||||||
|
|
||||||
#define _STRF_ENCODE 0
|
#define _STRF_ENCODE 3
|
||||||
/* When _LFN_UNICODE is 1, this option selects the character encoding on the file to
|
/* When _LFN_UNICODE is 1, this option selects the character encoding on the file to
|
||||||
/ be read/written via string I/O functions, f_gets(), f_putc(), f_puts and f_printf().
|
/ be read/written via string I/O functions, f_gets(), f_putc(), f_puts and f_printf().
|
||||||
/
|
/
|
||||||
@ -195,8 +192,16 @@
|
|||||||
/ System Configurations
|
/ System Configurations
|
||||||
/---------------------------------------------------------------------------*/
|
/---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#define _FS_TINY 0
|
||||||
|
/* This option switches tiny buffer configuration. (0:Normal or 1:Tiny)
|
||||||
|
/ At the tiny configuration, size of the file object (FIL) is reduced _MAX_SS
|
||||||
|
/ bytes. Instead of private sector buffer eliminated from the file object,
|
||||||
|
/ common sector buffer in the file system object (FATFS) is used for the file
|
||||||
|
/ data transfer. */
|
||||||
|
|
||||||
|
|
||||||
#define _FS_NORTC 1
|
#define _FS_NORTC 1
|
||||||
#define _NORTC_MON 2
|
#define _NORTC_MON 1
|
||||||
#define _NORTC_MDAY 1
|
#define _NORTC_MDAY 1
|
||||||
#define _NORTC_YEAR 2015
|
#define _NORTC_YEAR 2015
|
||||||
/* The _FS_NORTC option switches timestamp feature. If the system does not have
|
/* The _FS_NORTC option switches timestamp feature. If the system does not have
|
||||||
@ -253,7 +258,7 @@
|
|||||||
/ * Byte order on the memory is little-endian.
|
/ * Byte order on the memory is little-endian.
|
||||||
/
|
/
|
||||||
/ If it is the case, _WORD_ACCESS can also be set to 1 to reduce code size.
|
/ If it is the case, _WORD_ACCESS can also be set to 1 to reduce code size.
|
||||||
/ Following table shows allowable settings of some processor types.
|
/ Following table shows allowable settings of some type of processors.
|
||||||
/
|
/
|
||||||
/ ARM7TDMI 0 *2 ColdFire 0 *1 V850E 0 *2
|
/ ARM7TDMI 0 *2 ColdFire 0 *1 V850E 0 *2
|
||||||
/ Cortex-M3 0 *3 Z80 0/1 V850ES 0/1
|
/ Cortex-M3 0 *3 Z80 0/1 V850ES 0/1
|
||||||
|
348
source/fatfs/option/ccsbcs.c
Executable file
348
source/fatfs/option/ccsbcs.c
Executable file
@ -0,0 +1,348 @@
|
|||||||
|
/*------------------------------------------------------------------------*/
|
||||||
|
/* Unicode - Local code bidirectional converter (C)ChaN, 2015 */
|
||||||
|
/* (SBCS code pages) */
|
||||||
|
/*------------------------------------------------------------------------*/
|
||||||
|
/* 437 U.S.
|
||||||
|
/ 720 Arabic
|
||||||
|
/ 737 Greek
|
||||||
|
/ 771 KBL
|
||||||
|
/ 775 Baltic
|
||||||
|
/ 850 Latin 1
|
||||||
|
/ 852 Latin 2
|
||||||
|
/ 855 Cyrillic
|
||||||
|
/ 857 Turkish
|
||||||
|
/ 860 Portuguese
|
||||||
|
/ 861 Icelandic
|
||||||
|
/ 862 Hebrew
|
||||||
|
/ 863 Canadian French
|
||||||
|
/ 864 Arabic
|
||||||
|
/ 865 Nordic
|
||||||
|
/ 866 Russian
|
||||||
|
/ 869 Greek 2
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "../ff.h"
|
||||||
|
|
||||||
|
|
||||||
|
#if _CODE_PAGE == 437
|
||||||
|
#define _TBLDEF 1
|
||||||
|
static
|
||||||
|
const WCHAR Tbl[] = { /* CP437(0x80-0xFF) to Unicode conversion table */
|
||||||
|
0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x00C4, 0x00C5,
|
||||||
|
0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9, 0x00FF, 0x00D6, 0x00DC, 0x00A2, 0x00A3, 0x00A5, 0x20A7, 0x0192,
|
||||||
|
0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, 0x00BF, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB,
|
||||||
|
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510,
|
||||||
|
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
|
||||||
|
0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
|
||||||
|
0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229,
|
||||||
|
0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0
|
||||||
|
};
|
||||||
|
|
||||||
|
#elif _CODE_PAGE == 720
|
||||||
|
#define _TBLDEF 1
|
||||||
|
static
|
||||||
|
const WCHAR Tbl[] = { /* CP720(0x80-0xFF) to Unicode conversion table */
|
||||||
|
0x0000, 0x0000, 0x00E9, 0x00E2, 0x0000, 0x00E0, 0x0000, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x0000, 0x0000, 0x0000,
|
||||||
|
0x0000, 0x0651, 0x0652, 0x00F4, 0x00A4, 0x0640, 0x00FB, 0x00F9, 0x0621, 0x0622, 0x0623, 0x0624, 0x00A3, 0x0625, 0x0626, 0x0627,
|
||||||
|
0x0628, 0x0629, 0x062A, 0x062B, 0x062C, 0x062D, 0x062E, 0x062F, 0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x00AB, 0x00BB,
|
||||||
|
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510,
|
||||||
|
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
|
||||||
|
0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
|
||||||
|
0x0636, 0x0637, 0x0638, 0x0639, 0x063A, 0x0641, 0x00B5, 0x0642, 0x0643, 0x0644, 0x0645, 0x0646, 0x0647, 0x0648, 0x0649, 0x064A,
|
||||||
|
0x2261, 0x064B, 0x064C, 0x064D, 0x064E, 0x064F, 0x0650, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0
|
||||||
|
};
|
||||||
|
|
||||||
|
#elif _CODE_PAGE == 737
|
||||||
|
#define _TBLDEF 1
|
||||||
|
static
|
||||||
|
const WCHAR Tbl[] = { /* CP737(0x80-0xFF) to Unicode conversion table */
|
||||||
|
0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F, 0x03A0,
|
||||||
|
0x03A1, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8, 0x03A9, 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, 0x03B8,
|
||||||
|
0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF, 0x03C0, 0x03C1, 0x03C3, 0x03C2, 0x03C4, 0x03C5, 0x03C6, 0x03C7, 0x03C8,
|
||||||
|
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510,
|
||||||
|
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
|
||||||
|
0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
|
||||||
|
0x03C9, 0x03AC, 0x03AD, 0x03AE, 0x03CA, 0x03AF, 0x03CC, 0x03CD, 0x03CB, 0x03CE, 0x0386, 0x0388, 0x0389, 0x038A, 0x038C, 0x038E,
|
||||||
|
0x038F, 0x00B1, 0x2265, 0x2264, 0x03AA, 0x03AB, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0
|
||||||
|
};
|
||||||
|
|
||||||
|
#elif _CODE_PAGE == 771
|
||||||
|
#define _TBLDEF 1
|
||||||
|
static
|
||||||
|
const WCHAR Tbl[] = { /* CP771(0x80-0xFF) to Unicode conversion table */
|
||||||
|
0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F,
|
||||||
|
0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F,
|
||||||
|
0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F,
|
||||||
|
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x2558, 0x2510,
|
||||||
|
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
|
||||||
|
0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x0104, 0x0105, 0x010C, 0x010D,
|
||||||
|
0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F,
|
||||||
|
0x0118, 0x0119, 0x0116, 0x0117, 0x012E, 0x012F, 0x0160, 0x0161, 0x0172, 0x0173, 0x016A, 0x016B, 0x017D, 0x017E, 0x25A0, 0x00A0
|
||||||
|
};
|
||||||
|
|
||||||
|
#elif _CODE_PAGE == 775
|
||||||
|
#define _TBLDEF 1
|
||||||
|
static
|
||||||
|
const WCHAR Tbl[] = { /* CP775(0x80-0xFF) to Unicode conversion table */
|
||||||
|
0x0106, 0x00FC, 0x00E9, 0x0101, 0x00E4, 0x0123, 0x00E5, 0x0107, 0x0142, 0x0113, 0x0156, 0x0157, 0x012B, 0x0179, 0x00C4, 0x00C5,
|
||||||
|
0x00C9, 0x00E6, 0x00C6, 0x014D, 0x00F6, 0x0122, 0x00A2, 0x015A, 0x015B, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x00D7, 0x00A4,
|
||||||
|
0x0100, 0x012A, 0x00F3, 0x017B, 0x017C, 0x017A, 0x201D, 0x00A6, 0x00A9, 0x00AE, 0x00AC, 0x00BD, 0x00BC, 0x0141, 0x00AB, 0x00BB,
|
||||||
|
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x0104, 0x010C, 0x0118, 0x0116, 0x2563, 0x2551, 0x2557, 0x255D, 0x012E, 0x0160, 0x2510,
|
||||||
|
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x0172, 0x016A, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x017D,
|
||||||
|
0x0105, 0x010D, 0x0119, 0x0117, 0x012F, 0x0161, 0x0173, 0x016B, 0x017E, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
|
||||||
|
0x00D3, 0x00DF, 0x014C, 0x0143, 0x00F5, 0x00D5, 0x00B5, 0x0144, 0x0136, 0x0137, 0x013B, 0x013C, 0x0146, 0x0112, 0x0145, 0x2019,
|
||||||
|
0x00AD, 0x00B1, 0x201C, 0x00BE, 0x00B6, 0x00A7, 0x00F7, 0x201E, 0x00B0, 0x2219, 0x00B7, 0x00B9, 0x00B3, 0x00B2, 0x25A0, 0x00A0
|
||||||
|
};
|
||||||
|
|
||||||
|
#elif _CODE_PAGE == 850
|
||||||
|
#define _TBLDEF 1
|
||||||
|
static
|
||||||
|
const WCHAR Tbl[] = { /* CP850(0x80-0xFF) to Unicode conversion table */
|
||||||
|
0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x00C4, 0x00C5,
|
||||||
|
0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9, 0x00FF, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x00D7, 0x0192,
|
||||||
|
0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, 0x00BF, 0x00AE, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB,
|
||||||
|
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00C1, 0x00C2, 0x00C0, 0x00A9, 0x2563, 0x2551, 0x2557, 0x255D, 0x00A2, 0x00A5, 0x2510,
|
||||||
|
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x00E3, 0x00C3, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x00A4,
|
||||||
|
0x00F0, 0x00D0, 0x00CA, 0x00CB, 0x00C8, 0x0131, 0x00CD, 0x00CE, 0x00CF, 0x2518, 0x250C, 0x2588, 0x2584, 0x00A6, 0x00CC, 0x2580,
|
||||||
|
0x00D3, 0x00DF, 0x00D4, 0x00D2, 0x00F5, 0x00D5, 0x00B5, 0x00FE, 0x00DE, 0x00DA, 0x00DB, 0x00D9, 0x00FD, 0x00DD, 0x00AF, 0x00B4,
|
||||||
|
0x00AD, 0x00B1, 0x2017, 0x00BE, 0x00B6, 0x00A7, 0x00F7, 0x00B8, 0x00B0, 0x00A8, 0x00B7, 0x00B9, 0x00B3, 0x00B2, 0x25A0, 0x00A0
|
||||||
|
};
|
||||||
|
|
||||||
|
#elif _CODE_PAGE == 852
|
||||||
|
#define _TBLDEF 1
|
||||||
|
static
|
||||||
|
const WCHAR Tbl[] = { /* CP852(0x80-0xFF) to Unicode conversion table */
|
||||||
|
0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x016F, 0x0107, 0x00E7, 0x0142, 0x00EB, 0x0150, 0x0151, 0x00EE, 0x0179, 0x00C4, 0x0106,
|
||||||
|
0x00C9, 0x0139, 0x013A, 0x00F4, 0x00F6, 0x013D, 0x013E, 0x015A, 0x015B, 0x00D6, 0x00DC, 0x0164, 0x0165, 0x0141, 0x00D7, 0x010D,
|
||||||
|
0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x0104, 0x0105, 0x017D, 0x017E, 0x0118, 0x0119, 0x00AC, 0x017A, 0x010C, 0x015F, 0x00AB, 0x00BB,
|
||||||
|
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00C1, 0x00C2, 0x011A, 0x015E, 0x2563, 0x2551, 0x2557, 0x255D, 0x017B, 0x017C, 0x2510,
|
||||||
|
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x0102, 0x0103, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x00A4,
|
||||||
|
0x0111, 0x0110, 0x010E, 0x00CB, 0x010F, 0x0147, 0x00CD, 0x00CE, 0x011B, 0x2518, 0x250C, 0x2588, 0x2584, 0x0162, 0x016E, 0x2580,
|
||||||
|
0x00D3, 0x00DF, 0x00D4, 0x0143, 0x0144, 0x0148, 0x0160, 0x0161, 0x0154, 0x00DA, 0x0155, 0x0170, 0x00FD, 0x00DD, 0x0163, 0x00B4,
|
||||||
|
0x00AD, 0x02DD, 0x02DB, 0x02C7, 0x02D8, 0x00A7, 0x00F7, 0x00B8, 0x00B0, 0x00A8, 0x02D9, 0x0171, 0x0158, 0x0159, 0x25A0, 0x00A0
|
||||||
|
};
|
||||||
|
|
||||||
|
#elif _CODE_PAGE == 855
|
||||||
|
#define _TBLDEF 1
|
||||||
|
static
|
||||||
|
const WCHAR Tbl[] = { /* CP855(0x80-0xFF) to Unicode conversion table */
|
||||||
|
0x0452, 0x0402, 0x0453, 0x0403, 0x0451, 0x0401, 0x0454, 0x0404, 0x0455, 0x0405, 0x0456, 0x0406, 0x0457, 0x0407, 0x0458, 0x0408,
|
||||||
|
0x0459, 0x0409, 0x045A, 0x040A, 0x045B, 0x040B, 0x045C, 0x040C, 0x045E, 0x040E, 0x045F, 0x040F, 0x044E, 0x042E, 0x044A, 0x042A,
|
||||||
|
0x0430, 0x0410, 0x0431, 0x0411, 0x0446, 0x0426, 0x0434, 0x0414, 0x0435, 0x0415, 0x0444, 0x0424, 0x0433, 0x0413, 0x00AB, 0x00BB,
|
||||||
|
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x0445, 0x0425, 0x0438, 0x0418, 0x2563, 0x2551, 0x2557, 0x255D, 0x0439, 0x0419, 0x2510,
|
||||||
|
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x043A, 0x041A, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x00A4,
|
||||||
|
0x043B, 0x041B, 0x043C, 0x041C, 0x043D, 0x041D, 0x043E, 0x041E, 0x043F, 0x2518, 0x250C, 0x2588, 0x2584, 0x041F, 0x044F, 0x2580,
|
||||||
|
0x042F, 0x0440, 0x0420, 0x0441, 0x0421, 0x0442, 0x0422, 0x0443, 0x0423, 0x0436, 0x0416, 0x0432, 0x0412, 0x044C, 0x042C, 0x2116,
|
||||||
|
0x00AD, 0x044B, 0x042B, 0x0437, 0x0417, 0x0448, 0x0428, 0x044D, 0x042D, 0x0449, 0x0429, 0x0447, 0x0427, 0x00A7, 0x25A0, 0x00A0
|
||||||
|
};
|
||||||
|
|
||||||
|
#elif _CODE_PAGE == 857
|
||||||
|
#define _TBLDEF 1
|
||||||
|
static
|
||||||
|
const WCHAR Tbl[] = { /* CP857(0x80-0xFF) to Unicode conversion table */
|
||||||
|
0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x0131, 0x00C4, 0x00C5,
|
||||||
|
0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9, 0x0130, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x015E, 0x015F,
|
||||||
|
0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x011E, 0x011F, 0x00BF, 0x00AE, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB,
|
||||||
|
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00C1, 0x00C2, 0x00C0, 0x00A9, 0x2563, 0x2551, 0x2557, 0x255D, 0x00A2, 0x00A5, 0x2510,
|
||||||
|
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x00E3, 0x00C3, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x00A4,
|
||||||
|
0x00BA, 0x00AA, 0x00CA, 0x00CB, 0x00C8, 0x0000, 0x00CD, 0x00CE, 0x00CF, 0x2518, 0x250C, 0x2588, 0x2584, 0x00A6, 0x00CC, 0x2580,
|
||||||
|
0x00D3, 0x00DF, 0x00D4, 0x00D2, 0x00F5, 0x00D5, 0x00B5, 0x0000, 0x00D7, 0x00DA, 0x00DB, 0x00D9, 0x00EC, 0x00FF, 0x00AF, 0x00B4,
|
||||||
|
0x00AD, 0x00B1, 0x0000, 0x00BE, 0x00B6, 0x00A7, 0x00F7, 0x00B8, 0x00B0, 0x00A8, 0x00B7, 0x00B9, 0x00B3, 0x00B2, 0x25A0, 0x00A0
|
||||||
|
};
|
||||||
|
|
||||||
|
#elif _CODE_PAGE == 860
|
||||||
|
#define _TBLDEF 1
|
||||||
|
static
|
||||||
|
const WCHAR Tbl[] = { /* CP860(0x80-0xFF) to Unicode conversion table */
|
||||||
|
0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E3, 0x00E0, 0x00C1, 0x00E7, 0x00EA, 0x00CA, 0x00E8, 0x00CD, 0x00D4, 0x00EC, 0x00C3, 0x00C2,
|
||||||
|
0x00C9, 0x00C0, 0x00C8, 0x00F4, 0x00F5, 0x00F2, 0x00DA, 0x00F9, 0x00CC, 0x00D5, 0x00DC, 0x00A2, 0x00A3, 0x00D9, 0x20A7, 0x00D3,
|
||||||
|
0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, 0x00BF, 0x00D2, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB,
|
||||||
|
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x2558, 0x2510,
|
||||||
|
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
|
||||||
|
0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
|
||||||
|
0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229,
|
||||||
|
0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0
|
||||||
|
};
|
||||||
|
|
||||||
|
#elif _CODE_PAGE == 861
|
||||||
|
#define _TBLDEF 1
|
||||||
|
static
|
||||||
|
const WCHAR Tbl[] = { /* CP861(0x80-0xFF) to Unicode conversion table */
|
||||||
|
0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E6, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00D0, 0x00F0, 0x00DE, 0x00C4, 0x00C5,
|
||||||
|
0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00FE, 0x00FB, 0x00DD, 0x00FD, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x20A7, 0x0192,
|
||||||
|
0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00C1, 0x00CD, 0x00D3, 0x00DA, 0x00BF, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB,
|
||||||
|
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510,
|
||||||
|
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
|
||||||
|
0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
|
||||||
|
0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229,
|
||||||
|
0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0
|
||||||
|
};
|
||||||
|
|
||||||
|
#elif _CODE_PAGE == 862
|
||||||
|
#define _TBLDEF 1
|
||||||
|
static
|
||||||
|
const WCHAR Tbl[] = { /* CP862(0x80-0xFF) to Unicode conversion table */
|
||||||
|
0x05D0, 0x05D1, 0x05D2, 0x05D3, 0x05D4, 0x05D5, 0x05D6, 0x05D7, 0x05D8, 0x05D9, 0x05DA, 0x05DB, 0x05DC, 0x05DD, 0x05DE, 0x05DF,
|
||||||
|
0x05E0, 0x05E1, 0x05E2, 0x05E3, 0x05E4, 0x05E5, 0x05E6, 0x05E7, 0x05E8, 0x05E9, 0x05EA, 0x00A2, 0x00A3, 0x00A5, 0x20A7, 0x0192,
|
||||||
|
0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, 0x00BF, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB,
|
||||||
|
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510,
|
||||||
|
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
|
||||||
|
0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
|
||||||
|
0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229,
|
||||||
|
0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0
|
||||||
|
};
|
||||||
|
|
||||||
|
#elif _CODE_PAGE == 863
|
||||||
|
#define _TBLDEF 1
|
||||||
|
static
|
||||||
|
const WCHAR Tbl[] = { /* CP863(0x80-0xFF) to Unicode conversion table */
|
||||||
|
0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00C2, 0x00E0, 0x00B6, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x2017, 0x00C0,
|
||||||
|
0x00C9, 0x00C8, 0x00CA, 0x00F4, 0x00CB, 0x00CF, 0x00FB, 0x00F9, 0x00A4, 0x00D4, 0x00DC, 0x00A2, 0x00A3, 0x00D9, 0x00DB, 0x0192,
|
||||||
|
0x00A6, 0x00B4, 0x00F3, 0x00FA, 0x00A8, 0x00BB, 0x00B3, 0x00AF, 0x00CE, 0x3210, 0x00AC, 0x00BD, 0x00BC, 0x00BE, 0x00AB, 0x00BB,
|
||||||
|
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510,
|
||||||
|
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
|
||||||
|
0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
|
||||||
|
0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2219,
|
||||||
|
0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0
|
||||||
|
};
|
||||||
|
|
||||||
|
#elif _CODE_PAGE == 864
|
||||||
|
#define _TBLDEF 1
|
||||||
|
static
|
||||||
|
const WCHAR Tbl[] = { /* CP864(0x80-0xFF) to Unicode conversion table */
|
||||||
|
0x00B0, 0x00B7, 0x2219, 0x221A, 0x2592, 0x2500, 0x2502, 0x253C, 0x2524, 0x252C, 0x251C, 0x2534, 0x2510, 0x250C, 0x2514, 0x2518,
|
||||||
|
0x03B2, 0x221E, 0x03C6, 0x00B1, 0x00BD, 0x00BC, 0x2248, 0x00AB, 0x00BB, 0xFEF7, 0xFEF8, 0x0000, 0x0000, 0xFEFB, 0xFEFC, 0x0000,
|
||||||
|
0x00A0, 0x00AD, 0xFE82, 0x00A3, 0x00A4, 0xFE84, 0x0000, 0x20AC, 0xFE8E, 0xFE8F, 0xFE95, 0xFE99, 0x060C, 0xFE9D, 0xFEA1, 0xFEA5,
|
||||||
|
0x0660, 0x0661, 0x0662, 0x0663, 0x0664, 0x0665, 0x0666, 0x0667, 0x0668, 0x0669, 0xFED1, 0x061B, 0xFEB1, 0xFEB5, 0xFEB9, 0x061F,
|
||||||
|
0x00A2, 0xFE80, 0xFE81, 0xFE83, 0xFE85, 0xFECA, 0xFE8B, 0xFE8D, 0xFE91, 0xFE93, 0xFE97, 0xFE9B, 0xFE9F, 0xFEA3, 0xFEA7, 0xFEA9,
|
||||||
|
0xFEAB, 0xFEAD, 0xFEAF, 0xFEB3, 0xFEB7, 0xFEBB, 0xFEBF, 0xFEC1, 0xFEC5, 0xFECB, 0xFECF, 0x00A6, 0x00AC, 0x00F7, 0x00D7, 0xFEC9,
|
||||||
|
0x0640, 0xFED3, 0xFED7, 0xFEDB, 0xFEDF, 0xFEE3, 0xFEE7, 0xFEEB, 0xFEED, 0xFEEF, 0xFEF3, 0xFEBD, 0xFECC, 0xFECE, 0xFECD, 0xFEE1,
|
||||||
|
0xFE7D, 0x0651, 0xFEE5, 0xFEE9, 0xFEEC, 0xFEF0, 0xFEF2, 0xFED0, 0xFED5, 0xFEF5, 0xFEF6, 0xFEDD, 0xFED9, 0xFEF1, 0x25A0, 0x0000
|
||||||
|
};
|
||||||
|
|
||||||
|
#elif _CODE_PAGE == 865
|
||||||
|
#define _TBLDEF 1
|
||||||
|
static
|
||||||
|
const WCHAR Tbl[] = { /* CP865(0x80-0xFF) to Unicode conversion table */
|
||||||
|
0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x00C4, 0x00C5,
|
||||||
|
0x00C5, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9, 0x00FF, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x20A7, 0x0192,
|
||||||
|
0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, 0x00BF, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00A4,
|
||||||
|
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x2558, 0x2510,
|
||||||
|
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
|
||||||
|
0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
|
||||||
|
0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229,
|
||||||
|
0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0
|
||||||
|
};
|
||||||
|
|
||||||
|
#elif _CODE_PAGE == 866
|
||||||
|
#define _TBLDEF 1
|
||||||
|
static
|
||||||
|
const WCHAR Tbl[] = { /* CP866(0x80-0xFF) to Unicode conversion table */
|
||||||
|
0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F,
|
||||||
|
0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F,
|
||||||
|
0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F,
|
||||||
|
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510,
|
||||||
|
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
|
||||||
|
0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
|
||||||
|
0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F,
|
||||||
|
0x0401, 0x0451, 0x0404, 0x0454, 0x0407, 0x0457, 0x040E, 0x045E, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x2116, 0x00A4, 0x25A0, 0x00A0
|
||||||
|
};
|
||||||
|
|
||||||
|
#elif _CODE_PAGE == 869
|
||||||
|
#define _TBLDEF 1
|
||||||
|
static
|
||||||
|
const WCHAR Tbl[] = { /* CP869(0x80-0xFF) to Unicode conversion table */
|
||||||
|
0x00B7, 0x00B7, 0x00B7, 0x00B7, 0x00B7, 0x00B7, 0x0386, 0x00B7, 0x00B7, 0x00AC, 0x00A6, 0x2018, 0x2019, 0x0388, 0x2015, 0x0389,
|
||||||
|
0x038A, 0x03AA, 0x038C, 0x00B7, 0x00B7, 0x038E, 0x03AB, 0x00A9, 0x038F, 0x00B2, 0x00B3, 0x03AC, 0x00A3, 0x03AD, 0x03AE, 0x03AF,
|
||||||
|
0x03CA, 0x0390, 0x03CC, 0x03CD, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x00BD, 0x0398, 0x0399, 0x00AB, 0x00BB,
|
||||||
|
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x039A, 0x039B, 0x039C, 0x039D, 0x2563, 0x2551, 0x2557, 0x255D, 0x039E, 0x039F, 0x2510,
|
||||||
|
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x0A30, 0x03A1, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x03A3,
|
||||||
|
0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8, 0x03A9, 0x03B1, 0x03B2, 0x03B3, 0x2518, 0x250C, 0x2588, 0x2584, 0x03B4, 0x03B5, 0x2580,
|
||||||
|
0x03B6, 0x03B7, 0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF, 0x03C0, 0x03C1, 0x03C3, 0x03C2, 0x03C4, 0x0384,
|
||||||
|
0x00AD, 0x00B1, 0x03C5, 0x03C6, 0x03C7, 0x00A7, 0x03C8, 0x0385, 0x00B0, 0x00A8, 0x03C9, 0x03CB, 0x03B0, 0x03CE, 0x25A0, 0x00A0
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if !_TBLDEF || !_USE_LFN
|
||||||
|
#error This file is not needed at current configuration. Remove from the project.
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
WCHAR ff_convert ( /* Converted character, Returns zero on error */
|
||||||
|
WCHAR chr, /* Character code to be converted */
|
||||||
|
UINT dir /* 0: Unicode to OEM code, 1: OEM code to Unicode */
|
||||||
|
)
|
||||||
|
{
|
||||||
|
WCHAR c;
|
||||||
|
|
||||||
|
|
||||||
|
if (chr < 0x80) { /* ASCII */
|
||||||
|
c = chr;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
if (dir) { /* OEM code to Unicode */
|
||||||
|
c = (chr >= 0x100) ? 0 : Tbl[chr - 0x80];
|
||||||
|
|
||||||
|
} else { /* Unicode to OEM code */
|
||||||
|
for (c = 0; c < 0x80; c++) {
|
||||||
|
if (chr == Tbl[c]) break;
|
||||||
|
}
|
||||||
|
c = (c + 0x80) & 0xFF;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
WCHAR ff_wtoupper ( /* Returns upper converted character */
|
||||||
|
WCHAR chr /* Unicode character to be upper converted */
|
||||||
|
)
|
||||||
|
{
|
||||||
|
static const WCHAR lower[] = { /* Lower case characters to be converted */
|
||||||
|
/* Latin Supplement */ 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF,
|
||||||
|
/* Latin Extended-A */ 0x101,0x103,0x105,0x107,0x109,0x10B,0x10D,0x10F,0x111,0x113,0x115,0x117,0x119,0x11B,0x11D,0x11F,0x121,0x123,0x125,0x127,0x129,0x12B,0x12D,0x12F,0x131,0x133,0x135,0x137,0x13A,0x13C,0x13E,0x140,0x142,0x144,0x146,0x148,0x14B,0x14D,0x14F,0x151,0x153,0x155,0x157,0x159,0x15B,0x15D,0x15F,0x161,0x163,0x165,0x167,0x169,0x16B,0x16D,0x16F,0x171,0x173,0x175,0x177,0x17A,0x17C,0x17E,
|
||||||
|
/* Latin Extended-B */ 0x183,0x185,0x188,0x18C,0x192,0x199,0x1A1,0x1A3,0x1A8,0x1AD,0x1B0,0x1B4,0x1B6,0x1B9,0x1BD,0x1C6,0x1C9,0x1CC,0x1CE,0x1D0,0x1D2,0x1D4,0x1D6,0x1D8,0x1DA,0x1DC,0x1DD,0x1DF,0x1E1,0x1E3,0x1E5,0x1E7,0x1E9,0x1EB,0x1ED,0x1EF,0x1F3,0x1F5,0x1FB,0x1FD,0x1FF,0x201,0x203,0x205,0x207,0x209,0x20B,0x20D,0x20F,0x211,0x213,0x215,0x217,
|
||||||
|
/* Greek, Coptic */ 0x3B1,0x3B2,0x3B3,0x3B4,0x3B5,0x3B6,0x3B7,0x3B8,0x3B9,0x3BA,0x3BB,0x3BC,0x3BD,0x3BE,0x3BF,0x3C0,0x3C1,0x3C3,0x3C4,0x3C5,0x3C6,0x3C7,0x3C8,0x3C9,0x3CA,0x3CB,0x3CC,0x3CD,0x3CE,0x3E3,0x3E5,0x3E7,0x3E9,0x3EB,
|
||||||
|
/* Cyrillic */ 0x430,0x431,0x432,0x433,0x434,0x435,0x436,0x437,0x438,0x439,0x43A,0x43B,0x43C,0x43D,0x43E,0x43F,0x440,0x441,0x442,0x443,0x444,0x445,0x446,0x447,0x448,0x449,0x44A,0x44B,0x44C,0x44D,0x44E,0x44F,0x452,0x453,0x454,0x455,0x456,0x457,0x458,0x459,0x45A,0x45B,0x45C,0x45E,0x45F,0x461,0x463,0x465,0x467,0x469,0x46B,0x46D,0x46F,0x471,0x473,0x475,0x477,0x479,0x47B,0x47D,0x47F,0x481,0x491,0x493,0x495,0x497,0x499,0x49B,0x49D,0x49F,0x4A1,0x4A3,0x4A5,0x4A7,0x4A9,0x4AB,0x4AD,0x4AF,0x4B1,0x4B3,0x4B5,0x4B7,0x4B9,0x4BB,0x4BD,0x4BF,0x4C2,0x4C4,0x4C8,0x4D1,0x4D3,0x4D5,0x4D7,0x4D9,0x4DB,0x4DD,0x4DF,0x4E1,0x4E3,0x4E5,0x4E7,0x4E9,0x4EB,0x4ED,0x4EF,0x4F1,0x4F3,0x4F5,0x4F9,
|
||||||
|
/* Armenian */ 0x561,0x562,0x563,0x564,0x565,0x566,0x567,0x568,0x569,0x56A,0x56B,0x56C,0x56D,0x56E,0x56F,0x570,0x571,0x572,0x573,0x574,0x575,0x576,0x577,0x578,0x579,0x57A,0x57B,0x57C,0x57D,0x57E,0x57F,0x580,0x581,0x582,0x583,0x584,0x585,0x586,
|
||||||
|
/* Latin Extended Additional */ 0x1E01,0x1E03,0x1E05,0x1E07,0x1E09,0x1E0B,0x1E0D,0x1E0F,0x1E11,0x1E13,0x1E15,0x1E17,0x1E19,0x1E1B,0x1E1D,0x1E1F,0x1E21,0x1E23,0x1E25,0x1E27,0x1E29,0x1E2B,0x1E2D,0x1E2F,0x1E31,0x1E33,0x1E35,0x1E37,0x1E39,0x1E3B,0x1E3D,0x1E3F,0x1E41,0x1E43,0x1E45,0x1E47,0x1E49,0x1E4B,0x1E4D,0x1E4F,0x1E51,0x1E53,0x1E55,0x1E57,0x1E59,0x1E5B,0x1E5D,0x1E5F,0x1E61,0x1E63,0x1E65,0x1E67,0x1E69,0x1E6B,0x1E6D,0x1E6F,0x1E71,0x1E73,0x1E75,0x1E77,0x1E79,0x1E7B,0x1E7D,0x1E7F,0x1E81,0x1E83,0x1E85,0x1E87,0x1E89,0x1E8B,0x1E8D,0x1E8F,0x1E91,0x1E93,0x1E95,0x1E97,0x1E99,0x1E9B,0x1E9D,0x1E9F,0x1EA1,0x1EA3,0x1EA5,0x1EA7,0x1EA9,0x1EAB,0x1EAD,0x1EAF,0x1EB1,0x1EB3,0x1EB5,0x1EB7,0x1EB9,0x1EBB,0x1EBD,0x1EBF,0x1EC1,0x1EC3,0x1EC5,0x1EC7,0x1EC9,0x1ECB,0x1ECD,0x1ECF,0x1ED1,0x1ED3,0x1ED5,0x1ED7,0x1ED9,0x1EDB,0x1EDD,0x1EDF,0x1EE1,0x1EE3,0x1EE5,0x1EE7,0x1EE9,0x1EEB,0x1EED,0x1EEF,0x1EF1,0x1EF3,0x1EF5,0x1EF7,0x1EF9,
|
||||||
|
/* Number forms */ 0x2170,0x2171,0x2172,0x2173,0x2174,0x2175,0x2176,0x2177,0x2178,0x2179,0x217A,0x217B,0x217C,0x217D,0x217E,0x217F,
|
||||||
|
/* Full-width */ 0xFF41,0xFF42,0xFF43,0xFF44,0xFF45,0xFF46,0xFF47,0xFF48,0xFF49,0xFF4A,0xFF4B,0xFF4C,0xFF4D,0xFF4E,0xFF4F,0xFF50,0xFF51,0xFF52,0xFF53,0xFF54,0xFF55,0xFF56,0xFF57,0xFF58,0xFF59,0xFF5A
|
||||||
|
};
|
||||||
|
static const WCHAR upper[] = { /* Upper case characters correspond to lower[] */
|
||||||
|
0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0x178,
|
||||||
|
0x100,0x102,0x104,0x106,0x108,0x10A,0x10C,0x10E,0x110,0x112,0x114,0x116,0x118,0x11A,0x11C,0x11E,0x120,0x122,0x124,0x126,0x128,0x12A,0x12C,0x12E,0x130,0x132,0x134,0x136,0x139,0x13B,0x13D,0x13F,0x141,0x143,0x145,0x147,0x14A,0x14C,0x14E,0x150,0x152,0x154,0x156,0x158,0x15A,0x15C,0x15E,0x160,0x162,0x164,0x166,0x168,0x16A,0x16C,0x16E,0x170,0x172,0x174,0x176,0x179,0x17B,0x17D,
|
||||||
|
0x182,0x184,0x187,0x18B,0x191,0x198,0x1A0,0x1A2,0x1A7,0x1AC,0x1AF,0x1B3,0x1B5,0x1B8,0x1BC,0x1C4,0x1C7,0x1CA,0x1CD,0x1CF,0x1D1,0x1D3,0x1D5,0x1D7,0x1D9,0x1DB,0x18E,0x1DE,0x1E0,0x1E2,0x1E4,0x1E6,0x1E8,0x1EA,0x1EC,0x1EE,0x1F1,0x1F4,0x1FA,0x1FC,0x1FE,0x200,0x202,0x204,0x206,0x208,0x20A,0x20C,0x20E,0x210,0x212,0x214,0x216,
|
||||||
|
0x391,0x392,0x393,0x394,0x395,0x396,0x397,0x398,0x399,0x39A,0x39B,0x39C,0x39D,0x39E,0x39F,0x3A0,0x3A1,0x3A3,0x3A4,0x3A5,0x3A6,0x3A7,0x3A8,0x3A9,0x3AA,0x3AB,0x38C,0x38E,0x38F,0x3E2,0x3E4,0x3E6,0x3E8,0x3EA,
|
||||||
|
0x410,0x411,0x412,0x413,0x414,0x415,0x416,0x417,0x418,0x419,0x41A,0x41B,0x41C,0x41D,0x41E,0x41F,0x420,0x421,0x422,0x423,0x424,0x425,0x426,0x427,0x428,0x429,0x42A,0x42B,0x42C,0x42D,0x42E,0x42F,0x402,0x403,0x404,0x405,0x406,0x407,0x408,0x409,0x40A,0x40B,0x40C,0x40E,0x40F,0x460,0x462,0x464,0x466,0x468,0x46A,0x46C,0x46E,0x470,0x472,0x474,0x476,0x478,0x47A,0x47C,0x47E,0x480,0x490,0x492,0x494,0x496,0x498,0x49A,0x49C,0x49E,0x4A0,0x4A2,0x4A4,0x4A6,0x4A8,0x4AA,0x4AC,0x4AE,0x4B0,0x4B2,0x4B4,0x4B6,0x4B8,0x4BA,0x4BC,0x4BE,0x4C1,0x4C3,0x5C7,0x4D0,0x4D2,0x4D4,0x4D6,0x4D8,0x4DA,0x4DC,0x4DE,0x4E0,0x4E2,0x4E4,0x4E6,0x4E8,0x4EA,0x4EC,0x4EE,0x4F0,0x4F2,0x4F4,0x4F8,
|
||||||
|
0x531,0x532,0x533,0x534,0x535,0x536,0x537,0x538,0x539,0x53A,0x53B,0x53C,0x53D,0x53E,0x53F,0x540,0x541,0x542,0x543,0x544,0x545,0x546,0x547,0x548,0x549,0x54A,0x54B,0x54C,0x54D,0x54E,0x54F,0x550,0x551,0x552,0x553,0x554,0x555,0x556,
|
||||||
|
0x1E00,0x1E02,0x1E04,0x1E06,0x1E08,0x1E0A,0x1E0C,0x1E0E,0x1E10,0x1E12,0x1E14,0x1E16,0x1E18,0x1E1A,0x1E1C,0x1E1E,0x1E20,0x1E22,0x1E24,0x1E26,0x1E28,0x1E2A,0x1E2C,0x1E2E,0x1E30,0x1E32,0x1E34,0x1E36,0x1E38,0x1E3A,0x1E3C,0x1E3E,0x1E40,0x1E42,0x1E44,0x1E46,0x1E48,0x1E4A,0x1E4C,0x1E4E,0x1E50,0x1E52,0x1E54,0x1E56,0x1E58,0x1E5A,0x1E5C,0x1E5E,0x1E60,0x1E62,0x1E64,0x1E66,0x1E68,0x1E6A,0x1E6C,0x1E6E,0x1E70,0x1E72,0x1E74,0x1E76,0x1E78,0x1E7A,0x1E7C,0x1E7E,0x1E80,0x1E82,0x1E84,0x1E86,0x1E88,0x1E8A,0x1E8C,0x1E8E,0x1E90,0x1E92,0x1E94,0x1E96,0x1E98,0x1E9A,0x1E9C,0x1E9E,0x1EA0,0x1EA2,0x1EA4,0x1EA6,0x1EA8,0x1EAA,0x1EAC,0x1EAE,0x1EB0,0x1EB2,0x1EB4,0x1EB6,0x1EB8,0x1EBA,0x1EBC,0x1EBE,0x1EC0,0x1EC2,0x1EC4,0x1EC6,0x1EC8,0x1ECA,0x1ECC,0x1ECE,0x1ED0,0x1ED2,0x1ED4,0x1ED6,0x1ED8,0x1EDA,0x1EDC,0x1EDE,0x1EE0,0x1EE2,0x1EE4,0x1EE6,0x1EE8,0x1EEA,0x1EEC,0x1EEE,0x1EF0,0x1EF2,0x1EF4,0x1EF6,0x1EF8,
|
||||||
|
0x2160,0x2161,0x2162,0x2163,0x2164,0x2165,0x2166,0x2167,0x2168,0x2169,0x216A,0x216B,0x216C,0x216D,0x216E,0x216F,
|
||||||
|
0xFF21,0xFF22,0xFF23,0xFF24,0xFF25,0xFF26,0xFF27,0xFF28,0xFF29,0xFF2A,0xFF2B,0xFF2C,0xFF2D,0xFF2E,0xFF2F,0xFF30,0xFF31,0xFF32,0xFF33,0xFF34,0xFF35,0xFF36,0xFF37,0xFF38,0xFF39,0xFF3A
|
||||||
|
};
|
||||||
|
UINT i, n, hi, li;
|
||||||
|
|
||||||
|
|
||||||
|
if (chr < 0x80) { /* ASCII characters (acceleration) */
|
||||||
|
if (chr >= 0x61 && chr <= 0x7A) chr -= 0x20;
|
||||||
|
|
||||||
|
} else { /* Non ASCII characters (table search) */
|
||||||
|
n = 12; li = 0; hi = sizeof lower / sizeof lower[0];
|
||||||
|
do {
|
||||||
|
i = li + (hi - li) / 2;
|
||||||
|
if (chr == lower[i]) break;
|
||||||
|
if (chr > lower[i]) li = i; else hi = i;
|
||||||
|
} while (--n);
|
||||||
|
if (n) chr = upper[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
return chr;
|
||||||
|
}
|
||||||
|
|
Reference in New Issue
Block a user