Class that combined FATFileSystem with a USBMSD device, similar to LocalFileSystem

Dependencies:   USBDevice

Dependents:   SD_USB_FS_HelloWorld S25FL216K_USBFileSystem USBFileSystem_RAMDISK_HelloWorld

Introduction

USBFileSystem is a combination of FATFileSystem and USB-MSD (Mass-Storage Device). This way it allows you to create a filesystem that is both accessible on your PC with the USB cable plugged in, and on the device itself. This is very similar to LocalFileSystem, only you can use any Serial Flash, SD, etc as storage medium.

If your code works with either FATFileSystem or USBMSD it will with very little modification also work with USBFileSystem.

Basic functionality

Since both FATFileSystem and USBMSD write binary data to a the storage medium, if both are writing somewhere at the same time we have a problem. This library makes the medium read only for the local side, if USB is writing, and vice versa. Local is considered to be writing as long as you have opened a file for write. USB is considered writing as soon as a write command comes from USB, and this continues for a short time after the last write command. This is needed because I cannot know when the last sector is written by USB, so I have to wait a little while to see if more data is written.

Reading

You can still read when the other one is writing. This can result in issues. Using the functions given you can easily make sure that won't happen. However regardless if you do that or not, it is a good idea to make sure your program can handle unexpected situations. For example if you open a file locally, and you get a NULL pointer, do not immediatly go into an error condition, but just try it again.

USB MSD on your PC

