comparison src/coding.c @ 19280:e755044718ee

(ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to CODING_FLAG_ISO_SAFE. (ENCODE_ISO_CHARACTER_DIMENSION2): Likewise. (safe_terminal_coding): New variable. (Fset_safe_terminal_coding_system_internal): New function. (init_coding_once): Initilize safe_terminal_coding. (syms_of_coding): Declare set-safe-terminal-coding-system as a Lisp function. (Vmicrosoft_code_table): New variable. (syms_of_coding): Declare it as a Lisp variable and initialize it. (detect_coding_mask): Pay attention to Vmicrosoft_code_table.
author Kenichi Handa <handa@m17n.org>
date Sun, 10 Aug 1997 04:13:19 +0000
parents 1701f2296f99
children af3d00fde172
comparison
equal deleted inserted replaced
19279:3217a3ba8ef7 19280:e755044718ee
276 /* Coding-system for writing files and sending data to process. */ 276 /* Coding-system for writing files and sending data to process. */
277 Lisp_Object Vcoding_system_for_write; 277 Lisp_Object Vcoding_system_for_write;
278 /* Coding-system actually used in the latest I/O. */ 278 /* Coding-system actually used in the latest I/O. */
279 Lisp_Object Vlast_coding_system_used; 279 Lisp_Object Vlast_coding_system_used;
280 280
281 /* A vector of length 256 which contains information about special
282 Microsoft codes. */
283 Lisp_Object Vmicrosoft_code_table;
284
281 /* Flag to inhibit code conversion of end-of-line format. */ 285 /* Flag to inhibit code conversion of end-of-line format. */
282 int inhibit_eol_conversion; 286 int inhibit_eol_conversion;
283 287
284 /* Coding-system of what terminal accept for displaying. */ 288 /* Coding system to be used to encode text for terminal display. */
285 struct coding_system terminal_coding; 289 struct coding_system terminal_coding;
286 290
287 /* Coding-system of what is sent from terminal keyboard. */ 291 /* Coding system to be used to encode text for terminal display when
292 terminal coding system is nil. */
293 struct coding_system safe_terminal_coding;
294
295 /* Coding system of what is sent from terminal keyboard. */
288 struct coding_system keyboard_coding; 296 struct coding_system keyboard_coding;
289 297
290 Lisp_Object Vfile_coding_system_alist; 298 Lisp_Object Vfile_coding_system_alist;
291 Lisp_Object Vprocess_coding_system_alist; 299 Lisp_Object Vprocess_coding_system_alist;
292 Lisp_Object Vnetwork_coding_system_alist; 300 Lisp_Object Vnetwork_coding_system_alist;
679 687
680 default: 688 default:
681 if (c < 0x80) 689 if (c < 0x80)
682 break; 690 break;
683 else if (c < 0xA0) 691 else if (c < 0xA0)
684 return 0; 692 {
693 if (VECTORP (Vmicrosoft_code_table)
694 && !NILP (XVECTOR (Vmicrosoft_code_table)->contents[c]))
695 {
696 mask &= ~(CODING_CATEGORY_MASK_ISO_7
697 | CODING_CATEGORY_MASK_ISO_7_ELSE);
698 break;
699 }
700 return 0;
701 }
685 else 702 else
686 { 703 {
687 unsigned char *src_begin = src; 704 unsigned char *src_begin = src;
688 705
689 mask &= ~(CODING_CATEGORY_MASK_ISO_7 706 mask &= ~(CODING_CATEGORY_MASK_ISO_7
1163 /* Produce codes for a DIMENSION1 character whose character set is 1180 /* Produce codes for a DIMENSION1 character whose character set is
1164 CHARSET and whose position-code is C1. Designation and invocation 1181 CHARSET and whose position-code is C1. Designation and invocation
1165 sequences are also produced in advance if necessary. */ 1182 sequences are also produced in advance if necessary. */
1166 1183
1167 1184
1168 #define ENCODE_ISO_CHARACTER_DIMENSION1(charset, c1) \ 1185 #define ENCODE_ISO_CHARACTER_DIMENSION1(charset, c1) \
1169 do { \ 1186 do { \
1170 if (CODING_SPEC_ISO_SINGLE_SHIFTING (coding)) \ 1187 if (CODING_SPEC_ISO_SINGLE_SHIFTING (coding)) \
1171 { \ 1188 { \
1172 if (coding->flags & CODING_FLAG_ISO_SEVEN_BITS) \ 1189 if (coding->flags & CODING_FLAG_ISO_SEVEN_BITS) \
1173 *dst++ = c1 & 0x7F; \ 1190 *dst++ = c1 & 0x7F; \
1174 else \ 1191 else \
1175 *dst++ = c1 | 0x80; \ 1192 *dst++ = c1 | 0x80; \
1176 CODING_SPEC_ISO_SINGLE_SHIFTING (coding) = 0; \ 1193 CODING_SPEC_ISO_SINGLE_SHIFTING (coding) = 0; \
1177 break; \ 1194 break; \
1178 } \ 1195 } \
1179 else if (charset == CODING_SPEC_ISO_PLANE_CHARSET (coding, 0)) \ 1196 else if (charset == CODING_SPEC_ISO_PLANE_CHARSET (coding, 0)) \
1180 { \ 1197 { \
1181 *dst++ = c1 & 0x7F; \ 1198 *dst++ = c1 & 0x7F; \
1182 break; \ 1199 break; \
1183 } \ 1200 } \
1184 else if (charset == CODING_SPEC_ISO_PLANE_CHARSET (coding, 1)) \ 1201 else if (charset == CODING_SPEC_ISO_PLANE_CHARSET (coding, 1)) \
1185 { \ 1202 { \
1186 *dst++ = c1 | 0x80; \ 1203 *dst++ = c1 | 0x80; \
1187 break; \ 1204 break; \
1188 } \ 1205 } \
1189 else \ 1206 else if (coding->flags & CODING_FLAG_ISO_SAFE \
1190 /* Since CHARSET is not yet invoked to any graphic planes, we \ 1207 && (CODING_SPEC_ISO_REQUESTED_DESIGNATION (coding, charset) \
1191 must invoke it, or, at first, designate it to some graphic \ 1208 == CODING_SPEC_ISO_NO_REQUESTED_DESIGNATION)) \
1192 register. Then repeat the loop to actually produce the \ 1209 { \
1193 character. */ \ 1210 /* We should not encode this character, instead produce one or \
1194 dst = encode_invocation_designation (charset, coding, dst); \ 1211 two `?'s. */ \
1212 *dst++ = CODING_INHIBIT_CHARACTER_SUBSTITUTION; \
1213 if (CHARSET_WIDTH (charset) == 2) \
1214 *dst++ = CODING_INHIBIT_CHARACTER_SUBSTITUTION; \
1215 break; \
1216 } \
1217 else \
1218 /* Since CHARSET is not yet invoked to any graphic planes, we \
1219 must invoke it, or, at first, designate it to some graphic \
1220 register. Then repeat the loop to actually produce the \
1221 character. */ \
1222 dst = encode_invocation_designation (charset, coding, dst); \
1195 } while (1) 1223 } while (1)
1196 1224
1197 /* Produce codes for a DIMENSION2 character whose character set is 1225 /* Produce codes for a DIMENSION2 character whose character set is
1198 CHARSET and whose position-codes are C1 and C2. Designation and 1226 CHARSET and whose position-codes are C1 and C2. Designation and
1199 invocation codes are also produced in advance if necessary. */ 1227 invocation codes are also produced in advance if necessary. */
1200 1228
1201 #define ENCODE_ISO_CHARACTER_DIMENSION2(charset, c1, c2) \ 1229 #define ENCODE_ISO_CHARACTER_DIMENSION2(charset, c1, c2) \
1202 do { \ 1230 do { \
1203 if (CODING_SPEC_ISO_SINGLE_SHIFTING (coding)) \ 1231 if (CODING_SPEC_ISO_SINGLE_SHIFTING (coding)) \
1204 { \ 1232 { \
1205 if (coding->flags & CODING_FLAG_ISO_SEVEN_BITS) \ 1233 if (coding->flags & CODING_FLAG_ISO_SEVEN_BITS) \
1206 *dst++ = c1 & 0x7F, *dst++ = c2 & 0x7F; \ 1234 *dst++ = c1 & 0x7F, *dst++ = c2 & 0x7F; \
1207 else \ 1235 else \
1208 *dst++ = c1 | 0x80, *dst++ = c2 | 0x80; \ 1236 *dst++ = c1 | 0x80, *dst++ = c2 | 0x80; \
1209 CODING_SPEC_ISO_SINGLE_SHIFTING (coding) = 0; \ 1237 CODING_SPEC_ISO_SINGLE_SHIFTING (coding) = 0; \
1210 break; \ 1238 break; \
1211 } \ 1239 } \
1212 else if (charset == CODING_SPEC_ISO_PLANE_CHARSET (coding, 0)) \ 1240 else if (charset == CODING_SPEC_ISO_PLANE_CHARSET (coding, 0)) \
1213 { \ 1241 { \
1214 *dst++ = c1 & 0x7F, *dst++= c2 & 0x7F; \ 1242 *dst++ = c1 & 0x7F, *dst++= c2 & 0x7F; \
1215 break; \ 1243 break; \
1216 } \ 1244 } \
1217 else if (charset == CODING_SPEC_ISO_PLANE_CHARSET (coding, 1)) \ 1245 else if (charset == CODING_SPEC_ISO_PLANE_CHARSET (coding, 1)) \
1218 { \ 1246 { \
1219 *dst++ = c1 | 0x80, *dst++= c2 | 0x80; \ 1247 *dst++ = c1 | 0x80, *dst++= c2 | 0x80; \
1220 break; \ 1248 break; \
1221 } \ 1249 } \
1222 else \ 1250 else if (coding->flags & CODING_FLAG_ISO_SAFE \
1223 /* Since CHARSET is not yet invoked to any graphic planes, we \ 1251 && (CODING_SPEC_ISO_REQUESTED_DESIGNATION (coding, charset) \
1224 must invoke it, or, at first, designate it to some graphic \ 1252 == CODING_SPEC_ISO_NO_REQUESTED_DESIGNATION)) \
1225 register. Then repeat the loop to actually produce the \ 1253 { \
1226 character. */ \ 1254 /* We should not encode this character, instead produce one or \
1227 dst = encode_invocation_designation (charset, coding, dst); \ 1255 two `?'s. */ \
1256 *dst++ = CODING_INHIBIT_CHARACTER_SUBSTITUTION; \
1257 if (CHARSET_WIDTH (charset) == 2) \
1258 *dst++ = CODING_INHIBIT_CHARACTER_SUBSTITUTION; \
1259 break; \
1260 } \
1261 else \
1262 /* Since CHARSET is not yet invoked to any graphic planes, we \
1263 must invoke it, or, at first, designate it to some graphic \
1264 register. Then repeat the loop to actually produce the \
1265 character. */ \
1266 dst = encode_invocation_designation (charset, coding, dst); \
1228 } while (1) 1267 } while (1)
1229 1268
1230 #define ENCODE_ISO_CHARACTER(charset, c1, c2) \ 1269 #define ENCODE_ISO_CHARACTER(charset, c1, c2) \
1231 do { \ 1270 do { \
1232 int c_alt, charset_alt; \ 1271 int c_alt, charset_alt; \
2329 | (NILP (flags[9]) ? 0 : CODING_FLAG_ISO_SINGLE_SHIFT) 2368 | (NILP (flags[9]) ? 0 : CODING_FLAG_ISO_SINGLE_SHIFT)
2330 | (NILP (flags[10]) ? 0 : CODING_FLAG_ISO_USE_ROMAN) 2369 | (NILP (flags[10]) ? 0 : CODING_FLAG_ISO_USE_ROMAN)
2331 | (NILP (flags[11]) ? 0 : CODING_FLAG_ISO_USE_OLDJIS) 2370 | (NILP (flags[11]) ? 0 : CODING_FLAG_ISO_USE_OLDJIS)
2332 | (NILP (flags[12]) ? 0 : CODING_FLAG_ISO_NO_DIRECTION) 2371 | (NILP (flags[12]) ? 0 : CODING_FLAG_ISO_NO_DIRECTION)
2333 | (NILP (flags[13]) ? 0 : CODING_FLAG_ISO_INIT_AT_BOL) 2372 | (NILP (flags[13]) ? 0 : CODING_FLAG_ISO_INIT_AT_BOL)
2334 | (NILP (flags[14]) ? 0 : CODING_FLAG_ISO_DESIGNATE_AT_BOL)); 2373 | (NILP (flags[14]) ? 0 : CODING_FLAG_ISO_DESIGNATE_AT_BOL)
2374 | (NILP (flags[15]) ? 0 : CODING_FLAG_ISO_SAFE)
2375 );
2335 2376
2336 /* Invoke graphic register 0 to plane 0. */ 2377 /* Invoke graphic register 0 to plane 0. */
2337 CODING_SPEC_ISO_INVOCATION (coding, 0) = 0; 2378 CODING_SPEC_ISO_INVOCATION (coding, 0) = 0;
2338 /* Invoke graphic register 1 to plane 1 if we can use full 8-bit. */ 2379 /* Invoke graphic register 1 to plane 1 if we can use full 8-bit. */
2339 CODING_SPEC_ISO_INVOCATION (coding, 1) 2380 CODING_SPEC_ISO_INVOCATION (coding, 1)
2413 if (! (coding->flags & CODING_FLAG_ISO_SINGLE_SHIFT)) 2454 if (! (coding->flags & CODING_FLAG_ISO_SINGLE_SHIFT))
2414 /* Without any shifting, only REG 0 and 1 can be used. */ 2455 /* Without any shifting, only REG 0 and 1 can be used. */
2415 default_reg_bits &= 3; 2456 default_reg_bits &= 3;
2416 } 2457 }
2417 2458
2418 for (charset = 0; charset <= MAX_CHARSET; charset++) 2459 if (! (coding->flags & CODING_FLAG_ISO_SAFE))
2419 if (CHARSET_VALID_P (charset) 2460 for (charset = 0; charset <= MAX_CHARSET; charset++)
2420 && (CODING_SPEC_ISO_REQUESTED_DESIGNATION (coding, charset) 2461 if (CHARSET_VALID_P (charset)
2421 == CODING_SPEC_ISO_NO_REQUESTED_DESIGNATION)) 2462 && (CODING_SPEC_ISO_REQUESTED_DESIGNATION (coding, charset)
2422 { 2463 == CODING_SPEC_ISO_NO_REQUESTED_DESIGNATION))
2423 /* We have not yet decided where to designate CHARSET. */ 2464 {
2424 int reg_bits = default_reg_bits; 2465 /* We have not yet decided where to designate CHARSET. */
2425 2466 int reg_bits = default_reg_bits;
2426 if (CHARSET_CHARS (charset) == 96) 2467
2427 /* A charset of CHARS96 can't be designated to REG 0. */ 2468 if (CHARSET_CHARS (charset) == 96)
2428 reg_bits &= ~1; 2469 /* A charset of CHARS96 can't be designated to REG 0. */
2429 2470 reg_bits &= ~1;
2430 if (reg_bits) 2471
2431 /* There exist some default graphic register. */ 2472 if (reg_bits)
2432 CODING_SPEC_ISO_REQUESTED_DESIGNATION (coding, charset) 2473 /* There exist some default graphic register. */
2433 = (reg_bits & 1 2474 CODING_SPEC_ISO_REQUESTED_DESIGNATION (coding, charset)
2434 ? 0 : (reg_bits & 2 ? 1 : (reg_bits & 4 ? 2 : 3))); 2475 = (reg_bits & 1
2435 else 2476 ? 0 : (reg_bits & 2 ? 1 : (reg_bits & 4 ? 2 : 3)));
2436 /* We anyway have to designate CHARSET to somewhere. */ 2477 else
2437 CODING_SPEC_ISO_REQUESTED_DESIGNATION (coding, charset) 2478 /* We anyway have to designate CHARSET to somewhere. */
2438 = (CHARSET_CHARS (charset) == 94 2479 CODING_SPEC_ISO_REQUESTED_DESIGNATION (coding, charset)
2439 ? 0 2480 = (CHARSET_CHARS (charset) == 94
2440 : ((coding->flags & CODING_FLAG_ISO_LOCKING_SHIFT 2481 ? 0
2441 || ! coding->flags & CODING_FLAG_ISO_SEVEN_BITS) 2482 : ((coding->flags & CODING_FLAG_ISO_LOCKING_SHIFT
2442 ? 1 2483 || ! coding->flags & CODING_FLAG_ISO_SEVEN_BITS)
2443 : (coding->flags & CODING_FLAG_ISO_SINGLE_SHIFT 2484 ? 1
2444 ? 2 : 0))); 2485 : (coding->flags & CODING_FLAG_ISO_SINGLE_SHIFT
2445 } 2486 ? 2 : 0)));
2487 }
2446 } 2488 }
2447 coding->require_flushing = 1; 2489 coding->require_flushing = 1;
2448 break; 2490 break;
2449 2491
2450 case 3: 2492 case 3:
2606 src++; 2648 src++;
2607 if (mask == CODING_CATEGORY_MASK_ANY) 2649 if (mask == CODING_CATEGORY_MASK_ANY)
2608 /* No valid ISO2022 code follows C. Try again. */ 2650 /* No valid ISO2022 code follows C. Try again. */
2609 goto label_loop_detect_coding; 2651 goto label_loop_detect_coding;
2610 } 2652 }
2611 else if (c == ISO_CODE_SS2 || c == ISO_CODE_SS3)
2612 /* C is an ISO2022 specific control code of C1,
2613 or the first byte of SJIS's 2-byte character code,
2614 or a leading code of Emacs. */
2615 mask = (detect_coding_iso2022 (src, src_end)
2616 | detect_coding_sjis (src, src_end)
2617 | detect_coding_emacs_mule (src, src_end)
2618 | CODING_CATEGORY_MASK_BINARY);
2619
2620 else if (c == ISO_CODE_CSI
2621 && (src < src_end
2622 && (*src == ']'
2623 || (src + 1 < src_end
2624 && src[1] == ']'
2625 && (*src == '0' || *src == '1' || *src == '2')))))
2626 /* C is an ISO2022's control-sequence-introducer. */
2627 mask = (detect_coding_iso2022 (src, src_end)
2628 | detect_coding_sjis (src, src_end)
2629 | detect_coding_emacs_mule (src, src_end)
2630 | CODING_CATEGORY_MASK_BINARY);
2631
2632 else if (c < 0xA0) 2653 else if (c < 0xA0)
2633 /* C is the first byte of SJIS character code, 2654 {
2634 or a leading-code of Emacs. */ 2655 /* If C is a special Microsoft code,
2635 mask = (detect_coding_sjis (src, src_end) 2656 or is an ISO2022 specific control code of C1 (SS2 or SS3),
2636 | detect_coding_emacs_mule (src, src_end) 2657 or is an ISO2022 control-sequence-introducer (CSI),
2637 | CODING_CATEGORY_MASK_BINARY); 2658 we should also consider the possibility of someof ISO2022 codings. */
2638 2659 if ((VECTORP (Vmicrosoft_code_table)
2660 && !NILP (XVECTOR (Vmicrosoft_code_table)->contents[c]))
2661 || (c == ISO_CODE_SS2 || c == ISO_CODE_SS3)
2662 || (c == ISO_CODE_CSI
2663 && (src < src_end
2664 && (*src == ']'
2665 || (src + 1 < src_end
2666 && src[1] == ']'
2667 && (*src == '0' || *src == '1' || *src == '2'))))))
2668 mask = (detect_coding_iso2022 (src, src_end)
2669 | detect_coding_sjis (src, src_end)
2670 | detect_coding_emacs_mule (src, src_end)
2671 | CODING_CATEGORY_MASK_BINARY);
2672
2673 else
2674 /* C is the first byte of SJIS character code, or a
2675 leading-code of Emacs. */
2676 mask = (detect_coding_sjis (src, src_end)
2677 | detect_coding_emacs_mule (src, src_end)
2678 | CODING_CATEGORY_MASK_BINARY);
2679 }
2639 else 2680 else
2640 /* C is a character of ISO2022 in graphic plane right, 2681 /* C is a character of ISO2022 in graphic plane right,
2641 or a SJIS's 1-byte character code (i.e. JISX0201), 2682 or a SJIS's 1-byte character code (i.e. JISX0201),
2642 or the first byte of BIG5's 2-byte code. */ 2683 or the first byte of BIG5's 2-byte code. */
2643 mask = (detect_coding_iso2022 (src, src_end) 2684 mask = (detect_coding_iso2022 (src, src_end)
3545 CHECK_SYMBOL (coding_system, 0); 3586 CHECK_SYMBOL (coding_system, 0);
3546 setup_coding_system (Fcheck_coding_system (coding_system), &terminal_coding); 3587 setup_coding_system (Fcheck_coding_system (coding_system), &terminal_coding);
3547 return Qnil; 3588 return Qnil;
3548 } 3589 }
3549 3590
3591 DEFUN ("set-safe-terminal-coding-system-internal",
3592 Fset_safe_terminal_coding_system_internal,
3593 Sset_safe_terminal_coding_system_internal, 1, 1, 0, "")
3594 (coding_system)
3595 Lisp_Object coding_system;
3596 {
3597 CHECK_SYMBOL (coding_system, 0);
3598 setup_coding_system (Fcheck_coding_system (coding_system),
3599 &safe_terminal_coding);
3600 return Qnil;
3601 }
3602
3550 DEFUN ("terminal-coding-system", 3603 DEFUN ("terminal-coding-system",
3551 Fterminal_coding_system, Sterminal_coding_system, 0, 0, 0, 3604 Fterminal_coding_system, Sterminal_coding_system, 0, 0, 0,
3552 "Return coding-system of your terminal.") 3605 "Return coding-system of your terminal.")
3553 () 3606 ()
3554 { 3607 {
3708 conversion_buffer_size = MINIMUM_CONVERSION_BUFFER_SIZE; 3761 conversion_buffer_size = MINIMUM_CONVERSION_BUFFER_SIZE;
3709 conversion_buffer = (char *) xmalloc (MINIMUM_CONVERSION_BUFFER_SIZE); 3762 conversion_buffer = (char *) xmalloc (MINIMUM_CONVERSION_BUFFER_SIZE);
3710 3763
3711 setup_coding_system (Qnil, &keyboard_coding); 3764 setup_coding_system (Qnil, &keyboard_coding);
3712 setup_coding_system (Qnil, &terminal_coding); 3765 setup_coding_system (Qnil, &terminal_coding);
3766 setup_coding_system (Qnil, &safe_terminal_coding);
3713 3767
3714 #if defined (MSDOS) || defined (WINDOWSNT) 3768 #if defined (MSDOS) || defined (WINDOWSNT)
3715 system_eol_type = CODING_EOL_CRLF; 3769 system_eol_type = CODING_EOL_CRLF;
3716 #else 3770 #else
3717 system_eol_type = CODING_EOL_LF; 3771 system_eol_type = CODING_EOL_LF;
3822 defsubr (&Sdecode_sjis_char); 3876 defsubr (&Sdecode_sjis_char);
3823 defsubr (&Sencode_sjis_char); 3877 defsubr (&Sencode_sjis_char);
3824 defsubr (&Sdecode_big5_char); 3878 defsubr (&Sdecode_big5_char);
3825 defsubr (&Sencode_big5_char); 3879 defsubr (&Sencode_big5_char);
3826 defsubr (&Sset_terminal_coding_system_internal); 3880 defsubr (&Sset_terminal_coding_system_internal);
3881 defsubr (&Sset_safe_terminal_coding_system_internal);
3827 defsubr (&Sterminal_coding_system); 3882 defsubr (&Sterminal_coding_system);
3828 defsubr (&Sset_keyboard_coding_system_internal); 3883 defsubr (&Sset_keyboard_coding_system_internal);
3829 defsubr (&Skeyboard_coding_system); 3884 defsubr (&Skeyboard_coding_system);
3830 defsubr (&Sfind_operation_coding_system); 3885 defsubr (&Sfind_operation_coding_system);
3831 3886
3952 &Vdefault_process_coding_system, 4007 &Vdefault_process_coding_system,
3953 "Cons of coding systems used for process I/O by default.\n\ 4008 "Cons of coding systems used for process I/O by default.\n\
3954 The car part is used for decoding a process output,\n\ 4009 The car part is used for decoding a process output,\n\
3955 the cdr part is used for encoding a text to be sent to a process."); 4010 the cdr part is used for encoding a text to be sent to a process.");
3956 Vdefault_process_coding_system = Qnil; 4011 Vdefault_process_coding_system = Qnil;
4012
4013 DEFVAR_LISP ("special-microsoft-code-table", &Vmicrosoft_code_table,
4014 "Table of special Microsoft codes in the range 128..159 (inclusive).\n\
4015 This is a vector of length 256.\n\
4016 If Nth element is non-nil, the existence of code N in a file\n\
4017 (or output of subprocess) doesn't prevent it to be detected as\n\
4018 a coding system of ISO 2022 variant (e.g. iso-latin-1) on reading a file\n\
4019 or reading output of a subprocess.\n\
4020 Only 128th through 159th elements has a meaning.");
4021 Vmicrosoft_code_table = Fmake_vector (make_number (256), Qnil);
3957 } 4022 }
3958 4023
3959 #endif /* emacs */ 4024 #endif /* emacs */