1 /* 2 * This file was generated automatically - don't edit it. 3 * File contains iconv CCS tables for cp852 encoding. 4 */ 5 6 #include "ccsbi.h" 7 8 #if defined (ICONV_TO_UCS_CCS_CP852) \ 9 || defined (ICONV_FROM_UCS_CCS_CP852) 10 11 #include <_ansi.h> 12 #include <sys/types.h> 13 #include <sys/param.h> 14 #include "ccs.h" 15 #include "ccsnames.h" 16 17 #if (_BYTE_ORDER == _LITTLE_ENDIAN) 18 # define W(word) (word) & 0xFF, (word) >> 8 19 #elif (_BYTE_ORDER == _BIG_ENDIAN) 20 # define W(word) (word) >> 8, (word) & 0xFF 21 #else 22 # error "Unknown byte order." 23 #endif 24 25 /* 26 * 8-bit cp852 -> UCS table (512 bytes). 27 * ====================================================================== 28 */ 29 #if defined (ICONV_TO_UCS_CCS_CP852) 30 31 static const __uint16_t 32 to_ucs_speed_cp852[] = 33 { 34 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, 35 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, 36 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, 37 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, 38 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, 39 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, 40 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, 41 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, 42 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, 43 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, 44 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, 45 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, 46 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, 47 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, 48 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, 49 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, 50 0x00C7,0x00FC,0x00E9,0x00E2,0x00E4,0x016F,0x0107,0x00E7, 51 0x0142,0x00EB,0x0150,0x0151,0x00EE,0x0179,0x00C4,0x0106, 52 0x00C9,0x0139,0x013A,0x00F4,0x00F6,0x013D,0x013E,0x015A, 53 0x015B,0x00D6,0x00DC,0x0164,0x0165,0x0141,0x00D7,0x010D, 54 0x00E1,0x00ED,0x00F3,0x00FA,0x0104,0x0105,0x017D,0x017E, 55 0x0118,0x0119,0x00AC,0x017A,0x010C,0x015F,0x00AB,0x00BB, 56 0x2591,0x2592,0x2593,0x2502,0x2524,0x00C1,0x00C2,0x011A, 57 0x015E,0x2563,0x2551,0x2557,0x255D,0x017B,0x017C,0x2510, 58 0x2514,0x2534,0x252C,0x251C,0x2500,0x253C,0x0102,0x0103, 59 0x255A,0x2554,0x2569,0x2566,0x2560,0x2550,0x256C,0x00A4, 60 0x0111,0x0110,0x010E,0x00CB,0x010F,0x0147,0x00CD,0x00CE, 61 0x011B,0x2518,0x250C,0x2588,0x2584,0x0162,0x016E,0x2580, 62 0x00D3,0x00DF,0x00D4,0x0143,0x0144,0x0148,0x0160,0x0161, 63 0x0154,0x00DA,0x0155,0x0170,0x00FD,0x00DD,0x0163,0x00B4, 64 0x00AD,0x02DD,0x02DB,0x02C7,0x02D8,0x00A7,0x00F7,0x00B8, 65 0x00B0,0x00A8,0x02D9,0x0171,0x0158,0x0159,0x25A0,0x00A0, 66 67 }; 68 69 #endif /* ICONV_TO_UCS_CCS_CP852 */ 70 71 /* 72 * 8-bit UCS -> cp852 speed-optimized table (1538 bytes). 73 * ====================================================================== 74 */ 75 76 #if defined (ICONV_FROM_UCS_CCS_CP852) 77 78 static const unsigned char 79 from_ucs_speed_cp852[] = 80 { 81 W(0x00A0), /* Real 0xFF mapping. 0xFF is used to mark invalid codes */ 82 /* Heading Block */ 83 W(0x0202),W(0x0302),W(0x0402),W(INVBLK), 84 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 85 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 86 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 87 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 88 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 89 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 90 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 91 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 92 W(INVBLK),W(0x0502),W(INVBLK),W(INVBLK), 93 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 94 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 95 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 96 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 97 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 98 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 99 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 100 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 101 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 102 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 103 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 104 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 105 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 106 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 107 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 108 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 109 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 110 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 111 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 112 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 113 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 114 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 115 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 116 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 117 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 118 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 119 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 120 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 121 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 122 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 123 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 124 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 125 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 126 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 127 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 128 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 129 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 130 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 131 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 132 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 133 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 134 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 135 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 136 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 137 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 138 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 139 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 140 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 141 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 142 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 143 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 144 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 145 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 146 W(INVBLK),W(INVBLK),W(INVBLK),W(INVBLK), 147 /* Block 1, Array index 0x0202 */ 148 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07, 149 0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, 150 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17, 151 0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, 152 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27, 153 0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, 154 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37, 155 0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, 156 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47, 157 0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, 158 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57, 159 0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, 160 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67, 161 0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, 162 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77, 163 0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, 164 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 165 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 166 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 167 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 168 0xFF,0xFF,0xFF,0xFF,0xCF,0xFF,0xFF,0xF5, 169 0xF9,0xFF,0xFF,0xAE,0xAA,0xF0,0xFF,0xFF, 170 0xF8,0xFF,0xFF,0xFF,0xEF,0xFF,0xFF,0xFF, 171 0xF7,0xFF,0xFF,0xAF,0xFF,0xFF,0xFF,0xFF, 172 0xFF,0xB5,0xB6,0xFF,0x8E,0xFF,0xFF,0x80, 173 0xFF,0x90,0xFF,0xD3,0xFF,0xD6,0xD7,0xFF, 174 0xFF,0xFF,0xFF,0xE0,0xE2,0xFF,0x99,0x9E, 175 0xFF,0xFF,0xE9,0xFF,0x9A,0xED,0xFF,0xE1, 176 0xFF,0xA0,0x83,0xFF,0x84,0xFF,0xFF,0x87, 177 0xFF,0x82,0xFF,0x89,0xFF,0xA1,0x8C,0xFF, 178 0xFF,0xFF,0xFF,0xA2,0x93,0xFF,0x94,0xF6, 179 0xFF,0xFF,0xA3,0xFF,0x81,0xEC,0xFF,0xFF, 180 /* Block 2, Array index 0x0302 */ 181 0xFF,0xFF,0xC6,0xC7,0xA4,0xA5,0x8F,0x86, 182 0xFF,0xFF,0xFF,0xFF,0xAC,0x9F,0xD2,0xD4, 183 0xD1,0xD0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 184 0xA8,0xA9,0xB7,0xD8,0xFF,0xFF,0xFF,0xFF, 185 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 186 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 187 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 188 0xFF,0x91,0x92,0xFF,0xFF,0x95,0x96,0xFF, 189 0xFF,0x9D,0x88,0xE3,0xE4,0xFF,0xFF,0xD5, 190 0xE5,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 191 0x8A,0x8B,0xFF,0xFF,0xE8,0xEA,0xFF,0xFF, 192 0xFC,0xFD,0x97,0x98,0xFF,0xFF,0xB8,0xAD, 193 0xE6,0xE7,0xDD,0xEE,0x9B,0x9C,0xFF,0xFF, 194 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xDE,0x85, 195 0xEB,0xFB,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 196 0xFF,0x8D,0xAB,0xBD,0xBE,0xA6,0xA7,0xFF, 197 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 198 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 199 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 200 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 201 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 202 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 203 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 204 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 205 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 206 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 207 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 208 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 209 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 210 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 211 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 212 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 213 /* Block 3, Array index 0x0402 */ 214 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 215 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 216 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 217 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 218 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 219 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 220 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 221 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 222 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 223 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 224 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 225 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 226 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 227 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 228 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 229 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 230 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 231 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 232 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 233 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 234 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 235 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 236 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 237 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 238 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF3, 239 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 240 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 241 0xF4,0xFA,0xFF,0xF2,0xFF,0xF1,0xFF,0xFF, 242 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 243 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 244 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 245 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 246 /* Block 38, Array index 0x0502 */ 247 0xC4,0xFF,0xB3,0xFF,0xFF,0xFF,0xFF,0xFF, 248 0xFF,0xFF,0xFF,0xFF,0xDA,0xFF,0xFF,0xFF, 249 0xBF,0xFF,0xFF,0xFF,0xC0,0xFF,0xFF,0xFF, 250 0xD9,0xFF,0xFF,0xFF,0xC3,0xFF,0xFF,0xFF, 251 0xFF,0xFF,0xFF,0xFF,0xB4,0xFF,0xFF,0xFF, 252 0xFF,0xFF,0xFF,0xFF,0xC2,0xFF,0xFF,0xFF, 253 0xFF,0xFF,0xFF,0xFF,0xC1,0xFF,0xFF,0xFF, 254 0xFF,0xFF,0xFF,0xFF,0xC5,0xFF,0xFF,0xFF, 255 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 256 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 257 0xCD,0xBA,0xFF,0xFF,0xC9,0xFF,0xFF,0xBB, 258 0xFF,0xFF,0xC8,0xFF,0xFF,0xBC,0xFF,0xFF, 259 0xCC,0xFF,0xFF,0xB9,0xFF,0xFF,0xCB,0xFF, 260 0xFF,0xCA,0xFF,0xFF,0xCE,0xFF,0xFF,0xFF, 261 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 262 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 263 0xDF,0xFF,0xFF,0xFF,0xDC,0xFF,0xFF,0xFF, 264 0xDB,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 265 0xFF,0xB0,0xB1,0xB2,0xFF,0xFF,0xFF,0xFF, 266 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 267 0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 268 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 269 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 270 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 271 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 272 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 273 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 274 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 275 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 276 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 277 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 278 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 279 }; 280 281 #endif /* ICONV_FROM_UCS_CCS_CP852 */ 282 283 /* 284 * cp852 CCS description table. 285 * ====================================================================== 286 */ 287 const iconv_ccs_t 288 _iconv_ccs_cp852 = 289 { 290 TABLE_VERSION_1, /* Table version */ 291 ICONV_CCS_CP852, /* CCS name */ 292 TABLE_8BIT, /* Table bits */ 293 0, /* Not Used */ 294 #if defined (ICONV_FROM_UCS_CCS_CP852) 295 (__uint16_t *)&from_ucs_speed_cp852, /* UCS -> cp852 table */ 296 #else 297 (__uint16_t *)NULL, 298 #endif 299 0, /* Not Used */ 300 #if defined (ICONV_TO_UCS_CCS_CP852) 301 (__uint16_t *)&to_ucs_speed_cp852 /* cp852 -> UCS table */ 302 #else 303 (__uint16_t *)NULL, 304 #endif 305 }; 306 307 #endif /* ICONV_TO_UCS_CCS_CP852) || ... */ 308 309