When you write to / read from a USB drive Windows (and I expect other OS's too) will cache everything. The result is that once you read a file on your PC, it will never change, even if your mbed does change the data. And if you write/delete a file when the mbed is locally using the file system, it will be read only, however your PC will tell you data was succesfully written/removed.

If this is a problem for your device, you can disconnect the USB part when the mbed is writing to the storage medium locally. The library can do this automatically for you.

Required code

The virtual functions that need to be implemented by you are:

virtual int disk_initialize() { return 0; }
virtual int _disk_status() { return 0; }
virtual int disk_read(uint8_t * buffer, uint64_t sector) { return 0;}
virtual int _disk_write(const uint8_t * buffer, uint64_t sector) = 0;
virtual int disk_sync() { return 0; }
virtual uint64_t disk_sectors() = 0;

Some of those are optional, but disk_read, _disk_write and disk_sectors have to be defined in the child class.

Sector size

The sector size must be 512 bytes. In USBMSD this requirement isn't present, but FATFileSystem has this requirement!

Function name

Note the '_' at the beginning of _disk_status and _disk_write. You may not inherit it without the '_', that will break the library. Since the parent libraries made it virtual I cannot block it from happening, so just watch out.

Available functions for the user

The USBFileSystem library allows for some extra functions the user can use. The API documentation lists them, but summarized: You can attach functions which are called once either USB is writing to the storage medium, or when this is done locally. There are two functions which will tell you if currently USB/local is writing to the storage medium, and you can set the usbMode. Set it to mode 0 and USB is read only when the storage is used locally, set it to mode 1 and it is disconnected (default and recommended).

Besides that there are of course the standard USB functions (connect/disconnect for example), and you can use 'fopen', 'mkdir', etc similar to FATFileSystem.

Hello World

Currently available:

RAM-disk for KL25Z and LPC1768 (this one disappeared for some reason, I re-published it, should still work):

Import programUSBFileSystem_RAMDISK_HelloWorld

RAMDisk example for the USBFileSystem

Wi-Go serial flash:

Import programS25FL216K_HelloWorld

Helloworld program for the S25FL216K flash memory in combination with USBFileSystem

SD card (different from others):

Import programSD_USB_FS_HelloWorld

SD USB MSD helloworld

Note that this one is not mine, if you have problems with it check if there are updates for the library.

Committer:
Sissors
Date:
Wed Oct 23 20:32:07 2013 +0000
Revision:
2:9af05743d551
FATFileSystem 'Tiny' option enabled -> Primary to solve a buffering issue when USB writes a file, also reduces RAM consumed
;
; USBDevice back to main branch
;
; USBMode 1 is default now

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Sissors 2:9af05743d551 1 /*------------------------------------------------------------------------*/
Sissors 2:9af05743d551 2 /* Unicode - Local code bidirectional converter (C)ChaN, 2009 */
Sissors 2:9af05743d551 3 /* (SBCS code pages) */
Sissors 2:9af05743d551 4 /*------------------------------------------------------------------------*/
Sissors 2:9af05743d551 5 /* 437 U.S. (OEM)
Sissors 2:9af05743d551 6 / 720 Arabic (OEM)
Sissors 2:9af05743d551 7 / 1256 Arabic (Windows)
Sissors 2:9af05743d551 8 / 737 Greek (OEM)
Sissors 2:9af05743d551 9 / 1253 Greek (Windows)
Sissors 2:9af05743d551 10 / 1250 Central Europe (Windows)
Sissors 2:9af05743d551 11 / 775 Baltic (OEM)
Sissors 2:9af05743d551 12 / 1257 Baltic (Windows)
Sissors 2:9af05743d551 13 / 850 Multilingual Latin 1 (OEM)
Sissors 2:9af05743d551 14 / 852 Latin 2 (OEM)
Sissors 2:9af05743d551 15 / 1252 Latin 1 (Windows)
Sissors 2:9af05743d551 16 / 855 Cyrillic (OEM)
Sissors 2:9af05743d551 17 / 1251 Cyrillic (Windows)
Sissors 2:9af05743d551 18 / 866 Russian (OEM)
Sissors 2:9af05743d551 19 / 857 Turkish (OEM)
Sissors 2:9af05743d551 20 / 1254 Turkish (Windows)
Sissors 2:9af05743d551 21 / 858 Multilingual Latin 1 + Euro (OEM)
Sissors 2:9af05743d551 22 / 862 Hebrew (OEM)
Sissors 2:9af05743d551 23 / 1255 Hebrew (Windows)
Sissors 2:9af05743d551 24 / 874 Thai (OEM, Windows)
Sissors 2:9af05743d551 25 / 1258 Vietnam (OEM, Windows)
Sissors 2:9af05743d551 26 */
Sissors 2:9af05743d551 27
Sissors 2:9af05743d551 28 #include "ff.h"
Sissors 2:9af05743d551 29
Sissors 2:9af05743d551 30
Sissors 2:9af05743d551 31 #if _CODE_PAGE == 437
Sissors 2:9af05743d551 32 #define _TBLDEF 1
Sissors 2:9af05743d551 33 static
Sissors 2:9af05743d551 34 const WCHAR Tbl[] = { /* CP437(0x80-0xFF) to Unicode conversion table */
Sissors 2:9af05743d551 35 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7,
Sissors 2:9af05743d551 36 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x00C4, 0x00C5,
Sissors 2:9af05743d551 37 0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9,
Sissors 2:9af05743d551 38 0x00FF, 0x00D6, 0x00DC, 0x00A2, 0x00A3, 0x00A5, 0x20A7, 0x0192,
Sissors 2:9af05743d551 39 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA,
Sissors 2:9af05743d551 40 0x00BF, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB,
Sissors 2:9af05743d551 41 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556,
Sissors 2:9af05743d551 42 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510,
Sissors 2:9af05743d551 43 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F,
Sissors 2:9af05743d551 44 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
Sissors 2:9af05743d551 45 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B,
Sissors 2:9af05743d551 46 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
Sissors 2:9af05743d551 47 0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4,
Sissors 2:9af05743d551 48 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229,
Sissors 2:9af05743d551 49 0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248,
Sissors 2:9af05743d551 50 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0
Sissors 2:9af05743d551 51 };
Sissors 2:9af05743d551 52
Sissors 2:9af05743d551 53 #elif _CODE_PAGE == 720
Sissors 2:9af05743d551 54 #define _TBLDEF 1
Sissors 2:9af05743d551 55 static
Sissors 2:9af05743d551 56 const WCHAR Tbl[] = { /* CP720(0x80-0xFF) to Unicode conversion table */
Sissors 2:9af05743d551 57 0x0000, 0x0000, 0x00E9, 0x00E2, 0x0000, 0x00E0, 0x0000, 0x00E7,
Sissors 2:9af05743d551 58 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x0000, 0x0000, 0x0000,
Sissors 2:9af05743d551 59 0x0000, 0x0651, 0x0652, 0x00F4, 0x00A4, 0x0640, 0x00FB, 0x00F9,
Sissors 2:9af05743d551 60 0x0621, 0x0622, 0x0623, 0x0624, 0x00A3, 0x0625, 0x0626, 0x0627,
Sissors 2:9af05743d551 61 0x0628, 0x0629, 0x062A, 0x062B, 0x062C, 0x062D, 0x062E, 0x062F,
Sissors 2:9af05743d551 62 0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x00AB, 0x00BB,
Sissors 2:9af05743d551 63 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556,
Sissors 2:9af05743d551 64 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510,
Sissors 2:9af05743d551 65 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F,
Sissors 2:9af05743d551 66 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
Sissors 2:9af05743d551 67 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B,
Sissors 2:9af05743d551 68 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
Sissors 2:9af05743d551 69 0x0636, 0x0637, 0x0638, 0x0639, 0x063A, 0x0641, 0x00B5, 0x0642,
Sissors 2:9af05743d551 70 0x0643, 0x0644, 0x0645, 0x0646, 0x0647, 0x0648, 0x0649, 0x064A,
Sissors 2:9af05743d551 71 0x2261, 0x064B, 0x064C, 0x064D, 0x064E, 0x064F, 0xO650, 0x2248,
Sissors 2:9af05743d551 72 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0
Sissors 2:9af05743d551 73 };
Sissors 2:9af05743d551 74
Sissors 2:9af05743d551 75 #elif _CODE_PAGE == 737
Sissors 2:9af05743d551 76 #define _TBLDEF 1
Sissors 2:9af05743d551 77 static
Sissors 2:9af05743d551 78 const WCHAR Tbl[] = { /* CP737(0x80-0xFF) to Unicode conversion table */
Sissors 2:9af05743d551 79 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398,
Sissors 2:9af05743d551 80 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F, 0x03A0,
Sissors 2:9af05743d551 81 0x03A1, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8, 0x03A9,
Sissors 2:9af05743d551 82 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, 0x03B8,
Sissors 2:9af05743d551 83 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF, 0x03C0,
Sissors 2:9af05743d551 84 0x03C1, 0x03C3, 0x03C2, 0x03C4, 0x03C5, 0x03C6, 0x03C7, 0x03C8,
Sissors 2:9af05743d551 85 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556,
Sissors 2:9af05743d551 86 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510,
Sissors 2:9af05743d551 87 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F,
Sissors 2:9af05743d551 88 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
Sissors 2:9af05743d551 89 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B,
Sissors 2:9af05743d551 90 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
Sissors 2:9af05743d551 91 0x03C9, 0x03AC, 0x03AD, 0x03AE, 0x03CA, 0x03AF, 0x03CC, 0x03CD,
Sissors 2:9af05743d551 92 0x03CB, 0x03CE, 0x0386, 0x0388, 0x0389, 0x038A, 0x038C, 0x038E,
Sissors 2:9af05743d551 93 0x038F, 0x00B1, 0x2265, 0x2264, 0x03AA, 0x03AB, 0x00F7, 0x2248,
Sissors 2:9af05743d551 94 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0
Sissors 2:9af05743d551 95 };
Sissors 2:9af05743d551 96
Sissors 2:9af05743d551 97 #elif _CODE_PAGE == 775
Sissors 2:9af05743d551 98 #define _TBLDEF 1
Sissors 2:9af05743d551 99 static
Sissors 2:9af05743d551 100 const WCHAR Tbl[] = { /* CP775(0x80-0xFF) to Unicode conversion table */
Sissors 2:9af05743d551 101 0x0106, 0x00FC, 0x00E9, 0x0101, 0x00E4, 0x0123, 0x00E5, 0x0107,
Sissors 2:9af05743d551 102 0x0142, 0x0113, 0x0156, 0x0157, 0x012B, 0x0179, 0x00C4, 0x00C5,
Sissors 2:9af05743d551 103 0x00C9, 0x00E6, 0x00C6, 0x014D, 0x00F6, 0x0122, 0x00A2, 0x015A,
Sissors 2:9af05743d551 104 0x015B, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x00D7, 0x00A4,
Sissors 2:9af05743d551 105 0x0100, 0x012A, 0x00F3, 0x017B, 0x017C, 0x017A, 0x201D, 0x00A6,
Sissors 2:9af05743d551 106 0x00A9, 0x00AE, 0x00AC, 0x00BD, 0x00BC, 0x0141, 0x00AB, 0x00BB,
Sissors 2:9af05743d551 107 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x0104, 0x010C, 0x0118,
Sissors 2:9af05743d551 108 0x0116, 0x2563, 0x2551, 0x2557, 0x255D, 0x012E, 0x0160, 0x2510,
Sissors 2:9af05743d551 109 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x0172, 0x016A,
Sissors 2:9af05743d551 110 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x017D,
Sissors 2:9af05743d551 111 0x0105, 0x010D, 0x0119, 0x0117, 0x012F, 0x0161, 0x0173, 0x016B,
Sissors 2:9af05743d551 112 0x017E, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
Sissors 2:9af05743d551 113 0x00D3, 0x00DF, 0x014C, 0x0143, 0x00F5, 0x00D5, 0x00B5, 0x0144,
Sissors 2:9af05743d551 114 0x0136, 0x0137, 0x013B, 0x013C, 0x0146, 0x0112, 0x0145, 0x2019,
Sissors 2:9af05743d551 115 0x00AD, 0x00B1, 0x201C, 0x00BE, 0x00B6, 0x00A7, 0x00F7, 0x201E,
Sissors 2:9af05743d551 116 0x00B0, 0x2219, 0x00B7, 0x00B9, 0x00B3, 0x00B2, 0x25A0, 0x00A0
Sissors 2:9af05743d551 117 };
Sissors 2:9af05743d551 118
Sissors 2:9af05743d551 119 #elif _CODE_PAGE == 850
Sissors 2:9af05743d551 120 #define _TBLDEF 1
Sissors 2:9af05743d551 121 static
Sissors 2:9af05743d551 122 const WCHAR Tbl[] = { /* CP850(0x80-0xFF) to Unicode conversion table */
Sissors 2:9af05743d551 123 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7,
Sissors 2:9af05743d551 124 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x00C4, 0x00C5,
Sissors 2:9af05743d551 125 0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9,
Sissors 2:9af05743d551 126 0x00FF, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x00D7, 0x0192,
Sissors 2:9af05743d551 127 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA,
Sissors 2:9af05743d551 128 0x00BF, 0x00AE, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB,
Sissors 2:9af05743d551 129 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00C1, 0x00C2, 0x00C0,
Sissors 2:9af05743d551 130 0x00A9, 0x2563, 0x2551, 0x2557, 0x255D, 0x00A2, 0x00A5, 0x2510,
Sissors 2:9af05743d551 131 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x00E3, 0x00C3,
Sissors 2:9af05743d551 132 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x00A4,
Sissors 2:9af05743d551 133 0x00F0, 0x00D0, 0x00CA, 0x00CB, 0x00C8, 0x0131, 0x00CD, 0x00CE,
Sissors 2:9af05743d551 134 0x00CF, 0x2518, 0x250C, 0x2588, 0x2584, 0x00A6, 0x00CC, 0x2580,
Sissors 2:9af05743d551 135 0x00D3, 0x00DF, 0x00D4, 0x00D2, 0x00F5, 0x00D5, 0x00B5, 0x00FE,
Sissors 2:9af05743d551 136 0x00DE, 0x00DA, 0x00DB, 0x00D9, 0x00FD, 0x00DD, 0x00AF, 0x00B4,
Sissors 2:9af05743d551 137 0x00AD, 0x00B1, 0x2017, 0x00BE, 0x00B6, 0x00A7, 0x00F7, 0x00B8,
Sissors 2:9af05743d551 138 0x00B0, 0x00A8, 0x00B7, 0x00B9, 0x00B3, 0x00B2, 0x25A0, 0x00A0
Sissors 2:9af05743d551 139 };
Sissors 2:9af05743d551 140
Sissors 2:9af05743d551 141 #elif _CODE_PAGE == 852
Sissors 2:9af05743d551 142 #define _TBLDEF 1
Sissors 2:9af05743d551 143 static
Sissors 2:9af05743d551 144 const WCHAR Tbl[] = { /* CP852(0x80-0xFF) to Unicode conversion table */
Sissors 2:9af05743d551 145 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x016F, 0x0107, 0x00E7,
Sissors 2:9af05743d551 146 0x0142, 0x00EB, 0x0150, 0x0151, 0x00EE, 0x0179, 0x00C4, 0x0106,
Sissors 2:9af05743d551 147 0x00C9, 0x0139, 0x013A, 0x00F4, 0x00F6, 0x013D, 0x013E, 0x015A,
Sissors 2:9af05743d551 148 0x015B, 0x00D6, 0x00DC, 0x0164, 0x0165, 0x0141, 0x00D7, 0x010D,
Sissors 2:9af05743d551 149 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x0104, 0x0105, 0x017D, 0x017E,
Sissors 2:9af05743d551 150 0x0118, 0x0119, 0x00AC, 0x017A, 0x010C, 0x015F, 0x00AB, 0x00BB,
Sissors 2:9af05743d551 151 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00C1, 0x00C2, 0x011A,
Sissors 2:9af05743d551 152 0x015E, 0x2563, 0x2551, 0x2557, 0x255D, 0x017B, 0x017C, 0x2510,
Sissors 2:9af05743d551 153 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x0102, 0x0103,
Sissors 2:9af05743d551 154 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x00A4,
Sissors 2:9af05743d551 155 0x0111, 0x0110, 0x010E, 0x00CB, 0x010F, 0x0147, 0x00CD, 0x00CE,
Sissors 2:9af05743d551 156 0x011B, 0x2518, 0x250C, 0x2588, 0x2584, 0x0162, 0x016E, 0x2580,
Sissors 2:9af05743d551 157 0x00D3, 0x00DF, 0x00D4, 0x0143, 0x0144, 0x0148, 0x0160, 0x0161,
Sissors 2:9af05743d551 158 0x0154, 0x00DA, 0x0155, 0x0170, 0x00FD, 0x00DD, 0x0163, 0x00B4,
Sissors 2:9af05743d551 159 0x00AD, 0x02DD, 0x02DB, 0x02C7, 0x02D8, 0x00A7, 0x00F7, 0x00B8,
Sissors 2:9af05743d551 160 0x00B0, 0x00A8, 0x02D9, 0x0171, 0x0158, 0x0159, 0x25A0, 0x00A0
Sissors 2:9af05743d551 161 };
Sissors 2:9af05743d551 162
Sissors 2:9af05743d551 163 #elif _CODE_PAGE == 855
Sissors 2:9af05743d551 164 #define _TBLDEF 1
Sissors 2:9af05743d551 165 static
Sissors 2:9af05743d551 166 const WCHAR Tbl[] = { /* CP855(0x80-0xFF) to Unicode conversion table */
Sissors 2:9af05743d551 167 0x0452, 0x0402, 0x0453, 0x0403, 0x0451, 0x0401, 0x0454, 0x0404,
Sissors 2:9af05743d551 168 0x0455, 0x0405, 0x0456, 0x0406, 0x0457, 0x0407, 0x0458, 0x0408,
Sissors 2:9af05743d551 169 0x0459, 0x0409, 0x045A, 0x040A, 0x045B, 0x040B, 0x045C, 0x040C,
Sissors 2:9af05743d551 170 0x045E, 0x040E, 0x045F, 0x040F, 0x044E, 0x042E, 0x044A, 0x042A,
Sissors 2:9af05743d551 171 0x0430, 0x0410, 0x0431, 0x0411, 0x0446, 0x0426, 0x0434, 0x0414,
Sissors 2:9af05743d551 172 0x0435, 0x0415, 0x0444, 0x0424, 0x0433, 0x0413, 0x00AB, 0x00BB,
Sissors 2:9af05743d551 173 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x0445, 0x0425, 0x0438,
Sissors 2:9af05743d551 174 0x0418, 0x2563, 0x2551, 0x2557, 0x255D, 0x0439, 0x0419, 0x2510,
Sissors 2:9af05743d551 175 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x043A, 0x041A,
Sissors 2:9af05743d551 176 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x00A4,
Sissors 2:9af05743d551 177 0x043B, 0x041B, 0x043C, 0x041C, 0x043D, 0x041D, 0x043E, 0x041E,
Sissors 2:9af05743d551 178 0x043F, 0x2518, 0x250C, 0x2588, 0x2584, 0x041F, 0x044F, 0x2580,
Sissors 2:9af05743d551 179 0x042F, 0x0440, 0x0420, 0x0441, 0x0421, 0x0442, 0x0422, 0x0443,
Sissors 2:9af05743d551 180 0x0423, 0x0436, 0x0416, 0x0432, 0x0412, 0x044C, 0x042C, 0x2116,
Sissors 2:9af05743d551 181 0x00AD, 0x044B, 0x042B, 0x0437, 0x0417, 0x0448, 0x0428, 0x044D,
Sissors 2:9af05743d551 182 0x042D, 0x0449, 0x0429, 0x0447, 0x0427, 0x00A7, 0x25A0, 0x00A0
Sissors 2:9af05743d551 183 };
Sissors 2:9af05743d551 184
Sissors 2:9af05743d551 185 #elif _CODE_PAGE == 857
Sissors 2:9af05743d551 186 #define _TBLDEF 1
Sissors 2:9af05743d551 187 static
Sissors 2:9af05743d551 188 const WCHAR Tbl[] = { /* CP857(0x80-0xFF) to Unicode conversion table */
Sissors 2:9af05743d551 189 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7,
Sissors 2:9af05743d551 190 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x0131, 0x00C4, 0x00C5,
Sissors 2:9af05743d551 191 0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9,
Sissors 2:9af05743d551 192 0x0130, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x015E, 0x015F,
Sissors 2:9af05743d551 193 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x011E, 0x011F,
Sissors 2:9af05743d551 194 0x00BF, 0x00AE, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB,
Sissors 2:9af05743d551 195 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00C1, 0x00C2, 0x00C0,
Sissors 2:9af05743d551 196 0x00A9, 0x2563, 0x2551, 0x2557, 0x255D, 0x00A2, 0x00A5, 0x2510,
Sissors 2:9af05743d551 197 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x00E3, 0x00C3,
Sissors 2:9af05743d551 198 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x00A4,
Sissors 2:9af05743d551 199 0x00BA, 0x00AA, 0x00CA, 0x00CB, 0x00C8, 0x0000, 0x00CD, 0x00CE,
Sissors 2:9af05743d551 200 0x00CF, 0x2518, 0x250C, 0x2588, 0x2584, 0x00A6, 0x00CC, 0x2580,
Sissors 2:9af05743d551 201 0x00D3, 0x00DF, 0x00D4, 0x00D2, 0x00F5, 0x00D5, 0x00B5, 0x0000,
Sissors 2:9af05743d551 202 0x00D7, 0x00DA, 0x00DB, 0x00D9, 0x00EC, 0x00FF, 0x00AF, 0x00B4,
Sissors 2:9af05743d551 203 0x00AD, 0x00B1, 0x0000, 0x00BE, 0x00B6, 0x00A7, 0x00F7, 0x00B8,
Sissors 2:9af05743d551 204 0x00B0, 0x00A8, 0x00B7, 0x00B9, 0x00B3, 0x00B2, 0x25A0, 0x00A0
Sissors 2:9af05743d551 205 };
Sissors 2:9af05743d551 206
Sissors 2:9af05743d551 207 #elif _CODE_PAGE == 858
Sissors 2:9af05743d551 208 #define _TBLDEF 1
Sissors 2:9af05743d551 209 static
Sissors 2:9af05743d551 210 const WCHAR Tbl[] = { /* CP858(0x80-0xFF) to Unicode conversion table */
Sissors 2:9af05743d551 211 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7,
Sissors 2:9af05743d551 212 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x00C4, 0x00C5,
Sissors 2:9af05743d551 213 0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9,
Sissors 2:9af05743d551 214 0x00FF, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x00D7, 0x0192,
Sissors 2:9af05743d551 215 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA,
Sissors 2:9af05743d551 216 0x00BF, 0x00AE, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB,
Sissors 2:9af05743d551 217 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00C1, 0x00C2, 0x00C0,
Sissors 2:9af05743d551 218 0x00A9, 0x2563, 0x2551, 0x2557, 0x2550, 0x00A2, 0x00A5, 0x2510,
Sissors 2:9af05743d551 219 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x00E3, 0x00C3,
Sissors 2:9af05743d551 220 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x00A4,
Sissors 2:9af05743d551 221 0x00F0, 0x00D0, 0x00CA, 0x00CB, 0x00C8, 0x20AC, 0x00CD, 0x00CE,
Sissors 2:9af05743d551 222 0x00CF, 0x2518, 0x250C, 0x2588, 0x2584, 0x00C6, 0x00CC, 0x2580,
Sissors 2:9af05743d551 223 0x00D3, 0x00DF, 0x00D4, 0x00D2, 0x00F5, 0x00D5, 0x00B5, 0x00FE,
Sissors 2:9af05743d551 224 0x00DE, 0x00DA, 0x00DB, 0x00D9, 0x00FD, 0x00DD, 0x00AF, 0x00B4,
Sissors 2:9af05743d551 225 0x00AD, 0x00B1, 0x2017, 0x00BE, 0x00B6, 0x00A7, 0x00F7, 0x00B8,
Sissors 2:9af05743d551 226 0x00B0, 0x00A8, 0x00B7, 0x00B9, 0x00B3, 0x00B2, 0x25A0, 0x00A0
Sissors 2:9af05743d551 227 };
Sissors 2:9af05743d551 228
Sissors 2:9af05743d551 229 #elif _CODE_PAGE == 862
Sissors 2:9af05743d551 230 #define _TBLDEF 1
Sissors 2:9af05743d551 231 static
Sissors 2:9af05743d551 232 const WCHAR Tbl[] = { /* CP862(0x80-0xFF) to Unicode conversion table */
Sissors 2:9af05743d551 233 0x05D0, 0x05D1, 0x05D2, 0x05D3, 0x05D4, 0x05D5, 0x05D6, 0x05D7,
Sissors 2:9af05743d551 234 0x05D8, 0x05D9, 0x05DA, 0x05DB, 0x05DC, 0x05DD, 0x05DE, 0x05DF,
Sissors 2:9af05743d551 235 0x05E0, 0x05E1, 0x05E2, 0x05E3, 0x05E4, 0x05E5, 0x05E6, 0x05E7,
Sissors 2:9af05743d551 236 0x05E8, 0x05E9, 0x05EA, 0x00A2, 0x00A3, 0x00A5, 0x20A7, 0x0192,
Sissors 2:9af05743d551 237 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA,
Sissors 2:9af05743d551 238 0x00BF, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB,
Sissors 2:9af05743d551 239 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556,
Sissors 2:9af05743d551 240 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510,
Sissors 2:9af05743d551 241 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F,
Sissors 2:9af05743d551 242 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
Sissors 2:9af05743d551 243 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B,
Sissors 2:9af05743d551 244 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
Sissors 2:9af05743d551 245 0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4,
Sissors 2:9af05743d551 246 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229,
Sissors 2:9af05743d551 247 0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248,
Sissors 2:9af05743d551 248 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0
Sissors 2:9af05743d551 249 };
Sissors 2:9af05743d551 250
Sissors 2:9af05743d551 251 #elif _CODE_PAGE == 866
Sissors 2:9af05743d551 252 #define _TBLDEF 1
Sissors 2:9af05743d551 253 static
Sissors 2:9af05743d551 254 const WCHAR Tbl[] = { /* CP866(0x80-0xFF) to Unicode conversion table */
Sissors 2:9af05743d551 255 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417,
Sissors 2:9af05743d551 256 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F,
Sissors 2:9af05743d551 257 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427,
Sissors 2:9af05743d551 258 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F,
Sissors 2:9af05743d551 259 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437,
Sissors 2:9af05743d551 260 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F,
Sissors 2:9af05743d551 261 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556,
Sissors 2:9af05743d551 262 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510,
Sissors 2:9af05743d551 263 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F,
Sissors 2:9af05743d551 264 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
Sissors 2:9af05743d551 265 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B,
Sissors 2:9af05743d551 266 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
Sissors 2:9af05743d551 267 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447,
Sissors 2:9af05743d551 268 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F,
Sissors 2:9af05743d551 269 0x0401, 0x0451, 0x0404, 0x0454, 0x0407, 0x0457, 0x040E, 0x045E,
Sissors 2:9af05743d551 270 0x00B0, 0x2219, 0x00B7, 0x221A, 0x2116, 0x00A4, 0x25A0, 0x00A0
Sissors 2:9af05743d551 271 };
Sissors 2:9af05743d551 272
Sissors 2:9af05743d551 273 #elif _CODE_PAGE == 874
Sissors 2:9af05743d551 274 #define _TBLDEF 1
Sissors 2:9af05743d551 275 static
Sissors 2:9af05743d551 276 const WCHAR Tbl[] = { /* CP874(0x80-0xFF) to Unicode conversion table */
Sissors 2:9af05743d551 277 0x20AC, 0x0000, 0x0000, 0x0000, 0x0000, 0x2026, 0x0000, 0x0000,
Sissors 2:9af05743d551 278 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
Sissors 2:9af05743d551 279 0x0000, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
Sissors 2:9af05743d551 280 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
Sissors 2:9af05743d551 281 0x00A0, 0x0E01, 0x0E02, 0x0E03, 0x0E04, 0x0E05, 0x0E06, 0x0E07,
Sissors 2:9af05743d551 282 0x0E08, 0x0E09, 0x0E0A, 0x0E0B, 0x0E0C, 0x0E0D, 0x0E0E, 0x0E0F,
Sissors 2:9af05743d551 283 0x0E10, 0x0E11, 0x0E12, 0x0E13, 0x0E14, 0x0E15, 0x0E16, 0x0E17,
Sissors 2:9af05743d551 284 0x0E18, 0x0E19, 0x0E1A, 0x0E1B, 0x0E1C, 0x0E1D, 0x0E1E, 0x0E1F,
Sissors 2:9af05743d551 285 0x0E20, 0x0E21, 0x0E22, 0x0E23, 0x0E24, 0x0E25, 0x0E26, 0x0E27,
Sissors 2:9af05743d551 286 0x0E28, 0x0E29, 0x0E2A, 0x0E2B, 0x0E2C, 0x0E2D, 0x0E2E, 0x0E2F,
Sissors 2:9af05743d551 287 0x0E30, 0x0E31, 0x0E32, 0x0E33, 0x0E34, 0x0E35, 0x0E36, 0x0E37,
Sissors 2:9af05743d551 288 0x0E38, 0x0E39, 0x0E3A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0E3F,
Sissors 2:9af05743d551 289 0x0E40, 0x0E41, 0x0E42, 0x0E43, 0x0E44, 0x0E45, 0x0E46, 0x0E47,
Sissors 2:9af05743d551 290 0x0E48, 0x0E49, 0x0E4A, 0x0E4B, 0x0E4C, 0x0E4D, 0x0E4E, 0x0E4F,
Sissors 2:9af05743d551 291 0x0E50, 0x0E51, 0x0E52, 0x0E53, 0x0E54, 0x0E55, 0x0E56, 0x0E57,
Sissors 2:9af05743d551 292 0x0E58, 0x0E59, 0x0E5A, 0x0E5B, 0x0000, 0x0000, 0x0000, 0x0000
Sissors 2:9af05743d551 293 };
Sissors 2:9af05743d551 294
Sissors 2:9af05743d551 295 #elif _CODE_PAGE == 1250
Sissors 2:9af05743d551 296 #define _TBLDEF 1
Sissors 2:9af05743d551 297 static
Sissors 2:9af05743d551 298 const WCHAR Tbl[] = { /* CP1250(0x80-0xFF) to Unicode conversion table */
Sissors 2:9af05743d551 299 0x20AC, 0x0000, 0x201A, 0x0000, 0x201E, 0x2026, 0x2020, 0x2021,
Sissors 2:9af05743d551 300 0x0000, 0x2030, 0x0160, 0x2039, 0x015A, 0x0164, 0x017D, 0x0179,
Sissors 2:9af05743d551 301 0x0000, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
Sissors 2:9af05743d551 302 0x0000, 0x2122, 0x0161, 0x203A, 0x015B, 0x0165, 0x017E, 0x017A,
Sissors 2:9af05743d551 303 0x00A0, 0x02C7, 0x02D8, 0x0141, 0x00A4, 0x0104, 0x00A6, 0x00A7,
Sissors 2:9af05743d551 304 0x00A8, 0x00A9, 0x015E, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x017B,
Sissors 2:9af05743d551 305 0x00B0, 0x00B1, 0x02DB, 0x0142, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
Sissors 2:9af05743d551 306 0x00B8, 0x0105, 0x015F, 0x00BB, 0x013D, 0x02DD, 0x013E, 0x017C,
Sissors 2:9af05743d551 307 0x0154, 0x00C1, 0x00C2, 0x0102, 0x00C4, 0x0139, 0x0106, 0x00C7,
Sissors 2:9af05743d551 308 0x010C, 0x00C9, 0x0118, 0x00CB, 0x011A, 0x00CD, 0x00CE, 0x010E,
Sissors 2:9af05743d551 309 0x0110, 0x0143, 0x0147, 0x00D3, 0x00D4, 0x0150, 0x00D6, 0x00D7,
Sissors 2:9af05743d551 310 0x0158, 0x016E, 0x00DA, 0x0170, 0x00DC, 0x00DD, 0x0162, 0x00DF,
Sissors 2:9af05743d551 311 0x0155, 0x00E1, 0x00E2, 0x0103, 0x00E4, 0x013A, 0x0107, 0x00E7,
Sissors 2:9af05743d551 312 0x010D, 0x00E9, 0x0119, 0x00EB, 0x011B, 0x00ED, 0x00EE, 0x010F,
Sissors 2:9af05743d551 313 0x0111, 0x0144, 0x0148, 0x00F3, 0x00F4, 0x0151, 0x00F6, 0x00F7,
Sissors 2:9af05743d551 314 0x0159, 0x016F, 0x00FA, 0x0171, 0x00FC, 0x00FD, 0x0163, 0x02D9
Sissors 2:9af05743d551 315 };
Sissors 2:9af05743d551 316
Sissors 2:9af05743d551 317 #elif _CODE_PAGE == 1251
Sissors 2:9af05743d551 318 #define _TBLDEF 1
Sissors 2:9af05743d551 319 static
Sissors 2:9af05743d551 320 const WCHAR Tbl[] = { /* CP1251(0x80-0xFF) to Unicode conversion table */
Sissors 2:9af05743d551 321 0x0402, 0x0403, 0x201A, 0x0453, 0x201E, 0x2026, 0x2020, 0x2021,
Sissors 2:9af05743d551 322 0x20AC, 0x2030, 0x0409, 0x2039, 0x040A, 0x040C, 0x040B, 0x040F,
Sissors 2:9af05743d551 323 0x0452, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
Sissors 2:9af05743d551 324 0x0000, 0x2111, 0x0459, 0x203A, 0x045A, 0x045C, 0x045B, 0x045F,
Sissors 2:9af05743d551 325 0x00A0, 0x040E, 0x045E, 0x0408, 0x00A4, 0x0490, 0x00A6, 0x00A7,
Sissors 2:9af05743d551 326 0x0401, 0x00A9, 0x0404, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x0407,
Sissors 2:9af05743d551 327 0x00B0, 0x00B1, 0x0406, 0x0456, 0x0491, 0x00B5, 0x00B6, 0x00B7,
Sissors 2:9af05743d551 328 0x0451, 0x2116, 0x0454, 0x00BB, 0x0458, 0x0405, 0x0455, 0x0457,
Sissors 2:9af05743d551 329 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417,
Sissors 2:9af05743d551 330 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F,
Sissors 2:9af05743d551 331 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427,
Sissors 2:9af05743d551 332 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F,
Sissors 2:9af05743d551 333 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437,
Sissors 2:9af05743d551 334 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F,
Sissors 2:9af05743d551 335 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447,
Sissors 2:9af05743d551 336 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F
Sissors 2:9af05743d551 337 };
Sissors 2:9af05743d551 338
Sissors 2:9af05743d551 339 #elif _CODE_PAGE == 1252
Sissors 2:9af05743d551 340 #define _TBLDEF 1
Sissors 2:9af05743d551 341 static
Sissors 2:9af05743d551 342 const WCHAR Tbl[] = { /* CP1252(0x80-0xFF) to Unicode conversion table */
Sissors 2:9af05743d551 343 0x20AC, 0x0000, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,
Sissors 2:9af05743d551 344 0x02C6, 0x2030, 0x0160, 0x2039, 0x0152, 0x0000, 0x017D, 0x0000,
Sissors 2:9af05743d551 345 0x0000, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
Sissors 2:9af05743d551 346 0x02DC, 0x2122, 0x0161, 0x203A, 0x0153, 0x0000, 0x017E, 0x0178,
Sissors 2:9af05743d551 347 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7,
Sissors 2:9af05743d551 348 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
Sissors 2:9af05743d551 349 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
Sissors 2:9af05743d551 350 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF,
Sissors 2:9af05743d551 351 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7,
Sissors 2:9af05743d551 352 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF,
Sissors 2:9af05743d551 353 0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7,
Sissors 2:9af05743d551 354 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF,
Sissors 2:9af05743d551 355 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7,
Sissors 2:9af05743d551 356 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF,
Sissors 2:9af05743d551 357 0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7,
Sissors 2:9af05743d551 358 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF
Sissors 2:9af05743d551 359 };
Sissors 2:9af05743d551 360
Sissors 2:9af05743d551 361 #elif _CODE_PAGE == 1253
Sissors 2:9af05743d551 362 #define _TBLDEF 1
Sissors 2:9af05743d551 363 static
Sissors 2:9af05743d551 364 const WCHAR Tbl[] = { /* CP1253(0x80-0xFF) to Unicode conversion table */
Sissors 2:9af05743d551 365 0x20AC, 0x0000, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,
Sissors 2:9af05743d551 366 0x0000, 0x2030, 0x0000, 0x2039, 0x000C, 0x0000, 0x0000, 0x0000,
Sissors 2:9af05743d551 367 0x0000, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
Sissors 2:9af05743d551 368 0x0000, 0x2122, 0x0000, 0x203A, 0x0000, 0x0000, 0x0000, 0x0000,
Sissors 2:9af05743d551 369 0x00A0, 0x0385, 0x0386, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7,
Sissors 2:9af05743d551 370 0x00A8, 0x00A9, 0x0000, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x2015,
Sissors 2:9af05743d551 371 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x0384, 0x00B5, 0x00B6, 0x00B7,
Sissors 2:9af05743d551 372 0x0388, 0x0389, 0x038A, 0x00BB, 0x038C, 0x00BD, 0x038E, 0x038F,
Sissors 2:9af05743d551 373 0x0390, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397,
Sissors 2:9af05743d551 374 0x0398, 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F,
Sissors 2:9af05743d551 375 0x03A0, 0x03A1, 0x0000, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7,
Sissors 2:9af05743d551 376 0x03A8, 0x03A9, 0x03AA, 0x03AD, 0x03AC, 0x03AD, 0x03AE, 0x03AF,
Sissors 2:9af05743d551 377 0x03B0, 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7,
Sissors 2:9af05743d551 378 0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF,
Sissors 2:9af05743d551 379 0x03C0, 0x03C1, 0x03C2, 0x03C3, 0x03C4, 0x03C5, 0x03C6, 0x03C7,
Sissors 2:9af05743d551 380 0x03C8, 0x03C9, 0x03CA, 0x03CB, 0x03CC, 0x03CD, 0x03CE, 0x0000
Sissors 2:9af05743d551 381 };
Sissors 2:9af05743d551 382
Sissors 2:9af05743d551 383 #elif _CODE_PAGE == 1254
Sissors 2:9af05743d551 384 #define _TBLDEF 1
Sissors 2:9af05743d551 385 static
Sissors 2:9af05743d551 386 const WCHAR Tbl[] = { /* CP1254(0x80-0xFF) to Unicode conversion table */
Sissors 2:9af05743d551 387 0x20AC, 0x0000, 0x210A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,
Sissors 2:9af05743d551 388 0x02C6, 0x2030, 0x0160, 0x2039, 0x0152, 0x0000, 0x0000, 0x0000,
Sissors 2:9af05743d551 389 0x0000, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
Sissors 2:9af05743d551 390 0x02DC, 0x2122, 0x0161, 0x203A, 0x0153, 0x0000, 0x0000, 0x0178,
Sissors 2:9af05743d551 391 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7,
Sissors 2:9af05743d551 392 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
Sissors 2:9af05743d551 393 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
Sissors 2:9af05743d551 394 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF,
Sissors 2:9af05743d551 395 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7,
Sissors 2:9af05743d551 396 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF,
Sissors 2:9af05743d551 397 0x011E, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7,
Sissors 2:9af05743d551 398 0x00D8, 0x00D9, 0x00DA, 0x00BD, 0x00DC, 0x0130, 0x015E, 0x00DF,
Sissors 2:9af05743d551 399 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7,
Sissors 2:9af05743d551 400 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF,
Sissors 2:9af05743d551 401 0x011F, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7,
Sissors 2:9af05743d551 402 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x0131, 0x015F, 0x00FF
Sissors 2:9af05743d551 403 };
Sissors 2:9af05743d551 404
Sissors 2:9af05743d551 405 #elif _CODE_PAGE == 1255
Sissors 2:9af05743d551 406 #define _TBLDEF 1
Sissors 2:9af05743d551 407 static
Sissors 2:9af05743d551 408 const WCHAR Tbl[] = { /* CP1255(0x80-0xFF) to Unicode conversion table */
Sissors 2:9af05743d551 409 0x20AC, 0x0000, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,
Sissors 2:9af05743d551 410 0x02C6, 0x2030, 0x0000, 0x2039, 0x0000, 0x0000, 0x0000, 0x0000,
Sissors 2:9af05743d551 411 0x0000, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
Sissors 2:9af05743d551 412 0x02DC, 0x2122, 0x0000, 0x203A, 0x0000, 0x0000, 0x0000, 0x0000,
Sissors 2:9af05743d551 413 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7,
Sissors 2:9af05743d551 414 0x00A8, 0x00A9, 0x00D7, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
Sissors 2:9af05743d551 415 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
Sissors 2:9af05743d551 416 0x00B8, 0x00B9, 0x00F7, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF,
Sissors 2:9af05743d551 417 0x05B0, 0x05B1, 0x05B2, 0x05B3, 0x05B4, 0x05B5, 0x05B6, 0x05B7,
Sissors 2:9af05743d551 418 0x05B8, 0x05B9, 0x0000, 0x05BB, 0x05BC, 0x05BD, 0x05BE, 0x05BF,
Sissors 2:9af05743d551 419 0x05C0, 0x05C1, 0x05C2, 0x05C3, 0x05F0, 0x05F1, 0x05F2, 0x05F3,
Sissors 2:9af05743d551 420 0x05F4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
Sissors 2:9af05743d551 421 0x05D0, 0x05D1, 0x05D2, 0x05D3, 0x05D4, 0x05D5, 0x05D6, 0x05D7,
Sissors 2:9af05743d551 422 0x05D8, 0x05D9, 0x05DA, 0x05DB, 0x05DC, 0x05DD, 0x05DE, 0x05DF,
Sissors 2:9af05743d551 423 0x05E0, 0x05E1, 0x05E2, 0x05E3, 0x05E4, 0x05E5, 0x05E6, 0x05E7,
Sissors 2:9af05743d551 424 0x05E8, 0x05E9, 0x05EA, 0x0000, 0x0000, 0x200E, 0x200F, 0x0000
Sissors 2:9af05743d551 425 };
Sissors 2:9af05743d551 426
Sissors 2:9af05743d551 427 #elif _CODE_PAGE == 1256
Sissors 2:9af05743d551 428 #define _TBLDEF 1
Sissors 2:9af05743d551 429 static
Sissors 2:9af05743d551 430 const WCHAR Tbl[] = { /* CP1256(0x80-0xFF) to Unicode conversion table */
Sissors 2:9af05743d551 431 0x20AC, 0x067E, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,
Sissors 2:9af05743d551 432 0x02C6, 0x2030, 0x0679, 0x2039, 0x0152, 0x0686, 0x0698, 0x0688,
Sissors 2:9af05743d551 433 0x06AF, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
Sissors 2:9af05743d551 434 0x06A9, 0x2122, 0x0691, 0x203A, 0x0153, 0x200C, 0x200D, 0x06BA,
Sissors 2:9af05743d551 435 0x00A0, 0x060C, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7,
Sissors 2:9af05743d551 436 0x00A8, 0x00A9, 0x06BE, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
Sissors 2:9af05743d551 437 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
Sissors 2:9af05743d551 438 0x00B8, 0x00B9, 0x061B, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x061F,
Sissors 2:9af05743d551 439 0x06C1, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627,
Sissors 2:9af05743d551 440 0x0628, 0x0629, 0x062A, 0x062B, 0x062C, 0x062D, 0x062E, 0x062F,
Sissors 2:9af05743d551 441 0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x00D7,
Sissors 2:9af05743d551 442 0x0637, 0x0638, 0x0639, 0x063A, 0x0640, 0x0640, 0x0642, 0x0643,
Sissors 2:9af05743d551 443 0x00E0, 0x0644, 0x00E2, 0x0645, 0x0646, 0x0647, 0x0648, 0x00E7,
Sissors 2:9af05743d551 444 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x0649, 0x064A, 0x00EE, 0x00EF,
Sissors 2:9af05743d551 445 0x064B, 0x064C, 0x064D, 0x064E, 0x00F4, 0x064F, 0x0650, 0x00F7,
Sissors 2:9af05743d551 446 0x0651, 0x00F9, 0x0652, 0x00FB, 0x00FC, 0x200E, 0x200F, 0x06D2
Sissors 2:9af05743d551 447 }
Sissors 2:9af05743d551 448
Sissors 2:9af05743d551 449 #elif _CODE_PAGE == 1257
Sissors 2:9af05743d551 450 #define _TBLDEF 1
Sissors 2:9af05743d551 451 static
Sissors 2:9af05743d551 452 const WCHAR Tbl[] = { /* CP1257(0x80-0xFF) to Unicode conversion table */
Sissors 2:9af05743d551 453 0x20AC, 0x0000, 0x201A, 0x0000, 0x201E, 0x2026, 0x2020, 0x2021,
Sissors 2:9af05743d551 454 0x0000, 0x2030, 0x0000, 0x2039, 0x0000, 0x00A8, 0x02C7, 0x00B8,
Sissors 2:9af05743d551 455 0x0000, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
Sissors 2:9af05743d551 456 0x0000, 0x2122, 0x0000, 0x203A, 0x0000, 0x00AF, 0x02DB, 0x0000,
Sissors 2:9af05743d551 457 0x00A0, 0x0000, 0x00A2, 0x00A3, 0x00A4, 0x0000, 0x00A6, 0x00A7,
Sissors 2:9af05743d551 458 0x00D8, 0x00A9, 0x0156, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
Sissors 2:9af05743d551 459 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
Sissors 2:9af05743d551 460 0x00B8, 0x00B9, 0x0157, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00E6,
Sissors 2:9af05743d551 461 0x0104, 0x012E, 0x0100, 0x0106, 0x00C4, 0x00C5, 0x0118, 0x0112,
Sissors 2:9af05743d551 462 0x010C, 0x00C9, 0x0179, 0x0116, 0x0122, 0x0136, 0x012A, 0x013B,
Sissors 2:9af05743d551 463 0x0160, 0x0143, 0x0145, 0x00D3, 0x014C, 0x00D5, 0x00D6, 0x00D7,
Sissors 2:9af05743d551 464 0x0172, 0x0141, 0x015A, 0x016A, 0x00DC, 0x017B, 0x017D, 0x00DF,
Sissors 2:9af05743d551 465 0x0105, 0x012F, 0x0101, 0x0107, 0x00E4, 0x00E5, 0x0119, 0x0113,
Sissors 2:9af05743d551 466 0x010D, 0x00E9, 0x017A, 0x0117, 0x0123, 0x0137, 0x012B, 0x013C,
Sissors 2:9af05743d551 467 0x0161, 0x0144, 0x0146, 0x00F3, 0x014D, 0x00F5, 0x00F6, 0x00F7,
Sissors 2:9af05743d551 468 0x0173, 0x014E, 0x015B, 0x016B, 0x00FC, 0x017C, 0x017E, 0x02D9
Sissors 2:9af05743d551 469 };
Sissors 2:9af05743d551 470
Sissors 2:9af05743d551 471 #elif _CODE_PAGE == 1258
Sissors 2:9af05743d551 472 #define _TBLDEF 1
Sissors 2:9af05743d551 473 static
Sissors 2:9af05743d551 474 const WCHAR Tbl[] = { /* CP1258(0x80-0xFF) to Unicode conversion table */
Sissors 2:9af05743d551 475 0x20AC, 0x0000, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,
Sissors 2:9af05743d551 476 0x02C6, 0x2030, 0x0000, 0x2039, 0x0152, 0x0000, 0x0000, 0x0000,
Sissors 2:9af05743d551 477 0x0000, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
Sissors 2:9af05743d551 478 0x02DC, 0x2122, 0x0000, 0x203A, 0x0153, 0x0000, 0x0000, 0x0178,
Sissors 2:9af05743d551 479 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7,
Sissors 2:9af05743d551 480 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
Sissors 2:9af05743d551 481 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
Sissors 2:9af05743d551 482 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF,
Sissors 2:9af05743d551 483 0x00C0, 0x00C1, 0x00C2, 0x0102, 0x00C4, 0x00C5, 0x00C6, 0x00C7,
Sissors 2:9af05743d551 484 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x0300, 0x00CD, 0x00CE, 0x00CF,
Sissors 2:9af05743d551 485 0x0110, 0x00D1, 0x0309, 0x00D3, 0x00D4, 0x01A0, 0x00D6, 0x00D7,
Sissors 2:9af05743d551 486 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x01AF, 0x0303, 0x00DF,
Sissors 2:9af05743d551 487 0x00E0, 0x00E1, 0x00E2, 0x0103, 0x00E4, 0x00E5, 0x00E6, 0x00E7,
Sissors 2:9af05743d551 488 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x0301, 0x00ED, 0x00EE, 0x00EF,
Sissors 2:9af05743d551 489 0x0111, 0x00F1, 0x0323, 0x00F3, 0x00F4, 0x01A1, 0x00F6, 0x00F7,
Sissors 2:9af05743d551 490 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x01B0, 0x20AB, 0x00FF
Sissors 2:9af05743d551 491 };
Sissors 2:9af05743d551 492
Sissors 2:9af05743d551 493 #endif
Sissors 2:9af05743d551 494
Sissors 2:9af05743d551 495
Sissors 2:9af05743d551 496 #if !_TBLDEF || !_USE_LFN
Sissors 2:9af05743d551 497 #error This file is not needed in current configuration. Remove from the project.
Sissors 2:9af05743d551 498 #endif
Sissors 2:9af05743d551 499
Sissors 2:9af05743d551 500
Sissors 2:9af05743d551 501 WCHAR ff_convert ( /* Converted character, Returns zero on error */
Sissors 2:9af05743d551 502 WCHAR src, /* Character code to be converted */
Sissors 2:9af05743d551 503 UINT dir /* 0: Unicode to OEMCP, 1: OEMCP to Unicode */
Sissors 2:9af05743d551 504 )
Sissors 2:9af05743d551 505 {
Sissors 2:9af05743d551 506 WCHAR c;
Sissors 2:9af05743d551 507
Sissors 2:9af05743d551 508
Sissors 2:9af05743d551 509 if (src < 0x80) { /* ASCII */
Sissors 2:9af05743d551 510 c = src;
Sissors 2:9af05743d551 511
Sissors 2:9af05743d551 512 } else {
Sissors 2:9af05743d551 513 if (dir) { /* OEMCP to Unicode */
Sissors 2:9af05743d551 514 c = (src >= 0x100) ? 0 : Tbl[src - 0x80];
Sissors 2:9af05743d551 515
Sissors 2:9af05743d551 516 } else { /* Unicode to OEMCP */
Sissors 2:9af05743d551 517 for (c = 0; c < 0x80; c++) {
Sissors 2:9af05743d551 518 if (src == Tbl[c]) break;
Sissors 2:9af05743d551 519 }
Sissors 2:9af05743d551 520 c = (c + 0x80) & 0xFF;
Sissors 2:9af05743d551 521 }
Sissors 2:9af05743d551 522 }
Sissors 2:9af05743d551 523
Sissors 2:9af05743d551 524 return c;
Sissors 2:9af05743d551 525 }
Sissors 2:9af05743d551 526
Sissors 2:9af05743d551 527
Sissors 2:9af05743d551 528 WCHAR ff_wtoupper ( /* Upper converted character */
Sissors 2:9af05743d551 529 WCHAR chr /* Input character */
Sissors 2:9af05743d551 530 )
Sissors 2:9af05743d551 531 {
Sissors 2:9af05743d551 532 static const WCHAR tbl_lower[] = { 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0xA1, 0x00A2, 0x00A3, 0x00A5, 0x00AC, 0x00AF, 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, 0x0FF, 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, 0x192, 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, 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, 0x451, 0x452, 0x453, 0x454, 0x455, 0x456, 0x457, 0x458, 0x459, 0x45A, 0x45B, 0x45C, 0x45E, 0x45F, 0x2170, 0x2171, 0x2172, 0x2173, 0x2174, 0x2175, 0x2176, 0x2177, 0x2178, 0x2179, 0x217A, 0x217B, 0x217C, 0x217D, 0x217E, 0x217F, 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, 0 };
Sissors 2:9af05743d551 533 static const WCHAR tbl_upper[] = { 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x21, 0xFFE0, 0xFFE1, 0xFFE5, 0xFFE2, 0xFFE3, 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, 0x191, 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, 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, 0x401, 0x402, 0x403, 0x404, 0x405, 0x406, 0x407, 0x408, 0x409, 0x40A, 0x40B, 0x40C, 0x40E, 0x40F, 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, 0 };
Sissors 2:9af05743d551 534 int i;
Sissors 2:9af05743d551 535
Sissors 2:9af05743d551 536
Sissors 2:9af05743d551 537 for (i = 0; tbl_lower[i] && chr != tbl_lower[i]; i++) ;
Sissors 2:9af05743d551 538
Sissors 2:9af05743d551 539 return tbl_lower[i] ? tbl_upper[i] : chr;
Sissors 2:9af05743d551 540 }