changeset 4690:257b468bf2ca

Move the #'query-coding-region implementation to C. This is necessary because there is no reasonable way to access the corresponding mswindows-multibyte functionality from Lisp, and we need such functionality if we're going to have a reliable and portable #'query-coding-region implementation. However, this change doesn't yet provide #'query-coding-region for the mswindow-multibyte coding systems, there should be no functional differences between an XEmacs with this change and one without it. src/ChangeLog addition: 2009-09-19 Aidan Kehoe <kehoea@parhasard.net> Move the #'query-coding-region implementation to C. This is necessary because there is no reasonable way to access the corresponding mswindows-multibyte functionality from Lisp, and we need such functionality if we're going to have a reliable and portable #'query-coding-region implementation. However, this change doesn't yet provide #'query-coding-region for the mswindow-multibyte coding systems, there should be no functional differences between an XEmacs with this change and one without it. * mule-coding.c (struct fixed_width_coding_system): Add a new coding system type, fixed_width, and implement it. It uses the CCL infrastructure but has a much simpler creation API, and its own query_method, formerly in lisp/mule/mule-coding.el. * unicode.c: Move the Unicode query method implementation here from unicode.el. * lisp.h: Declare Fmake_coding_system_internal, Fcopy_range_table here. * intl-win32.c (complex_vars_of_intl_win32): Use Fmake_coding_system_internal, not Fmake_coding_system. * general-slots.h: Add Qsucceeded, Qunencodable, Qinvalid_sequence here. * file-coding.h (enum coding_system_variant): Add fixed_width_coding_system here. (struct coding_system_methods): Add query_method and query_lstream_method to the coding system methods. Provide flags for the query methods. Declare the default query method; initialise it correctly in INITIALIZE_CODING_SYSTEM_TYPE. * file-coding.c (default_query_method): New function, the default query method for coding systems that do not set it. Moved from coding.el. (make_coding_system_1): Accept new elements in PROPS in #'make-coding-system; aliases, a list of aliases; safe-chars and safe-charsets (these were previously accepted but not saved); and category. (Fmake_coding_system_internal): New function, what used to be #'make-coding-system--on Mule builds, we've now moved some of the functionality of this to Lisp. (Fcoding_system_canonical_name_p): Move this earlier in the file, since it's now called from within make_coding_system_1. (Fquery_coding_region): Move the implementation of this here, from coding.el. (complex_vars_of_file_coding): Call Fmake_coding_system_internal, not Fmake_coding_system; specify safe-charsets properties when we're a mule build. * extents.h (mouse_highlight_priority, Fset_extent_priority, Fset_extent_face, Fmap_extents): Make these available to other C files. lisp/ChangeLog addition: 2009-09-19 Aidan Kehoe <kehoea@parhasard.net> Move the #'query-coding-region implementation to C. * coding.el: Consolidate code that depends on the presence or absence of Mule at the end of this file. (default-query-coding-region, query-coding-region): Move these functions to C. (default-query-coding-region-safe-charset-skip-chars-map): Remove this variable, the corresponding C variable is Vdefault_query_coding_region_chartab_cache in file-coding.c. (query-coding-string): Update docstring to reflect actual multiple values, be more careful about not modifying a range table that we're currently mapping over. (encode-coding-char): Make the implementation of this simpler. (featurep 'mule): Autoload #'make-coding-system from mule/make-coding-system.el if we're a mule build; provide an appropriate compiler macro. Do various non-mule compatibility things if we're not a mule build. * update-elc.el (additional-dump-dependencies): Add mule/make-coding-system as a dump time dependency if we're a mule build. * unicode.el (ccl-encode-to-ucs-2): (decode-char): (encode-char): Move these earlier in the file, for the sake of some byte compile warnings. (unicode-query-coding-region): Move this to unicode.c * mule/make-coding-system.el: New file, not dumped. Contains the functionality to rework the arguments necessary for fixed-width coding systems, and contains the implementation of #'make-coding-system, which now calls #'make-coding-system-internal. * mule/vietnamese.el (viscii): * mule/latin.el (iso-8859-2): (windows-1250): (iso-8859-3): (iso-8859-4): (iso-8859-14): (iso-8859-15): (iso-8859-16): (iso-8859-9): (macintosh): (windows-1252): * mule/hebrew.el (iso-8859-8): * mule/greek.el (iso-8859-7): (windows-1253): * mule/cyrillic.el (iso-8859-5): (koi8-r): (koi8-u): (windows-1251): (alternativnyj): (koi8-ru): (koi8-t): (koi8-c): (koi8-o): * mule/arabic.el (iso-8859-6): (windows-1256): Move all these coding systems to being of type fixed-width, not of type CCL. This allows the distinct query-coding-region for them to be in C, something which will eventually allow us to implement query-coding-region for the mswindows-multibyte coding systems. * mule/general-late.el (posix-charset-to-coding-system-hash): Document why we're pre-emptively persuading the byte compiler that the ELC for this file needs to be written using escape-quoted. Call #'set-unicode-query-skip-chars-args, now the Unicode query-coding-region implementation is in C. * mule/thai-xtis.el (tis-620): Don't bother checking whether we're XEmacs or not here. * mule/mule-coding.el: Move the eight bit fixed-width functionality from this file to make-coding-system.el. tests/ChangeLog addition: 2009-09-19 Aidan Kehoe <kehoea@parhasard.net> * automated/mule-tests.el: Check a coding system's type, not an 8-bit-fixed property, for whether that coding system should be treated as a fixed-width coding system. * automated/query-coding-tests.el: Don't test the query coding functionality for mswindows-multibyte coding systems, it's not yet implemented.
author Aidan Kehoe <kehoea@parhasard.net>
date Sat, 19 Sep 2009 22:53:13 +0100
parents 0636c6ccb430
children 3ba90c659d01
files lisp/ChangeLog lisp/coding.el lisp/mule/arabic.el lisp/mule/cyrillic.el lisp/mule/general-late.el lisp/mule/greek.el lisp/mule/hebrew.el lisp/mule/latin.el lisp/mule/make-coding-system.el lisp/mule/mule-coding.el lisp/mule/thai-xtis.el lisp/mule/vietnamese.el lisp/unicode.el lisp/update-elc.el src/ChangeLog src/extents.h src/file-coding.c src/file-coding.h src/general-slots.h src/intl-win32.c src/lisp.h src/mule-coding.c src/rangetab.c src/unicode.c tests/ChangeLog tests/automated/mule-tests.el tests/automated/query-coding-tests.el
diffstat 27 files changed, 5779 insertions(+), 4720 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Sat Sep 19 17:56:23 2009 +0200
+++ b/lisp/ChangeLog	Sat Sep 19 22:53:13 2009 +0100
@@ -1,3 +1,78 @@
+2009-09-19  Aidan Kehoe  <kehoea@parhasard.net>
+
+	Move the #'query-coding-region implementation to C.
+	* coding.el: 
+	Consolidate code that depends on the presence or absence of Mule
+	at the end of this file. 
+	(default-query-coding-region, query-coding-region):
+	Move these functions to C. 
+	(default-query-coding-region-safe-charset-skip-chars-map):
+	Remove this variable, the corresponding C variable is
+	Vdefault_query_coding_region_chartab_cache in file-coding.c. 
+	(query-coding-string): Update docstring to reflect actual multiple
+	values, be more careful about not modifying a range table that
+	we're currently mapping over.
+	(encode-coding-char): Make the implementation of this simpler.
+	(featurep 'mule): Autoload #'make-coding-system from
+	mule/make-coding-system.el if we're a mule build; provide an
+	appropriate compiler macro. 
+	Do various non-mule compatibility things if we're not a mule
+	build. 
+	* update-elc.el (additional-dump-dependencies): 
+	Add mule/make-coding-system as a dump time dependency if we're a
+	mule build. 
+	* unicode.el (ccl-encode-to-ucs-2): 
+	(decode-char): 
+	(encode-char): 
+	Move these earlier in the file, for the sake of some byte compile
+	warnings. 
+	(unicode-query-coding-region): 	
+	Move this to unicode.c
+	* mule/make-coding-system.el:
+	New file, not dumped. Contains the functionality to rework the
+	arguments necessary for fixed-width coding systems, and contains
+	the implementation of #'make-coding-system, which now calls
+	#'make-coding-system-internal.
+	* mule/vietnamese.el (viscii): 
+	* mule/latin.el (iso-8859-2): 
+	(windows-1250): 
+	(iso-8859-3): 
+	(iso-8859-4): 
+	(iso-8859-14): 
+	(iso-8859-15): 
+	(iso-8859-16): 
+	(iso-8859-9): 
+	(macintosh): 
+	(windows-1252): 
+	* mule/hebrew.el (iso-8859-8): 
+	* mule/greek.el (iso-8859-7): 
+	(windows-1253): 
+	* mule/cyrillic.el (iso-8859-5): 
+	(koi8-r): 
+	(koi8-u): 
+	(windows-1251): 
+	(alternativnyj): 
+	(koi8-ru): 
+	(koi8-t): 
+	(koi8-c): 
+	(koi8-o): 
+	* mule/arabic.el (iso-8859-6): 	
+	(windows-1256): 
+	Move all these coding systems to being of type fixed-width, not of
+	type CCL. This allows the distinct query-coding-region for them to
+	be in C, something which will eventually allow us to implement
+	query-coding-region for the mswindows-multibyte coding systems.
+	* mule/general-late.el (posix-charset-to-coding-system-hash): 
+	Document why we're pre-emptively persuading the byte compiler that
+	the ELC for this file needs to be written using escape-quoted.
+	Call #'set-unicode-query-skip-chars-args, now the Unicode
+	query-coding-region implementation is in C. 
+	* mule/thai-xtis.el (tis-620): 
+	Don't bother checking whether we're XEmacs or not here.
+	* mule/mule-coding.el: 
+	Move the eight bit fixed-width functionality from this file to
+	make-coding-system.el.
+
 2009-09-14  Michael Sperber  <mike@xemacs.org>
 
 	* frame.el (pre-display-buffer-function): Don't set to
--- a/lisp/coding.el	Sat Sep 19 17:56:23 2009 +0200
+++ b/lisp/coding.el	Sat Sep 19 22:53:13 2009 +0100
@@ -270,25 +270,12 @@
    (terminal terminal-coding-system)
    (keyboard keyboard-coding-system)))
 
-(when (not (featurep 'mule))
-  (define-coding-system-alias 'escape-quoted 'binary)
-  ;; these are so that gnus and friends work when not mule
-  (define-coding-system-alias 'iso-8859-1 'raw-text)
-  ;; We're misrepresenting ourselves to the gnus code by saying we support
-  ;; both.
-  ; (define-coding-system-alias 'iso-8859-2 'raw-text)
-  (define-coding-system-alias 'ctext 'raw-text))
-
 (make-compatible-variable 'enable-multibyte-characters "Unimplemented")
 
 ;; Sure would be nice to be able to use defface here. 
 (copy-face 'highlight 'query-coding-warning-face)
 
-(defvar default-query-coding-region-safe-charset-skip-chars-map
-  #s(hash-table test equal data ())
-  "A map from list of charsets to `skip-chars-forward' arguments for them.")
-
-(defsubst query-coding-clear-highlights (begin end &optional buffer-or-string)
+(defun query-coding-clear-highlights (begin end &optional buffer-or-string)
   "Remove extent faces added by `query-coding-region' between BEGIN and END.
 
 Optional argument BUFFER-OR-STRING is the buffer or string to use, and
@@ -302,170 +289,6 @@
                              (extent-face extent))
                      (delete-extent extent))) buffer-or-string begin end))
 
-(defun* default-query-coding-region (begin end coding-system
-				     &optional buffer ignore-invalid-sequencesp
-                                     errorp highlightp)
-  "The default `query-coding-region' implementation.
-
-Uses the `safe-charsets' and `safe-chars' coding system properties.
-The former is a list of XEmacs character sets that can be safely
-encoded by CODING-SYSTEM; the latter a char table describing, in
-addition, characters that can be safely encoded by CODING-SYSTEM.
-
-Does not support IGNORE-INVALID-SEQUENCESP."
-  (check-argument-type #'coding-system-p
-                       (setq coding-system (find-coding-system coding-system)))
-  (check-argument-type #'integer-or-marker-p begin)
-  (check-argument-type #'integer-or-marker-p end)
-  (let* ((safe-charsets
-          (or (coding-system-get coding-system 'safe-charsets)
-	      (coding-system-get (coding-system-base coding-system)
-				 'safe-charsets)))
-         (safe-chars
-	  (or (coding-system-get coding-system 'safe-chars)
-	      (coding-system-get (coding-system-base coding-system)
-				 'safe-chars)))
-         (skip-chars-arg
-          (gethash safe-charsets
-                   default-query-coding-region-safe-charset-skip-chars-map))
-         (ranges (make-range-table))
-         (case-fold-search nil)
-         fail-range-start fail-range-end char-after
-	 looking-at-arg failed extent)
-    ;; Coding systems with a value of t for safe-charsets support everything.
-    (when (eq t safe-charsets)
-      (return-from default-query-coding-region (values t nil)))
-    (unless skip-chars-arg
-      (setq skip-chars-arg
-	    (puthash safe-charsets
-		     (mapconcat #'charset-skip-chars-string
-				safe-charsets "")
-		     default-query-coding-region-safe-charset-skip-chars-map)))
-    (when highlightp
-      (query-coding-clear-highlights begin end buffer))
-    (if (and (zerop (length skip-chars-arg)) (null safe-chars))
-	(progn
-	    ;; Uh-oh, nothing known about this coding system. Fail. 
-	    (when errorp 
-	      (error 'text-conversion-error
-		     "Coding system doesn't say what it can encode"
-		     (coding-system-name coding-system)))
-	    (put-range-table begin end t ranges)
-	    (when highlightp
-	      (setq extent (make-extent begin end buffer))
-	      (set-extent-priority extent (+ mouse-highlight-priority 2))
-	      (set-extent-face extent 'query-coding-warning-face))
-	    (values nil ranges))
-      (setq looking-at-arg (if (equal "" skip-chars-arg)
-			       ;; Regexp that will never match.
-			       #r".\{0,0\}" 
-                             (concat "[" skip-chars-arg "]")))
-      (save-excursion
-	(goto-char begin buffer)
-	(skip-chars-forward skip-chars-arg end buffer)
-	(while (< (point buffer) end)
-	  ; (message
-	  ; "fail-range-start is %S, point is %S, end is %S"
-	  ;  fail-range-start (point buffer) end)
-	  (setq char-after (char-after (point buffer) buffer)
-		fail-range-start (point buffer))
-	  (while (and
-		  (< (point buffer) end)
-		  (not (looking-at looking-at-arg))
-		  (or (not safe-chars)
-		      (not (get-char-table char-after safe-chars))))
-	    (forward-char 1 buffer)
-	    (setq char-after (char-after (point buffer) buffer)
-		  failed t))
-	  (if (= fail-range-start (point buffer))
-	      ;; The character can actually be encoded by the coding
-	      ;; system; check the characters past it.
-	      (forward-char 1 buffer)
-            ;; Can't be encoded; note this.
-	    (when errorp 
-	      (error 'text-conversion-error
-		     (format "Cannot encode %s using coding system"
-			     (buffer-substring fail-range-start (point buffer)
-					       buffer))
-		     (coding-system-name coding-system)))
-	    (put-range-table fail-range-start
-			     ;; If char-after is non-nil, we're not at
-			     ;; the end of the buffer.
-			     (setq fail-range-end (if char-after
-						      (point buffer)
-						    (point-max buffer)))
-			     t ranges)
-	    (when highlightp
-	      (setq extent (make-extent fail-range-start fail-range-end buffer))
-	      (set-extent-priority extent (+ mouse-highlight-priority 2))
-	      (set-extent-face extent 'query-coding-warning-face)))
-	  (skip-chars-forward skip-chars-arg end buffer))
-	(if failed
-	    (values nil ranges)
-	  (values t nil))))))
-
-(defun query-coding-region (start end coding-system &optional buffer
-                            ignore-invalid-sequencesp errorp highlight)
-  "Work out whether CODING-SYSTEM can losslessly encode a region.
-
-START and END are the beginning and end of the region to check.
-CODING-SYSTEM is the coding system to try.
-
-Optional argument BUFFER is the buffer to check, and defaults to the current
-buffer.
-
-IGNORE-INVALID-SEQUENCESP, also an optional argument, says to treat XEmacs
-characters which have an unambiguous encoded representation, despite being
-undefined in what they represent, as encodable.  These chiefly arise with
-variable-length encodings like UTF-8 and UTF-16, where an invalid sequence
-is passed through to XEmacs as a sequence of characters with a defined
-correspondence to the octets on disk, but no non-error semantics; see the
-`invalid-sequence-coding-system' argument to `set-language-info'.
-
-They can also arise with fixed-length encodings like ISO 8859-7, where
-certain octets on disk have undefined values, and treating them as
-corresponding to the ISO 8859-1 characters with the same numerical values
-may lead to data that is not understood by other applications.
-
-Optional argument ERRORP says to signal a `text-conversion-error' if some
-character in the region cannot be encoded, and defaults to nil.
-
-Optional argument HIGHLIGHT says to display unencodable characters in the
-region using `query-coding-warning-face'. It defaults to nil.
-
-This function returns a list; the intention is that callers use
-`multiple-value-bind' or the related CL multiple value functions to deal
-with it.  The first element is `t' if the region can be encoded using
-CODING-SYSTEM, or `nil' if not.  The second element is `nil' if the region
-can be encoded using CODING-SYSTEM; otherwise, it is a range table
-describing the positions of the unencodable characters.  Ranges that
-describe characters that would be ignored were IGNORE-INVALID-SEQUENCESP
-non-nil map to the symbol `invalid-sequence'; other ranges map to the symbol
-`unencodable'.  If IGNORE-INVALID-SEQUENCESP is non-nil, all ranges will map
-to the symbol `unencodable'.  See `make-range-table' for more details of
-range tables."
-  (funcall (or (coding-system-get coding-system 'query-coding-function)
-               #'default-query-coding-region)
-           start end coding-system buffer ignore-invalid-sequencesp errorp
-           highlight))
-
-(define-compiler-macro query-coding-region (start end coding-system
-                                            &optional buffer 
-                                            ignore-invalid-sequencesp
-                                            errorp highlight)
-  `(funcall (or (coding-system-get ,coding-system 'query-coding-function)
-                #'default-query-coding-region)
-    ,start ,end ,coding-system ,@(append (when (or buffer
-                                                   ignore-invalid-sequencesp
-						   errorp highlight)
-					   (list buffer))
-                                         (when (or ignore-invalid-sequencesp
-						   errorp highlight)
-					   (list ignore-invalid-sequencesp))
-                                         (when (or errorp highlight)
-					   (list errorp))
-                                         (when highlight (list highlight)))))
-
 (defun query-coding-string (string coding-system &optional
                             ignore-invalid-sequencesp errorp highlight)
   "Work out whether CODING-SYSTEM can losslessly encode STRING.
@@ -482,7 +305,7 @@
 They can also arise with fixed-length encodings like ISO 8859-7, where
 certain octets on disk have undefined values, and treating them as
 corresponding to the ISO 8859-1 characters with the same numerical values
-may lead to data that is not understood by other applications.
+may lead to data that are not understood by other applications.
 
 Optional argument ERRORP says to signal a `text-conversion-error' if some
 character in the region cannot be encoded, and defaults to nil.
@@ -490,39 +313,42 @@
 Optional argument HIGHLIGHT says to display unencodable characters in the
 region using `query-coding-warning-face'. It defaults to nil.
 
-This function returns a list; the intention is that callers use
+This function can return multiple values; the intention is that callers use
 `multiple-value-bind' or the related CL multiple value functions to deal
-with it.  The first element is `t' if the region can be encoded using
-CODING-SYSTEM, or `nil' if not.  The second element is `nil' if the region
-can be encoded using CODING-SYSTEM; otherwise, it is a range table
-describing the positions of the unencodable characters.  Ranges that
-describe characters that would be ignored were IGNORE-INVALID-SEQUENCESP
-non-nil map to the symbol `invalid-sequence'; other ranges map to the symbol
-`unencodable'.  If IGNORE-INVALID-SEQUENCESP is non-nil, all ranges will map
-to the symbol `unencodable'.  See `make-range-table' for more details of
-range tables."
+with it.  The first result is `t' if the region can be encoded using
+CODING-SYSTEM, or `nil' if not.  If the region cannot be encoded using
+CODING-SYSTEM, the second result is a range table describing the positions
+of the unencodable characters.
+
+Ranges that describe characters that would be ignored were
+IGNORE-INVALID-SEQUENCESP non-nil map to the symbol `invalid-sequence';
+other ranges map to the symbol `unencodable'.  If IGNORE-INVALID-SEQUENCESP
+is non-nil, all ranges will map to the symbol `unencodable'.  See
+`make-range-table' for more details of range tables."
   (with-temp-buffer 
     (when highlight
       (query-coding-clear-highlights 0 (length string) string))
     (insert string)
-    (multiple-value-bind (result ranges extent)
+    (multiple-value-bind (result ranges)
         (query-coding-region (point-min) (point-max) coding-system
                              (current-buffer) ignore-invalid-sequencesp
 			     errorp)
-      (unless result
-        (map-range-table
-         #'(lambda (begin end value)
-	     ;; Sigh, string indices are zero-based, buffer offsets are
-	     ;; one-based.
-             (remove-range-table begin end ranges)
-             (put-range-table (decf begin) (decf end) value ranges)
-	     (when highlight
-	       (setq extent (make-extent begin end string))
-	       (set-extent-priority extent (+ mouse-highlight-priority 2))
-	       (set-extent-property extent 'duplicable t)
-	       (set-extent-face extent 'query-coding-warning-face)))
-         ranges))
-      (values result ranges))))
+        (unless result
+          (let ((original-ranges ranges)
+                extent)
+            (setq ranges (make-range-table))
+            (map-range-table
+             #'(lambda (begin end value)
+                 ;; Sigh, string indices are zero-based, buffer offsets are
+                 ;; one-based.
+                 (put-range-table (decf begin) (decf end) value ranges)
+                 (when highlight
+                   (setq extent (make-extent begin end string))
+                   (set-extent-priority extent (+ mouse-highlight-priority 2))
+                   (set-extent-property extent 'duplicable t)
+                   (set-extent-face extent 'query-coding-warning-face)))
+             original-ranges)))
+        (if result result (values result ranges)))))
 
 ;; Function docstring and API are taken from GNU coding.c version 1.353, GPLv2. 
 (defun unencodable-char-position  (start end coding-system
@@ -615,7 +441,8 @@
                (multiple-value-bind (encoded ranges)
 		   (query-coding-region begin end coding-system)
                  (unless encoded
-                   (setq intermediate (list (coding-system-name coding-system)))
+                   (setq intermediate
+                         (list (coding-system-name coding-system)))
                    (map-range-table range-lambda ranges)
                    (push (nreverse intermediate) result)))
                finally return result))))
@@ -634,18 +461,36 @@
 If CODING-SYSTEM can't safely encode CHAR, return nil.
 The optional third argument CHARSET is, for the moment, ignored."
   (check-argument-type #'characterp char)
-  (multiple-value-bind (succeededp)
-      (query-coding-string char coding-system)
-    (when succeededp
-      (encode-coding-string char coding-system))))
+  (and (query-coding-string char coding-system)
+       (encode-coding-string char coding-system)))
+
+(if (featurep 'mule)
+    (progn
+      ;; Under Mule, we do much of the complicated coding system creation in
+      ;; Lisp and especially at compile time. We need some function
+      ;; definition for this function to be created in this file, but we can
+      ;; leave assigning the docstring to the autoload cookie
+      ;; handling later. Thankfully; that docstring is big.
+      (autoload 'make-coding-system "mule/make-coding-system")
 
-(unless (featurep 'mule)
-  ;; If we're under non-Mule, every XEmacs character can be encoded
-  ;; with every XEmacs coding system.
-  (fset #'default-query-coding-region
-	#'(lambda (&rest ignored)
-	    "Stub `query-coding-region' implementation. Always succeeds."
-	    (values t nil)))
-  (unintern 'default-query-coding-region-safe-charset-skip-chars-map))
+      ;; (During byte-compile before dumping, make-coding-system may already
+      ;; have been loaded, make sure not to overwrite the correct compiler
+      ;; macro:)
+      (when (eq 'autoload (car (symbol-function 'make-coding-system)))
+        ;; Make sure to pick up the correct compiler macro when compiling
+        ;; files:
+        (define-compiler-macro make-coding-system (&whole form name type
+                                                   &optional description props)
+          (load (second (symbol-function 'make-coding-system)))
+          (funcall (get 'make-coding-system 'cl-compiler-macro)
+                   form name type description props))))
+
+  ;; Mule's not available; 
+  (fset 'make-coding-system (symbol-function 'make-coding-system-internal))
+  (define-coding-system-alias 'escape-quoted 'binary)
+
+  ;; These are so that gnus and friends work when not mule:
+  (define-coding-system-alias 'iso-8859-1 'raw-text)
+  (define-coding-system-alias 'ctext 'raw-text))
 
 ;;; coding.el ends here
--- a/lisp/mule/arabic.el	Sat Sep 19 17:56:23 2009 +0200
+++ b/lisp/mule/arabic.el	Sat Sep 19 22:53:13 2009 +0100
@@ -31,226 +31,226 @@
 ;; See iso-with-esc.el for commentary on the ISO standard Arabic character
 ;; set.
 
-(make-8-bit-coding-system
- 'iso-8859-6
- '((#x80 ?\u0080) ;; <control>
-   (#x81 ?\u0081) ;; <control>
-   (#x82 ?\u0082) ;; <control>
-   (#x83 ?\u0083) ;; <control>
-   (#x84 ?\u0084) ;; <control>
-   (#x85 ?\u0085) ;; <control>
-   (#x86 ?\u0086) ;; <control>
-   (#x87 ?\u0087) ;; <control>
-   (#x88 ?\u0088) ;; <control>
-   (#x89 ?\u0089) ;; <control>
-   (#x8A ?\u008A) ;; <control>
-   (#x8B ?\u008B) ;; <control>
-   (#x8C ?\u008C) ;; <control>
-   (#x8D ?\u008D) ;; <control>
-   (#x8E ?\u008E) ;; <control>
-   (#x8F ?\u008F) ;; <control>
-   (#x90 ?\u0090) ;; <control>
-   (#x91 ?\u0091) ;; <control>
-   (#x92 ?\u0092) ;; <control>
-   (#x93 ?\u0093) ;; <control>
-   (#x94 ?\u0094) ;; <control>
-   (#x95 ?\u0095) ;; <control>
-   (#x96 ?\u0096) ;; <control>
-   (#x97 ?\u0097) ;; <control>
-   (#x98 ?\u0098) ;; <control>
-   (#x99 ?\u0099) ;; <control>
-   (#x9A ?\u009A) ;; <control>
-   (#x9B ?\u009B) ;; <control>
-   (#x9C ?\u009C) ;; <control>
-   (#x9D ?\u009D) ;; <control>
-   (#x9E ?\u009E) ;; <control>
-   (#x9F ?\u009F) ;; <control>
-   (#xA0 ?\u00A0) ;; NO-BREAK SPACE
-   (#xA4 ?\u00A4) ;; CURRENCY SIGN
-   (#xAC ?\u060C) ;; ARABIC COMMA
-   (#xAD ?\u00AD) ;; SOFT HYPHEN
-   (#xBB ?\u061B) ;; ARABIC SEMICOLON
-   (#xBF ?\u061F) ;; ARABIC QUESTION MARK
-   (#xC1 ?\u0621) ;; ARABIC LETTER HAMZA
-   (#xC2 ?\u0622) ;; ARABIC LETTER ALEF WITH MADDA ABOVE
-   (#xC3 ?\u0623) ;; ARABIC LETTER ALEF WITH HAMZA ABOVE
-   (#xC4 ?\u0624) ;; ARABIC LETTER WAW WITH HAMZA ABOVE
-   (#xC5 ?\u0625) ;; ARABIC LETTER ALEF WITH HAMZA BELOW
-   (#xC6 ?\u0626) ;; ARABIC LETTER YEH WITH HAMZA ABOVE
-   (#xC7 ?\u0627) ;; ARABIC LETTER ALEF
-   (#xC8 ?\u0628) ;; ARABIC LETTER BEH
-   (#xC9 ?\u0629) ;; ARABIC LETTER TEH MARBUTA
-   (#xCA ?\u062A) ;; ARABIC LETTER TEH
-   (#xCB ?\u062B) ;; ARABIC LETTER THEH
-   (#xCC ?\u062C) ;; ARABIC LETTER JEEM
-   (#xCD ?\u062D) ;; ARABIC LETTER HAH
-   (#xCE ?\u062E) ;; ARABIC LETTER KHAH
-   (#xCF ?\u062F) ;; ARABIC LETTER DAL
-   (#xD0 ?\u0630) ;; ARABIC LETTER THAL
-   (#xD1 ?\u0631) ;; ARABIC LETTER REH
-   (#xD2 ?\u0632) ;; ARABIC LETTER ZAIN
-   (#xD3 ?\u0633) ;; ARABIC LETTER SEEN
-   (#xD4 ?\u0634) ;; ARABIC LETTER SHEEN
-   (#xD5 ?\u0635) ;; ARABIC LETTER SAD
-   (#xD6 ?\u0636) ;; ARABIC LETTER DAD
-   (#xD7 ?\u0637) ;; ARABIC LETTER TAH
-   (#xD8 ?\u0638) ;; ARABIC LETTER ZAH
-   (#xD9 ?\u0639) ;; ARABIC LETTER AIN
-   (#xDA ?\u063A) ;; ARABIC LETTER GHAIN
-   (#xE0 ?\u0640) ;; ARABIC TATWEEL
-   (#xE1 ?\u0641) ;; ARABIC LETTER FEH
-   (#xE2 ?\u0642) ;; ARABIC LETTER QAF
-   (#xE3 ?\u0643) ;; ARABIC LETTER KAF
-   (#xE4 ?\u0644) ;; ARABIC LETTER LAM
-   (#xE5 ?\u0645) ;; ARABIC LETTER MEEM
-   (#xE6 ?\u0646) ;; ARABIC LETTER NOON
-   (#xE7 ?\u0647) ;; ARABIC LETTER HEH
-   (#xE8 ?\u0648) ;; ARABIC LETTER WAW
-   (#xE9 ?\u0649) ;; ARABIC LETTER ALEF MAKSURA
-   (#xEA ?\u064A) ;; ARABIC LETTER YEH
-   (#xEB ?\u064B) ;; ARABIC FATHATAN
-   (#xEC ?\u064C) ;; ARABIC DAMMATAN
-   (#xED ?\u064D) ;; ARABIC KASRATAN
-   (#xEE ?\u064E) ;; ARABIC FATHA
-   (#xEF ?\u064F) ;; ARABIC DAMMA
-   (#xF0 ?\u0650) ;; ARABIC KASRA
-   (#xF1 ?\u0651) ;; ARABIC SHADDA
-   (#xF2 ?\u0652)) ;; ARABIC SUKUN
- "ISO 8859-6 (Arabic)"
-'(mnemonic "ArISO"))
+(make-coding-system
+ 'iso-8859-6 'fixed-width "ISO 8859-6 (Arabic)"
+ '(unicode-map
+   ((#x80 ?\u0080) ;; <control>
+    (#x81 ?\u0081) ;; <control>
+    (#x82 ?\u0082) ;; <control>
+    (#x83 ?\u0083) ;; <control>
+    (#x84 ?\u0084) ;; <control>
+    (#x85 ?\u0085) ;; <control>
+    (#x86 ?\u0086) ;; <control>
+    (#x87 ?\u0087) ;; <control>
+    (#x88 ?\u0088) ;; <control>
+    (#x89 ?\u0089) ;; <control>
+    (#x8A ?\u008A) ;; <control>
+    (#x8B ?\u008B) ;; <control>
+    (#x8C ?\u008C) ;; <control>
+    (#x8D ?\u008D) ;; <control>
+    (#x8E ?\u008E) ;; <control>
+    (#x8F ?\u008F) ;; <control>
+    (#x90 ?\u0090) ;; <control>
+    (#x91 ?\u0091) ;; <control>
+    (#x92 ?\u0092) ;; <control>
+    (#x93 ?\u0093) ;; <control>
+    (#x94 ?\u0094) ;; <control>
+    (#x95 ?\u0095) ;; <control>
+    (#x96 ?\u0096) ;; <control>
+    (#x97 ?\u0097) ;; <control>
+    (#x98 ?\u0098) ;; <control>
+    (#x99 ?\u0099) ;; <control>
+    (#x9A ?\u009A) ;; <control>
+    (#x9B ?\u009B) ;; <control>
+    (#x9C ?\u009C) ;; <control>
+    (#x9D ?\u009D) ;; <control>
+    (#x9E ?\u009E) ;; <control>
+    (#x9F ?\u009F) ;; <control>
+    (#xA0 ?\u00A0) ;; NO-BREAK SPACE
+    (#xA4 ?\u00A4) ;; CURRENCY SIGN
+    (#xAC ?\u060C) ;; ARABIC COMMA
+    (#xAD ?\u00AD) ;; SOFT HYPHEN
+    (#xBB ?\u061B) ;; ARABIC SEMICOLON
+    (#xBF ?\u061F) ;; ARABIC QUESTION MARK
+    (#xC1 ?\u0621) ;; ARABIC LETTER HAMZA
+    (#xC2 ?\u0622) ;; ARABIC LETTER ALEF WITH MADDA ABOVE
+    (#xC3 ?\u0623) ;; ARABIC LETTER ALEF WITH HAMZA ABOVE
+    (#xC4 ?\u0624) ;; ARABIC LETTER WAW WITH HAMZA ABOVE
+    (#xC5 ?\u0625) ;; ARABIC LETTER ALEF WITH HAMZA BELOW
+    (#xC6 ?\u0626) ;; ARABIC LETTER YEH WITH HAMZA ABOVE
+    (#xC7 ?\u0627) ;; ARABIC LETTER ALEF
+    (#xC8 ?\u0628) ;; ARABIC LETTER BEH
+    (#xC9 ?\u0629) ;; ARABIC LETTER TEH MARBUTA
+    (#xCA ?\u062A) ;; ARABIC LETTER TEH
+    (#xCB ?\u062B) ;; ARABIC LETTER THEH
+    (#xCC ?\u062C) ;; ARABIC LETTER JEEM
+    (#xCD ?\u062D) ;; ARABIC LETTER HAH
+    (#xCE ?\u062E) ;; ARABIC LETTER KHAH
+    (#xCF ?\u062F) ;; ARABIC LETTER DAL
+    (#xD0 ?\u0630) ;; ARABIC LETTER THAL
+    (#xD1 ?\u0631) ;; ARABIC LETTER REH
+    (#xD2 ?\u0632) ;; ARABIC LETTER ZAIN
+    (#xD3 ?\u0633) ;; ARABIC LETTER SEEN
+    (#xD4 ?\u0634) ;; ARABIC LETTER SHEEN
+    (#xD5 ?\u0635) ;; ARABIC LETTER SAD
+    (#xD6 ?\u0636) ;; ARABIC LETTER DAD
+    (#xD7 ?\u0637) ;; ARABIC LETTER TAH
+    (#xD8 ?\u0638) ;; ARABIC LETTER ZAH
+    (#xD9 ?\u0639) ;; ARABIC LETTER AIN
+    (#xDA ?\u063A) ;; ARABIC LETTER GHAIN
+    (#xE0 ?\u0640) ;; ARABIC TATWEEL
+    (#xE1 ?\u0641) ;; ARABIC LETTER FEH
+    (#xE2 ?\u0642) ;; ARABIC LETTER QAF
+    (#xE3 ?\u0643) ;; ARABIC LETTER KAF
+    (#xE4 ?\u0644) ;; ARABIC LETTER LAM
+    (#xE5 ?\u0645) ;; ARABIC LETTER MEEM
+    (#xE6 ?\u0646) ;; ARABIC LETTER NOON
+    (#xE7 ?\u0647) ;; ARABIC LETTER HEH
+    (#xE8 ?\u0648) ;; ARABIC LETTER WAW
+    (#xE9 ?\u0649) ;; ARABIC LETTER ALEF MAKSURA
+    (#xEA ?\u064A) ;; ARABIC LETTER YEH
+    (#xEB ?\u064B) ;; ARABIC FATHATAN
+    (#xEC ?\u064C) ;; ARABIC DAMMATAN
+    (#xED ?\u064D) ;; ARABIC KASRATAN
+    (#xEE ?\u064E) ;; ARABIC FATHA
+    (#xEF ?\u064F) ;; ARABIC DAMMA
+    (#xF0 ?\u0650) ;; ARABIC KASRA
+    (#xF1 ?\u0651) ;; ARABIC SHADDA
+    (#xF2 ?\u0652)) ;; ARABIC SUKUN
+   mnemonic "ArISO"))
 
-(make-8-bit-coding-system
- 'windows-1256
- '((#x80 ?\u20AC) ;; EURO SIGN
-   (#x81 ?\u067E) ;; ARABIC LETTER PEH
-   (#x82 ?\u201A) ;; SINGLE LOW-9 QUOTATION MARK
-   (#x83 ?\u0192) ;; LATIN SMALL LETTER F WITH HOOK
-   (#x84 ?\u201E) ;; DOUBLE LOW-9 QUOTATION MARK
-   (#x85 ?\u2026) ;; HORIZONTAL ELLIPSIS
-   (#x86 ?\u2020) ;; DAGGER
-   (#x87 ?\u2021) ;; DOUBLE DAGGER
-   (#x88 ?\u02C6) ;; MODIFIER LETTER CIRCUMFLEX ACCENT
-   (#x89 ?\u2030) ;; PER MILLE SIGN
-   (#x8A ?\u0679) ;; ARABIC LETTER TTEH
-   (#x8B ?\u2039) ;; SINGLE LEFT-POINTING ANGLE QUOTATION MARK
-   (#x8C ?\u0152) ;; LATIN CAPITAL LIGATURE OE
-   (#x8D ?\u0686) ;; ARABIC LETTER TCHEH
-   (#x8E ?\u0698) ;; ARABIC LETTER JEH
-   (#x8F ?\u0688) ;; ARABIC LETTER DDAL
-   (#x90 ?\u06AF) ;; ARABIC LETTER GAF
-   (#x91 ?\u2018) ;; LEFT SINGLE QUOTATION MARK
-   (#x92 ?\u2019) ;; RIGHT SINGLE QUOTATION MARK
-   (#x93 ?\u201C) ;; LEFT DOUBLE QUOTATION MARK
-   (#x94 ?\u201D) ;; RIGHT DOUBLE QUOTATION MARK
-   (#x95 ?\u2022) ;; BULLET
-   (#x96 ?\u2013) ;; EN DASH
-   (#x97 ?\u2014) ;; EM DASH
-   (#x98 ?\u06A9) ;; ARABIC LETTER KEHEH
-   (#x99 ?\u2122) ;; TRADE MARK SIGN
-   (#x9A ?\u0691) ;; ARABIC LETTER RREH
-   (#x9B ?\u203A) ;; SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-   (#x9C ?\u0153) ;; LATIN SMALL LIGATURE OE
-   (#x9D ?\u200C) ;; ZERO WIDTH NON-JOINER
-   (#x9E ?\u200D) ;; ZERO WIDTH JOINER
-   (#x9F ?\u06BA) ;; ARABIC LETTER NOON GHUNNA
-   (#xA0 ?\u00A0) ;; NO-BREAK SPACE
-   (#xA1 ?\u060C) ;; ARABIC COMMA
-   (#xA2 ?\u00A2) ;; CENT SIGN
-   (#xA3 ?\u00A3) ;; POUND SIGN
-   (#xA4 ?\u00A4) ;; CURRENCY SIGN
-   (#xA5 ?\u00A5) ;; YEN SIGN
-   (#xA6 ?\u00A6) ;; BROKEN BAR
-   (#xA7 ?\u00A7) ;; SECTION SIGN
-   (#xA8 ?\u00A8) ;; DIAERESIS
-   (#xA9 ?\u00A9) ;; COPYRIGHT SIGN
-   (#xAA ?\u06BE) ;; ARABIC LETTER HEH DOACHASHMEE
-   (#xAB ?\u00AB) ;; LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-   (#xAC ?\u00AC) ;; NOT SIGN
-   (#xAD ?\u00AD) ;; SOFT HYPHEN
-   (#xAE ?\u00AE) ;; REGISTERED SIGN
-   (#xAF ?\u00AF) ;; MACRON
-   (#xB0 ?\u00B0) ;; DEGREE SIGN
-   (#xB1 ?\u00B1) ;; PLUS-MINUS SIGN
-   (#xB2 ?\u00B2) ;; SUPERSCRIPT TWO
-   (#xB3 ?\u00B3) ;; SUPERSCRIPT THREE
-   (#xB4 ?\u00B4) ;; ACUTE ACCENT
-   (#xB5 ?\u00B5) ;; MICRO SIGN
-   (#xB6 ?\u00B6) ;; PILCROW SIGN
-   (#xB7 ?\u00B7) ;; MIDDLE DOT
-   (#xB8 ?\u00B8) ;; CEDILLA
-   (#xB9 ?\u00B9) ;; SUPERSCRIPT ONE
-   (#xBA ?\u061B) ;; ARABIC SEMICOLON
-   (#xBB ?\u00BB) ;; RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-   (#xBC ?\u00BC) ;; VULGAR FRACTION ONE QUARTER
-   (#xBD ?\u00BD) ;; VULGAR FRACTION ONE HALF
-   (#xBE ?\u00BE) ;; VULGAR FRACTION THREE QUARTERS
-   (#xBF ?\u061F) ;; ARABIC QUESTION MARK
-   (#xC0 ?\u06C1) ;; ARABIC LETTER HEH GOAL
-   (#xC1 ?\u0621) ;; ARABIC LETTER HAMZA
-   (#xC2 ?\u0622) ;; ARABIC LETTER ALEF WITH MADDA ABOVE
-   (#xC3 ?\u0623) ;; ARABIC LETTER ALEF WITH HAMZA ABOVE
-   (#xC4 ?\u0624) ;; ARABIC LETTER WAW WITH HAMZA ABOVE
-   (#xC5 ?\u0625) ;; ARABIC LETTER ALEF WITH HAMZA BELOW
-   (#xC6 ?\u0626) ;; ARABIC LETTER YEH WITH HAMZA ABOVE
-   (#xC7 ?\u0627) ;; ARABIC LETTER ALEF
-   (#xC8 ?\u0628) ;; ARABIC LETTER BEH
-   (#xC9 ?\u0629) ;; ARABIC LETTER TEH MARBUTA
-   (#xCA ?\u062A) ;; ARABIC LETTER TEH
-   (#xCB ?\u062B) ;; ARABIC LETTER THEH
-   (#xCC ?\u062C) ;; ARABIC LETTER JEEM
-   (#xCD ?\u062D) ;; ARABIC LETTER HAH
-   (#xCE ?\u062E) ;; ARABIC LETTER KHAH
-   (#xCF ?\u062F) ;; ARABIC LETTER DAL
-   (#xD0 ?\u0630) ;; ARABIC LETTER THAL
-   (#xD1 ?\u0631) ;; ARABIC LETTER REH
-   (#xD2 ?\u0632) ;; ARABIC LETTER ZAIN
-   (#xD3 ?\u0633) ;; ARABIC LETTER SEEN
-   (#xD4 ?\u0634) ;; ARABIC LETTER SHEEN
-   (#xD5 ?\u0635) ;; ARABIC LETTER SAD
-   (#xD6 ?\u0636) ;; ARABIC LETTER DAD
-   (#xD7 ?\u00D7) ;; MULTIPLICATION SIGN
-   (#xD8 ?\u0637) ;; ARABIC LETTER TAH
-   (#xD9 ?\u0638) ;; ARABIC LETTER ZAH
-   (#xDA ?\u0639) ;; ARABIC LETTER AIN
-   (#xDB ?\u063A) ;; ARABIC LETTER GHAIN
-   (#xDC ?\u0640) ;; ARABIC TATWEEL
-   (#xDD ?\u0641) ;; ARABIC LETTER FEH
-   (#xDE ?\u0642) ;; ARABIC LETTER QAF
-   (#xDF ?\u0643) ;; ARABIC LETTER KAF
-   (#xE0 ?\u00E0) ;; LATIN SMALL LETTER A WITH GRAVE
-   (#xE1 ?\u0644) ;; ARABIC LETTER LAM
-   (#xE2 ?\u00E2) ;; LATIN SMALL LETTER A WITH CIRCUMFLEX
-   (#xE3 ?\u0645) ;; ARABIC LETTER MEEM
-   (#xE4 ?\u0646) ;; ARABIC LETTER NOON
-   (#xE5 ?\u0647) ;; ARABIC LETTER HEH
-   (#xE6 ?\u0648) ;; ARABIC LETTER WAW
-   (#xE7 ?\u00E7) ;; LATIN SMALL LETTER C WITH CEDILLA
-   (#xE8 ?\u00E8) ;; LATIN SMALL LETTER E WITH GRAVE
-   (#xE9 ?\u00E9) ;; LATIN SMALL LETTER E WITH ACUTE
-   (#xEA ?\u00EA) ;; LATIN SMALL LETTER E WITH CIRCUMFLEX
-   (#xEB ?\u00EB) ;; LATIN SMALL LETTER E WITH DIAERESIS
-   (#xEC ?\u0649) ;; ARABIC LETTER ALEF MAKSURA
-   (#xED ?\u064A) ;; ARABIC LETTER YEH
-   (#xEE ?\u00EE) ;; LATIN SMALL LETTER I WITH CIRCUMFLEX
-   (#xEF ?\u00EF) ;; LATIN SMALL LETTER I WITH DIAERESIS
-   (#xF0 ?\u064B) ;; ARABIC FATHATAN
-   (#xF1 ?\u064C) ;; ARABIC DAMMATAN
-   (#xF2 ?\u064D) ;; ARABIC KASRATAN
-   (#xF3 ?\u064E) ;; ARABIC FATHA
-   (#xF4 ?\u00F4) ;; LATIN SMALL LETTER O WITH CIRCUMFLEX
-   (#xF5 ?\u064F) ;; ARABIC DAMMA
-   (#xF6 ?\u0650) ;; ARABIC KASRA
-   (#xF7 ?\u00F7) ;; DIVISION SIGN
-   (#xF8 ?\u0651) ;; ARABIC SHADDA
-   (#xF9 ?\u00F9) ;; LATIN SMALL LETTER U WITH GRAVE
-   (#xFA ?\u0652) ;; ARABIC SUKUN
-   (#xFB ?\u00FB) ;; LATIN SMALL LETTER U WITH CIRCUMFLEX
-   (#xFC ?\u00FC) ;; LATIN SMALL LETTER U WITH DIAERESIS
-   (#xFD ?\u200E) ;; LEFT-TO-RIGHT MARK
-   (#xFE ?\u200F) ;; RIGHT-TO-LEFT MARK
-   (#xFF ?\u06D2));; ARABIC LETTER YEH BARREE
- "Windows-1256 (Arabic)"
- '(mnemonic "cp1256"
+(make-coding-system
+ 'windows-1256 'fixed-width "Windows-1256 (Arabic)"
+ '(unicode-map
+   ((#x80 ?\u20AC) ;; EURO SIGN
+    (#x81 ?\u067E) ;; ARABIC LETTER PEH
+    (#x82 ?\u201A) ;; SINGLE LOW-9 QUOTATION MARK
+    (#x83 ?\u0192) ;; LATIN SMALL LETTER F WITH HOOK
+    (#x84 ?\u201E) ;; DOUBLE LOW-9 QUOTATION MARK
+    (#x85 ?\u2026) ;; HORIZONTAL ELLIPSIS
+    (#x86 ?\u2020) ;; DAGGER
+    (#x87 ?\u2021) ;; DOUBLE DAGGER
+    (#x88 ?\u02C6) ;; MODIFIER LETTER CIRCUMFLEX ACCENT
+    (#x89 ?\u2030) ;; PER MILLE SIGN
+    (#x8A ?\u0679) ;; ARABIC LETTER TTEH
+    (#x8B ?\u2039) ;; SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+    (#x8C ?\u0152) ;; LATIN CAPITAL LIGATURE OE
+    (#x8D ?\u0686) ;; ARABIC LETTER TCHEH
+    (#x8E ?\u0698) ;; ARABIC LETTER JEH
+    (#x8F ?\u0688) ;; ARABIC LETTER DDAL
+    (#x90 ?\u06AF) ;; ARABIC LETTER GAF
+    (#x91 ?\u2018) ;; LEFT SINGLE QUOTATION MARK
+    (#x92 ?\u2019) ;; RIGHT SINGLE QUOTATION MARK
+    (#x93 ?\u201C) ;; LEFT DOUBLE QUOTATION MARK
+    (#x94 ?\u201D) ;; RIGHT DOUBLE QUOTATION MARK
+    (#x95 ?\u2022) ;; BULLET
+    (#x96 ?\u2013) ;; EN DASH
+    (#x97 ?\u2014) ;; EM DASH
+    (#x98 ?\u06A9) ;; ARABIC LETTER KEHEH
+    (#x99 ?\u2122) ;; TRADE MARK SIGN
+    (#x9A ?\u0691) ;; ARABIC LETTER RREH
+    (#x9B ?\u203A) ;; SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+    (#x9C ?\u0153) ;; LATIN SMALL LIGATURE OE
+    (#x9D ?\u200C) ;; ZERO WIDTH NON-JOINER
+    (#x9E ?\u200D) ;; ZERO WIDTH JOINER
+    (#x9F ?\u06BA) ;; ARABIC LETTER NOON GHUNNA
+    (#xA0 ?\u00A0) ;; NO-BREAK SPACE
+    (#xA1 ?\u060C) ;; ARABIC COMMA
+    (#xA2 ?\u00A2) ;; CENT SIGN
+    (#xA3 ?\u00A3) ;; POUND SIGN
+    (#xA4 ?\u00A4) ;; CURRENCY SIGN
+    (#xA5 ?\u00A5) ;; YEN SIGN
+    (#xA6 ?\u00A6) ;; BROKEN BAR
+    (#xA7 ?\u00A7) ;; SECTION SIGN
+    (#xA8 ?\u00A8) ;; DIAERESIS
+    (#xA9 ?\u00A9) ;; COPYRIGHT SIGN
+    (#xAA ?\u06BE) ;; ARABIC LETTER HEH DOACHASHMEE
+    (#xAB ?\u00AB) ;; LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    (#xAC ?\u00AC) ;; NOT SIGN
+    (#xAD ?\u00AD) ;; SOFT HYPHEN
+    (#xAE ?\u00AE) ;; REGISTERED SIGN
+    (#xAF ?\u00AF) ;; MACRON
+    (#xB0 ?\u00B0) ;; DEGREE SIGN
+    (#xB1 ?\u00B1) ;; PLUS-MINUS SIGN
+    (#xB2 ?\u00B2) ;; SUPERSCRIPT TWO
+    (#xB3 ?\u00B3) ;; SUPERSCRIPT THREE
+    (#xB4 ?\u00B4) ;; ACUTE ACCENT
+    (#xB5 ?\u00B5) ;; MICRO SIGN
+    (#xB6 ?\u00B6) ;; PILCROW SIGN
+    (#xB7 ?\u00B7) ;; MIDDLE DOT
+    (#xB8 ?\u00B8) ;; CEDILLA
+    (#xB9 ?\u00B9) ;; SUPERSCRIPT ONE
+    (#xBA ?\u061B) ;; ARABIC SEMICOLON
+    (#xBB ?\u00BB) ;; RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    (#xBC ?\u00BC) ;; VULGAR FRACTION ONE QUARTER
+    (#xBD ?\u00BD) ;; VULGAR FRACTION ONE HALF
+    (#xBE ?\u00BE) ;; VULGAR FRACTION THREE QUARTERS
+    (#xBF ?\u061F) ;; ARABIC QUESTION MARK
+    (#xC0 ?\u06C1) ;; ARABIC LETTER HEH GOAL
+    (#xC1 ?\u0621) ;; ARABIC LETTER HAMZA
+    (#xC2 ?\u0622) ;; ARABIC LETTER ALEF WITH MADDA ABOVE
+    (#xC3 ?\u0623) ;; ARABIC LETTER ALEF WITH HAMZA ABOVE
+    (#xC4 ?\u0624) ;; ARABIC LETTER WAW WITH HAMZA ABOVE
+    (#xC5 ?\u0625) ;; ARABIC LETTER ALEF WITH HAMZA BELOW
+    (#xC6 ?\u0626) ;; ARABIC LETTER YEH WITH HAMZA ABOVE
+    (#xC7 ?\u0627) ;; ARABIC LETTER ALEF
+    (#xC8 ?\u0628) ;; ARABIC LETTER BEH
+    (#xC9 ?\u0629) ;; ARABIC LETTER TEH MARBUTA
+    (#xCA ?\u062A) ;; ARABIC LETTER TEH
+    (#xCB ?\u062B) ;; ARABIC LETTER THEH
+    (#xCC ?\u062C) ;; ARABIC LETTER JEEM
+    (#xCD ?\u062D) ;; ARABIC LETTER HAH
+    (#xCE ?\u062E) ;; ARABIC LETTER KHAH
+    (#xCF ?\u062F) ;; ARABIC LETTER DAL
+    (#xD0 ?\u0630) ;; ARABIC LETTER THAL
+    (#xD1 ?\u0631) ;; ARABIC LETTER REH
+    (#xD2 ?\u0632) ;; ARABIC LETTER ZAIN
+    (#xD3 ?\u0633) ;; ARABIC LETTER SEEN
+    (#xD4 ?\u0634) ;; ARABIC LETTER SHEEN
+    (#xD5 ?\u0635) ;; ARABIC LETTER SAD
+    (#xD6 ?\u0636) ;; ARABIC LETTER DAD
+    (#xD7 ?\u00D7) ;; MULTIPLICATION SIGN
+    (#xD8 ?\u0637) ;; ARABIC LETTER TAH
+    (#xD9 ?\u0638) ;; ARABIC LETTER ZAH
+    (#xDA ?\u0639) ;; ARABIC LETTER AIN
+    (#xDB ?\u063A) ;; ARABIC LETTER GHAIN
+    (#xDC ?\u0640) ;; ARABIC TATWEEL
+    (#xDD ?\u0641) ;; ARABIC LETTER FEH
+    (#xDE ?\u0642) ;; ARABIC LETTER QAF
+    (#xDF ?\u0643) ;; ARABIC LETTER KAF
+    (#xE0 ?\u00E0) ;; LATIN SMALL LETTER A WITH GRAVE
+    (#xE1 ?\u0644) ;; ARABIC LETTER LAM
+    (#xE2 ?\u00E2) ;; LATIN SMALL LETTER A WITH CIRCUMFLEX
+    (#xE3 ?\u0645) ;; ARABIC LETTER MEEM
+    (#xE4 ?\u0646) ;; ARABIC LETTER NOON
+    (#xE5 ?\u0647) ;; ARABIC LETTER HEH
+    (#xE6 ?\u0648) ;; ARABIC LETTER WAW
+    (#xE7 ?\u00E7) ;; LATIN SMALL LETTER C WITH CEDILLA
+    (#xE8 ?\u00E8) ;; LATIN SMALL LETTER E WITH GRAVE
+    (#xE9 ?\u00E9) ;; LATIN SMALL LETTER E WITH ACUTE
+    (#xEA ?\u00EA) ;; LATIN SMALL LETTER E WITH CIRCUMFLEX
+    (#xEB ?\u00EB) ;; LATIN SMALL LETTER E WITH DIAERESIS
+    (#xEC ?\u0649) ;; ARABIC LETTER ALEF MAKSURA
+    (#xED ?\u064A) ;; ARABIC LETTER YEH
+    (#xEE ?\u00EE) ;; LATIN SMALL LETTER I WITH CIRCUMFLEX
+    (#xEF ?\u00EF) ;; LATIN SMALL LETTER I WITH DIAERESIS
+    (#xF0 ?\u064B) ;; ARABIC FATHATAN
+    (#xF1 ?\u064C) ;; ARABIC DAMMATAN
+    (#xF2 ?\u064D) ;; ARABIC KASRATAN
+    (#xF3 ?\u064E) ;; ARABIC FATHA
+    (#xF4 ?\u00F4) ;; LATIN SMALL LETTER O WITH CIRCUMFLEX
+    (#xF5 ?\u064F) ;; ARABIC DAMMA
+    (#xF6 ?\u0650) ;; ARABIC KASRA
+    (#xF7 ?\u00F7) ;; DIVISION SIGN
+    (#xF8 ?\u0651) ;; ARABIC SHADDA
+    (#xF9 ?\u00F9) ;; LATIN SMALL LETTER U WITH GRAVE
+    (#xFA ?\u0652) ;; ARABIC SUKUN
+    (#xFB ?\u00FB) ;; LATIN SMALL LETTER U WITH CIRCUMFLEX
+    (#xFC ?\u00FC) ;; LATIN SMALL LETTER U WITH DIAERESIS
+    (#xFD ?\u200E) ;; LEFT-TO-RIGHT MARK
+    (#xFE ?\u200F) ;; RIGHT-TO-LEFT MARK
+    (#xFF ?\u06D2)) ;; ARABIC LETTER YEH BARREE
+   mnemonic "cp1256"
    documentation
    "This is the much Windows encoding for Arabic, much superior to the ISO
 standard one."
--- a/lisp/mule/cyrillic.el	Sat Sep 19 17:56:23 2009 +0200
+++ b/lisp/mule/cyrillic.el	Sat Sep 19 22:53:13 2009 +0100
@@ -106,138 +106,138 @@
                      (standard-syntax-table))
 
 ;; And create the coding system.
-(make-8-bit-coding-system
- 'iso-8859-5
- '((#x80 ?\u0080) ;; <control>
-   (#x81 ?\u0081) ;; <control>
-   (#x82 ?\u0082) ;; <control>
-   (#x83 ?\u0083) ;; <control>
-   (#x84 ?\u0084) ;; <control>
-   (#x85 ?\u0085) ;; <control>
-   (#x86 ?\u0086) ;; <control>
-   (#x87 ?\u0087) ;; <control>
-   (#x88 ?\u0088) ;; <control>
-   (#x89 ?\u0089) ;; <control>
-   (#x8A ?\u008A) ;; <control>
-   (#x8B ?\u008B) ;; <control>
-   (#x8C ?\u008C) ;; <control>
-   (#x8D ?\u008D) ;; <control>
-   (#x8E ?\u008E) ;; <control>
-   (#x8F ?\u008F) ;; <control>
-   (#x90 ?\u0090) ;; <control>
-   (#x91 ?\u0091) ;; <control>
-   (#x92 ?\u0092) ;; <control>
-   (#x93 ?\u0093) ;; <control>
-   (#x94 ?\u0094) ;; <control>
-   (#x95 ?\u0095) ;; <control>
-   (#x96 ?\u0096) ;; <control>
-   (#x97 ?\u0097) ;; <control>
-   (#x98 ?\u0098) ;; <control>
-   (#x99 ?\u0099) ;; <control>
-   (#x9A ?\u009A) ;; <control>
-   (#x9B ?\u009B) ;; <control>
-   (#x9C ?\u009C) ;; <control>
-   (#x9D ?\u009D) ;; <control>
-   (#x9E ?\u009E) ;; <control>
-   (#x9F ?\u009F) ;; <control>
-   (#xA0 ?\u00A0) ;; NO-BREAK SPACE
-   (#xA1 ?\u0401) ;; CYRILLIC CAPITAL LETTER IO
-   (#xA2 ?\u0402) ;; CYRILLIC CAPITAL LETTER DJE
-   (#xA3 ?\u0403) ;; CYRILLIC CAPITAL LETTER GJE
-   (#xA4 ?\u0404) ;; CYRILLIC CAPITAL LETTER UKRAINIAN IE
-   (#xA5 ?\u0405) ;; CYRILLIC CAPITAL LETTER DZE
-   (#xA6 ?\u0406) ;; CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
-   (#xA7 ?\u0407) ;; CYRILLIC CAPITAL LETTER YI
-   (#xA8 ?\u0408) ;; CYRILLIC CAPITAL LETTER JE
-   (#xA9 ?\u0409) ;; CYRILLIC CAPITAL LETTER LJE
-   (#xAA ?\u040A) ;; CYRILLIC CAPITAL LETTER NJE
-   (#xAB ?\u040B) ;; CYRILLIC CAPITAL LETTER TSHE
-   (#xAC ?\u040C) ;; CYRILLIC CAPITAL LETTER KJE
-   (#xAD ?\u00AD) ;; SOFT HYPHEN
-   (#xAE ?\u040E) ;; CYRILLIC CAPITAL LETTER SHORT U
-   (#xAF ?\u040F) ;; CYRILLIC CAPITAL LETTER DZHE
-   (#xB0 ?\u0410) ;; CYRILLIC CAPITAL LETTER A
-   (#xB1 ?\u0411) ;; CYRILLIC CAPITAL LETTER BE
-   (#xB2 ?\u0412) ;; CYRILLIC CAPITAL LETTER VE
-   (#xB3 ?\u0413) ;; CYRILLIC CAPITAL LETTER GHE
-   (#xB4 ?\u0414) ;; CYRILLIC CAPITAL LETTER DE
-   (#xB5 ?\u0415) ;; CYRILLIC CAPITAL LETTER IE
-   (#xB6 ?\u0416) ;; CYRILLIC CAPITAL LETTER ZHE
-   (#xB7 ?\u0417) ;; CYRILLIC CAPITAL LETTER ZE
-   (#xB8 ?\u0418) ;; CYRILLIC CAPITAL LETTER I
-   (#xB9 ?\u0419) ;; CYRILLIC CAPITAL LETTER SHORT I
-   (#xBA ?\u041A) ;; CYRILLIC CAPITAL LETTER KA
-   (#xBB ?\u041B) ;; CYRILLIC CAPITAL LETTER EL
-   (#xBC ?\u041C) ;; CYRILLIC CAPITAL LETTER EM
-   (#xBD ?\u041D) ;; CYRILLIC CAPITAL LETTER EN
-   (#xBE ?\u041E) ;; CYRILLIC CAPITAL LETTER O
-   (#xBF ?\u041F) ;; CYRILLIC CAPITAL LETTER PE
-   (#xC0 ?\u0420) ;; CYRILLIC CAPITAL LETTER ER
-   (#xC1 ?\u0421) ;; CYRILLIC CAPITAL LETTER ES
-   (#xC2 ?\u0422) ;; CYRILLIC CAPITAL LETTER TE
-   (#xC3 ?\u0423) ;; CYRILLIC CAPITAL LETTER U
-   (#xC4 ?\u0424) ;; CYRILLIC CAPITAL LETTER EF
-   (#xC5 ?\u0425) ;; CYRILLIC CAPITAL LETTER HA
-   (#xC6 ?\u0426) ;; CYRILLIC CAPITAL LETTER TSE
-   (#xC7 ?\u0427) ;; CYRILLIC CAPITAL LETTER CHE
-   (#xC8 ?\u0428) ;; CYRILLIC CAPITAL LETTER SHA
-   (#xC9 ?\u0429) ;; CYRILLIC CAPITAL LETTER SHCHA
-   (#xCA ?\u042A) ;; CYRILLIC CAPITAL LETTER HARD SIGN
-   (#xCB ?\u042B) ;; CYRILLIC CAPITAL LETTER YERU
-   (#xCC ?\u042C) ;; CYRILLIC CAPITAL LETTER SOFT SIGN
-   (#xCD ?\u042D) ;; CYRILLIC CAPITAL LETTER E
-   (#xCE ?\u042E) ;; CYRILLIC CAPITAL LETTER YU
-   (#xCF ?\u042F) ;; CYRILLIC CAPITAL LETTER YA
-   (#xD0 ?\u0430) ;; CYRILLIC SMALL LETTER A
-   (#xD1 ?\u0431) ;; CYRILLIC SMALL LETTER BE
-   (#xD2 ?\u0432) ;; CYRILLIC SMALL LETTER VE
-   (#xD3 ?\u0433) ;; CYRILLIC SMALL LETTER GHE
-   (#xD4 ?\u0434) ;; CYRILLIC SMALL LETTER DE
-   (#xD5 ?\u0435) ;; CYRILLIC SMALL LETTER IE
-   (#xD6 ?\u0436) ;; CYRILLIC SMALL LETTER ZHE
-   (#xD7 ?\u0437) ;; CYRILLIC SMALL LETTER ZE
-   (#xD8 ?\u0438) ;; CYRILLIC SMALL LETTER I
-   (#xD9 ?\u0439) ;; CYRILLIC SMALL LETTER SHORT I
-   (#xDA ?\u043A) ;; CYRILLIC SMALL LETTER KA
-   (#xDB ?\u043B) ;; CYRILLIC SMALL LETTER EL
-   (#xDC ?\u043C) ;; CYRILLIC SMALL LETTER EM
-   (#xDD ?\u043D) ;; CYRILLIC SMALL LETTER EN
-   (#xDE ?\u043E) ;; CYRILLIC SMALL LETTER O
-   (#xDF ?\u043F) ;; CYRILLIC SMALL LETTER PE
-   (#xE0 ?\u0440) ;; CYRILLIC SMALL LETTER ER
-   (#xE1 ?\u0441) ;; CYRILLIC SMALL LETTER ES
-   (#xE2 ?\u0442) ;; CYRILLIC SMALL LETTER TE
-   (#xE3 ?\u0443) ;; CYRILLIC SMALL LETTER U
-   (#xE4 ?\u0444) ;; CYRILLIC SMALL LETTER EF
-   (#xE5 ?\u0445) ;; CYRILLIC SMALL LETTER HA
-   (#xE6 ?\u0446) ;; CYRILLIC SMALL LETTER TSE
-   (#xE7 ?\u0447) ;; CYRILLIC SMALL LETTER CHE
-   (#xE8 ?\u0448) ;; CYRILLIC SMALL LETTER SHA
-   (#xE9 ?\u0449) ;; CYRILLIC SMALL LETTER SHCHA
-   (#xEA ?\u044A) ;; CYRILLIC SMALL LETTER HARD SIGN
-   (#xEB ?\u044B) ;; CYRILLIC SMALL LETTER YERU
-   (#xEC ?\u044C) ;; CYRILLIC SMALL LETTER SOFT SIGN
-   (#xED ?\u044D) ;; CYRILLIC SMALL LETTER E
-   (#xEE ?\u044E) ;; CYRILLIC SMALL LETTER YU
-   (#xEF ?\u044F) ;; CYRILLIC SMALL LETTER YA
-   (#xF0 ?\u2116) ;; NUMERO SIGN
-   (#xF1 ?\u0451) ;; CYRILLIC SMALL LETTER IO
-   (#xF2 ?\u0452) ;; CYRILLIC SMALL LETTER DJE
-   (#xF3 ?\u0453) ;; CYRILLIC SMALL LETTER GJE
-   (#xF4 ?\u0454) ;; CYRILLIC SMALL LETTER UKRAINIAN IE
-   (#xF5 ?\u0455) ;; CYRILLIC SMALL LETTER DZE
-   (#xF6 ?\u0456) ;; CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
-   (#xF7 ?\u0457) ;; CYRILLIC SMALL LETTER YI
-   (#xF8 ?\u0458) ;; CYRILLIC SMALL LETTER JE
-   (#xF9 ?\u0459) ;; CYRILLIC SMALL LETTER LJE
-   (#xFA ?\u045A) ;; CYRILLIC SMALL LETTER NJE
-   (#xFB ?\u045B) ;; CYRILLIC SMALL LETTER TSHE
-   (#xFC ?\u045C) ;; CYRILLIC SMALL LETTER KJE
-   (#xFD ?\u00A7) ;; SECTION SIGN
-   (#xFE ?\u045E) ;; CYRILLIC SMALL LETTER SHORT U
-   (#xFF ?\u045F)) ;; CYRILLIC SMALL LETTER DZHE
- "ISO-8859-5 (Cyrillic)"
- '(mnemonic "ISO8/Cyr"
+(make-coding-system
+ 'iso-8859-5 'fixed-width "ISO-8859-5 (Cyrillic)"
+ '(unicode-map
+   ((#x80 ?\u0080) ;; <control>
+    (#x81 ?\u0081) ;; <control>
+    (#x82 ?\u0082) ;; <control>
+    (#x83 ?\u0083) ;; <control>
+    (#x84 ?\u0084) ;; <control>
+    (#x85 ?\u0085) ;; <control>
+    (#x86 ?\u0086) ;; <control>
+    (#x87 ?\u0087) ;; <control>
+    (#x88 ?\u0088) ;; <control>
+    (#x89 ?\u0089) ;; <control>
+    (#x8A ?\u008A) ;; <control>
+    (#x8B ?\u008B) ;; <control>
+    (#x8C ?\u008C) ;; <control>
+    (#x8D ?\u008D) ;; <control>
+    (#x8E ?\u008E) ;; <control>
+    (#x8F ?\u008F) ;; <control>
+    (#x90 ?\u0090) ;; <control>
+    (#x91 ?\u0091) ;; <control>
+    (#x92 ?\u0092) ;; <control>
+    (#x93 ?\u0093) ;; <control>
+    (#x94 ?\u0094) ;; <control>
+    (#x95 ?\u0095) ;; <control>
+    (#x96 ?\u0096) ;; <control>
+    (#x97 ?\u0097) ;; <control>
+    (#x98 ?\u0098) ;; <control>
+    (#x99 ?\u0099) ;; <control>
+    (#x9A ?\u009A) ;; <control>
+    (#x9B ?\u009B) ;; <control>
+    (#x9C ?\u009C) ;; <control>
+    (#x9D ?\u009D) ;; <control>
+    (#x9E ?\u009E) ;; <control>
+    (#x9F ?\u009F) ;; <control>
+    (#xA0 ?\u00A0) ;; NO-BREAK SPACE
+    (#xA1 ?\u0401) ;; CYRILLIC CAPITAL LETTER IO
+    (#xA2 ?\u0402) ;; CYRILLIC CAPITAL LETTER DJE
+    (#xA3 ?\u0403) ;; CYRILLIC CAPITAL LETTER GJE
+    (#xA4 ?\u0404) ;; CYRILLIC CAPITAL LETTER UKRAINIAN IE
+    (#xA5 ?\u0405) ;; CYRILLIC CAPITAL LETTER DZE
+    (#xA6 ?\u0406) ;; CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+    (#xA7 ?\u0407) ;; CYRILLIC CAPITAL LETTER YI
+    (#xA8 ?\u0408) ;; CYRILLIC CAPITAL LETTER JE
+    (#xA9 ?\u0409) ;; CYRILLIC CAPITAL LETTER LJE
+    (#xAA ?\u040A) ;; CYRILLIC CAPITAL LETTER NJE
+    (#xAB ?\u040B) ;; CYRILLIC CAPITAL LETTER TSHE
+    (#xAC ?\u040C) ;; CYRILLIC CAPITAL LETTER KJE
+    (#xAD ?\u00AD) ;; SOFT HYPHEN
+    (#xAE ?\u040E) ;; CYRILLIC CAPITAL LETTER SHORT U
+    (#xAF ?\u040F) ;; CYRILLIC CAPITAL LETTER DZHE
+    (#xB0 ?\u0410) ;; CYRILLIC CAPITAL LETTER A
+    (#xB1 ?\u0411) ;; CYRILLIC CAPITAL LETTER BE
+    (#xB2 ?\u0412) ;; CYRILLIC CAPITAL LETTER VE
+    (#xB3 ?\u0413) ;; CYRILLIC CAPITAL LETTER GHE
+    (#xB4 ?\u0414) ;; CYRILLIC CAPITAL LETTER DE
+    (#xB5 ?\u0415) ;; CYRILLIC CAPITAL LETTER IE
+    (#xB6 ?\u0416) ;; CYRILLIC CAPITAL LETTER ZHE
+    (#xB7 ?\u0417) ;; CYRILLIC CAPITAL LETTER ZE
+    (#xB8 ?\u0418) ;; CYRILLIC CAPITAL LETTER I
+    (#xB9 ?\u0419) ;; CYRILLIC CAPITAL LETTER SHORT I
+    (#xBA ?\u041A) ;; CYRILLIC CAPITAL LETTER KA
+    (#xBB ?\u041B) ;; CYRILLIC CAPITAL LETTER EL
+    (#xBC ?\u041C) ;; CYRILLIC CAPITAL LETTER EM
+    (#xBD ?\u041D) ;; CYRILLIC CAPITAL LETTER EN
+    (#xBE ?\u041E) ;; CYRILLIC CAPITAL LETTER O
+    (#xBF ?\u041F) ;; CYRILLIC CAPITAL LETTER PE
+    (#xC0 ?\u0420) ;; CYRILLIC CAPITAL LETTER ER
+    (#xC1 ?\u0421) ;; CYRILLIC CAPITAL LETTER ES
+    (#xC2 ?\u0422) ;; CYRILLIC CAPITAL LETTER TE
+    (#xC3 ?\u0423) ;; CYRILLIC CAPITAL LETTER U
+    (#xC4 ?\u0424) ;; CYRILLIC CAPITAL LETTER EF
+    (#xC5 ?\u0425) ;; CYRILLIC CAPITAL LETTER HA
+    (#xC6 ?\u0426) ;; CYRILLIC CAPITAL LETTER TSE
+    (#xC7 ?\u0427) ;; CYRILLIC CAPITAL LETTER CHE
+    (#xC8 ?\u0428) ;; CYRILLIC CAPITAL LETTER SHA
+    (#xC9 ?\u0429) ;; CYRILLIC CAPITAL LETTER SHCHA
+    (#xCA ?\u042A) ;; CYRILLIC CAPITAL LETTER HARD SIGN
+    (#xCB ?\u042B) ;; CYRILLIC CAPITAL LETTER YERU
+    (#xCC ?\u042C) ;; CYRILLIC CAPITAL LETTER SOFT SIGN
+    (#xCD ?\u042D) ;; CYRILLIC CAPITAL LETTER E
+    (#xCE ?\u042E) ;; CYRILLIC CAPITAL LETTER YU
+    (#xCF ?\u042F) ;; CYRILLIC CAPITAL LETTER YA
+    (#xD0 ?\u0430) ;; CYRILLIC SMALL LETTER A
+    (#xD1 ?\u0431) ;; CYRILLIC SMALL LETTER BE
+    (#xD2 ?\u0432) ;; CYRILLIC SMALL LETTER VE
+    (#xD3 ?\u0433) ;; CYRILLIC SMALL LETTER GHE
+    (#xD4 ?\u0434) ;; CYRILLIC SMALL LETTER DE
+    (#xD5 ?\u0435) ;; CYRILLIC SMALL LETTER IE
+    (#xD6 ?\u0436) ;; CYRILLIC SMALL LETTER ZHE
+    (#xD7 ?\u0437) ;; CYRILLIC SMALL LETTER ZE
+    (#xD8 ?\u0438) ;; CYRILLIC SMALL LETTER I
+    (#xD9 ?\u0439) ;; CYRILLIC SMALL LETTER SHORT I
+    (#xDA ?\u043A) ;; CYRILLIC SMALL LETTER KA
+    (#xDB ?\u043B) ;; CYRILLIC SMALL LETTER EL
+    (#xDC ?\u043C) ;; CYRILLIC SMALL LETTER EM
+    (#xDD ?\u043D) ;; CYRILLIC SMALL LETTER EN
+    (#xDE ?\u043E) ;; CYRILLIC SMALL LETTER O
+    (#xDF ?\u043F) ;; CYRILLIC SMALL LETTER PE
+    (#xE0 ?\u0440) ;; CYRILLIC SMALL LETTER ER
+    (#xE1 ?\u0441) ;; CYRILLIC SMALL LETTER ES
+    (#xE2 ?\u0442) ;; CYRILLIC SMALL LETTER TE
+    (#xE3 ?\u0443) ;; CYRILLIC SMALL LETTER U
+    (#xE4 ?\u0444) ;; CYRILLIC SMALL LETTER EF
+    (#xE5 ?\u0445) ;; CYRILLIC SMALL LETTER HA
+    (#xE6 ?\u0446) ;; CYRILLIC SMALL LETTER TSE
+    (#xE7 ?\u0447) ;; CYRILLIC SMALL LETTER CHE
+    (#xE8 ?\u0448) ;; CYRILLIC SMALL LETTER SHA
+    (#xE9 ?\u0449) ;; CYRILLIC SMALL LETTER SHCHA
+    (#xEA ?\u044A) ;; CYRILLIC SMALL LETTER HARD SIGN
+    (#xEB ?\u044B) ;; CYRILLIC SMALL LETTER YERU
+    (#xEC ?\u044C) ;; CYRILLIC SMALL LETTER SOFT SIGN
+    (#xED ?\u044D) ;; CYRILLIC SMALL LETTER E
+    (#xEE ?\u044E) ;; CYRILLIC SMALL LETTER YU
+    (#xEF ?\u044F) ;; CYRILLIC SMALL LETTER YA
+    (#xF0 ?\u2116) ;; NUMERO SIGN
+    (#xF1 ?\u0451) ;; CYRILLIC SMALL LETTER IO
+    (#xF2 ?\u0452) ;; CYRILLIC SMALL LETTER DJE
+    (#xF3 ?\u0453) ;; CYRILLIC SMALL LETTER GJE
+    (#xF4 ?\u0454) ;; CYRILLIC SMALL LETTER UKRAINIAN IE
+    (#xF5 ?\u0455) ;; CYRILLIC SMALL LETTER DZE
+    (#xF6 ?\u0456) ;; CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+    (#xF7 ?\u0457) ;; CYRILLIC SMALL LETTER YI
+    (#xF8 ?\u0458) ;; CYRILLIC SMALL LETTER JE
+    (#xF9 ?\u0459) ;; CYRILLIC SMALL LETTER LJE
+    (#xFA ?\u045A) ;; CYRILLIC SMALL LETTER NJE
+    (#xFB ?\u045B) ;; CYRILLIC SMALL LETTER TSHE
+    (#xFC ?\u045C) ;; CYRILLIC SMALL LETTER KJE
+    (#xFD ?\u00A7) ;; SECTION SIGN
+    (#xFE ?\u045E) ;; CYRILLIC SMALL LETTER SHORT U
+    (#xFF ?\u045F)) ;; CYRILLIC SMALL LETTER DZHE
+   mnemonic "ISO8/Cyr"
    documentation "The ISO standard for encoding Cyrillic. Not used in practice.
 See `koi8-r' and `windows-1251'.  "
    aliases (cyrillic-iso-8bit)))
@@ -257,145 +257,145 @@
  '("Cyrillic"))
 
 ;; KOI8-R, the most common encoding for Cyrillic on Unix and Usenet.
-(make-8-bit-coding-system 
- 'koi8-r
- '((#x80 ?\u2500) ;; BOX DRAWINGS LIGHT HORIZONTAL
-   (#x81 ?\u2502) ;; BOX DRAWINGS LIGHT VERTICAL
-   (#x82 ?\u250C) ;; BOX DRAWINGS LIGHT DOWN AND RIGHT
-   (#x83 ?\u2510) ;; BOX DRAWINGS LIGHT DOWN AND LEFT
-   (#x84 ?\u2514) ;; BOX DRAWINGS LIGHT UP AND RIGHT
-   (#x85 ?\u2518) ;; BOX DRAWINGS LIGHT UP AND LEFT
-   (#x86 ?\u251C) ;; BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-   (#x87 ?\u2524) ;; BOX DRAWINGS LIGHT VERTICAL AND LEFT
-   (#x88 ?\u252C) ;; BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-   (#x89 ?\u2534) ;; BOX DRAWINGS LIGHT UP AND HORIZONTAL
-   (#x8A ?\u253C) ;; BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-   (#x8B ?\u2580) ;; UPPER HALF BLOCK
-   (#x8C ?\u2584) ;; LOWER HALF BLOCK
-   (#x8D ?\u2588) ;; FULL BLOCK
-   (#x8E ?\u258C) ;; LEFT HALF BLOCK
-   (#x8F ?\u2590) ;; RIGHT HALF BLOCK
-   (#x90 ?\u2591) ;; LIGHT SHADE
-   (#x91 ?\u2592) ;; MEDIUM SHADE
-   (#x92 ?\u2593) ;; DARK SHADE
-   (#x93 ?\u2320) ;; TOP HALF INTEGRAL
-   (#x94 ?\u25A0) ;; BLACK SQUARE
-   (#x95 ?\u2219) ;; BULLET OPERATOR
-   (#x96 ?\u221A) ;; SQUARE ROOT
-   (#x97 ?\u2248) ;; ALMOST EQUAL TO
-   (#x98 ?\u2264) ;; LESS-THAN OR EQUAL TO
-   (#x99 ?\u2265) ;; GREATER-THAN OR EQUAL TO
-   (#x9A ?\u00A0) ;; NO-BREAK SPACE
-   (#x9B ?\u2321) ;; BOTTOM HALF INTEGRAL
-   (#x9C ?\u00B0) ;; DEGREE SIGN
-   (#x9D ?\u00B2) ;; SUPERSCRIPT TWO
-   (#x9E ?\u00B7) ;; MIDDLE DOT
-   (#x9F ?\u00F7) ;; DIVISION SIGN
-   (#xA0 ?\u2550) ;; BOX DRAWINGS DOUBLE HORIZONTAL
-   (#xA1 ?\u2551) ;; BOX DRAWINGS DOUBLE VERTICAL
-   (#xA2 ?\u2552) ;; BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
-   (#xA3 ?\u0451) ;; CYRILLIC SMALL LETTER IO
-   (#xA4 ?\u2553) ;; BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
-   (#xA5 ?\u2554) ;; BOX DRAWINGS DOUBLE DOWN AND RIGHT
-   (#xA6 ?\u2555) ;; BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
-   (#xA7 ?\u2556) ;; BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
-   (#xA8 ?\u2557) ;; BOX DRAWINGS DOUBLE DOWN AND LEFT
-   (#xA9 ?\u2558) ;; BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
-   (#xAA ?\u2559) ;; BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
-   (#xAB ?\u255A) ;; BOX DRAWINGS DOUBLE UP AND RIGHT
-   (#xAC ?\u255B) ;; BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
-   (#xAD ?\u255C) ;; BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
-   (#xAE ?\u255D) ;; BOX DRAWINGS DOUBLE UP AND LEFT
-   (#xAF ?\u255E) ;; BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
-   (#xB0 ?\u255F) ;; BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
-   (#xB1 ?\u2560) ;; BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-   (#xB2 ?\u2561) ;; BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
-   (#xB3 ?\u0401) ;; CYRILLIC CAPITAL LETTER IO
-   (#xB4 ?\u2562) ;; BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
-   (#xB5 ?\u2563) ;; BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-   (#xB6 ?\u2564) ;; BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
-   (#xB7 ?\u2565) ;; BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
-   (#xB8 ?\u2566) ;; BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-   (#xB9 ?\u2567) ;; BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
-   (#xBA ?\u2568) ;; BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
-   (#xBB ?\u2569) ;; BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-   (#xBC ?\u256A) ;; BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
-   (#xBD ?\u256B) ;; BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
-   (#xBE ?\u256C) ;; BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
-   (#xBF ?\u00A9) ;; COPYRIGHT SIGN
-   (#xC0 ?\u044E) ;; CYRILLIC SMALL LETTER YU
-   (#xC1 ?\u0430) ;; CYRILLIC SMALL LETTER A
-   (#xC2 ?\u0431) ;; CYRILLIC SMALL LETTER BE
-   (#xC3 ?\u0446) ;; CYRILLIC SMALL LETTER TSE
-   (#xC4 ?\u0434) ;; CYRILLIC SMALL LETTER DE
-   (#xC5 ?\u0435) ;; CYRILLIC SMALL LETTER IE
-   (#xC6 ?\u0444) ;; CYRILLIC SMALL LETTER EF
-   (#xC7 ?\u0433) ;; CYRILLIC SMALL LETTER GHE
-   (#xC8 ?\u0445) ;; CYRILLIC SMALL LETTER HA
-   (#xC9 ?\u0438) ;; CYRILLIC SMALL LETTER I
-   (#xCA ?\u0439) ;; CYRILLIC SMALL LETTER SHORT I
-   (#xCB ?\u043A) ;; CYRILLIC SMALL LETTER KA
-   (#xCC ?\u043B) ;; CYRILLIC SMALL LETTER EL
-   (#xCD ?\u043C) ;; CYRILLIC SMALL LETTER EM
-   (#xCE ?\u043D) ;; CYRILLIC SMALL LETTER EN
-   (#xCF ?\u043E) ;; CYRILLIC SMALL LETTER O
-   (#xD0 ?\u043F) ;; CYRILLIC SMALL LETTER PE
-   (#xD1 ?\u044F) ;; CYRILLIC SMALL LETTER YA
-   (#xD2 ?\u0440) ;; CYRILLIC SMALL LETTER ER
-   (#xD3 ?\u0441) ;; CYRILLIC SMALL LETTER ES
-   (#xD4 ?\u0442) ;; CYRILLIC SMALL LETTER TE
-   (#xD5 ?\u0443) ;; CYRILLIC SMALL LETTER U
-   (#xD6 ?\u0436) ;; CYRILLIC SMALL LETTER ZHE
-   (#xD7 ?\u0432) ;; CYRILLIC SMALL LETTER VE
-   (#xD8 ?\u044C) ;; CYRILLIC SMALL LETTER SOFT SIGN
-   (#xD9 ?\u044B) ;; CYRILLIC SMALL LETTER YERU
-   (#xDA ?\u0437) ;; CYRILLIC SMALL LETTER ZE
-   (#xDB ?\u0448) ;; CYRILLIC SMALL LETTER SHA
-   (#xDC ?\u044D) ;; CYRILLIC SMALL LETTER E
-   (#xDD ?\u0449) ;; CYRILLIC SMALL LETTER SHCHA
-   (#xDE ?\u0447) ;; CYRILLIC SMALL LETTER CHE
-   (#xDF ?\u044A) ;; CYRILLIC SMALL LETTER HARD SIGN
-   (#xE0 ?\u042E) ;; CYRILLIC CAPITAL LETTER YU
-   (#xE1 ?\u0410) ;; CYRILLIC CAPITAL LETTER A
-   (#xE2 ?\u0411) ;; CYRILLIC CAPITAL LETTER BE
-   (#xE3 ?\u0426) ;; CYRILLIC CAPITAL LETTER TSE
-   (#xE4 ?\u0414) ;; CYRILLIC CAPITAL LETTER DE
-   (#xE5 ?\u0415) ;; CYRILLIC CAPITAL LETTER IE
-   (#xE6 ?\u0424) ;; CYRILLIC CAPITAL LETTER EF
-   (#xE7 ?\u0413) ;; CYRILLIC CAPITAL LETTER GHE
-   (#xE8 ?\u0425) ;; CYRILLIC CAPITAL LETTER HA
-   (#xE9 ?\u0418) ;; CYRILLIC CAPITAL LETTER I
-   (#xEA ?\u0419) ;; CYRILLIC CAPITAL LETTER SHORT I
-   (#xEB ?\u041A) ;; CYRILLIC CAPITAL LETTER KA
-   (#xEC ?\u041B) ;; CYRILLIC CAPITAL LETTER EL
-   (#xED ?\u041C) ;; CYRILLIC CAPITAL LETTER EM
-   (#xEE ?\u041D) ;; CYRILLIC CAPITAL LETTER EN
-   (#xEF ?\u041E) ;; CYRILLIC CAPITAL LETTER O
-   (#xF0 ?\u041F) ;; CYRILLIC CAPITAL LETTER PE
-   (#xF1 ?\u042F) ;; CYRILLIC CAPITAL LETTER YA
-   (#xF2 ?\u0420) ;; CYRILLIC CAPITAL LETTER ER
-   (#xF3 ?\u0421) ;; CYRILLIC CAPITAL LETTER ES
-   (#xF4 ?\u0422) ;; CYRILLIC CAPITAL LETTER TE
-   (#xF5 ?\u0423) ;; CYRILLIC CAPITAL LETTER U
-   (#xF6 ?\u0416) ;; CYRILLIC CAPITAL LETTER ZHE
-   (#xF7 ?\u0412) ;; CYRILLIC CAPITAL LETTER VE
-   (#xF8 ?\u042C) ;; CYRILLIC CAPITAL LETTER SOFT SIGN
-   (#xF9 ?\u042B) ;; CYRILLIC CAPITAL LETTER YERU
-   (#xFA ?\u0417) ;; CYRILLIC CAPITAL LETTER ZE
-   (#xFB ?\u0428) ;; CYRILLIC CAPITAL LETTER SHA
-   (#xFC ?\u042D) ;; CYRILLIC CAPITAL LETTER E
-   (#xFD ?\u0429) ;; CYRILLIC CAPITAL LETTER SHCHA
-   (#xFE ?\u0427) ;; CYRILLIC CAPITAL LETTER CHE
-   (#xFF ?\u042A));; CYRILLIC CAPITAL LETTER HARD SIGN
- "KOI8-R (,L:^T(B ,L>Q\U]P(B ,L8]d^`\PfXUY(B, 8 ,LQXb(B) for Russian and Bulgarian."
- '(mnemonic "KOI8"
+(make-coding-system 
+ 'koi8-r 'fixed-width "KOI8-R (Cyrillic)"
+ '(unicode-map
+   ((#x80 ?\u2500) ;; BOX DRAWINGS LIGHT HORIZONTAL
+    (#x81 ?\u2502) ;; BOX DRAWINGS LIGHT VERTICAL
+    (#x82 ?\u250C) ;; BOX DRAWINGS LIGHT DOWN AND RIGHT
+    (#x83 ?\u2510) ;; BOX DRAWINGS LIGHT DOWN AND LEFT
+    (#x84 ?\u2514) ;; BOX DRAWINGS LIGHT UP AND RIGHT
+    (#x85 ?\u2518) ;; BOX DRAWINGS LIGHT UP AND LEFT
+    (#x86 ?\u251C) ;; BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+    (#x87 ?\u2524) ;; BOX DRAWINGS LIGHT VERTICAL AND LEFT
+    (#x88 ?\u252C) ;; BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+    (#x89 ?\u2534) ;; BOX DRAWINGS LIGHT UP AND HORIZONTAL
+    (#x8A ?\u253C) ;; BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+    (#x8B ?\u2580) ;; UPPER HALF BLOCK
+    (#x8C ?\u2584) ;; LOWER HALF BLOCK
+    (#x8D ?\u2588) ;; FULL BLOCK
+    (#x8E ?\u258C) ;; LEFT HALF BLOCK
+    (#x8F ?\u2590) ;; RIGHT HALF BLOCK
+    (#x90 ?\u2591) ;; LIGHT SHADE
+    (#x91 ?\u2592) ;; MEDIUM SHADE
+    (#x92 ?\u2593) ;; DARK SHADE
+    (#x93 ?\u2320) ;; TOP HALF INTEGRAL
+    (#x94 ?\u25A0) ;; BLACK SQUARE
+    (#x95 ?\u2219) ;; BULLET OPERATOR
+    (#x96 ?\u221A) ;; SQUARE ROOT
+    (#x97 ?\u2248) ;; ALMOST EQUAL TO
+    (#x98 ?\u2264) ;; LESS-THAN OR EQUAL TO
+    (#x99 ?\u2265) ;; GREATER-THAN OR EQUAL TO
+    (#x9A ?\u00A0) ;; NO-BREAK SPACE
+    (#x9B ?\u2321) ;; BOTTOM HALF INTEGRAL
+    (#x9C ?\u00B0) ;; DEGREE SIGN
+    (#x9D ?\u00B2) ;; SUPERSCRIPT TWO
+    (#x9E ?\u00B7) ;; MIDDLE DOT
+    (#x9F ?\u00F7) ;; DIVISION SIGN
+    (#xA0 ?\u2550) ;; BOX DRAWINGS DOUBLE HORIZONTAL
+    (#xA1 ?\u2551) ;; BOX DRAWINGS DOUBLE VERTICAL
+    (#xA2 ?\u2552) ;; BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+    (#xA3 ?\u0451) ;; CYRILLIC SMALL LETTER IO
+    (#xA4 ?\u2553) ;; BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+    (#xA5 ?\u2554) ;; BOX DRAWINGS DOUBLE DOWN AND RIGHT
+    (#xA6 ?\u2555) ;; BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+    (#xA7 ?\u2556) ;; BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+    (#xA8 ?\u2557) ;; BOX DRAWINGS DOUBLE DOWN AND LEFT
+    (#xA9 ?\u2558) ;; BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+    (#xAA ?\u2559) ;; BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+    (#xAB ?\u255A) ;; BOX DRAWINGS DOUBLE UP AND RIGHT
+    (#xAC ?\u255B) ;; BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+    (#xAD ?\u255C) ;; BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+    (#xAE ?\u255D) ;; BOX DRAWINGS DOUBLE UP AND LEFT
+    (#xAF ?\u255E) ;; BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+    (#xB0 ?\u255F) ;; BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+    (#xB1 ?\u2560) ;; BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+    (#xB2 ?\u2561) ;; BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+    (#xB3 ?\u0401) ;; CYRILLIC CAPITAL LETTER IO
+    (#xB4 ?\u2562) ;; BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+    (#xB5 ?\u2563) ;; BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+    (#xB6 ?\u2564) ;; BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+    (#xB7 ?\u2565) ;; BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+    (#xB8 ?\u2566) ;; BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+    (#xB9 ?\u2567) ;; BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+    (#xBA ?\u2568) ;; BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+    (#xBB ?\u2569) ;; BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+    (#xBC ?\u256A) ;; BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+    (#xBD ?\u256B) ;; BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+    (#xBE ?\u256C) ;; BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+    (#xBF ?\u00A9) ;; COPYRIGHT SIGN
+    (#xC0 ?\u044E) ;; CYRILLIC SMALL LETTER YU
+    (#xC1 ?\u0430) ;; CYRILLIC SMALL LETTER A
+    (#xC2 ?\u0431) ;; CYRILLIC SMALL LETTER BE
+    (#xC3 ?\u0446) ;; CYRILLIC SMALL LETTER TSE
+    (#xC4 ?\u0434) ;; CYRILLIC SMALL LETTER DE
+    (#xC5 ?\u0435) ;; CYRILLIC SMALL LETTER IE
+    (#xC6 ?\u0444) ;; CYRILLIC SMALL LETTER EF
+    (#xC7 ?\u0433) ;; CYRILLIC SMALL LETTER GHE
+    (#xC8 ?\u0445) ;; CYRILLIC SMALL LETTER HA
+    (#xC9 ?\u0438) ;; CYRILLIC SMALL LETTER I
+    (#xCA ?\u0439) ;; CYRILLIC SMALL LETTER SHORT I
+    (#xCB ?\u043A) ;; CYRILLIC SMALL LETTER KA
+    (#xCC ?\u043B) ;; CYRILLIC SMALL LETTER EL
+    (#xCD ?\u043C) ;; CYRILLIC SMALL LETTER EM
+    (#xCE ?\u043D) ;; CYRILLIC SMALL LETTER EN
+    (#xCF ?\u043E) ;; CYRILLIC SMALL LETTER O
+    (#xD0 ?\u043F) ;; CYRILLIC SMALL LETTER PE
+    (#xD1 ?\u044F) ;; CYRILLIC SMALL LETTER YA
+    (#xD2 ?\u0440) ;; CYRILLIC SMALL LETTER ER
+    (#xD3 ?\u0441) ;; CYRILLIC SMALL LETTER ES
+    (#xD4 ?\u0442) ;; CYRILLIC SMALL LETTER TE
+    (#xD5 ?\u0443) ;; CYRILLIC SMALL LETTER U
+    (#xD6 ?\u0436) ;; CYRILLIC SMALL LETTER ZHE
+    (#xD7 ?\u0432) ;; CYRILLIC SMALL LETTER VE
+    (#xD8 ?\u044C) ;; CYRILLIC SMALL LETTER SOFT SIGN
+    (#xD9 ?\u044B) ;; CYRILLIC SMALL LETTER YERU
+    (#xDA ?\u0437) ;; CYRILLIC SMALL LETTER ZE
+    (#xDB ?\u0448) ;; CYRILLIC SMALL LETTER SHA
+    (#xDC ?\u044D) ;; CYRILLIC SMALL LETTER E
+    (#xDD ?\u0449) ;; CYRILLIC SMALL LETTER SHCHA
+    (#xDE ?\u0447) ;; CYRILLIC SMALL LETTER CHE
+    (#xDF ?\u044A) ;; CYRILLIC SMALL LETTER HARD SIGN
+    (#xE0 ?\u042E) ;; CYRILLIC CAPITAL LETTER YU
+    (#xE1 ?\u0410) ;; CYRILLIC CAPITAL LETTER A
+    (#xE2 ?\u0411) ;; CYRILLIC CAPITAL LETTER BE
+    (#xE3 ?\u0426) ;; CYRILLIC CAPITAL LETTER TSE
+    (#xE4 ?\u0414) ;; CYRILLIC CAPITAL LETTER DE
+    (#xE5 ?\u0415) ;; CYRILLIC CAPITAL LETTER IE
+    (#xE6 ?\u0424) ;; CYRILLIC CAPITAL LETTER EF
+    (#xE7 ?\u0413) ;; CYRILLIC CAPITAL LETTER GHE
+    (#xE8 ?\u0425) ;; CYRILLIC CAPITAL LETTER HA
+    (#xE9 ?\u0418) ;; CYRILLIC CAPITAL LETTER I
+    (#xEA ?\u0419) ;; CYRILLIC CAPITAL LETTER SHORT I
+    (#xEB ?\u041A) ;; CYRILLIC CAPITAL LETTER KA
+    (#xEC ?\u041B) ;; CYRILLIC CAPITAL LETTER EL
+    (#xED ?\u041C) ;; CYRILLIC CAPITAL LETTER EM
+    (#xEE ?\u041D) ;; CYRILLIC CAPITAL LETTER EN
+    (#xEF ?\u041E) ;; CYRILLIC CAPITAL LETTER O
+    (#xF0 ?\u041F) ;; CYRILLIC CAPITAL LETTER PE
+    (#xF1 ?\u042F) ;; CYRILLIC CAPITAL LETTER YA
+    (#xF2 ?\u0420) ;; CYRILLIC CAPITAL LETTER ER
+    (#xF3 ?\u0421) ;; CYRILLIC CAPITAL LETTER ES
+    (#xF4 ?\u0422) ;; CYRILLIC CAPITAL LETTER TE
+    (#xF5 ?\u0423) ;; CYRILLIC CAPITAL LETTER U
+    (#xF6 ?\u0416) ;; CYRILLIC CAPITAL LETTER ZHE
+    (#xF7 ?\u0412) ;; CYRILLIC CAPITAL LETTER VE
+    (#xF8 ?\u042C) ;; CYRILLIC CAPITAL LETTER SOFT SIGN
+    (#xF9 ?\u042B) ;; CYRILLIC CAPITAL LETTER YERU
+    (#xFA ?\u0417) ;; CYRILLIC CAPITAL LETTER ZE
+    (#xFB ?\u0428) ;; CYRILLIC CAPITAL LETTER SHA
+    (#xFC ?\u042D) ;; CYRILLIC CAPITAL LETTER E
+    (#xFD ?\u0429) ;; CYRILLIC CAPITAL LETTER SHCHA
+    (#xFE ?\u0427) ;; CYRILLIC CAPITAL LETTER CHE
+    (#xFF ?\u042A)) ;; CYRILLIC CAPITAL LETTER HARD SIGN
+   mnemonic "KOI8"
    documentation
-   "This is the ASCII-compatible encoding documented in RFC 1341. 
-,L:>8(B8-,L@(B is very common across the Cyrillic-using internet and in Unix
-implementations; it shares the useful property with the other ,L:>8(B8
-encodings that when the high bit is stripped, encoded text remains
-readable (Cyrillic characters get mapped to corresponding Roman
-character of the opposite case). "
+   "This is ,L:^T(B ,L>Q\U]P(B ,L8]d^`\PfXUY(B, 8 ,LQXb(B, the ASCII-compatible encoding
+documented in RFC 1341. ,L:>8(B8-,L@(B is very common across the Cyrillic-using
+internet and in Unix implementations; it shares the useful property with the
+other ,L:>8(B8 encodings that when the high bit is stripped, encoded text
+remains readable (Cyrillic characters get mapped to corresponding Roman
+characters of the opposite case). "
    aliases (cyrillic-koi8 koi8 cp878)))
 
 ;; Create a corresponding language environment. 
@@ -423,144 +423,144 @@
  (remassq 'locale (copy-list (cdr (assoc "Russian" language-info-alist))))
  '("Cyrillic"))
 
-;; KOI8-U, for Ukrainian. 
-(make-8-bit-coding-system
- 'koi8-u
- '((#x80 ?\u2500) ;; BOX DRAWINGS LIGHT HORIZONTAL
-   (#x81 ?\u2502) ;; BOX DRAWINGS LIGHT VERTICAL
-   (#x82 ?\u250C) ;; BOX DRAWINGS LIGHT DOWN AND RIGHT
-   (#x83 ?\u2510) ;; BOX DRAWINGS LIGHT DOWN AND LEFT
-   (#x84 ?\u2514) ;; BOX DRAWINGS LIGHT UP AND RIGHT
-   (#x85 ?\u2518) ;; BOX DRAWINGS LIGHT UP AND LEFT
-   (#x86 ?\u251C) ;; BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-   (#x87 ?\u2524) ;; BOX DRAWINGS LIGHT VERTICAL AND LEFT
-   (#x88 ?\u252C) ;; BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-   (#x89 ?\u2534) ;; BOX DRAWINGS LIGHT UP AND HORIZONTAL
-   (#x8A ?\u253C) ;; BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-   (#x8B ?\u2580) ;; UPPER HALF BLOCK
-   (#x8C ?\u2584) ;; LOWER HALF BLOCK
-   (#x8D ?\u2588) ;; FULL BLOCK
-   (#x8E ?\u258C) ;; LEFT HALF BLOCK
-   (#x8F ?\u2590) ;; RIGHT HALF BLOCK
-   (#x90 ?\u2591) ;; LIGHT SHADE
-   (#x91 ?\u2592) ;; MEDIUM SHADE
-   (#x92 ?\u2593) ;; DARK SHADE
-   (#x93 ?\u2320) ;; TOP HALF INTEGRAL
-   (#x94 ?\u25A0) ;; BLACK SQUARE
-   (#x95 ?\u2022) ;; BULLET
-   (#x96 ?\u221A) ;; SQUARE ROOT
-   (#x97 ?\u2248) ;; ALMOST EQUAL TO
-   (#x98 ?\u2264) ;; LESS-THAN OR EQUAL TO
-   (#x99 ?\u2265) ;; GREATER-THAN OR EQUAL TO
-   (#x9A ?\u00A0) ;; NO-BREAK SPACE
-   (#x9B ?\u2321) ;; BOTTOM HALF INTEGRAL
-   (#x9C ?\u00B0) ;; DEGREE SIGN
-   (#x9D ?\u00B2) ;; SUPERSCRIPT TWO
-   (#x9E ?\u00B7) ;; MIDDLE DOT
-   (#x9F ?\u00F7) ;; DIVISION SIGN
-   (#xA0 ?\u2550) ;; BOX DRAWINGS DOUBLE HORIZONTAL
-   (#xA1 ?\u2551) ;; BOX DRAWINGS DOUBLE VERTICAL
-   (#xA2 ?\u2552) ;; BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
-   (#xA3 ?\u0451) ;; CYRILLIC SMALL LETTER IO
-   (#xA4 ?\u0454) ;; CYRILLIC SMALL LETTER UKRAINIAN IE
-   (#xA5 ?\u2554) ;; BOX DRAWINGS DOUBLE DOWN AND RIGHT
-   (#xA6 ?\u0456) ;; CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
-   (#xA7 ?\u0457) ;; CYRILLIC SMALL LETTER YI
-   (#xA8 ?\u2557) ;; BOX DRAWINGS DOUBLE DOWN AND LEFT
-   (#xA9 ?\u2558) ;; BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
-   (#xAA ?\u2559) ;; BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
-   (#xAB ?\u255A) ;; BOX DRAWINGS DOUBLE UP AND RIGHT
-   (#xAC ?\u255B) ;; BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
-   (#xAD ?\u0491) ;; CYRILLIC SMALL LETTER GHE WITH UPTURN
-   (#xAE ?\u255D) ;; BOX DRAWINGS DOUBLE UP AND LEFT
-   (#xAF ?\u255E) ;; BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
-   (#xB0 ?\u255F) ;; BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
-   (#xB1 ?\u2560) ;; BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-   (#xB2 ?\u2561) ;; BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
-   (#xB3 ?\u0401) ;; CYRILLIC CAPITAL LETTER IO
-   (#xB4 ?\u0404) ;; CYRILLIC CAPITAL LETTER UKRAINIAN IE
-   (#xB5 ?\u2563) ;; BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-   (#xB6 ?\u0406) ;; CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
-   (#xB7 ?\u0407) ;; CYRILLIC CAPITAL LETTER YI
-   (#xB8 ?\u2566) ;; BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-   (#xB9 ?\u2567) ;; BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
-   (#xBA ?\u2568) ;; BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
-   (#xBB ?\u2569) ;; BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-   (#xBC ?\u256A) ;; BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
-   (#xBD ?\u0490) ;; CYRILLIC CAPITAL LETTER GHE WITH UPTURN
-   (#xBE ?\u256C) ;; BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
-   (#xBF ?\u00A9) ;; COPYRIGHT SIGN
-   (#xC0 ?\u044E) ;; CYRILLIC SMALL LETTER YU
-   (#xC1 ?\u0430) ;; CYRILLIC SMALL LETTER A
-   (#xC2 ?\u0431) ;; CYRILLIC SMALL LETTER BE
-   (#xC3 ?\u0446) ;; CYRILLIC SMALL LETTER TSE
-   (#xC4 ?\u0434) ;; CYRILLIC SMALL LETTER DE
-   (#xC5 ?\u0435) ;; CYRILLIC SMALL LETTER IE
-   (#xC6 ?\u0444) ;; CYRILLIC SMALL LETTER EF
-   (#xC7 ?\u0433) ;; CYRILLIC SMALL LETTER GHE
-   (#xC8 ?\u0445) ;; CYRILLIC SMALL LETTER HA
-   (#xC9 ?\u0438) ;; CYRILLIC SMALL LETTER I
-   (#xCA ?\u0439) ;; CYRILLIC SMALL LETTER SHORT I
-   (#xCB ?\u043A) ;; CYRILLIC SMALL LETTER KA
-   (#xCC ?\u043B) ;; CYRILLIC SMALL LETTER EL
-   (#xCD ?\u043C) ;; CYRILLIC SMALL LETTER EM
-   (#xCE ?\u043D) ;; CYRILLIC SMALL LETTER EN
-   (#xCF ?\u043E) ;; CYRILLIC SMALL LETTER O
-   (#xD0 ?\u043F) ;; CYRILLIC SMALL LETTER PE
-   (#xD1 ?\u044F) ;; CYRILLIC SMALL LETTER YA
-   (#xD2 ?\u0440) ;; CYRILLIC SMALL LETTER ER
-   (#xD3 ?\u0441) ;; CYRILLIC SMALL LETTER ES
-   (#xD4 ?\u0442) ;; CYRILLIC SMALL LETTER TE
-   (#xD5 ?\u0443) ;; CYRILLIC SMALL LETTER U
-   (#xD6 ?\u0436) ;; CYRILLIC SMALL LETTER ZHE
-   (#xD7 ?\u0432) ;; CYRILLIC SMALL LETTER VE
-   (#xD8 ?\u044C) ;; CYRILLIC SMALL LETTER SOFT SIGN
-   (#xD9 ?\u044B) ;; CYRILLIC SMALL LETTER YERU
-   (#xDA ?\u0437) ;; CYRILLIC SMALL LETTER ZE
-   (#xDB ?\u0448) ;; CYRILLIC SMALL LETTER SHA
-   (#xDC ?\u044D) ;; CYRILLIC SMALL LETTER E
-   (#xDD ?\u0449) ;; CYRILLIC SMALL LETTER SHCHA
-   (#xDE ?\u0447) ;; CYRILLIC SMALL LETTER CHE
-   (#xDF ?\u044A) ;; CYRILLIC SMALL LETTER HARD SIGN
-   (#xE0 ?\u042E) ;; CYRILLIC CAPITAL LETTER YU
-   (#xE1 ?\u0410) ;; CYRILLIC CAPITAL LETTER A
-   (#xE2 ?\u0411) ;; CYRILLIC CAPITAL LETTER BE
-   (#xE3 ?\u0426) ;; CYRILLIC CAPITAL LETTER TSE
-   (#xE4 ?\u0414) ;; CYRILLIC CAPITAL LETTER DE
-   (#xE5 ?\u0415) ;; CYRILLIC CAPITAL LETTER IE
-   (#xE6 ?\u0424) ;; CYRILLIC CAPITAL LETTER EF
-   (#xE7 ?\u0413) ;; CYRILLIC CAPITAL LETTER GHE
-   (#xE8 ?\u0425) ;; CYRILLIC CAPITAL LETTER HA
-   (#xE9 ?\u0418) ;; CYRILLIC CAPITAL LETTER I
-   (#xEA ?\u0419) ;; CYRILLIC CAPITAL LETTER SHORT I
-   (#xEB ?\u041A) ;; CYRILLIC CAPITAL LETTER KA
-   (#xEC ?\u041B) ;; CYRILLIC CAPITAL LETTER EL
-   (#xED ?\u041C) ;; CYRILLIC CAPITAL LETTER EM
-   (#xEE ?\u041D) ;; CYRILLIC CAPITAL LETTER EN
-   (#xEF ?\u041E) ;; CYRILLIC CAPITAL LETTER O
-   (#xF0 ?\u041F) ;; CYRILLIC CAPITAL LETTER PE
-   (#xF1 ?\u042F) ;; CYRILLIC CAPITAL LETTER YA
-   (#xF2 ?\u0420) ;; CYRILLIC CAPITAL LETTER ER
-   (#xF3 ?\u0421) ;; CYRILLIC CAPITAL LETTER ES
-   (#xF4 ?\u0422) ;; CYRILLIC CAPITAL LETTER TE
-   (#xF5 ?\u0423) ;; CYRILLIC CAPITAL LETTER U
-   (#xF6 ?\u0416) ;; CYRILLIC CAPITAL LETTER ZHE
-   (#xF7 ?\u0412) ;; CYRILLIC CAPITAL LETTER VE
-   (#xF8 ?\u042C) ;; CYRILLIC CAPITAL LETTER SOFT SIGN
-   (#xF9 ?\u042B) ;; CYRILLIC CAPITAL LETTER YERU
-   (#xFA ?\u0417) ;; CYRILLIC CAPITAL LETTER ZE
-   (#xFB ?\u0428) ;; CYRILLIC CAPITAL LETTER SHA
-   (#xFC ?\u042D) ;; CYRILLIC CAPITAL LETTER E
-   (#xFD ?\u0429) ;; CYRILLIC CAPITAL LETTER SHCHA
-   (#xFE ?\u0427) ;; CYRILLIC CAPITAL LETTER CHE
-   (#xFF ?\u042A)) ;; CYRILLIC CAPITAL LETTER HARD SIGN
- "KOI8-U, for Ukrainian"
- '(mnemonic ",L:>8(B8,LC(B"
+;; KOI8-U, for Ukrainian.
+(make-coding-system
+ 'koi8-u 'fixed-width "KOI8-U, Ukrainian"
+ '(unicode-map
+   ((#x80 ?\u2500) ;; BOX DRAWINGS LIGHT HORIZONTAL
+    (#x81 ?\u2502) ;; BOX DRAWINGS LIGHT VERTICAL
+    (#x82 ?\u250C) ;; BOX DRAWINGS LIGHT DOWN AND RIGHT
+    (#x83 ?\u2510) ;; BOX DRAWINGS LIGHT DOWN AND LEFT
+    (#x84 ?\u2514) ;; BOX DRAWINGS LIGHT UP AND RIGHT
+    (#x85 ?\u2518) ;; BOX DRAWINGS LIGHT UP AND LEFT
+    (#x86 ?\u251C) ;; BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+    (#x87 ?\u2524) ;; BOX DRAWINGS LIGHT VERTICAL AND LEFT
+    (#x88 ?\u252C) ;; BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+    (#x89 ?\u2534) ;; BOX DRAWINGS LIGHT UP AND HORIZONTAL
+    (#x8A ?\u253C) ;; BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+    (#x8B ?\u2580) ;; UPPER HALF BLOCK
+    (#x8C ?\u2584) ;; LOWER HALF BLOCK
+    (#x8D ?\u2588) ;; FULL BLOCK
+    (#x8E ?\u258C) ;; LEFT HALF BLOCK
+    (#x8F ?\u2590) ;; RIGHT HALF BLOCK
+    (#x90 ?\u2591) ;; LIGHT SHADE
+    (#x91 ?\u2592) ;; MEDIUM SHADE
+    (#x92 ?\u2593) ;; DARK SHADE
+    (#x93 ?\u2320) ;; TOP HALF INTEGRAL
+    (#x94 ?\u25A0) ;; BLACK SQUARE
+    (#x95 ?\u2022) ;; BULLET
+    (#x96 ?\u221A) ;; SQUARE ROOT
+    (#x97 ?\u2248) ;; ALMOST EQUAL TO
+    (#x98 ?\u2264) ;; LESS-THAN OR EQUAL TO
+    (#x99 ?\u2265) ;; GREATER-THAN OR EQUAL TO
+    (#x9A ?\u00A0) ;; NO-BREAK SPACE
+    (#x9B ?\u2321) ;; BOTTOM HALF INTEGRAL
+    (#x9C ?\u00B0) ;; DEGREE SIGN
+    (#x9D ?\u00B2) ;; SUPERSCRIPT TWO
+    (#x9E ?\u00B7) ;; MIDDLE DOT
+    (#x9F ?\u00F7) ;; DIVISION SIGN
+    (#xA0 ?\u2550) ;; BOX DRAWINGS DOUBLE HORIZONTAL
+    (#xA1 ?\u2551) ;; BOX DRAWINGS DOUBLE VERTICAL
+    (#xA2 ?\u2552) ;; BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+    (#xA3 ?\u0451) ;; CYRILLIC SMALL LETTER IO
+    (#xA4 ?\u0454) ;; CYRILLIC SMALL LETTER UKRAINIAN IE
+    (#xA5 ?\u2554) ;; BOX DRAWINGS DOUBLE DOWN AND RIGHT
+    (#xA6 ?\u0456) ;; CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+    (#xA7 ?\u0457) ;; CYRILLIC SMALL LETTER YI
+    (#xA8 ?\u2557) ;; BOX DRAWINGS DOUBLE DOWN AND LEFT
+    (#xA9 ?\u2558) ;; BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+    (#xAA ?\u2559) ;; BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+    (#xAB ?\u255A) ;; BOX DRAWINGS DOUBLE UP AND RIGHT
+    (#xAC ?\u255B) ;; BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+    (#xAD ?\u0491) ;; CYRILLIC SMALL LETTER GHE WITH UPTURN
+    (#xAE ?\u255D) ;; BOX DRAWINGS DOUBLE UP AND LEFT
+    (#xAF ?\u255E) ;; BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+    (#xB0 ?\u255F) ;; BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+    (#xB1 ?\u2560) ;; BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+    (#xB2 ?\u2561) ;; BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+    (#xB3 ?\u0401) ;; CYRILLIC CAPITAL LETTER IO
+    (#xB4 ?\u0404) ;; CYRILLIC CAPITAL LETTER UKRAINIAN IE
+    (#xB5 ?\u2563) ;; BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+    (#xB6 ?\u0406) ;; CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+    (#xB7 ?\u0407) ;; CYRILLIC CAPITAL LETTER YI
+    (#xB8 ?\u2566) ;; BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+    (#xB9 ?\u2567) ;; BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+    (#xBA ?\u2568) ;; BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+    (#xBB ?\u2569) ;; BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+    (#xBC ?\u256A) ;; BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+    (#xBD ?\u0490) ;; CYRILLIC CAPITAL LETTER GHE WITH UPTURN
+    (#xBE ?\u256C) ;; BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+    (#xBF ?\u00A9) ;; COPYRIGHT SIGN
+    (#xC0 ?\u044E) ;; CYRILLIC SMALL LETTER YU
+    (#xC1 ?\u0430) ;; CYRILLIC SMALL LETTER A
+    (#xC2 ?\u0431) ;; CYRILLIC SMALL LETTER BE
+    (#xC3 ?\u0446) ;; CYRILLIC SMALL LETTER TSE
+    (#xC4 ?\u0434) ;; CYRILLIC SMALL LETTER DE
+    (#xC5 ?\u0435) ;; CYRILLIC SMALL LETTER IE
+    (#xC6 ?\u0444) ;; CYRILLIC SMALL LETTER EF
+    (#xC7 ?\u0433) ;; CYRILLIC SMALL LETTER GHE
+    (#xC8 ?\u0445) ;; CYRILLIC SMALL LETTER HA
+    (#xC9 ?\u0438) ;; CYRILLIC SMALL LETTER I
+    (#xCA ?\u0439) ;; CYRILLIC SMALL LETTER SHORT I
+    (#xCB ?\u043A) ;; CYRILLIC SMALL LETTER KA
+    (#xCC ?\u043B) ;; CYRILLIC SMALL LETTER EL
+    (#xCD ?\u043C) ;; CYRILLIC SMALL LETTER EM
+    (#xCE ?\u043D) ;; CYRILLIC SMALL LETTER EN
+    (#xCF ?\u043E) ;; CYRILLIC SMALL LETTER O
+    (#xD0 ?\u043F) ;; CYRILLIC SMALL LETTER PE
+    (#xD1 ?\u044F) ;; CYRILLIC SMALL LETTER YA
+    (#xD2 ?\u0440) ;; CYRILLIC SMALL LETTER ER
+    (#xD3 ?\u0441) ;; CYRILLIC SMALL LETTER ES
+    (#xD4 ?\u0442) ;; CYRILLIC SMALL LETTER TE
+    (#xD5 ?\u0443) ;; CYRILLIC SMALL LETTER U
+    (#xD6 ?\u0436) ;; CYRILLIC SMALL LETTER ZHE
+    (#xD7 ?\u0432) ;; CYRILLIC SMALL LETTER VE
+    (#xD8 ?\u044C) ;; CYRILLIC SMALL LETTER SOFT SIGN
+    (#xD9 ?\u044B) ;; CYRILLIC SMALL LETTER YERU
+    (#xDA ?\u0437) ;; CYRILLIC SMALL LETTER ZE
+    (#xDB ?\u0448) ;; CYRILLIC SMALL LETTER SHA
+    (#xDC ?\u044D) ;; CYRILLIC SMALL LETTER E
+    (#xDD ?\u0449) ;; CYRILLIC SMALL LETTER SHCHA
+    (#xDE ?\u0447) ;; CYRILLIC SMALL LETTER CHE
+    (#xDF ?\u044A) ;; CYRILLIC SMALL LETTER HARD SIGN
+    (#xE0 ?\u042E) ;; CYRILLIC CAPITAL LETTER YU
+    (#xE1 ?\u0410) ;; CYRILLIC CAPITAL LETTER A
+    (#xE2 ?\u0411) ;; CYRILLIC CAPITAL LETTER BE
+    (#xE3 ?\u0426) ;; CYRILLIC CAPITAL LETTER TSE
+    (#xE4 ?\u0414) ;; CYRILLIC CAPITAL LETTER DE
+    (#xE5 ?\u0415) ;; CYRILLIC CAPITAL LETTER IE
+    (#xE6 ?\u0424) ;; CYRILLIC CAPITAL LETTER EF
+    (#xE7 ?\u0413) ;; CYRILLIC CAPITAL LETTER GHE
+    (#xE8 ?\u0425) ;; CYRILLIC CAPITAL LETTER HA
+    (#xE9 ?\u0418) ;; CYRILLIC CAPITAL LETTER I
+    (#xEA ?\u0419) ;; CYRILLIC CAPITAL LETTER SHORT I
+    (#xEB ?\u041A) ;; CYRILLIC CAPITAL LETTER KA
+    (#xEC ?\u041B) ;; CYRILLIC CAPITAL LETTER EL
+    (#xED ?\u041C) ;; CYRILLIC CAPITAL LETTER EM
+    (#xEE ?\u041D) ;; CYRILLIC CAPITAL LETTER EN
+    (#xEF ?\u041E) ;; CYRILLIC CAPITAL LETTER O
+    (#xF0 ?\u041F) ;; CYRILLIC CAPITAL LETTER PE
+    (#xF1 ?\u042F) ;; CYRILLIC CAPITAL LETTER YA
+    (#xF2 ?\u0420) ;; CYRILLIC CAPITAL LETTER ER
+    (#xF3 ?\u0421) ;; CYRILLIC CAPITAL LETTER ES
+    (#xF4 ?\u0422) ;; CYRILLIC CAPITAL LETTER TE
+    (#xF5 ?\u0423) ;; CYRILLIC CAPITAL LETTER U
+    (#xF6 ?\u0416) ;; CYRILLIC CAPITAL LETTER ZHE
+    (#xF7 ?\u0412) ;; CYRILLIC CAPITAL LETTER VE
+    (#xF8 ?\u042C) ;; CYRILLIC CAPITAL LETTER SOFT SIGN
+    (#xF9 ?\u042B) ;; CYRILLIC CAPITAL LETTER YERU
+    (#xFA ?\u0417) ;; CYRILLIC CAPITAL LETTER ZE
+    (#xFB ?\u0428) ;; CYRILLIC CAPITAL LETTER SHA
+    (#xFC ?\u042D) ;; CYRILLIC CAPITAL LETTER E
+    (#xFD ?\u0429) ;; CYRILLIC CAPITAL LETTER SHCHA
+    (#xFE ?\u0427) ;; CYRILLIC CAPITAL LETTER CHE
+    (#xFF ?\u042A)) ;; CYRILLIC CAPITAL LETTER HARD SIGN
+   mnemonic ",L:>8(B8,LC(B"
    documentation
    "KOI8-U, a KOI-8-compatible encoding for Ukrainian, described in RFC2319.
 This has GHE WITH UPTURN, BYELORUSSIAN-UKRAINIAN I, UKRAINIAN IE and
 YI instead of some box-drawing characters.  Russian in this encoding
-(without using box-drawing characters) is bit-for-bit compatible with
+\(without using box-drawing characters) is bit-for-bit compatible with
 Russian in KOI8-R.  "))
 
 ;; Case support, for the new characters.
@@ -584,142 +584,145 @@
                 . "Support for Ukrainian."))
  '("Cyrillic"))
 
-(make-8-bit-coding-system 
- 'windows-1251
- '((#x80 ?\u0402) ;; CYRILLIC CAPITAL LETTER DJE
-   (#x81 ?\u0403) ;; CYRILLIC CAPITAL LETTER GJE
-   (#x82 ?\u201A) ;; SINGLE LOW-9 QUOTATION MARK
-   (#x83 ?\u0453) ;; CYRILLIC SMALL LETTER GJE
-   (#x84 ?\u201E) ;; DOUBLE LOW-9 QUOTATION MARK
-   (#x85 ?\u2026) ;; HORIZONTAL ELLIPSIS
-   (#x86 ?\u2020) ;; DAGGER
-   (#x87 ?\u2021) ;; DOUBLE DAGGER
-   (#x88 ?\u20AC) ;; EURO SIGN
-   (#x89 ?\u2030) ;; PER MILLE SIGN
-   (#x8A ?\u0409) ;; CYRILLIC CAPITAL LETTER LJE
-   (#x8B ?\u2039) ;; SINGLE LEFT-POINTING ANGLE QUOTATION MARK
-   (#x8C ?\u040A) ;; CYRILLIC CAPITAL LETTER NJE
-   (#x8D ?\u040C) ;; CYRILLIC CAPITAL LETTER KJE
-   (#x8E ?\u040B) ;; CYRILLIC CAPITAL LETTER TSHE
-   (#x8F ?\u040F) ;; CYRILLIC CAPITAL LETTER DZHE
-   (#x90 ?\u0452) ;; CYRILLIC SMALL LETTER DJE
-   (#x91 ?\u2018) ;; LEFT SINGLE QUOTATION MARK
-   (#x92 ?\u2019) ;; RIGHT SINGLE QUOTATION MARK
-   (#x93 ?\u201C) ;; LEFT DOUBLE QUOTATION MARK
-   (#x94 ?\u201D) ;; RIGHT DOUBLE QUOTATION MARK
-   (#x95 ?\u2022) ;; BULLET
-   (#x96 ?\u2013) ;; EN DASH
-   (#x97 ?\u2014) ;; EM DASH
-   (#x99 ?\u2122) ;; TRADE MARK SIGN
-   (#x9A ?\u0459) ;; CYRILLIC SMALL LETTER LJE
-   (#x9B ?\u203A) ;; SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-   (#x9C ?\u045A) ;; CYRILLIC SMALL LETTER NJE
-   (#x9D ?\u045C) ;; CYRILLIC SMALL LETTER KJE
-   (#x9E ?\u045B) ;; CYRILLIC SMALL LETTER TSHE
-   (#x9F ?\u045F) ;; CYRILLIC SMALL LETTER DZHE
-   (#xA0 ?\u00A0) ;; NO-BREAK SPACE
-   (#xA1 ?\u040E) ;; CYRILLIC CAPITAL LETTER SHORT U
-   (#xA2 ?\u045E) ;; CYRILLIC SMALL LETTER SHORT U
-   (#xA3 ?\u0408) ;; CYRILLIC CAPITAL LETTER JE
-   (#xA4 ?\u00A4) ;; CURRENCY SIGN
-   (#xA5 ?\u0490) ;; CYRILLIC CAPITAL LETTER GHE WITH UPTURN
-   (#xA6 ?\u00A6) ;; BROKEN BAR
-   (#xA7 ?\u00A7) ;; SECTION SIGN
-   (#xA8 ?\u0401) ;; CYRILLIC CAPITAL LETTER IO
-   (#xA9 ?\u00A9) ;; COPYRIGHT SIGN
-   (#xAA ?\u0404) ;; CYRILLIC CAPITAL LETTER UKRAINIAN IE
-   (#xAB ?\u00AB) ;; LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-   (#xAC ?\u00AC) ;; NOT SIGN
-   (#xAD ?\u00AD) ;; SOFT HYPHEN
-   (#xAE ?\u00AE) ;; REGISTERED SIGN
-   (#xAF ?\u0407) ;; CYRILLIC CAPITAL LETTER YI
-   (#xB0 ?\u00B0) ;; DEGREE SIGN
-   (#xB1 ?\u00B1) ;; PLUS-MINUS SIGN
-   (#xB2 ?\u0406) ;; CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
-   (#xB3 ?\u0456) ;; CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
-   (#xB4 ?\u0491) ;; CYRILLIC SMALL LETTER GHE WITH UPTURN
-   (#xB5 ?\u00B5) ;; MICRO SIGN
-   (#xB6 ?\u00B6) ;; PILCROW SIGN
-   (#xB7 ?\u00B7) ;; MIDDLE DOT
-   (#xB8 ?\u0451) ;; CYRILLIC SMALL LETTER IO
-   (#xB9 ?\u2116) ;; NUMERO SIGN
-   (#xBA ?\u0454) ;; CYRILLIC SMALL LETTER UKRAINIAN IE
-   (#xBB ?\u00BB) ;; RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-   (#xBC ?\u0458) ;; CYRILLIC SMALL LETTER JE
-   (#xBD ?\u0405) ;; CYRILLIC CAPITAL LETTER DZE
-   (#xBE ?\u0455) ;; CYRILLIC SMALL LETTER DZE
-   (#xBF ?\u0457) ;; CYRILLIC SMALL LETTER YI
-   (#xC0 ?\u0410) ;; CYRILLIC CAPITAL LETTER A
-   (#xC1 ?\u0411) ;; CYRILLIC CAPITAL LETTER BE
-   (#xC2 ?\u0412) ;; CYRILLIC CAPITAL LETTER VE
-   (#xC3 ?\u0413) ;; CYRILLIC CAPITAL LETTER GHE
-   (#xC4 ?\u0414) ;; CYRILLIC CAPITAL LETTER DE
-   (#xC5 ?\u0415) ;; CYRILLIC CAPITAL LETTER IE
-   (#xC6 ?\u0416) ;; CYRILLIC CAPITAL LETTER ZHE
-   (#xC7 ?\u0417) ;; CYRILLIC CAPITAL LETTER ZE
-   (#xC8 ?\u0418) ;; CYRILLIC CAPITAL LETTER I
-   (#xC9 ?\u0419) ;; CYRILLIC CAPITAL LETTER SHORT I
-   (#xCA ?\u041A) ;; CYRILLIC CAPITAL LETTER KA
-   (#xCB ?\u041B) ;; CYRILLIC CAPITAL LETTER EL
-   (#xCC ?\u041C) ;; CYRILLIC CAPITAL LETTER EM
-   (#xCD ?\u041D) ;; CYRILLIC CAPITAL LETTER EN
-   (#xCE ?\u041E) ;; CYRILLIC CAPITAL LETTER O
-   (#xCF ?\u041F) ;; CYRILLIC CAPITAL LETTER PE
-   (#xD0 ?\u0420) ;; CYRILLIC CAPITAL LETTER ER
-   (#xD1 ?\u0421) ;; CYRILLIC CAPITAL LETTER ES
-   (#xD2 ?\u0422) ;; CYRILLIC CAPITAL LETTER TE
-   (#xD3 ?\u0423) ;; CYRILLIC CAPITAL LETTER U
-   (#xD4 ?\u0424) ;; CYRILLIC CAPITAL LETTER EF
-   (#xD5 ?\u0425) ;; CYRILLIC CAPITAL LETTER HA
-   (#xD6 ?\u0426) ;; CYRILLIC CAPITAL LETTER TSE
-   (#xD7 ?\u0427) ;; CYRILLIC CAPITAL LETTER CHE
-   (#xD8 ?\u0428) ;; CYRILLIC CAPITAL LETTER SHA
-   (#xD9 ?\u0429) ;; CYRILLIC CAPITAL LETTER SHCHA
-   (#xDA ?\u042A) ;; CYRILLIC CAPITAL LETTER HARD SIGN
-   (#xDB ?\u042B) ;; CYRILLIC CAPITAL LETTER YERU
-   (#xDC ?\u042C) ;; CYRILLIC CAPITAL LETTER SOFT SIGN
-   (#xDD ?\u042D) ;; CYRILLIC CAPITAL LETTER E
-   (#xDE ?\u042E) ;; CYRILLIC CAPITAL LETTER YU
-   (#xDF ?\u042F) ;; CYRILLIC CAPITAL LETTER YA
-   (#xE0 ?\u0430) ;; CYRILLIC SMALL LETTER A
-   (#xE1 ?\u0431) ;; CYRILLIC SMALL LETTER BE
-   (#xE2 ?\u0432) ;; CYRILLIC SMALL LETTER VE
-   (#xE3 ?\u0433) ;; CYRILLIC SMALL LETTER GHE
-   (#xE4 ?\u0434) ;; CYRILLIC SMALL LETTER DE
-   (#xE5 ?\u0435) ;; CYRILLIC SMALL LETTER IE
-   (#xE6 ?\u0436) ;; CYRILLIC SMALL LETTER ZHE
-   (#xE7 ?\u0437) ;; CYRILLIC SMALL LETTER ZE
-   (#xE8 ?\u0438) ;; CYRILLIC SMALL LETTER I
-   (#xE9 ?\u0439) ;; CYRILLIC SMALL LETTER SHORT I
-   (#xEA ?\u043A) ;; CYRILLIC SMALL LETTER KA
-   (#xEB ?\u043B) ;; CYRILLIC SMALL LETTER EL
-   (#xEC ?\u043C) ;; CYRILLIC SMALL LETTER EM
-   (#xED ?\u043D) ;; CYRILLIC SMALL LETTER EN
-   (#xEE ?\u043E) ;; CYRILLIC SMALL LETTER O
-   (#xEF ?\u043F) ;; CYRILLIC SMALL LETTER PE
-   (#xF0 ?\u0440) ;; CYRILLIC SMALL LETTER ER
-   (#xF1 ?\u0441) ;; CYRILLIC SMALL LETTER ES
-   (#xF2 ?\u0442) ;; CYRILLIC SMALL LETTER TE
-   (#xF3 ?\u0443) ;; CYRILLIC SMALL LETTER U
-   (#xF4 ?\u0444) ;; CYRILLIC SMALL LETTER EF
-   (#xF5 ?\u0445) ;; CYRILLIC SMALL LETTER HA
-   (#xF6 ?\u0446) ;; CYRILLIC SMALL LETTER TSE
-   (#xF7 ?\u0447) ;; CYRILLIC SMALL LETTER CHE
-   (#xF8 ?\u0448) ;; CYRILLIC SMALL LETTER SHA
-   (#xF9 ?\u0449) ;; CYRILLIC SMALL LETTER SHCHA
-   (#xFA ?\u044A) ;; CYRILLIC SMALL LETTER HARD SIGN
-   (#xFB ?\u044B) ;; CYRILLIC SMALL LETTER YERU
-   (#xFC ?\u044C) ;; CYRILLIC SMALL LETTER SOFT SIGN
-   (#xFD ?\u044D) ;; CYRILLIC SMALL LETTER E
-   (#xFE ?\u044E) ;; CYRILLIC SMALL LETTER YU
-   (#xFF ?\u044F)) ;; CYRILLIC SMALL LETTER YA
- "Microsoft's Code Page 1251, for Russian, Bulgarian, Serbian and others.  "
- '(mnemonic "CyrW"
+(make-coding-system 
+ 'windows-1251 'fixed-width "Microsoft's CP1251, Cyrillic."
+ '(unicode-map
+   ((#x80 ?\u0402) ;; CYRILLIC CAPITAL LETTER DJE
+    (#x81 ?\u0403) ;; CYRILLIC CAPITAL LETTER GJE
+    (#x82 ?\u201A) ;; SINGLE LOW-9 QUOTATION MARK
+    (#x83 ?\u0453) ;; CYRILLIC SMALL LETTER GJE
+    (#x84 ?\u201E) ;; DOUBLE LOW-9 QUOTATION MARK
+    (#x85 ?\u2026) ;; HORIZONTAL ELLIPSIS
+    (#x86 ?\u2020) ;; DAGGER
+    (#x87 ?\u2021) ;; DOUBLE DAGGER
+    (#x88 ?\u20AC) ;; EURO SIGN
+    (#x89 ?\u2030) ;; PER MILLE SIGN
+    (#x8A ?\u0409) ;; CYRILLIC CAPITAL LETTER LJE
+    (#x8B ?\u2039) ;; SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+    (#x8C ?\u040A) ;; CYRILLIC CAPITAL LETTER NJE
+    (#x8D ?\u040C) ;; CYRILLIC CAPITAL LETTER KJE
+    (#x8E ?\u040B) ;; CYRILLIC CAPITAL LETTER TSHE
+    (#x8F ?\u040F) ;; CYRILLIC CAPITAL LETTER DZHE
+    (#x90 ?\u0452) ;; CYRILLIC SMALL LETTER DJE
+    (#x91 ?\u2018) ;; LEFT SINGLE QUOTATION MARK
+    (#x92 ?\u2019) ;; RIGHT SINGLE QUOTATION MARK
+    (#x93 ?\u201C) ;; LEFT DOUBLE QUOTATION MARK
+    (#x94 ?\u201D) ;; RIGHT DOUBLE QUOTATION MARK
+    (#x95 ?\u2022) ;; BULLET
+    (#x96 ?\u2013) ;; EN DASH
+    (#x97 ?\u2014) ;; EM DASH
+    (#x99 ?\u2122) ;; TRADE MARK SIGN
+    (#x9A ?\u0459) ;; CYRILLIC SMALL LETTER LJE
+    (#x9B ?\u203A) ;; SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+    (#x9C ?\u045A) ;; CYRILLIC SMALL LETTER NJE
+    (#x9D ?\u045C) ;; CYRILLIC SMALL LETTER KJE
+    (#x9E ?\u045B) ;; CYRILLIC SMALL LETTER TSHE
+    (#x9F ?\u045F) ;; CYRILLIC SMALL LETTER DZHE
+    (#xA0 ?\u00A0) ;; NO-BREAK SPACE
+    (#xA1 ?\u040E) ;; CYRILLIC CAPITAL LETTER SHORT U
+    (#xA2 ?\u045E) ;; CYRILLIC SMALL LETTER SHORT U
+    (#xA3 ?\u0408) ;; CYRILLIC CAPITAL LETTER JE
+    (#xA4 ?\u00A4) ;; CURRENCY SIGN
+    (#xA5 ?\u0490) ;; CYRILLIC CAPITAL LETTER GHE WITH UPTURN
+    (#xA6 ?\u00A6) ;; BROKEN BAR
+    (#xA7 ?\u00A7) ;; SECTION SIGN
+    (#xA8 ?\u0401) ;; CYRILLIC CAPITAL LETTER IO
+    (#xA9 ?\u00A9) ;; COPYRIGHT SIGN
+    (#xAA ?\u0404) ;; CYRILLIC CAPITAL LETTER UKRAINIAN IE
+    (#xAB ?\u00AB) ;; LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    (#xAC ?\u00AC) ;; NOT SIGN
+    (#xAD ?\u00AD) ;; SOFT HYPHEN
+    (#xAE ?\u00AE) ;; REGISTERED SIGN
+    (#xAF ?\u0407) ;; CYRILLIC CAPITAL LETTER YI
+    (#xB0 ?\u00B0) ;; DEGREE SIGN
+    (#xB1 ?\u00B1) ;; PLUS-MINUS SIGN
+    (#xB2 ?\u0406) ;; CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+    (#xB3 ?\u0456) ;; CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+    (#xB4 ?\u0491) ;; CYRILLIC SMALL LETTER GHE WITH UPTURN
+    (#xB5 ?\u00B5) ;; MICRO SIGN
+    (#xB6 ?\u00B6) ;; PILCROW SIGN
+    (#xB7 ?\u00B7) ;; MIDDLE DOT
+    (#xB8 ?\u0451) ;; CYRILLIC SMALL LETTER IO
+    (#xB9 ?\u2116) ;; NUMERO SIGN
+    (#xBA ?\u0454) ;; CYRILLIC SMALL LETTER UKRAINIAN IE
+    (#xBB ?\u00BB) ;; RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    (#xBC ?\u0458) ;; CYRILLIC SMALL LETTER JE
+    (#xBD ?\u0405) ;; CYRILLIC CAPITAL LETTER DZE
+    (#xBE ?\u0455) ;; CYRILLIC SMALL LETTER DZE
+    (#xBF ?\u0457) ;; CYRILLIC SMALL LETTER YI
+    (#xC0 ?\u0410) ;; CYRILLIC CAPITAL LETTER A
+    (#xC1 ?\u0411) ;; CYRILLIC CAPITAL LETTER BE
+    (#xC2 ?\u0412) ;; CYRILLIC CAPITAL LETTER VE
+    (#xC3 ?\u0413) ;; CYRILLIC CAPITAL LETTER GHE
+    (#xC4 ?\u0414) ;; CYRILLIC CAPITAL LETTER DE
+    (#xC5 ?\u0415) ;; CYRILLIC CAPITAL LETTER IE
+    (#xC6 ?\u0416) ;; CYRILLIC CAPITAL LETTER ZHE
+    (#xC7 ?\u0417) ;; CYRILLIC CAPITAL LETTER ZE
+    (#xC8 ?\u0418) ;; CYRILLIC CAPITAL LETTER I
+    (#xC9 ?\u0419) ;; CYRILLIC CAPITAL LETTER SHORT I
+    (#xCA ?\u041A) ;; CYRILLIC CAPITAL LETTER KA
+    (#xCB ?\u041B) ;; CYRILLIC CAPITAL LETTER EL
+    (#xCC ?\u041C) ;; CYRILLIC CAPITAL LETTER EM
+    (#xCD ?\u041D) ;; CYRILLIC CAPITAL LETTER EN
+    (#xCE ?\u041E) ;; CYRILLIC CAPITAL LETTER O
+    (#xCF ?\u041F) ;; CYRILLIC CAPITAL LETTER PE
+    (#xD0 ?\u0420) ;; CYRILLIC CAPITAL LETTER ER
+    (#xD1 ?\u0421) ;; CYRILLIC CAPITAL LETTER ES
+    (#xD2 ?\u0422) ;; CYRILLIC CAPITAL LETTER TE
+    (#xD3 ?\u0423) ;; CYRILLIC CAPITAL LETTER U
+    (#xD4 ?\u0424) ;; CYRILLIC CAPITAL LETTER EF
+    (#xD5 ?\u0425) ;; CYRILLIC CAPITAL LETTER HA
+    (#xD6 ?\u0426) ;; CYRILLIC CAPITAL LETTER TSE
+    (#xD7 ?\u0427) ;; CYRILLIC CAPITAL LETTER CHE
+    (#xD8 ?\u0428) ;; CYRILLIC CAPITAL LETTER SHA
+    (#xD9 ?\u0429) ;; CYRILLIC CAPITAL LETTER SHCHA
+    (#xDA ?\u042A) ;; CYRILLIC CAPITAL LETTER HARD SIGN
+    (#xDB ?\u042B) ;; CYRILLIC CAPITAL LETTER YERU
+    (#xDC ?\u042C) ;; CYRILLIC CAPITAL LETTER SOFT SIGN
+    (#xDD ?\u042D) ;; CYRILLIC CAPITAL LETTER E
+    (#xDE ?\u042E) ;; CYRILLIC CAPITAL LETTER YU
+    (#xDF ?\u042F) ;; CYRILLIC CAPITAL LETTER YA
+    (#xE0 ?\u0430) ;; CYRILLIC SMALL LETTER A
+    (#xE1 ?\u0431) ;; CYRILLIC SMALL LETTER BE
+    (#xE2 ?\u0432) ;; CYRILLIC SMALL LETTER VE
+    (#xE3 ?\u0433) ;; CYRILLIC SMALL LETTER GHE
+    (#xE4 ?\u0434) ;; CYRILLIC SMALL LETTER DE
+    (#xE5 ?\u0435) ;; CYRILLIC SMALL LETTER IE
+    (#xE6 ?\u0436) ;; CYRILLIC SMALL LETTER ZHE
+    (#xE7 ?\u0437) ;; CYRILLIC SMALL LETTER ZE
+    (#xE8 ?\u0438) ;; CYRILLIC SMALL LETTER I
+    (#xE9 ?\u0439) ;; CYRILLIC SMALL LETTER SHORT I
+    (#xEA ?\u043A) ;; CYRILLIC SMALL LETTER KA
+    (#xEB ?\u043B) ;; CYRILLIC SMALL LETTER EL
+    (#xEC ?\u043C) ;; CYRILLIC SMALL LETTER EM
+    (#xED ?\u043D) ;; CYRILLIC SMALL LETTER EN
+    (#xEE ?\u043E) ;; CYRILLIC SMALL LETTER O
+    (#xEF ?\u043F) ;; CYRILLIC SMALL LETTER PE
+    (#xF0 ?\u0440) ;; CYRILLIC SMALL LETTER ER
+    (#xF1 ?\u0441) ;; CYRILLIC SMALL LETTER ES
+    (#xF2 ?\u0442) ;; CYRILLIC SMALL LETTER TE
+    (#xF3 ?\u0443) ;; CYRILLIC SMALL LETTER U
+    (#xF4 ?\u0444) ;; CYRILLIC SMALL LETTER EF
+    (#xF5 ?\u0445) ;; CYRILLIC SMALL LETTER HA
+    (#xF6 ?\u0446) ;; CYRILLIC SMALL LETTER TSE
+    (#xF7 ?\u0447) ;; CYRILLIC SMALL LETTER CHE
+    (#xF8 ?\u0448) ;; CYRILLIC SMALL LETTER SHA
+    (#xF9 ?\u0449) ;; CYRILLIC SMALL LETTER SHCHA
+    (#xFA ?\u044A) ;; CYRILLIC SMALL LETTER HARD SIGN
+    (#xFB ?\u044B) ;; CYRILLIC SMALL LETTER YERU
+    (#xFC ?\u044C) ;; CYRILLIC SMALL LETTER SOFT SIGN
+    (#xFD ?\u044D) ;; CYRILLIC SMALL LETTER E
+    (#xFE ?\u044E) ;; CYRILLIC SMALL LETTER YU
+    (#xFF ?\u044F)) ;; CYRILLIC SMALL LETTER YA
+   mnemonic "CyrW"
    documentation
    "This ASCII-compatible encoding is unfortunately not compatible at
 the code point level with the KOI8 family of encodings, but it
 provides several widely-used punctuation and quotation marks that
-KOI-8R and its relatives don't, and has become widely used.  "
+KOI-8R and its relatives don't, and has become widely used. 
+
+It supports Russian, Bulgarian, Serbian and other languages written using
+Cyrillic script.  "
    aliases (cp1251)))
 
 (set-language-info-alist
@@ -745,138 +748,138 @@
  '("Cyrillic"))
 
 ;;; Alternativnyj
-(make-8-bit-coding-system
- 'alternativnyj
- '((#x80 ?\u0410) ;; CYRILLIC CAPITAL LETTER A
-   (#x81 ?\u0411) ;; CYRILLIC CAPITAL LETTER BE
-   (#x82 ?\u0412) ;; CYRILLIC CAPITAL LETTER VE
-   (#x83 ?\u0413) ;; CYRILLIC CAPITAL LETTER GHE
-   (#x84 ?\u0414) ;; CYRILLIC CAPITAL LETTER DE
-   (#x85 ?\u0415) ;; CYRILLIC CAPITAL LETTER IE
-   (#x86 ?\u0416) ;; CYRILLIC CAPITAL LETTER ZHE
-   (#x87 ?\u0417) ;; CYRILLIC CAPITAL LETTER ZE
-   (#x88 ?\u0418) ;; CYRILLIC CAPITAL LETTER I
-   (#x89 ?\u0419) ;; CYRILLIC CAPITAL LETTER SHORT I
-   (#x8A ?\u041A) ;; CYRILLIC CAPITAL LETTER KA
-   (#x8B ?\u041B) ;; CYRILLIC CAPITAL LETTER EL
-   (#x8C ?\u041C) ;; CYRILLIC CAPITAL LETTER EM
-   (#x8D ?\u041D) ;; CYRILLIC CAPITAL LETTER EN
-   (#x8E ?\u041E) ;; CYRILLIC CAPITAL LETTER O
-   (#x8F ?\u041F) ;; CYRILLIC CAPITAL LETTER PE
-   (#x90 ?\u0420) ;; CYRILLIC CAPITAL LETTER ER
-   (#x91 ?\u0421) ;; CYRILLIC CAPITAL LETTER ES
-   (#x92 ?\u0422) ;; CYRILLIC CAPITAL LETTER TE
-   (#x93 ?\u0423) ;; CYRILLIC CAPITAL LETTER U
-   (#x94 ?\u0424) ;; CYRILLIC CAPITAL LETTER EF
-   (#x95 ?\u0425) ;; CYRILLIC CAPITAL LETTER HA
-   (#x96 ?\u0426) ;; CYRILLIC CAPITAL LETTER TSE
-   (#x97 ?\u0427) ;; CYRILLIC CAPITAL LETTER CHE
-   (#x98 ?\u0428) ;; CYRILLIC CAPITAL LETTER SHA
-   (#x99 ?\u0429) ;; CYRILLIC CAPITAL LETTER SHCHA
-   (#x9A ?\u042A) ;; CYRILLIC CAPITAL LETTER HARD SIGN
-   (#x9B ?\u042B) ;; CYRILLIC CAPITAL LETTER YERU
-   (#x9C ?\u042C) ;; CYRILLIC CAPITAL LETTER SOFT SIGN
-   (#x9D ?\u042D) ;; CYRILLIC CAPITAL LETTER E
-   (#x9E ?\u042E) ;; CYRILLIC CAPITAL LETTER YU
-   (#x9F ?\u042F) ;; CYRILLIC CAPITAL LETTER YA
-   (#xA0 ?\u0430) ;; CYRILLIC SMALL LETTER A
-   (#xA1 ?\u0431) ;; CYRILLIC SMALL LETTER BE
-   (#xA2 ?\u0432) ;; CYRILLIC SMALL LETTER VE
-   (#xA3 ?\u0433) ;; CYRILLIC SMALL LETTER GHE
-   (#xA4 ?\u0434) ;; CYRILLIC SMALL LETTER DE
-   (#xA5 ?\u0435) ;; CYRILLIC SMALL LETTER IE
-   (#xA6 ?\u0436) ;; CYRILLIC SMALL LETTER ZHE
-   (#xA7 ?\u0437) ;; CYRILLIC SMALL LETTER ZE
-   (#xA8 ?\u0438) ;; CYRILLIC SMALL LETTER I
-   (#xA9 ?\u0439) ;; CYRILLIC SMALL LETTER SHORT I
-   (#xAA ?\u043A) ;; CYRILLIC SMALL LETTER KA
-   (#xAB ?\u043B) ;; CYRILLIC SMALL LETTER EL
-   (#xAC ?\u043C) ;; CYRILLIC SMALL LETTER EM
-   (#xAD ?\u043D) ;; CYRILLIC SMALL LETTER EN
-   (#xAE ?\u043E) ;; CYRILLIC SMALL LETTER O
-   (#xAF ?\u043F) ;; CYRILLIC SMALL LETTER PE
-   (#xB0 ?\u2591) ;; LIGHT SHADE
-   (#xB1 ?\u2592) ;; MEDIUM SHADE
-   (#xB2 ?\u2593) ;; DARK SHADE
-   (#xB3 ?\u2502) ;; BOX DRAWINGS LIGHT VERTICAL
-   (#xB4 ?\u2524) ;; BOX DRAWINGS LIGHT VERTICAL AND LEFT
-   (#xB5 ?\u2561) ;; BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
-   (#xB6 ?\u2562) ;; BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
-   (#xB7 ?\u2556) ;; BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
-   (#xB8 ?\u2555) ;; BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
-   (#xB9 ?\u2563) ;; BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-   (#xBA ?\u2551) ;; BOX DRAWINGS DOUBLE VERTICAL
-   (#xBB ?\u2557) ;; BOX DRAWINGS DOUBLE DOWN AND LEFT
-   (#xBC ?\u255D) ;; BOX DRAWINGS DOUBLE UP AND LEFT
-   (#xBD ?\u255C) ;; BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
-   (#xBE ?\u255B) ;; BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
-   (#xBF ?\u2510) ;; BOX DRAWINGS LIGHT DOWN AND LEFT
-   (#xC0 ?\u2514) ;; BOX DRAWINGS LIGHT UP AND RIGHT
-   (#xC1 ?\u2534) ;; BOX DRAWINGS LIGHT UP AND HORIZONTAL
-   (#xC2 ?\u252C) ;; BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-   (#xC3 ?\u251C) ;; BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-   (#xC4 ?\u2500) ;; BOX DRAWINGS LIGHT HORIZONTAL
-   (#xC5 ?\u253C) ;; BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-   (#xC6 ?\u255E) ;; BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
-   (#xC7 ?\u255F) ;; BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
-   (#xC8 ?\u255A) ;; BOX DRAWINGS DOUBLE UP AND RIGHT
-   (#xC9 ?\u2554) ;; BOX DRAWINGS DOUBLE DOWN AND RIGHT
-   (#xCA ?\u2569) ;; BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-   (#xCB ?\u2566) ;; BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-   (#xCC ?\u2560) ;; BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-   (#xCD ?\u2550) ;; BOX DRAWINGS DOUBLE HORIZONTAL
-   (#xCE ?\u256C) ;; BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
-   (#xCF ?\u2567) ;; BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
-   (#xD0 ?\u2568) ;; BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
-   (#xD1 ?\u2564) ;; BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
-   (#xD2 ?\u2565) ;; BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
-   (#xD3 ?\u2559) ;; BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
-   (#xD4 ?\u2558) ;; BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
-   (#xD5 ?\u2552) ;; BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
-   (#xD6 ?\u2553) ;; BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
-   (#xD7 ?\u256B) ;; BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
-   (#xD8 ?\u256A) ;; BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
-   (#xD9 ?\u2518) ;; BOX DRAWINGS LIGHT UP AND LEFT
-   (#xDA ?\u250C) ;; BOX DRAWINGS LIGHT DOWN AND RIGHT
-   (#xDB ?\u2588) ;; FULL BLOCK
-   (#xDC ?\u2584) ;; LOWER HALF BLOCK
-   (#xDD ?\u258C) ;; LEFT HALF BLOCK
-   (#xDE ?\u2590) ;; RIGHT HALF BLOCK
-   (#xDF ?\u2580) ;; UPPER HALF BLOCK
-   (#xE0 ?\u0440) ;; CYRILLIC SMALL LETTER ER
-   (#xE1 ?\u0441) ;; CYRILLIC SMALL LETTER ES
-   (#xE2 ?\u0442) ;; CYRILLIC SMALL LETTER TE
-   (#xE3 ?\u0443) ;; CYRILLIC SMALL LETTER U
-   (#xE4 ?\u0444) ;; CYRILLIC SMALL LETTER EF
-   (#xE5 ?\u0445) ;; CYRILLIC SMALL LETTER HA
-   (#xE6 ?\u0446) ;; CYRILLIC SMALL LETTER TSE
-   (#xE7 ?\u0447) ;; CYRILLIC SMALL LETTER CHE
-   (#xE8 ?\u0448) ;; CYRILLIC SMALL LETTER SHA
-   (#xE9 ?\u0449) ;; CYRILLIC SMALL LETTER SHCHA
-   (#xEA ?\u044A) ;; CYRILLIC SMALL LETTER HARD SIGN
-   (#xEB ?\u044B) ;; CYRILLIC SMALL LETTER YERU
-   (#xEC ?\u044C) ;; CYRILLIC SMALL LETTER SOFT SIGN
-   (#xED ?\u044D) ;; CYRILLIC SMALL LETTER E
-   (#xEE ?\u044E) ;; CYRILLIC SMALL LETTER YU
-   (#xEF ?\u044F) ;; CYRILLIC SMALL LETTER YA
-   (#xF0 ?\u0401) ;; CYRILLIC CAPITAL LETTER IO
-   (#xF1 ?\u0451) ;; CYRILLIC SMALL LETTER IO
-   (#xF2 ?\u0404) ;; CYRILLIC CAPITAL LETTER UKRAINIAN IE
-   (#xF3 ?\u0454) ;; CYRILLIC SMALL LETTER UKRAINIAN IE
-   (#xF4 ?\u0407) ;; CYRILLIC CAPITAL LETTER YI
-   (#xF5 ?\u0457) ;; CYRILLIC SMALL LETTER YI
-   (#xF6 ?\u040E) ;; CYRILLIC CAPITAL LETTER SHORT U
-   (#xF7 ?\u045E) ;; CYRILLIC SMALL LETTER SHORT U
-   (#xF8 ?\u00B0) ;; DEGREE SIGN
-   (#xF9 ?\u2022) ;; BULLET
-   (#xFA ?\u00B7) ;; MIDDLE DOT
-   (#xFB ?\u221A) ;; SQUARE ROOT
-   (#xFC ?\u2116) ;; NUMERO SIGN
-   (#xFD ?\u00A4) ;; CURRENCY SIGN
-   (#xFE ?\u25A0) ;; BLACK SQUARE
-   (#xFF ?\u00A0)) ;; NO-BREAK SPACE
- "Alternativnyj (Cyrillic). Microsoft's Code Page 966. "
- '(mnemonic "Cy.Alt"
+(make-coding-system
+ 'alternativnyj 'fixed-width "Microsoft's CP966, Cyrillic"
+ '(unicode-map
+   ((#x80 ?\u0410) ;; CYRILLIC CAPITAL LETTER A
+    (#x81 ?\u0411) ;; CYRILLIC CAPITAL LETTER BE
+    (#x82 ?\u0412) ;; CYRILLIC CAPITAL LETTER VE
+    (#x83 ?\u0413) ;; CYRILLIC CAPITAL LETTER GHE
+    (#x84 ?\u0414) ;; CYRILLIC CAPITAL LETTER DE
+    (#x85 ?\u0415) ;; CYRILLIC CAPITAL LETTER IE
+    (#x86 ?\u0416) ;; CYRILLIC CAPITAL LETTER ZHE
+    (#x87 ?\u0417) ;; CYRILLIC CAPITAL LETTER ZE
+    (#x88 ?\u0418) ;; CYRILLIC CAPITAL LETTER I
+    (#x89 ?\u0419) ;; CYRILLIC CAPITAL LETTER SHORT I
+    (#x8A ?\u041A) ;; CYRILLIC CAPITAL LETTER KA
+    (#x8B ?\u041B) ;; CYRILLIC CAPITAL LETTER EL
+    (#x8C ?\u041C) ;; CYRILLIC CAPITAL LETTER EM
+    (#x8D ?\u041D) ;; CYRILLIC CAPITAL LETTER EN
+    (#x8E ?\u041E) ;; CYRILLIC CAPITAL LETTER O
+    (#x8F ?\u041F) ;; CYRILLIC CAPITAL LETTER PE
+    (#x90 ?\u0420) ;; CYRILLIC CAPITAL LETTER ER
+    (#x91 ?\u0421) ;; CYRILLIC CAPITAL LETTER ES
+    (#x92 ?\u0422) ;; CYRILLIC CAPITAL LETTER TE
+    (#x93 ?\u0423) ;; CYRILLIC CAPITAL LETTER U
+    (#x94 ?\u0424) ;; CYRILLIC CAPITAL LETTER EF
+    (#x95 ?\u0425) ;; CYRILLIC CAPITAL LETTER HA
+    (#x96 ?\u0426) ;; CYRILLIC CAPITAL LETTER TSE
+    (#x97 ?\u0427) ;; CYRILLIC CAPITAL LETTER CHE
+    (#x98 ?\u0428) ;; CYRILLIC CAPITAL LETTER SHA
+    (#x99 ?\u0429) ;; CYRILLIC CAPITAL LETTER SHCHA
+    (#x9A ?\u042A) ;; CYRILLIC CAPITAL LETTER HARD SIGN
+    (#x9B ?\u042B) ;; CYRILLIC CAPITAL LETTER YERU
+    (#x9C ?\u042C) ;; CYRILLIC CAPITAL LETTER SOFT SIGN
+    (#x9D ?\u042D) ;; CYRILLIC CAPITAL LETTER E
+    (#x9E ?\u042E) ;; CYRILLIC CAPITAL LETTER YU
+    (#x9F ?\u042F) ;; CYRILLIC CAPITAL LETTER YA
+    (#xA0 ?\u0430) ;; CYRILLIC SMALL LETTER A
+    (#xA1 ?\u0431) ;; CYRILLIC SMALL LETTER BE
+    (#xA2 ?\u0432) ;; CYRILLIC SMALL LETTER VE
+    (#xA3 ?\u0433) ;; CYRILLIC SMALL LETTER GHE
+    (#xA4 ?\u0434) ;; CYRILLIC SMALL LETTER DE
+    (#xA5 ?\u0435) ;; CYRILLIC SMALL LETTER IE
+    (#xA6 ?\u0436) ;; CYRILLIC SMALL LETTER ZHE
+    (#xA7 ?\u0437) ;; CYRILLIC SMALL LETTER ZE
+    (#xA8 ?\u0438) ;; CYRILLIC SMALL LETTER I
+    (#xA9 ?\u0439) ;; CYRILLIC SMALL LETTER SHORT I
+    (#xAA ?\u043A) ;; CYRILLIC SMALL LETTER KA
+    (#xAB ?\u043B) ;; CYRILLIC SMALL LETTER EL
+    (#xAC ?\u043C) ;; CYRILLIC SMALL LETTER EM
+    (#xAD ?\u043D) ;; CYRILLIC SMALL LETTER EN
+    (#xAE ?\u043E) ;; CYRILLIC SMALL LETTER O
+    (#xAF ?\u043F) ;; CYRILLIC SMALL LETTER PE
+    (#xB0 ?\u2591) ;; LIGHT SHADE
+    (#xB1 ?\u2592) ;; MEDIUM SHADE
+    (#xB2 ?\u2593) ;; DARK SHADE
+    (#xB3 ?\u2502) ;; BOX DRAWINGS LIGHT VERTICAL
+    (#xB4 ?\u2524) ;; BOX DRAWINGS LIGHT VERTICAL AND LEFT
+    (#xB5 ?\u2561) ;; BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+    (#xB6 ?\u2562) ;; BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+    (#xB7 ?\u2556) ;; BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+    (#xB8 ?\u2555) ;; BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+    (#xB9 ?\u2563) ;; BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+    (#xBA ?\u2551) ;; BOX DRAWINGS DOUBLE VERTICAL
+    (#xBB ?\u2557) ;; BOX DRAWINGS DOUBLE DOWN AND LEFT
+    (#xBC ?\u255D) ;; BOX DRAWINGS DOUBLE UP AND LEFT
+    (#xBD ?\u255C) ;; BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+    (#xBE ?\u255B) ;; BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+    (#xBF ?\u2510) ;; BOX DRAWINGS LIGHT DOWN AND LEFT
+    (#xC0 ?\u2514) ;; BOX DRAWINGS LIGHT UP AND RIGHT
+    (#xC1 ?\u2534) ;; BOX DRAWINGS LIGHT UP AND HORIZONTAL
+    (#xC2 ?\u252C) ;; BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+    (#xC3 ?\u251C) ;; BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+    (#xC4 ?\u2500) ;; BOX DRAWINGS LIGHT HORIZONTAL
+    (#xC5 ?\u253C) ;; BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+    (#xC6 ?\u255E) ;; BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+    (#xC7 ?\u255F) ;; BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+    (#xC8 ?\u255A) ;; BOX DRAWINGS DOUBLE UP AND RIGHT
+    (#xC9 ?\u2554) ;; BOX DRAWINGS DOUBLE DOWN AND RIGHT
+    (#xCA ?\u2569) ;; BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+    (#xCB ?\u2566) ;; BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+    (#xCC ?\u2560) ;; BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+    (#xCD ?\u2550) ;; BOX DRAWINGS DOUBLE HORIZONTAL
+    (#xCE ?\u256C) ;; BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+    (#xCF ?\u2567) ;; BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+    (#xD0 ?\u2568) ;; BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+    (#xD1 ?\u2564) ;; BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+    (#xD2 ?\u2565) ;; BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+    (#xD3 ?\u2559) ;; BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+    (#xD4 ?\u2558) ;; BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+    (#xD5 ?\u2552) ;; BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+    (#xD6 ?\u2553) ;; BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+    (#xD7 ?\u256B) ;; BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+    (#xD8 ?\u256A) ;; BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+    (#xD9 ?\u2518) ;; BOX DRAWINGS LIGHT UP AND LEFT
+    (#xDA ?\u250C) ;; BOX DRAWINGS LIGHT DOWN AND RIGHT
+    (#xDB ?\u2588) ;; FULL BLOCK
+    (#xDC ?\u2584) ;; LOWER HALF BLOCK
+    (#xDD ?\u258C) ;; LEFT HALF BLOCK
+    (#xDE ?\u2590) ;; RIGHT HALF BLOCK
+    (#xDF ?\u2580) ;; UPPER HALF BLOCK
+    (#xE0 ?\u0440) ;; CYRILLIC SMALL LETTER ER
+    (#xE1 ?\u0441) ;; CYRILLIC SMALL LETTER ES
+    (#xE2 ?\u0442) ;; CYRILLIC SMALL LETTER TE
+    (#xE3 ?\u0443) ;; CYRILLIC SMALL LETTER U
+    (#xE4 ?\u0444) ;; CYRILLIC SMALL LETTER EF
+    (#xE5 ?\u0445) ;; CYRILLIC SMALL LETTER HA
+    (#xE6 ?\u0446) ;; CYRILLIC SMALL LETTER TSE
+    (#xE7 ?\u0447) ;; CYRILLIC SMALL LETTER CHE
+    (#xE8 ?\u0448) ;; CYRILLIC SMALL LETTER SHA
+    (#xE9 ?\u0449) ;; CYRILLIC SMALL LETTER SHCHA
+    (#xEA ?\u044A) ;; CYRILLIC SMALL LETTER HARD SIGN
+    (#xEB ?\u044B) ;; CYRILLIC SMALL LETTER YERU
+    (#xEC ?\u044C) ;; CYRILLIC SMALL LETTER SOFT SIGN
+    (#xED ?\u044D) ;; CYRILLIC SMALL LETTER E
+    (#xEE ?\u044E) ;; CYRILLIC SMALL LETTER YU
+    (#xEF ?\u044F) ;; CYRILLIC SMALL LETTER YA
+    (#xF0 ?\u0401) ;; CYRILLIC CAPITAL LETTER IO
+    (#xF1 ?\u0451) ;; CYRILLIC SMALL LETTER IO
+    (#xF2 ?\u0404) ;; CYRILLIC CAPITAL LETTER UKRAINIAN IE
+    (#xF3 ?\u0454) ;; CYRILLIC SMALL LETTER UKRAINIAN IE
+    (#xF4 ?\u0407) ;; CYRILLIC CAPITAL LETTER YI
+    (#xF5 ?\u0457) ;; CYRILLIC SMALL LETTER YI
+    (#xF6 ?\u040E) ;; CYRILLIC CAPITAL LETTER SHORT U
+    (#xF7 ?\u045E) ;; CYRILLIC SMALL LETTER SHORT U
+    (#xF8 ?\u00B0) ;; DEGREE SIGN
+    (#xF9 ?\u2022) ;; BULLET
+    (#xFA ?\u00B7) ;; MIDDLE DOT
+    (#xFB ?\u221A) ;; SQUARE ROOT
+    (#xFC ?\u2116) ;; NUMERO SIGN
+    (#xFD ?\u00A4) ;; CURRENCY SIGN
+    (#xFE ?\u25A0) ;; BLACK SQUARE
+    (#xFF ?\u00A0)) ;; NO-BREAK SPACE
+   mnemonic "Cy.Alt"
    aliases (cp866)))
 
 (set-language-info-alist
@@ -892,257 +895,258 @@
                   (documentation . "Support for Cyrillic ALTERNATIVNYJ."))
  '("Cyrillic"))
 
-(make-8-bit-coding-system
- 'koi8-ru
- '((#x80 ?\u2500) ;; BOX DRAWINGS LIGHT HORIZONTAL
-   (#x81 ?\u2502) ;; BOX DRAWINGS LIGHT VERTICAL
-   (#x82 ?\u250C) ;; BOX DRAWINGS LIGHT DOWN AND RIGHT
-   (#x83 ?\u2510) ;; BOX DRAWINGS LIGHT DOWN AND LEFT
-   (#x84 ?\u2514) ;; BOX DRAWINGS LIGHT UP AND RIGHT
-   (#x85 ?\u2518) ;; BOX DRAWINGS LIGHT UP AND LEFT
-   (#x86 ?\u251C) ;; BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-   (#x87 ?\u2524) ;; BOX DRAWINGS LIGHT VERTICAL AND LEFT
-   (#x88 ?\u252C) ;; BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-   (#x89 ?\u2534) ;; BOX DRAWINGS LIGHT UP AND HORIZONTAL
-   (#x8A ?\u253C) ;; BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-   (#x8B ?\u2580) ;; UPPER HALF BLOCK
-   (#x8C ?\u2584) ;; LOWER HALF BLOCK
-   (#x8D ?\u2588) ;; FULL BLOCK
-   (#x8E ?\u258C) ;; LEFT HALF BLOCK
-   (#x8F ?\u2590) ;; RIGHT HALF BLOCK
-   (#x90 ?\u2591) ;; LIGHT SHADE
-   (#x91 ?\u2592) ;; MEDIUM SHADE
-   (#x92 ?\u2593) ;; DARK SHADE
-   (#x93 ?\u2320) ;; TOP HALF INTEGRAL
-   (#x94 ?\u25A0) ;; BLACK SQUARE
-   (#x95 ?\u2219) ;; BULLET OPERATOR
-   (#x96 ?\u221A) ;; SQUARE ROOT
-   (#x97 ?\u2248) ;; ALMOST EQUAL TO
-   (#x98 ?\u2264) ;; LESS-THAN OR EQUAL TO
-   (#x99 ?\u2265) ;; GREATER-THAN OR EQUAL TO
-   (#x9A ?\u00A0) ;; NO-BREAK SPACE
-   (#x9B ?\u2321) ;; BOTTOM HALF INTEGRAL
-   (#x9C ?\u00B0) ;; DEGREE SIGN
-   (#x9D ?\u00B2) ;; SUPERSCRIPT TWO
-   (#x9E ?\u00B7) ;; MIDDLE DOT
-   (#x9F ?\u00F7) ;; DIVISION SIGN
-   (#xA0 ?\u2550) ;; BOX DRAWINGS DOUBLE HORIZONTAL
-   (#xA1 ?\u2551) ;; BOX DRAWINGS DOUBLE VERTICAL
-   (#xA2 ?\u2552) ;; BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
-   (#xA3 ?\u0451) ;; CYRILLIC SMALL LETTER IO
-   (#xA4 ?\u0454) ;; CYRILLIC SMALL LETTER UKRAINIAN IE
-   (#xA5 ?\u2554) ;; BOX DRAWINGS DOUBLE DOWN AND RIGHT
-   (#xA6 ?\u0456) ;; CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
-   (#xA7 ?\u0457) ;; CYRILLIC SMALL LETTER YI
-   (#xA8 ?\u2557) ;; BOX DRAWINGS DOUBLE DOWN AND LEFT
-   (#xA9 ?\u2558) ;; BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
-   (#xAA ?\u2559) ;; BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
-   (#xAB ?\u255A) ;; BOX DRAWINGS DOUBLE UP AND RIGHT
-   (#xAC ?\u255B) ;; BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
-   (#xAD ?\u0491) ;; CYRILLIC SMALL LETTER GHE WITH UPTURN
-   (#xAE ?\u045E) ;; CYRILLIC SMALL LETTER SHORT U
-   (#xAF ?\u255E) ;; BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
-   (#xB0 ?\u255F) ;; BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
-   (#xB1 ?\u2560) ;; BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-   (#xB2 ?\u2561) ;; BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
-   (#xB3 ?\u0401) ;; CYRILLIC CAPITAL LETTER IO
-   (#xB4 ?\u0404) ;; CYRILLIC CAPITAL LETTER UKRAINIAN IE
-   (#xB5 ?\u2563) ;; BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-   (#xB6 ?\u0406) ;; CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
-   (#xB7 ?\u0407) ;; CYRILLIC CAPITAL LETTER YI
-   (#xB8 ?\u2566) ;; BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-   (#xB9 ?\u2567) ;; BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
-   (#xBA ?\u2568) ;; BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
-   (#xBB ?\u2569) ;; BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-   (#xBC ?\u256A) ;; BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
-   (#xBD ?\u0490) ;; CYRILLIC CAPITAL LETTER GHE WITH UPTURN
-   (#xBE ?\u040E) ;; CYRILLIC CAPITAL LETTER SHORT U
-   (#xBF ?\u00A9) ;; COPYRIGHT SIGN
-   (#xC0 ?\u044E) ;; CYRILLIC SMALL LETTER YU
-   (#xC1 ?\u0430) ;; CYRILLIC SMALL LETTER A
-   (#xC2 ?\u0431) ;; CYRILLIC SMALL LETTER BE
-   (#xC3 ?\u0446) ;; CYRILLIC SMALL LETTER TSE
-   (#xC4 ?\u0434) ;; CYRILLIC SMALL LETTER DE
-   (#xC5 ?\u0435) ;; CYRILLIC SMALL LETTER IE
-   (#xC6 ?\u0444) ;; CYRILLIC SMALL LETTER EF
-   (#xC7 ?\u0433) ;; CYRILLIC SMALL LETTER GHE
-   (#xC8 ?\u0445) ;; CYRILLIC SMALL LETTER HA
-   (#xC9 ?\u0438) ;; CYRILLIC SMALL LETTER I
-   (#xCA ?\u0439) ;; CYRILLIC SMALL LETTER SHORT I
-   (#xCB ?\u043A) ;; CYRILLIC SMALL LETTER KA
-   (#xCC ?\u043B) ;; CYRILLIC SMALL LETTER EL
-   (#xCD ?\u043C) ;; CYRILLIC SMALL LETTER EM
-   (#xCE ?\u043D) ;; CYRILLIC SMALL LETTER EN
-   (#xCF ?\u043E) ;; CYRILLIC SMALL LETTER O
-   (#xD0 ?\u043F) ;; CYRILLIC SMALL LETTER PE
-   (#xD1 ?\u044F) ;; CYRILLIC SMALL LETTER YA
-   (#xD2 ?\u0440) ;; CYRILLIC SMALL LETTER ER
-   (#xD3 ?\u0441) ;; CYRILLIC SMALL LETTER ES
-   (#xD4 ?\u0442) ;; CYRILLIC SMALL LETTER TE
-   (#xD5 ?\u0443) ;; CYRILLIC SMALL LETTER U
-   (#xD6 ?\u0436) ;; CYRILLIC SMALL LETTER ZHE
-   (#xD7 ?\u0432) ;; CYRILLIC SMALL LETTER VE
-   (#xD8 ?\u044C) ;; CYRILLIC SMALL LETTER SOFT SIGN
-   (#xD9 ?\u044B) ;; CYRILLIC SMALL LETTER YERU
-   (#xDA ?\u0437) ;; CYRILLIC SMALL LETTER ZE
-   (#xDB ?\u0448) ;; CYRILLIC SMALL LETTER SHA
-   (#xDC ?\u044D) ;; CYRILLIC SMALL LETTER E
-   (#xDD ?\u0449) ;; CYRILLIC SMALL LETTER SHCHA
-   (#xDE ?\u0447) ;; CYRILLIC SMALL LETTER CHE
-   (#xDF ?\u044A) ;; CYRILLIC SMALL LETTER HARD SIGN
-   (#xE0 ?\u042E) ;; CYRILLIC CAPITAL LETTER YU
-   (#xE1 ?\u0410) ;; CYRILLIC CAPITAL LETTER A
-   (#xE2 ?\u0411) ;; CYRILLIC CAPITAL LETTER BE
-   (#xE3 ?\u0426) ;; CYRILLIC CAPITAL LETTER TSE
-   (#xE4 ?\u0414) ;; CYRILLIC CAPITAL LETTER DE
-   (#xE5 ?\u0415) ;; CYRILLIC CAPITAL LETTER IE
-   (#xE6 ?\u0424) ;; CYRILLIC CAPITAL LETTER EF
-   (#xE7 ?\u0413) ;; CYRILLIC CAPITAL LETTER GHE
-   (#xE8 ?\u0425) ;; CYRILLIC CAPITAL LETTER HA
-   (#xE9 ?\u0418) ;; CYRILLIC CAPITAL LETTER I
-   (#xEA ?\u0419) ;; CYRILLIC CAPITAL LETTER SHORT I
-   (#xEB ?\u041A) ;; CYRILLIC CAPITAL LETTER KA
-   (#xEC ?\u041B) ;; CYRILLIC CAPITAL LETTER EL
-   (#xED ?\u041C) ;; CYRILLIC CAPITAL LETTER EM
-   (#xEE ?\u041D) ;; CYRILLIC CAPITAL LETTER EN
-   (#xEF ?\u041E) ;; CYRILLIC CAPITAL LETTER O
-   (#xF0 ?\u041F) ;; CYRILLIC CAPITAL LETTER PE
-   (#xF1 ?\u042F) ;; CYRILLIC CAPITAL LETTER YA
-   (#xF2 ?\u0420) ;; CYRILLIC CAPITAL LETTER ER
-   (#xF3 ?\u0421) ;; CYRILLIC CAPITAL LETTER ES
-   (#xF4 ?\u0422) ;; CYRILLIC CAPITAL LETTER TE
-   (#xF5 ?\u0423) ;; CYRILLIC CAPITAL LETTER U
-   (#xF6 ?\u0416) ;; CYRILLIC CAPITAL LETTER ZHE
-   (#xF7 ?\u0412) ;; CYRILLIC CAPITAL LETTER VE
-   (#xF8 ?\u042C) ;; CYRILLIC CAPITAL LETTER SOFT SIGN
-   (#xF9 ?\u042B) ;; CYRILLIC CAPITAL LETTER YERU
-   (#xFA ?\u0417) ;; CYRILLIC CAPITAL LETTER ZE
-   (#xFB ?\u0428) ;; CYRILLIC CAPITAL LETTER SHA
-   (#xFC ?\u042D) ;; CYRILLIC CAPITAL LETTER E
-   (#xFD ?\u0429) ;; CYRILLIC CAPITAL LETTER SHCHA
-   (#xFE ?\u0427) ;; CYRILLIC CAPITAL LETTER CHE
-   (#xFF ?\u042A));; CYRILLIC CAPITAL LETTER HARD SIGN
- "KOI8-RU, a mostly-compatible superset of KOI8-R. 
+(make-coding-system
+ 'koi8-ru 'fixed-width ",L:>8(B-8 (Russian, Ukrainian)"
+ '(unicode-map
+   ((#x80 ?\u2500) ;; BOX DRAWINGS LIGHT HORIZONTAL
+    (#x81 ?\u2502) ;; BOX DRAWINGS LIGHT VERTICAL
+    (#x82 ?\u250C) ;; BOX DRAWINGS LIGHT DOWN AND RIGHT
+    (#x83 ?\u2510) ;; BOX DRAWINGS LIGHT DOWN AND LEFT
+    (#x84 ?\u2514) ;; BOX DRAWINGS LIGHT UP AND RIGHT
+    (#x85 ?\u2518) ;; BOX DRAWINGS LIGHT UP AND LEFT
+    (#x86 ?\u251C) ;; BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+    (#x87 ?\u2524) ;; BOX DRAWINGS LIGHT VERTICAL AND LEFT
+    (#x88 ?\u252C) ;; BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+    (#x89 ?\u2534) ;; BOX DRAWINGS LIGHT UP AND HORIZONTAL
+    (#x8A ?\u253C) ;; BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+    (#x8B ?\u2580) ;; UPPER HALF BLOCK
+    (#x8C ?\u2584) ;; LOWER HALF BLOCK
+    (#x8D ?\u2588) ;; FULL BLOCK
+    (#x8E ?\u258C) ;; LEFT HALF BLOCK
+    (#x8F ?\u2590) ;; RIGHT HALF BLOCK
+    (#x90 ?\u2591) ;; LIGHT SHADE
+    (#x91 ?\u2592) ;; MEDIUM SHADE
+    (#x92 ?\u2593) ;; DARK SHADE
+    (#x93 ?\u2320) ;; TOP HALF INTEGRAL
+    (#x94 ?\u25A0) ;; BLACK SQUARE
+    (#x95 ?\u2219) ;; BULLET OPERATOR
+    (#x96 ?\u221A) ;; SQUARE ROOT
+    (#x97 ?\u2248) ;; ALMOST EQUAL TO
+    (#x98 ?\u2264) ;; LESS-THAN OR EQUAL TO
+    (#x99 ?\u2265) ;; GREATER-THAN OR EQUAL TO
+    (#x9A ?\u00A0) ;; NO-BREAK SPACE
+    (#x9B ?\u2321) ;; BOTTOM HALF INTEGRAL
+    (#x9C ?\u00B0) ;; DEGREE SIGN
+    (#x9D ?\u00B2) ;; SUPERSCRIPT TWO
+    (#x9E ?\u00B7) ;; MIDDLE DOT
+    (#x9F ?\u00F7) ;; DIVISION SIGN
+    (#xA0 ?\u2550) ;; BOX DRAWINGS DOUBLE HORIZONTAL
+    (#xA1 ?\u2551) ;; BOX DRAWINGS DOUBLE VERTICAL
+    (#xA2 ?\u2552) ;; BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+    (#xA3 ?\u0451) ;; CYRILLIC SMALL LETTER IO
+    (#xA4 ?\u0454) ;; CYRILLIC SMALL LETTER UKRAINIAN IE
+    (#xA5 ?\u2554) ;; BOX DRAWINGS DOUBLE DOWN AND RIGHT
+    (#xA6 ?\u0456) ;; CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+    (#xA7 ?\u0457) ;; CYRILLIC SMALL LETTER YI
+    (#xA8 ?\u2557) ;; BOX DRAWINGS DOUBLE DOWN AND LEFT
+    (#xA9 ?\u2558) ;; BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+    (#xAA ?\u2559) ;; BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+    (#xAB ?\u255A) ;; BOX DRAWINGS DOUBLE UP AND RIGHT
+    (#xAC ?\u255B) ;; BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+    (#xAD ?\u0491) ;; CYRILLIC SMALL LETTER GHE WITH UPTURN
+    (#xAE ?\u045E) ;; CYRILLIC SMALL LETTER SHORT U
+    (#xAF ?\u255E) ;; BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+    (#xB0 ?\u255F) ;; BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+    (#xB1 ?\u2560) ;; BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+    (#xB2 ?\u2561) ;; BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+    (#xB3 ?\u0401) ;; CYRILLIC CAPITAL LETTER IO
+    (#xB4 ?\u0404) ;; CYRILLIC CAPITAL LETTER UKRAINIAN IE
+    (#xB5 ?\u2563) ;; BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+    (#xB6 ?\u0406) ;; CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+    (#xB7 ?\u0407) ;; CYRILLIC CAPITAL LETTER YI
+    (#xB8 ?\u2566) ;; BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+    (#xB9 ?\u2567) ;; BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+    (#xBA ?\u2568) ;; BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+    (#xBB ?\u2569) ;; BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+    (#xBC ?\u256A) ;; BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+    (#xBD ?\u0490) ;; CYRILLIC CAPITAL LETTER GHE WITH UPTURN
+    (#xBE ?\u040E) ;; CYRILLIC CAPITAL LETTER SHORT U
+    (#xBF ?\u00A9) ;; COPYRIGHT SIGN
+    (#xC0 ?\u044E) ;; CYRILLIC SMALL LETTER YU
+    (#xC1 ?\u0430) ;; CYRILLIC SMALL LETTER A
+    (#xC2 ?\u0431) ;; CYRILLIC SMALL LETTER BE
+    (#xC3 ?\u0446) ;; CYRILLIC SMALL LETTER TSE
+    (#xC4 ?\u0434) ;; CYRILLIC SMALL LETTER DE
+    (#xC5 ?\u0435) ;; CYRILLIC SMALL LETTER IE
+    (#xC6 ?\u0444) ;; CYRILLIC SMALL LETTER EF
+    (#xC7 ?\u0433) ;; CYRILLIC SMALL LETTER GHE
+    (#xC8 ?\u0445) ;; CYRILLIC SMALL LETTER HA
+    (#xC9 ?\u0438) ;; CYRILLIC SMALL LETTER I
+    (#xCA ?\u0439) ;; CYRILLIC SMALL LETTER SHORT I
+    (#xCB ?\u043A) ;; CYRILLIC SMALL LETTER KA
+    (#xCC ?\u043B) ;; CYRILLIC SMALL LETTER EL
+    (#xCD ?\u043C) ;; CYRILLIC SMALL LETTER EM
+    (#xCE ?\u043D) ;; CYRILLIC SMALL LETTER EN
+    (#xCF ?\u043E) ;; CYRILLIC SMALL LETTER O
+    (#xD0 ?\u043F) ;; CYRILLIC SMALL LETTER PE
+    (#xD1 ?\u044F) ;; CYRILLIC SMALL LETTER YA
+    (#xD2 ?\u0440) ;; CYRILLIC SMALL LETTER ER
+    (#xD3 ?\u0441) ;; CYRILLIC SMALL LETTER ES
+    (#xD4 ?\u0442) ;; CYRILLIC SMALL LETTER TE
+    (#xD5 ?\u0443) ;; CYRILLIC SMALL LETTER U
+    (#xD6 ?\u0436) ;; CYRILLIC SMALL LETTER ZHE
+    (#xD7 ?\u0432) ;; CYRILLIC SMALL LETTER VE
+    (#xD8 ?\u044C) ;; CYRILLIC SMALL LETTER SOFT SIGN
+    (#xD9 ?\u044B) ;; CYRILLIC SMALL LETTER YERU
+    (#xDA ?\u0437) ;; CYRILLIC SMALL LETTER ZE
+    (#xDB ?\u0448) ;; CYRILLIC SMALL LETTER SHA
+    (#xDC ?\u044D) ;; CYRILLIC SMALL LETTER E
+    (#xDD ?\u0449) ;; CYRILLIC SMALL LETTER SHCHA
+    (#xDE ?\u0447) ;; CYRILLIC SMALL LETTER CHE
+    (#xDF ?\u044A) ;; CYRILLIC SMALL LETTER HARD SIGN
+    (#xE0 ?\u042E) ;; CYRILLIC CAPITAL LETTER YU
+    (#xE1 ?\u0410) ;; CYRILLIC CAPITAL LETTER A
+    (#xE2 ?\u0411) ;; CYRILLIC CAPITAL LETTER BE
+    (#xE3 ?\u0426) ;; CYRILLIC CAPITAL LETTER TSE
+    (#xE4 ?\u0414) ;; CYRILLIC CAPITAL LETTER DE
+    (#xE5 ?\u0415) ;; CYRILLIC CAPITAL LETTER IE
+    (#xE6 ?\u0424) ;; CYRILLIC CAPITAL LETTER EF
+    (#xE7 ?\u0413) ;; CYRILLIC CAPITAL LETTER GHE
+    (#xE8 ?\u0425) ;; CYRILLIC CAPITAL LETTER HA
+    (#xE9 ?\u0418) ;; CYRILLIC CAPITAL LETTER I
+    (#xEA ?\u0419) ;; CYRILLIC CAPITAL LETTER SHORT I
+    (#xEB ?\u041A) ;; CYRILLIC CAPITAL LETTER KA
+    (#xEC ?\u041B) ;; CYRILLIC CAPITAL LETTER EL
+    (#xED ?\u041C) ;; CYRILLIC CAPITAL LETTER EM
+    (#xEE ?\u041D) ;; CYRILLIC CAPITAL LETTER EN
+    (#xEF ?\u041E) ;; CYRILLIC CAPITAL LETTER O
+    (#xF0 ?\u041F) ;; CYRILLIC CAPITAL LETTER PE
+    (#xF1 ?\u042F) ;; CYRILLIC CAPITAL LETTER YA
+    (#xF2 ?\u0420) ;; CYRILLIC CAPITAL LETTER ER
+    (#xF3 ?\u0421) ;; CYRILLIC CAPITAL LETTER ES
+    (#xF4 ?\u0422) ;; CYRILLIC CAPITAL LETTER TE
+    (#xF5 ?\u0423) ;; CYRILLIC CAPITAL LETTER U
+    (#xF6 ?\u0416) ;; CYRILLIC CAPITAL LETTER ZHE
+    (#xF7 ?\u0412) ;; CYRILLIC CAPITAL LETTER VE
+    (#xF8 ?\u042C) ;; CYRILLIC CAPITAL LETTER SOFT SIGN
+    (#xF9 ?\u042B) ;; CYRILLIC CAPITAL LETTER YERU
+    (#xFA ?\u0417) ;; CYRILLIC CAPITAL LETTER ZE
+    (#xFB ?\u0428) ;; CYRILLIC CAPITAL LETTER SHA
+    (#xFC ?\u042D) ;; CYRILLIC CAPITAL LETTER E
+    (#xFD ?\u0429) ;; CYRILLIC CAPITAL LETTER SHCHA
+    (#xFE ?\u0427) ;; CYRILLIC CAPITAL LETTER CHE
+    (#xFF ?\u042A)) ;; CYRILLIC CAPITAL LETTER HARD SIGN
+   mnemonic ",L@C(B"
+   documentation "KOI8-RU, a mostly-compatible superset of KOI8-R. 
 Also known as Windows code page 21866; has Ukrainian and Belarussian support. "
- '(mnemonic ",L@C(B"
    aliases (cp21866)))
 
 ;; We should provide an input method and the corresponding language
 ;; environments for the next three coding systems. 
 
-(make-8-bit-coding-system
- 'koi8-t
- '((#x80 ?\u049B) ;; CYRILLIC SMALL LETTER KA WITH DESCENDER
-   (#x81 ?\u0493) ;; CYRILLIC SMALL LETTER GHE WITH STROKE
-   (#x82 ?\u201A) ;; SINGLE LOW-9 QUOTATION MARK
-   (#x83 ?\u0492) ;; CYRILLIC CAPITAL LETTER GHE WITH STROKE
-   (#x84 ?\u201E) ;; DOUBLE LOW-9 QUOTATION MARK
-   (#x85 ?\u2026) ;; HORIZONTAL ELLIPSIS
-   (#x86 ?\u2020) ;; DAGGER
-   (#x87 ?\u2021) ;; DOUBLE DAGGER
-   (#x89 ?\u2030) ;; PER MILLE SIGN
-   (#x8A ?\u04B3) ;; CYRILLIC SMALL LETTER HA WITH DESCENDER
-   (#x8B ?\u2039) ;; SINGLE LEFT-POINTING ANGLE QUOTATION MARK
-   (#x8C ?\u04B2) ;; CYRILLIC CAPITAL LETTER HA WITH DESCENDER
-   (#x8D ?\u04B7) ;; CYRILLIC SMALL LETTER CHE WITH DESCENDER
-   (#x8E ?\u04B6) ;; CYRILLIC CAPITAL LETTER CHE WITH DESCENDER
-   (#x90 ?\u049A) ;; CYRILLIC CAPITAL LETTER KA WITH DESCENDER
-   (#x91 ?\u2018) ;; LEFT SINGLE QUOTATION MARK
-   (#x92 ?\u2019) ;; RIGHT SINGLE QUOTATION MARK
-   (#x93 ?\u201C) ;; LEFT DOUBLE QUOTATION MARK
-   (#x94 ?\u201D) ;; RIGHT DOUBLE QUOTATION MARK
-   (#x95 ?\u2022) ;; BULLET
-   (#x96 ?\u2013) ;; EN DASH
-   (#x97 ?\u2014) ;; EM DASH
-   (#x99 ?\u2122) ;; TRADE MARK SIGN
-   (#x9B ?\u203A) ;; SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-   (#xA1 ?\u04EF) ;; CYRILLIC SMALL LETTER U WITH MACRON
-   (#xA2 ?\u04EE) ;; CYRILLIC CAPITAL LETTER U WITH MACRON
-   (#xA3 ?\u0451) ;; CYRILLIC SMALL LETTER IO
-   (#xA4 ?\u00A4) ;; CURRENCY SIGN
-   (#xA5 ?\u04E3) ;; CYRILLIC SMALL LETTER I WITH MACRON
-   (#xA6 ?\u00A6) ;; BROKEN BAR
-   (#xA7 ?\u00A7) ;; SECTION SIGN
-   (#xAB ?\u00AB) ;; LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-   (#xAC ?\u00AC) ;; NOT SIGN
-   (#xAD ?\u00AD) ;; SOFT HYPHEN
-   (#xAE ?\u00AE) ;; REGISTERED SIGN
-   (#xB0 ?\u00B0) ;; DEGREE SIGN
-   (#xB1 ?\u00B1) ;; PLUS-MINUS SIGN
-   (#xB2 ?\u00B2) ;; SUPERSCRIPT TWO
-   (#xB3 ?\u0401) ;; CYRILLIC CAPITAL LETTER IO
-   (#xB5 ?\u04E2) ;; CYRILLIC CAPITAL LETTER I WITH MACRON
-   (#xB6 ?\u00B6) ;; PILCROW SIGN
-   (#xB7 ?\u00B7) ;; MIDDLE DOT
-   (#xB9 ?\u2116) ;; NUMERO SIGN
-   (#xBB ?\u00BB) ;; RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-   (#xBF ?\u00A9) ;; COPYRIGHT SIGN
-   (#xC0 ?\u044E) ;; CYRILLIC SMALL LETTER YU
-   (#xC1 ?\u0430) ;; CYRILLIC SMALL LETTER A
-   (#xC2 ?\u0431) ;; CYRILLIC SMALL LETTER BE
-   (#xC3 ?\u0446) ;; CYRILLIC SMALL LETTER TSE
-   (#xC4 ?\u0434) ;; CYRILLIC SMALL LETTER DE
-   (#xC5 ?\u0435) ;; CYRILLIC SMALL LETTER IE
-   (#xC6 ?\u0444) ;; CYRILLIC SMALL LETTER EF
-   (#xC7 ?\u0433) ;; CYRILLIC SMALL LETTER GHE
-   (#xC8 ?\u0445) ;; CYRILLIC SMALL LETTER HA
-   (#xC9 ?\u0438) ;; CYRILLIC SMALL LETTER I
-   (#xCA ?\u0439) ;; CYRILLIC SMALL LETTER SHORT I
-   (#xCB ?\u043A) ;; CYRILLIC SMALL LETTER KA
-   (#xCC ?\u043B) ;; CYRILLIC SMALL LETTER EL
-   (#xCD ?\u043C) ;; CYRILLIC SMALL LETTER EM
-   (#xCE ?\u043D) ;; CYRILLIC SMALL LETTER EN
-   (#xCF ?\u043E) ;; CYRILLIC SMALL LETTER O
-   (#xD0 ?\u043F) ;; CYRILLIC SMALL LETTER PE
-   (#xD1 ?\u044F) ;; CYRILLIC SMALL LETTER YA
-   (#xD2 ?\u0440) ;; CYRILLIC SMALL LETTER ER
-   (#xD3 ?\u0441) ;; CYRILLIC SMALL LETTER ES
-   (#xD4 ?\u0442) ;; CYRILLIC SMALL LETTER TE
-   (#xD5 ?\u0443) ;; CYRILLIC SMALL LETTER U
-   (#xD6 ?\u0436) ;; CYRILLIC SMALL LETTER ZHE
-   (#xD7 ?\u0432) ;; CYRILLIC SMALL LETTER VE
-   (#xD8 ?\u044C) ;; CYRILLIC SMALL LETTER SOFT SIGN
-   (#xD9 ?\u044B) ;; CYRILLIC SMALL LETTER YERU
-   (#xDA ?\u0437) ;; CYRILLIC SMALL LETTER ZE
-   (#xDB ?\u0448) ;; CYRILLIC SMALL LETTER SHA
-   (#xDC ?\u044D) ;; CYRILLIC SMALL LETTER E
-   (#xDD ?\u0449) ;; CYRILLIC SMALL LETTER SHCHA
-   (#xDE ?\u0447) ;; CYRILLIC SMALL LETTER CHE
-   (#xDF ?\u044A) ;; CYRILLIC SMALL LETTER HARD SIGN
-   (#xE0 ?\u042E) ;; CYRILLIC CAPITAL LETTER YU
-   (#xE1 ?\u0410) ;; CYRILLIC CAPITAL LETTER A
-   (#xE2 ?\u0411) ;; CYRILLIC CAPITAL LETTER BE
-   (#xE3 ?\u0426) ;; CYRILLIC CAPITAL LETTER TSE
-   (#xE4 ?\u0414) ;; CYRILLIC CAPITAL LETTER DE
-   (#xE5 ?\u0415) ;; CYRILLIC CAPITAL LETTER IE
-   (#xE6 ?\u0424) ;; CYRILLIC CAPITAL LETTER EF
-   (#xE7 ?\u0413) ;; CYRILLIC CAPITAL LETTER GHE
-   (#xE8 ?\u0425) ;; CYRILLIC CAPITAL LETTER HA
-   (#xE9 ?\u0418) ;; CYRILLIC CAPITAL LETTER I
-   (#xEA ?\u0419) ;; CYRILLIC CAPITAL LETTER SHORT I
-   (#xEB ?\u041A) ;; CYRILLIC CAPITAL LETTER KA
-   (#xEC ?\u041B) ;; CYRILLIC CAPITAL LETTER EL
-   (#xED ?\u041C) ;; CYRILLIC CAPITAL LETTER EM
-   (#xEE ?\u041D) ;; CYRILLIC CAPITAL LETTER EN
-   (#xEF ?\u041E) ;; CYRILLIC CAPITAL LETTER O
-   (#xF0 ?\u041F) ;; CYRILLIC CAPITAL LETTER PE
-   (#xF1 ?\u042F) ;; CYRILLIC CAPITAL LETTER YA
-   (#xF2 ?\u0420) ;; CYRILLIC CAPITAL LETTER ER
-   (#xF3 ?\u0421) ;; CYRILLIC CAPITAL LETTER ES
-   (#xF4 ?\u0422) ;; CYRILLIC CAPITAL LETTER TE
-   (#xF5 ?\u0423) ;; CYRILLIC CAPITAL LETTER U
-   (#xF6 ?\u0416) ;; CYRILLIC CAPITAL LETTER ZHE
-   (#xF7 ?\u0412) ;; CYRILLIC CAPITAL LETTER VE
-   (#xF8 ?\u042C) ;; CYRILLIC CAPITAL LETTER SOFT SIGN
-   (#xF9 ?\u042B) ;; CYRILLIC CAPITAL LETTER YERU
-   (#xFA ?\u0417) ;; CYRILLIC CAPITAL LETTER ZE
-   (#xFB ?\u0428) ;; CYRILLIC CAPITAL LETTER SHA
-   (#xFC ?\u042D) ;; CYRILLIC CAPITAL LETTER E
-   (#xFD ?\u0429) ;; CYRILLIC CAPITAL LETTER SHCHA
-   (#xFE ?\u0427) ;; CYRILLIC CAPITAL LETTER CHE
-   (#xFF ?\u042A));; CYRILLIC CAPITAL LETTER HARD SIGN
- ",L:>8(B-8 for Tajik."
- '(mnemonic ",LB%GÒ¶%@(B"
+(make-coding-system
+ 'koi8-t 'fixed-width ",L:>8(B-8 for Tajik."
+ '(unicode-map
+   ((#x80 ?\u049B) ;; CYRILLIC SMALL LETTER KA WITH DESCENDER
+    (#x81 ?\u0493) ;; CYRILLIC SMALL LETTER GHE WITH STROKE
+    (#x82 ?\u201A) ;; SINGLE LOW-9 QUOTATION MARK
+    (#x83 ?\u0492) ;; CYRILLIC CAPITAL LETTER GHE WITH STROKE
+    (#x84 ?\u201E) ;; DOUBLE LOW-9 QUOTATION MARK
+    (#x85 ?\u2026) ;; HORIZONTAL ELLIPSIS
+    (#x86 ?\u2020) ;; DAGGER
+    (#x87 ?\u2021) ;; DOUBLE DAGGER
+    (#x89 ?\u2030) ;; PER MILLE SIGN
+    (#x8A ?\u04B3) ;; CYRILLIC SMALL LETTER HA WITH DESCENDER
+    (#x8B ?\u2039) ;; SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+    (#x8C ?\u04B2) ;; CYRILLIC CAPITAL LETTER HA WITH DESCENDER
+    (#x8D ?\u04B7) ;; CYRILLIC SMALL LETTER CHE WITH DESCENDER
+    (#x8E ?\u04B6) ;; CYRILLIC CAPITAL LETTER CHE WITH DESCENDER
+    (#x90 ?\u049A) ;; CYRILLIC CAPITAL LETTER KA WITH DESCENDER
+    (#x91 ?\u2018) ;; LEFT SINGLE QUOTATION MARK
+    (#x92 ?\u2019) ;; RIGHT SINGLE QUOTATION MARK
+    (#x93 ?\u201C) ;; LEFT DOUBLE QUOTATION MARK
+    (#x94 ?\u201D) ;; RIGHT DOUBLE QUOTATION MARK
+    (#x95 ?\u2022) ;; BULLET
+    (#x96 ?\u2013) ;; EN DASH
+    (#x97 ?\u2014) ;; EM DASH
+    (#x99 ?\u2122) ;; TRADE MARK SIGN
+    (#x9B ?\u203A) ;; SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+    (#xA1 ?\u04EF) ;; CYRILLIC SMALL LETTER U WITH MACRON
+    (#xA2 ?\u04EE) ;; CYRILLIC CAPITAL LETTER U WITH MACRON
+    (#xA3 ?\u0451) ;; CYRILLIC SMALL LETTER IO
+    (#xA4 ?\u00A4) ;; CURRENCY SIGN
+    (#xA5 ?\u04E3) ;; CYRILLIC SMALL LETTER I WITH MACRON
+    (#xA6 ?\u00A6) ;; BROKEN BAR
+    (#xA7 ?\u00A7) ;; SECTION SIGN
+    (#xAB ?\u00AB) ;; LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    (#xAC ?\u00AC) ;; NOT SIGN
+    (#xAD ?\u00AD) ;; SOFT HYPHEN
+    (#xAE ?\u00AE) ;; REGISTERED SIGN
+    (#xB0 ?\u00B0) ;; DEGREE SIGN
+    (#xB1 ?\u00B1) ;; PLUS-MINUS SIGN
+    (#xB2 ?\u00B2) ;; SUPERSCRIPT TWO
+    (#xB3 ?\u0401) ;; CYRILLIC CAPITAL LETTER IO
+    (#xB5 ?\u04E2) ;; CYRILLIC CAPITAL LETTER I WITH MACRON
+    (#xB6 ?\u00B6) ;; PILCROW SIGN
+    (#xB7 ?\u00B7) ;; MIDDLE DOT
+    (#xB9 ?\u2116) ;; NUMERO SIGN
+    (#xBB ?\u00BB) ;; RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    (#xBF ?\u00A9) ;; COPYRIGHT SIGN
+    (#xC0 ?\u044E) ;; CYRILLIC SMALL LETTER YU
+    (#xC1 ?\u0430) ;; CYRILLIC SMALL LETTER A
+    (#xC2 ?\u0431) ;; CYRILLIC SMALL LETTER BE
+    (#xC3 ?\u0446) ;; CYRILLIC SMALL LETTER TSE
+    (#xC4 ?\u0434) ;; CYRILLIC SMALL LETTER DE
+    (#xC5 ?\u0435) ;; CYRILLIC SMALL LETTER IE
+    (#xC6 ?\u0444) ;; CYRILLIC SMALL LETTER EF
+    (#xC7 ?\u0433) ;; CYRILLIC SMALL LETTER GHE
+    (#xC8 ?\u0445) ;; CYRILLIC SMALL LETTER HA
+    (#xC9 ?\u0438) ;; CYRILLIC SMALL LETTER I
+    (#xCA ?\u0439) ;; CYRILLIC SMALL LETTER SHORT I
+    (#xCB ?\u043A) ;; CYRILLIC SMALL LETTER KA
+    (#xCC ?\u043B) ;; CYRILLIC SMALL LETTER EL
+    (#xCD ?\u043C) ;; CYRILLIC SMALL LETTER EM
+    (#xCE ?\u043D) ;; CYRILLIC SMALL LETTER EN
+    (#xCF ?\u043E) ;; CYRILLIC SMALL LETTER O
+    (#xD0 ?\u043F) ;; CYRILLIC SMALL LETTER PE
+    (#xD1 ?\u044F) ;; CYRILLIC SMALL LETTER YA
+    (#xD2 ?\u0440) ;; CYRILLIC SMALL LETTER ER
+    (#xD3 ?\u0441) ;; CYRILLIC SMALL LETTER ES
+    (#xD4 ?\u0442) ;; CYRILLIC SMALL LETTER TE
+    (#xD5 ?\u0443) ;; CYRILLIC SMALL LETTER U
+    (#xD6 ?\u0436) ;; CYRILLIC SMALL LETTER ZHE
+    (#xD7 ?\u0432) ;; CYRILLIC SMALL LETTER VE
+    (#xD8 ?\u044C) ;; CYRILLIC SMALL LETTER SOFT SIGN
+    (#xD9 ?\u044B) ;; CYRILLIC SMALL LETTER YERU
+    (#xDA ?\u0437) ;; CYRILLIC SMALL LETTER ZE
+    (#xDB ?\u0448) ;; CYRILLIC SMALL LETTER SHA
+    (#xDC ?\u044D) ;; CYRILLIC SMALL LETTER E
+    (#xDD ?\u0449) ;; CYRILLIC SMALL LETTER SHCHA
+    (#xDE ?\u0447) ;; CYRILLIC SMALL LETTER CHE
+    (#xDF ?\u044A) ;; CYRILLIC SMALL LETTER HARD SIGN
+    (#xE0 ?\u042E) ;; CYRILLIC CAPITAL LETTER YU
+    (#xE1 ?\u0410) ;; CYRILLIC CAPITAL LETTER A
+    (#xE2 ?\u0411) ;; CYRILLIC CAPITAL LETTER BE
+    (#xE3 ?\u0426) ;; CYRILLIC CAPITAL LETTER TSE
+    (#xE4 ?\u0414) ;; CYRILLIC CAPITAL LETTER DE
+    (#xE5 ?\u0415) ;; CYRILLIC CAPITAL LETTER IE
+    (#xE6 ?\u0424) ;; CYRILLIC CAPITAL LETTER EF
+    (#xE7 ?\u0413) ;; CYRILLIC CAPITAL LETTER GHE
+    (#xE8 ?\u0425) ;; CYRILLIC CAPITAL LETTER HA
+    (#xE9 ?\u0418) ;; CYRILLIC CAPITAL LETTER I
+    (#xEA ?\u0419) ;; CYRILLIC CAPITAL LETTER SHORT I
+    (#xEB ?\u041A) ;; CYRILLIC CAPITAL LETTER KA
+    (#xEC ?\u041B) ;; CYRILLIC CAPITAL LETTER EL
+    (#xED ?\u041C) ;; CYRILLIC CAPITAL LETTER EM
+    (#xEE ?\u041D) ;; CYRILLIC CAPITAL LETTER EN
+    (#xEF ?\u041E) ;; CYRILLIC CAPITAL LETTER O
+    (#xF0 ?\u041F) ;; CYRILLIC CAPITAL LETTER PE
+    (#xF1 ?\u042F) ;; CYRILLIC CAPITAL LETTER YA
+    (#xF2 ?\u0420) ;; CYRILLIC CAPITAL LETTER ER
+    (#xF3 ?\u0421) ;; CYRILLIC CAPITAL LETTER ES
+    (#xF4 ?\u0422) ;; CYRILLIC CAPITAL LETTER TE
+    (#xF5 ?\u0423) ;; CYRILLIC CAPITAL LETTER U
+    (#xF6 ?\u0416) ;; CYRILLIC CAPITAL LETTER ZHE
+    (#xF7 ?\u0412) ;; CYRILLIC CAPITAL LETTER VE
+    (#xF8 ?\u042C) ;; CYRILLIC CAPITAL LETTER SOFT SIGN
+    (#xF9 ?\u042B) ;; CYRILLIC CAPITAL LETTER YERU
+    (#xFA ?\u0417) ;; CYRILLIC CAPITAL LETTER ZE
+    (#xFB ?\u0428) ;; CYRILLIC CAPITAL LETTER SHA
+    (#xFC ?\u042D) ;; CYRILLIC CAPITAL LETTER E
+    (#xFD ?\u0429) ;; CYRILLIC CAPITAL LETTER SHCHA
+    (#xFE ?\u0427) ;; CYRILLIC CAPITAL LETTER CHE
+    (#xFF ?\u042A)) ;; CYRILLIC CAPITAL LETTER HARD SIGN
+   mnemonic ",LB%GÒ¶%@(B"
    documentation
    "Compatible in the alphabetic characters with KOI-8R for Russian,
 this 8-bit Cyrillic coding system makes those characters available
@@ -1163,138 +1167,138 @@
   (put-case-table-pair upper lower case-table))
 
 ;; Support fot the languages of the Caucasus.
-(make-8-bit-coding-system
- 'koi8-c
- '((#x80 ?\u0493) ;; CYRILLIC SMALL LETTER GHE WITH STROKE
-   (#x81 ?\u0497) ;; CYRILLIC SMALL LETTER ZHE WITH DESCENDER
-   (#x82 ?\u049B) ;; CYRILLIC SMALL LETTER KA WITH DESCENDER
-   (#x83 ?\u049D) ;; CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE
-   (#x84 ?\u04A3) ;; CYRILLIC SMALL LETTER EN WITH DESCENDER
-   (#x85 ?\u04AF) ;; CYRILLIC SMALL LETTER STRAIGHT U
-   (#x86 ?\u04B1) ;; CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE
-   (#x87 ?\u04B3) ;; CYRILLIC SMALL LETTER HA WITH DESCENDER
-   (#x88 ?\u04B7) ;; CYRILLIC SMALL LETTER CHE WITH DESCENDER
-   (#x89 ?\u04B9) ;; CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE
-   (#x8A ?\u04BB) ;; CYRILLIC SMALL LETTER SHHA
-   (#x8B ?\u2580) ;; UPPER HALF BLOCK
-   (#x8C ?\u049D) ;; CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE
-   (#x8D ?\u04E3) ;; CYRILLIC SMALL LETTER I WITH MACRON
-   (#x8E ?\u04E9) ;; CYRILLIC SMALL LETTER BARRED O
-   (#x8F ?\u04EF) ;; CYRILLIC SMALL LETTER U WITH MACRON
-   (#x90 ?\u0492) ;; CYRILLIC CAPITAL LETTER GHE WITH STROKE
-   (#x91 ?\u0496) ;; CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER
-   (#x92 ?\u049A) ;; CYRILLIC CAPITAL LETTER KA WITH DESCENDER
-   (#x93 ?\u049C) ;; CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE
-   (#x94 ?\u04A2) ;; CYRILLIC CAPITAL LETTER EN WITH DESCENDER
-   (#x95 ?\u04AE) ;; CYRILLIC CAPITAL LETTER STRAIGHT U
-   (#x96 ?\u04B0) ;; CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE
-   (#x97 ?\u04B2) ;; CYRILLIC CAPITAL LETTER HA WITH DESCENDER
-   (#x98 ?\u04B6) ;; CYRILLIC CAPITAL LETTER CHE WITH DESCENDER
-   (#x99 ?\u04B8) ;; CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE
-   (#x9A ?\u04BA) ;; CYRILLIC CAPITAL LETTER SHHA
-   (#x9B ?\u2321) ;; BOTTOM HALF INTEGRAL
-   (#x9C ?\u04D8) ;; CYRILLIC CAPITAL LETTER SCHWA
-   (#x9D ?\u04E2) ;; CYRILLIC CAPITAL LETTER I WITH MACRON
-   (#x9E ?\u04E8) ;; CYRILLIC CAPITAL LETTER BARRED O
-   (#x9F ?\u04EE) ;; CYRILLIC CAPITAL LETTER U WITH MACRON
-   (#xA0 ?\u00A0) ;; NO-BREAK SPACE
-   (#xA1 ?\u0452) ;; CYRILLIC SMALL LETTER DJE
-   (#xA2 ?\u0453) ;; CYRILLIC SMALL LETTER GJE
-   (#xA3 ?\u0451) ;; CYRILLIC SMALL LETTER IO
-   (#xA4 ?\u0454) ;; CYRILLIC SMALL LETTER UKRAINIAN IE
-   (#xA5 ?\u0455) ;; CYRILLIC SMALL LETTER DZE
-   (#xA6 ?\u0456) ;; CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
-   (#xA7 ?\u0457) ;; CYRILLIC SMALL LETTER YI
-   (#xA8 ?\u0458) ;; CYRILLIC SMALL LETTER JE
-   (#xA9 ?\u0459) ;; CYRILLIC SMALL LETTER LJE
-   (#xAA ?\u045A) ;; CYRILLIC SMALL LETTER NJE
-   (#xAB ?\u045B) ;; CYRILLIC SMALL LETTER TSHE
-   (#xAC ?\u045C) ;; CYRILLIC SMALL LETTER KJE
-   (#xAD ?\u0491) ;; CYRILLIC SMALL LETTER GHE WITH UPTURN
-   (#xAE ?\u045E) ;; CYRILLIC SMALL LETTER SHORT U
-   (#xAF ?\u045F) ;; CYRILLIC SMALL LETTER DZHE
-   (#xB0 ?\u2116) ;; NUMERO SIGN
-   (#xB1 ?\u0402) ;; CYRILLIC CAPITAL LETTER DJE
-   (#xB2 ?\u0403) ;; CYRILLIC CAPITAL LETTER GJE
-   (#xB3 ?\u0401) ;; CYRILLIC CAPITAL LETTER IO
-   (#xB4 ?\u0404) ;; CYRILLIC CAPITAL LETTER UKRAINIAN IE
-   (#xB5 ?\u0405) ;; CYRILLIC CAPITAL LETTER DZE
-   (#xB6 ?\u0406) ;; CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
-   (#xB7 ?\u0407) ;; CYRILLIC CAPITAL LETTER YI
-   (#xB8 ?\u0408) ;; CYRILLIC CAPITAL LETTER JE
-   (#xB9 ?\u0409) ;; CYRILLIC CAPITAL LETTER LJE
-   (#xBA ?\u040A) ;; CYRILLIC CAPITAL LETTER NJE
-   (#xBB ?\u040B) ;; CYRILLIC CAPITAL LETTER TSHE
-   (#xBC ?\u040C) ;; CYRILLIC CAPITAL LETTER KJE
-   (#xBD ?\u0490) ;; CYRILLIC CAPITAL LETTER GHE WITH UPTURN
-   (#xBE ?\u040E) ;; CYRILLIC CAPITAL LETTER SHORT U
-   (#xBF ?\u040F) ;; CYRILLIC CAPITAL LETTER DZHE
-   (#xC0 ?\u044E) ;; CYRILLIC SMALL LETTER YU
-   (#xC1 ?\u0430) ;; CYRILLIC SMALL LETTER A
-   (#xC2 ?\u0431) ;; CYRILLIC SMALL LETTER BE
-   (#xC3 ?\u0446) ;; CYRILLIC SMALL LETTER TSE
-   (#xC4 ?\u0434) ;; CYRILLIC SMALL LETTER DE
-   (#xC5 ?\u0435) ;; CYRILLIC SMALL LETTER IE
-   (#xC6 ?\u0444) ;; CYRILLIC SMALL LETTER EF
-   (#xC7 ?\u0433) ;; CYRILLIC SMALL LETTER GHE
-   (#xC8 ?\u0445) ;; CYRILLIC SMALL LETTER HA
-   (#xC9 ?\u0438) ;; CYRILLIC SMALL LETTER I
-   (#xCA ?\u0439) ;; CYRILLIC SMALL LETTER SHORT I
-   (#xCB ?\u043A) ;; CYRILLIC SMALL LETTER KA
-   (#xCC ?\u043B) ;; CYRILLIC SMALL LETTER EL
-   (#xCD ?\u043C) ;; CYRILLIC SMALL LETTER EM
-   (#xCE ?\u043D) ;; CYRILLIC SMALL LETTER EN
-   (#xCF ?\u043E) ;; CYRILLIC SMALL LETTER O
-   (#xD0 ?\u043F) ;; CYRILLIC SMALL LETTER PE
-   (#xD1 ?\u044F) ;; CYRILLIC SMALL LETTER YA
-   (#xD2 ?\u0440) ;; CYRILLIC SMALL LETTER ER
-   (#xD3 ?\u0441) ;; CYRILLIC SMALL LETTER ES
-   (#xD4 ?\u0442) ;; CYRILLIC SMALL LETTER TE
-   (#xD5 ?\u0443) ;; CYRILLIC SMALL LETTER U
-   (#xD6 ?\u0436) ;; CYRILLIC SMALL LETTER ZHE
-   (#xD7 ?\u0432) ;; CYRILLIC SMALL LETTER VE
-   (#xD8 ?\u044C) ;; CYRILLIC SMALL LETTER SOFT SIGN
-   (#xD9 ?\u044B) ;; CYRILLIC SMALL LETTER YERU
-   (#xDA ?\u0437) ;; CYRILLIC SMALL LETTER ZE
-   (#xDB ?\u0448) ;; CYRILLIC SMALL LETTER SHA
-   (#xDC ?\u044D) ;; CYRILLIC SMALL LETTER E
-   (#xDD ?\u0449) ;; CYRILLIC SMALL LETTER SHCHA
-   (#xDE ?\u0447) ;; CYRILLIC SMALL LETTER CHE
-   (#xDF ?\u044A) ;; CYRILLIC SMALL LETTER HARD SIGN
-   (#xE0 ?\u042E) ;; CYRILLIC CAPITAL LETTER YU
-   (#xE1 ?\u0410) ;; CYRILLIC CAPITAL LETTER A
-   (#xE2 ?\u0411) ;; CYRILLIC CAPITAL LETTER BE
-   (#xE3 ?\u0426) ;; CYRILLIC CAPITAL LETTER TSE
-   (#xE4 ?\u0414) ;; CYRILLIC CAPITAL LETTER DE
-   (#xE5 ?\u0415) ;; CYRILLIC CAPITAL LETTER IE
-   (#xE6 ?\u0424) ;; CYRILLIC CAPITAL LETTER EF
-   (#xE7 ?\u0413) ;; CYRILLIC CAPITAL LETTER GHE
-   (#xE8 ?\u0425) ;; CYRILLIC CAPITAL LETTER HA
-   (#xE9 ?\u0418) ;; CYRILLIC CAPITAL LETTER I
-   (#xEA ?\u0419) ;; CYRILLIC CAPITAL LETTER SHORT I
-   (#xEB ?\u041A) ;; CYRILLIC CAPITAL LETTER KA
-   (#xEC ?\u041B) ;; CYRILLIC CAPITAL LETTER EL
-   (#xED ?\u041C) ;; CYRILLIC CAPITAL LETTER EM
-   (#xEE ?\u041D) ;; CYRILLIC CAPITAL LETTER EN
-   (#xEF ?\u041E) ;; CYRILLIC CAPITAL LETTER O
-   (#xF0 ?\u041F) ;; CYRILLIC CAPITAL LETTER PE
-   (#xF1 ?\u042F) ;; CYRILLIC CAPITAL LETTER YA
-   (#xF2 ?\u0420) ;; CYRILLIC CAPITAL LETTER ER
-   (#xF3 ?\u0421) ;; CYRILLIC CAPITAL LETTER ES
-   (#xF4 ?\u0422) ;; CYRILLIC CAPITAL LETTER TE
-   (#xF5 ?\u0423) ;; CYRILLIC CAPITAL LETTER U
-   (#xF6 ?\u0416) ;; CYRILLIC CAPITAL LETTER ZHE
-   (#xF7 ?\u0412) ;; CYRILLIC CAPITAL LETTER VE
-   (#xF8 ?\u042C) ;; CYRILLIC CAPITAL LETTER SOFT SIGN
-   (#xF9 ?\u042B) ;; CYRILLIC CAPITAL LETTER YERU
-   (#xFA ?\u0417) ;; CYRILLIC CAPITAL LETTER ZE
-   (#xFB ?\u0428) ;; CYRILLIC CAPITAL LETTER SHA
-   (#xFC ?\u042D) ;; CYRILLIC CAPITAL LETTER E
-   (#xFD ?\u0429) ;; CYRILLIC CAPITAL LETTER SHCHA
-   (#xFE ?\u0427) ;; CYRILLIC CAPITAL LETTER CHE
-   (#xFF ?\u042A));; CYRILLIC CAPITAL LETTER HARD SIGN
- "KOI-8 for the Caucasus."
- '(documentation 
+(make-coding-system
+ 'koi8-c 'fixed-width "KOI-8, Caucasus."
+ '(unicode-map
+   ((#x80 ?\u0493) ;; CYRILLIC SMALL LETTER GHE WITH STROKE
+    (#x81 ?\u0497) ;; CYRILLIC SMALL LETTER ZHE WITH DESCENDER
+    (#x82 ?\u049B) ;; CYRILLIC SMALL LETTER KA WITH DESCENDER
+    (#x83 ?\u049D) ;; CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE
+    (#x84 ?\u04A3) ;; CYRILLIC SMALL LETTER EN WITH DESCENDER
+    (#x85 ?\u04AF) ;; CYRILLIC SMALL LETTER STRAIGHT U
+    (#x86 ?\u04B1) ;; CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE
+    (#x87 ?\u04B3) ;; CYRILLIC SMALL LETTER HA WITH DESCENDER
+    (#x88 ?\u04B7) ;; CYRILLIC SMALL LETTER CHE WITH DESCENDER
+    (#x89 ?\u04B9) ;; CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE
+    (#x8A ?\u04BB) ;; CYRILLIC SMALL LETTER SHHA
+    (#x8B ?\u2580) ;; UPPER HALF BLOCK
+    (#x8C ?\u049D) ;; CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE
+    (#x8D ?\u04E3) ;; CYRILLIC SMALL LETTER I WITH MACRON
+    (#x8E ?\u04E9) ;; CYRILLIC SMALL LETTER BARRED O
+    (#x8F ?\u04EF) ;; CYRILLIC SMALL LETTER U WITH MACRON
+    (#x90 ?\u0492) ;; CYRILLIC CAPITAL LETTER GHE WITH STROKE
+    (#x91 ?\u0496) ;; CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER
+    (#x92 ?\u049A) ;; CYRILLIC CAPITAL LETTER KA WITH DESCENDER
+    (#x93 ?\u049C) ;; CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE
+    (#x94 ?\u04A2) ;; CYRILLIC CAPITAL LETTER EN WITH DESCENDER
+    (#x95 ?\u04AE) ;; CYRILLIC CAPITAL LETTER STRAIGHT U
+    (#x96 ?\u04B0) ;; CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE
+    (#x97 ?\u04B2) ;; CYRILLIC CAPITAL LETTER HA WITH DESCENDER
+    (#x98 ?\u04B6) ;; CYRILLIC CAPITAL LETTER CHE WITH DESCENDER
+    (#x99 ?\u04B8) ;; CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE
+    (#x9A ?\u04BA) ;; CYRILLIC CAPITAL LETTER SHHA
+    (#x9B ?\u2321) ;; BOTTOM HALF INTEGRAL
+    (#x9C ?\u04D8) ;; CYRILLIC CAPITAL LETTER SCHWA
+    (#x9D ?\u04E2) ;; CYRILLIC CAPITAL LETTER I WITH MACRON
+    (#x9E ?\u04E8) ;; CYRILLIC CAPITAL LETTER BARRED O
+    (#x9F ?\u04EE) ;; CYRILLIC CAPITAL LETTER U WITH MACRON
+    (#xA0 ?\u00A0) ;; NO-BREAK SPACE
+    (#xA1 ?\u0452) ;; CYRILLIC SMALL LETTER DJE
+    (#xA2 ?\u0453) ;; CYRILLIC SMALL LETTER GJE
+    (#xA3 ?\u0451) ;; CYRILLIC SMALL LETTER IO
+    (#xA4 ?\u0454) ;; CYRILLIC SMALL LETTER UKRAINIAN IE
+    (#xA5 ?\u0455) ;; CYRILLIC SMALL LETTER DZE
+    (#xA6 ?\u0456) ;; CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+    (#xA7 ?\u0457) ;; CYRILLIC SMALL LETTER YI
+    (#xA8 ?\u0458) ;; CYRILLIC SMALL LETTER JE
+    (#xA9 ?\u0459) ;; CYRILLIC SMALL LETTER LJE
+    (#xAA ?\u045A) ;; CYRILLIC SMALL LETTER NJE
+    (#xAB ?\u045B) ;; CYRILLIC SMALL LETTER TSHE
+    (#xAC ?\u045C) ;; CYRILLIC SMALL LETTER KJE
+    (#xAD ?\u0491) ;; CYRILLIC SMALL LETTER GHE WITH UPTURN
+    (#xAE ?\u045E) ;; CYRILLIC SMALL LETTER SHORT U
+    (#xAF ?\u045F) ;; CYRILLIC SMALL LETTER DZHE
+    (#xB0 ?\u2116) ;; NUMERO SIGN
+    (#xB1 ?\u0402) ;; CYRILLIC CAPITAL LETTER DJE
+    (#xB2 ?\u0403) ;; CYRILLIC CAPITAL LETTER GJE
+    (#xB3 ?\u0401) ;; CYRILLIC CAPITAL LETTER IO
+    (#xB4 ?\u0404) ;; CYRILLIC CAPITAL LETTER UKRAINIAN IE
+    (#xB5 ?\u0405) ;; CYRILLIC CAPITAL LETTER DZE
+    (#xB6 ?\u0406) ;; CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+    (#xB7 ?\u0407) ;; CYRILLIC CAPITAL LETTER YI
+    (#xB8 ?\u0408) ;; CYRILLIC CAPITAL LETTER JE
+    (#xB9 ?\u0409) ;; CYRILLIC CAPITAL LETTER LJE
+    (#xBA ?\u040A) ;; CYRILLIC CAPITAL LETTER NJE
+    (#xBB ?\u040B) ;; CYRILLIC CAPITAL LETTER TSHE
+    (#xBC ?\u040C) ;; CYRILLIC CAPITAL LETTER KJE
+    (#xBD ?\u0490) ;; CYRILLIC CAPITAL LETTER GHE WITH UPTURN
+    (#xBE ?\u040E) ;; CYRILLIC CAPITAL LETTER SHORT U
+    (#xBF ?\u040F) ;; CYRILLIC CAPITAL LETTER DZHE
+    (#xC0 ?\u044E) ;; CYRILLIC SMALL LETTER YU
+    (#xC1 ?\u0430) ;; CYRILLIC SMALL LETTER A
+    (#xC2 ?\u0431) ;; CYRILLIC SMALL LETTER BE
+    (#xC3 ?\u0446) ;; CYRILLIC SMALL LETTER TSE
+    (#xC4 ?\u0434) ;; CYRILLIC SMALL LETTER DE
+    (#xC5 ?\u0435) ;; CYRILLIC SMALL LETTER IE
+    (#xC6 ?\u0444) ;; CYRILLIC SMALL LETTER EF
+    (#xC7 ?\u0433) ;; CYRILLIC SMALL LETTER GHE
+    (#xC8 ?\u0445) ;; CYRILLIC SMALL LETTER HA
+    (#xC9 ?\u0438) ;; CYRILLIC SMALL LETTER I
+    (#xCA ?\u0439) ;; CYRILLIC SMALL LETTER SHORT I
+    (#xCB ?\u043A) ;; CYRILLIC SMALL LETTER KA
+    (#xCC ?\u043B) ;; CYRILLIC SMALL LETTER EL
+    (#xCD ?\u043C) ;; CYRILLIC SMALL LETTER EM
+    (#xCE ?\u043D) ;; CYRILLIC SMALL LETTER EN
+    (#xCF ?\u043E) ;; CYRILLIC SMALL LETTER O
+    (#xD0 ?\u043F) ;; CYRILLIC SMALL LETTER PE
+    (#xD1 ?\u044F) ;; CYRILLIC SMALL LETTER YA
+    (#xD2 ?\u0440) ;; CYRILLIC SMALL LETTER ER
+    (#xD3 ?\u0441) ;; CYRILLIC SMALL LETTER ES
+    (#xD4 ?\u0442) ;; CYRILLIC SMALL LETTER TE
+    (#xD5 ?\u0443) ;; CYRILLIC SMALL LETTER U
+    (#xD6 ?\u0436) ;; CYRILLIC SMALL LETTER ZHE
+    (#xD7 ?\u0432) ;; CYRILLIC SMALL LETTER VE
+    (#xD8 ?\u044C) ;; CYRILLIC SMALL LETTER SOFT SIGN
+    (#xD9 ?\u044B) ;; CYRILLIC SMALL LETTER YERU
+    (#xDA ?\u0437) ;; CYRILLIC SMALL LETTER ZE
+    (#xDB ?\u0448) ;; CYRILLIC SMALL LETTER SHA
+    (#xDC ?\u044D) ;; CYRILLIC SMALL LETTER E
+    (#xDD ?\u0449) ;; CYRILLIC SMALL LETTER SHCHA
+    (#xDE ?\u0447) ;; CYRILLIC SMALL LETTER CHE
+    (#xDF ?\u044A) ;; CYRILLIC SMALL LETTER HARD SIGN
+    (#xE0 ?\u042E) ;; CYRILLIC CAPITAL LETTER YU
+    (#xE1 ?\u0410) ;; CYRILLIC CAPITAL LETTER A
+    (#xE2 ?\u0411) ;; CYRILLIC CAPITAL LETTER BE
+    (#xE3 ?\u0426) ;; CYRILLIC CAPITAL LETTER TSE
+    (#xE4 ?\u0414) ;; CYRILLIC CAPITAL LETTER DE
+    (#xE5 ?\u0415) ;; CYRILLIC CAPITAL LETTER IE
+    (#xE6 ?\u0424) ;; CYRILLIC CAPITAL LETTER EF
+    (#xE7 ?\u0413) ;; CYRILLIC CAPITAL LETTER GHE
+    (#xE8 ?\u0425) ;; CYRILLIC CAPITAL LETTER HA
+    (#xE9 ?\u0418) ;; CYRILLIC CAPITAL LETTER I
+    (#xEA ?\u0419) ;; CYRILLIC CAPITAL LETTER SHORT I
+    (#xEB ?\u041A) ;; CYRILLIC CAPITAL LETTER KA
+    (#xEC ?\u041B) ;; CYRILLIC CAPITAL LETTER EL
+    (#xED ?\u041C) ;; CYRILLIC CAPITAL LETTER EM
+    (#xEE ?\u041D) ;; CYRILLIC CAPITAL LETTER EN
+    (#xEF ?\u041E) ;; CYRILLIC CAPITAL LETTER O
+    (#xF0 ?\u041F) ;; CYRILLIC CAPITAL LETTER PE
+    (#xF1 ?\u042F) ;; CYRILLIC CAPITAL LETTER YA
+    (#xF2 ?\u0420) ;; CYRILLIC CAPITAL LETTER ER
+    (#xF3 ?\u0421) ;; CYRILLIC CAPITAL LETTER ES
+    (#xF4 ?\u0422) ;; CYRILLIC CAPITAL LETTER TE
+    (#xF5 ?\u0423) ;; CYRILLIC CAPITAL LETTER U
+    (#xF6 ?\u0416) ;; CYRILLIC CAPITAL LETTER ZHE
+    (#xF7 ?\u0412) ;; CYRILLIC CAPITAL LETTER VE
+    (#xF8 ?\u042C) ;; CYRILLIC CAPITAL LETTER SOFT SIGN
+    (#xF9 ?\u042B) ;; CYRILLIC CAPITAL LETTER YERU
+    (#xFA ?\u0417) ;; CYRILLIC CAPITAL LETTER ZE
+    (#xFB ?\u0428) ;; CYRILLIC CAPITAL LETTER SHA
+    (#xFC ?\u042D) ;; CYRILLIC CAPITAL LETTER E
+    (#xFD ?\u0429) ;; CYRILLIC CAPITAL LETTER SHCHA
+    (#xFE ?\u0427) ;; CYRILLIC CAPITAL LETTER CHE
+    (#xFF ?\u042A)) ;; CYRILLIC CAPITAL LETTER HARD SIGN
+   documentation 
    "Note that this does not support old Russian orthography;
 for that, see koi8-o. "))
 
@@ -1315,138 +1319,138 @@
   (put-case-table-pair upper lower case-table))
 
 ;; Archaic Russian support.
-(make-8-bit-coding-system
- 'koi8-o
- '((#x80 ?\u0402) ;; CYRILLIC CAPITAL LETTER DJE
-   (#x81 ?\u0403) ;; CYRILLIC CAPITAL LETTER GJE
-   (#x82 ?\u00B8) ;; CEDILLA
-   (#x83 ?\u0453) ;; CYRILLIC SMALL LETTER GJE
-   (#x84 ?\u201E) ;; DOUBLE LOW-9 QUOTATION MARK
-   (#x85 ?\u2026) ;; HORIZONTAL ELLIPSIS
-   (#x86 ?\u2020) ;; DAGGER
-   (#x87 ?\u00A7) ;; SECTION SIGN
-   (#x88 ?\u20AC) ;; EURO SIGN
-   (#x89 ?\u00A8) ;; DIAERESIS
-   (#x8A ?\u0409) ;; CYRILLIC CAPITAL LETTER LJE
-   (#x8B ?\u2039) ;; SINGLE LEFT-POINTING ANGLE QUOTATION MARK
-   (#x8C ?\u040A) ;; CYRILLIC CAPITAL LETTER NJE
-   (#x8D ?\u040C) ;; CYRILLIC CAPITAL LETTER KJE
-   (#x8E ?\u040B) ;; CYRILLIC CAPITAL LETTER TSHE
-   (#x8F ?\u040F) ;; CYRILLIC CAPITAL LETTER DZHE
-   (#x90 ?\u0452) ;; CYRILLIC SMALL LETTER DJE
-   (#x91 ?\u2018) ;; LEFT SINGLE QUOTATION MARK
-   (#x92 ?\u2019) ;; RIGHT SINGLE QUOTATION MARK
-   (#x93 ?\u201C) ;; LEFT DOUBLE QUOTATION MARK
-   (#x94 ?\u201D) ;; RIGHT DOUBLE QUOTATION MARK
-   (#x95 ?\u2022) ;; BULLET
-   (#x96 ?\u2013) ;; EN DASH
-   (#x97 ?\u2014) ;; EM DASH
-   (#x98 ?\u00A3) ;; POUND SIGN
-   (#x99 ?\u00B7) ;; MIDDLE DOT
-   (#x9A ?\u0459) ;; CYRILLIC SMALL LETTER LJE
-   (#x9B ?\u203A) ;; SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-   (#x9C ?\u045A) ;; CYRILLIC SMALL LETTER NJE
-   (#x9D ?\u045C) ;; CYRILLIC SMALL LETTER KJE
-   (#x9E ?\u045B) ;; CYRILLIC SMALL LETTER TSHE
-   (#x9F ?\u045F) ;; CYRILLIC SMALL LETTER DZHE
-   (#xA0 ?\u00A0) ;; NO-BREAK SPACE
-   (#xA1 ?\u0475) ;; CYRILLIC SMALL LETTER IZHITSA
-   (#xA2 ?\u0463) ;; CYRILLIC SMALL LETTER YAT
-   (#xA3 ?\u0451) ;; CYRILLIC SMALL LETTER IO
-   (#xA4 ?\u0454) ;; CYRILLIC SMALL LETTER UKRAINIAN IE
-   (#xA5 ?\u0455) ;; CYRILLIC SMALL LETTER DZE
-   (#xA6 ?\u0456) ;; CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
-   (#xA7 ?\u0457) ;; CYRILLIC SMALL LETTER YI
-   (#xA8 ?\u0458) ;; CYRILLIC SMALL LETTER JE
-   (#xA9 ?\u00AE) ;; REGISTERED SIGN
-   (#xAA ?\u2122) ;; TRADE MARK SIGN
-   (#xAB ?\u00AB) ;; LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-   (#xAC ?\u0473) ;; CYRILLIC SMALL LETTER FITA
-   (#xAD ?\u0491) ;; CYRILLIC SMALL LETTER GHE WITH UPTURN
-   (#xAE ?\u045E) ;; CYRILLIC SMALL LETTER SHORT U
-   (#xAF ?\u00B4) ;; ACUTE ACCENT
-   (#xB0 ?\u00B0) ;; DEGREE SIGN
-   (#xB1 ?\u0474) ;; CYRILLIC CAPITAL LETTER IZHITSA
-   (#xB2 ?\u0462) ;; CYRILLIC CAPITAL LETTER YAT
-   (#xB3 ?\u0401) ;; CYRILLIC CAPITAL LETTER IO
-   (#xB4 ?\u0404) ;; CYRILLIC CAPITAL LETTER UKRAINIAN IE
-   (#xB5 ?\u0405) ;; CYRILLIC CAPITAL LETTER DZE
-   (#xB6 ?\u0406) ;; CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
-   (#xB7 ?\u0407) ;; CYRILLIC CAPITAL LETTER YI
-   (#xB8 ?\u0408) ;; CYRILLIC CAPITAL LETTER JE
-   (#xB9 ?\u2116) ;; NUMERO SIGN
-   (#xBA ?\u00A2) ;; CENT SIGN
-   (#xBB ?\u00BB) ;; RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-   (#xBC ?\u0472) ;; CYRILLIC CAPITAL LETTER FITA
-   (#xBD ?\u0490) ;; CYRILLIC CAPITAL LETTER GHE WITH UPTURN
-   (#xBE ?\u040E) ;; CYRILLIC CAPITAL LETTER SHORT U
-   (#xBF ?\u00A9) ;; COPYRIGHT SIGN
-   (#xC0 ?\u044E) ;; CYRILLIC SMALL LETTER YU
-   (#xC1 ?\u0430) ;; CYRILLIC SMALL LETTER A
-   (#xC2 ?\u0431) ;; CYRILLIC SMALL LETTER BE
-   (#xC3 ?\u0446) ;; CYRILLIC SMALL LETTER TSE
-   (#xC4 ?\u0434) ;; CYRILLIC SMALL LETTER DE
-   (#xC5 ?\u0435) ;; CYRILLIC SMALL LETTER IE
-   (#xC6 ?\u0444) ;; CYRILLIC SMALL LETTER EF
-   (#xC7 ?\u0433) ;; CYRILLIC SMALL LETTER GHE
-   (#xC8 ?\u0445) ;; CYRILLIC SMALL LETTER HA
-   (#xC9 ?\u0438) ;; CYRILLIC SMALL LETTER I
-   (#xCA ?\u0439) ;; CYRILLIC SMALL LETTER SHORT I
-   (#xCB ?\u043A) ;; CYRILLIC SMALL LETTER KA
-   (#xCC ?\u043B) ;; CYRILLIC SMALL LETTER EL
-   (#xCD ?\u043C) ;; CYRILLIC SMALL LETTER EM
-   (#xCE ?\u043D) ;; CYRILLIC SMALL LETTER EN
-   (#xCF ?\u043E) ;; CYRILLIC SMALL LETTER O
-   (#xD0 ?\u043F) ;; CYRILLIC SMALL LETTER PE
-   (#xD1 ?\u044F) ;; CYRILLIC SMALL LETTER YA
-   (#xD2 ?\u0440) ;; CYRILLIC SMALL LETTER ER
-   (#xD3 ?\u0441) ;; CYRILLIC SMALL LETTER ES
-   (#xD4 ?\u0442) ;; CYRILLIC SMALL LETTER TE
-   (#xD5 ?\u0443) ;; CYRILLIC SMALL LETTER U
-   (#xD6 ?\u0436) ;; CYRILLIC SMALL LETTER ZHE
-   (#xD7 ?\u0432) ;; CYRILLIC SMALL LETTER VE
-   (#xD8 ?\u044C) ;; CYRILLIC SMALL LETTER SOFT SIGN
-   (#xD9 ?\u044B) ;; CYRILLIC SMALL LETTER YERU
-   (#xDA ?\u0437) ;; CYRILLIC SMALL LETTER ZE
-   (#xDB ?\u0448) ;; CYRILLIC SMALL LETTER SHA
-   (#xDC ?\u044D) ;; CYRILLIC SMALL LETTER E
-   (#xDD ?\u0449) ;; CYRILLIC SMALL LETTER SHCHA
-   (#xDE ?\u0447) ;; CYRILLIC SMALL LETTER CHE
-   (#xDF ?\u044A) ;; CYRILLIC SMALL LETTER HARD SIGN
-   (#xE0 ?\u042E) ;; CYRILLIC CAPITAL LETTER YU
-   (#xE1 ?\u0410) ;; CYRILLIC CAPITAL LETTER A
-   (#xE2 ?\u0411) ;; CYRILLIC CAPITAL LETTER BE
-   (#xE3 ?\u0426) ;; CYRILLIC CAPITAL LETTER TSE
-   (#xE4 ?\u0414) ;; CYRILLIC CAPITAL LETTER DE
-   (#xE5 ?\u0415) ;; CYRILLIC CAPITAL LETTER IE
-   (#xE6 ?\u0424) ;; CYRILLIC CAPITAL LETTER EF
-   (#xE7 ?\u0413) ;; CYRILLIC CAPITAL LETTER GHE
-   (#xE8 ?\u0425) ;; CYRILLIC CAPITAL LETTER HA
-   (#xE9 ?\u0418) ;; CYRILLIC CAPITAL LETTER I
-   (#xEA ?\u0419) ;; CYRILLIC CAPITAL LETTER SHORT I
-   (#xEB ?\u041A) ;; CYRILLIC CAPITAL LETTER KA
-   (#xEC ?\u041B) ;; CYRILLIC CAPITAL LETTER EL
-   (#xED ?\u041C) ;; CYRILLIC CAPITAL LETTER EM
-   (#xEE ?\u041D) ;; CYRILLIC CAPITAL LETTER EN
-   (#xEF ?\u041E) ;; CYRILLIC CAPITAL LETTER O
-   (#xF0 ?\u041F) ;; CYRILLIC CAPITAL LETTER PE
-   (#xF1 ?\u042F) ;; CYRILLIC CAPITAL LETTER YA
-   (#xF2 ?\u0420) ;; CYRILLIC CAPITAL LETTER ER
-   (#xF3 ?\u0421) ;; CYRILLIC CAPITAL LETTER ES
-   (#xF4 ?\u0422) ;; CYRILLIC CAPITAL LETTER TE
-   (#xF5 ?\u0423) ;; CYRILLIC CAPITAL LETTER U
-   (#xF6 ?\u0416) ;; CYRILLIC CAPITAL LETTER ZHE
-   (#xF7 ?\u0412) ;; CYRILLIC CAPITAL LETTER VE
-   (#xF8 ?\u042C) ;; CYRILLIC CAPITAL LETTER SOFT SIGN
-   (#xF9 ?\u042B) ;; CYRILLIC CAPITAL LETTER YERU
-   (#xFA ?\u0417) ;; CYRILLIC CAPITAL LETTER ZE
-   (#xFB ?\u0428) ;; CYRILLIC CAPITAL LETTER SHA
-   (#xFC ?\u042D) ;; CYRILLIC CAPITAL LETTER E
-   (#xFD ?\u0429) ;; CYRILLIC CAPITAL LETTER SHCHA
-   (#xFE ?\u0427) ;; CYRILLIC CAPITAL LETTER CHE
-   (#xFF ?\u042A));; CYRILLIC CAPITAL LETTER HARD SIGN
- "KOI-8 for old-orthography Russian; also known as KOI-C."
- '(mnemonic ",L:>(B"
+(make-coding-system
+ 'koi8-o 'fixed-width "Old-orthography Russian"
+ '(unicode-map
+   ((#x80 ?\u0402) ;; CYRILLIC CAPITAL LETTER DJE
+    (#x81 ?\u0403) ;; CYRILLIC CAPITAL LETTER GJE
+    (#x82 ?\u00B8) ;; CEDILLA
+    (#x83 ?\u0453) ;; CYRILLIC SMALL LETTER GJE
+    (#x84 ?\u201E) ;; DOUBLE LOW-9 QUOTATION MARK
+    (#x85 ?\u2026) ;; HORIZONTAL ELLIPSIS
+    (#x86 ?\u2020) ;; DAGGER
+    (#x87 ?\u00A7) ;; SECTION SIGN
+    (#x88 ?\u20AC) ;; EURO SIGN
+    (#x89 ?\u00A8) ;; DIAERESIS
+    (#x8A ?\u0409) ;; CYRILLIC CAPITAL LETTER LJE
+    (#x8B ?\u2039) ;; SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+    (#x8C ?\u040A) ;; CYRILLIC CAPITAL LETTER NJE
+    (#x8D ?\u040C) ;; CYRILLIC CAPITAL LETTER KJE
+    (#x8E ?\u040B) ;; CYRILLIC CAPITAL LETTER TSHE
+    (#x8F ?\u040F) ;; CYRILLIC CAPITAL LETTER DZHE
+    (#x90 ?\u0452) ;; CYRILLIC SMALL LETTER DJE
+    (#x91 ?\u2018) ;; LEFT SINGLE QUOTATION MARK
+    (#x92 ?\u2019) ;; RIGHT SINGLE QUOTATION MARK
+    (#x93 ?\u201C) ;; LEFT DOUBLE QUOTATION MARK
+    (#x94 ?\u201D) ;; RIGHT DOUBLE QUOTATION MARK
+    (#x95 ?\u2022) ;; BULLET
+    (#x96 ?\u2013) ;; EN DASH
+    (#x97 ?\u2014) ;; EM DASH
+    (#x98 ?\u00A3) ;; POUND SIGN
+    (#x99 ?\u00B7) ;; MIDDLE DOT
+    (#x9A ?\u0459) ;; CYRILLIC SMALL LETTER LJE
+    (#x9B ?\u203A) ;; SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+    (#x9C ?\u045A) ;; CYRILLIC SMALL LETTER NJE
+    (#x9D ?\u045C) ;; CYRILLIC SMALL LETTER KJE
+    (#x9E ?\u045B) ;; CYRILLIC SMALL LETTER TSHE
+    (#x9F ?\u045F) ;; CYRILLIC SMALL LETTER DZHE
+    (#xA0 ?\u00A0) ;; NO-BREAK SPACE
+    (#xA1 ?\u0475) ;; CYRILLIC SMALL LETTER IZHITSA
+    (#xA2 ?\u0463) ;; CYRILLIC SMALL LETTER YAT
+    (#xA3 ?\u0451) ;; CYRILLIC SMALL LETTER IO
+    (#xA4 ?\u0454) ;; CYRILLIC SMALL LETTER UKRAINIAN IE
+    (#xA5 ?\u0455) ;; CYRILLIC SMALL LETTER DZE
+    (#xA6 ?\u0456) ;; CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+    (#xA7 ?\u0457) ;; CYRILLIC SMALL LETTER YI
+    (#xA8 ?\u0458) ;; CYRILLIC SMALL LETTER JE
+    (#xA9 ?\u00AE) ;; REGISTERED SIGN
+    (#xAA ?\u2122) ;; TRADE MARK SIGN
+    (#xAB ?\u00AB) ;; LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    (#xAC ?\u0473) ;; CYRILLIC SMALL LETTER FITA
+    (#xAD ?\u0491) ;; CYRILLIC SMALL LETTER GHE WITH UPTURN
+    (#xAE ?\u045E) ;; CYRILLIC SMALL LETTER SHORT U
+    (#xAF ?\u00B4) ;; ACUTE ACCENT
+    (#xB0 ?\u00B0) ;; DEGREE SIGN
+    (#xB1 ?\u0474) ;; CYRILLIC CAPITAL LETTER IZHITSA
+    (#xB2 ?\u0462) ;; CYRILLIC CAPITAL LETTER YAT
+    (#xB3 ?\u0401) ;; CYRILLIC CAPITAL LETTER IO
+    (#xB4 ?\u0404) ;; CYRILLIC CAPITAL LETTER UKRAINIAN IE
+    (#xB5 ?\u0405) ;; CYRILLIC CAPITAL LETTER DZE
+    (#xB6 ?\u0406) ;; CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+    (#xB7 ?\u0407) ;; CYRILLIC CAPITAL LETTER YI
+    (#xB8 ?\u0408) ;; CYRILLIC CAPITAL LETTER JE
+    (#xB9 ?\u2116) ;; NUMERO SIGN
+    (#xBA ?\u00A2) ;; CENT SIGN
+    (#xBB ?\u00BB) ;; RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    (#xBC ?\u0472) ;; CYRILLIC CAPITAL LETTER FITA
+    (#xBD ?\u0490) ;; CYRILLIC CAPITAL LETTER GHE WITH UPTURN
+    (#xBE ?\u040E) ;; CYRILLIC CAPITAL LETTER SHORT U
+    (#xBF ?\u00A9) ;; COPYRIGHT SIGN
+    (#xC0 ?\u044E) ;; CYRILLIC SMALL LETTER YU
+    (#xC1 ?\u0430) ;; CYRILLIC SMALL LETTER A
+    (#xC2 ?\u0431) ;; CYRILLIC SMALL LETTER BE
+    (#xC3 ?\u0446) ;; CYRILLIC SMALL LETTER TSE
+    (#xC4 ?\u0434) ;; CYRILLIC SMALL LETTER DE
+    (#xC5 ?\u0435) ;; CYRILLIC SMALL LETTER IE
+    (#xC6 ?\u0444) ;; CYRILLIC SMALL LETTER EF
+    (#xC7 ?\u0433) ;; CYRILLIC SMALL LETTER GHE
+    (#xC8 ?\u0445) ;; CYRILLIC SMALL LETTER HA
+    (#xC9 ?\u0438) ;; CYRILLIC SMALL LETTER I
+    (#xCA ?\u0439) ;; CYRILLIC SMALL LETTER SHORT I
+    (#xCB ?\u043A) ;; CYRILLIC SMALL LETTER KA
+    (#xCC ?\u043B) ;; CYRILLIC SMALL LETTER EL
+    (#xCD ?\u043C) ;; CYRILLIC SMALL LETTER EM
+    (#xCE ?\u043D) ;; CYRILLIC SMALL LETTER EN
+    (#xCF ?\u043E) ;; CYRILLIC SMALL LETTER O
+    (#xD0 ?\u043F) ;; CYRILLIC SMALL LETTER PE
+    (#xD1 ?\u044F) ;; CYRILLIC SMALL LETTER YA
+    (#xD2 ?\u0440) ;; CYRILLIC SMALL LETTER ER
+    (#xD3 ?\u0441) ;; CYRILLIC SMALL LETTER ES
+    (#xD4 ?\u0442) ;; CYRILLIC SMALL LETTER TE
+    (#xD5 ?\u0443) ;; CYRILLIC SMALL LETTER U
+    (#xD6 ?\u0436) ;; CYRILLIC SMALL LETTER ZHE
+    (#xD7 ?\u0432) ;; CYRILLIC SMALL LETTER VE
+    (#xD8 ?\u044C) ;; CYRILLIC SMALL LETTER SOFT SIGN
+    (#xD9 ?\u044B) ;; CYRILLIC SMALL LETTER YERU
+    (#xDA ?\u0437) ;; CYRILLIC SMALL LETTER ZE
+    (#xDB ?\u0448) ;; CYRILLIC SMALL LETTER SHA
+    (#xDC ?\u044D) ;; CYRILLIC SMALL LETTER E
+    (#xDD ?\u0449) ;; CYRILLIC SMALL LETTER SHCHA
+    (#xDE ?\u0447) ;; CYRILLIC SMALL LETTER CHE
+    (#xDF ?\u044A) ;; CYRILLIC SMALL LETTER HARD SIGN
+    (#xE0 ?\u042E) ;; CYRILLIC CAPITAL LETTER YU
+    (#xE1 ?\u0410) ;; CYRILLIC CAPITAL LETTER A
+    (#xE2 ?\u0411) ;; CYRILLIC CAPITAL LETTER BE
+    (#xE3 ?\u0426) ;; CYRILLIC CAPITAL LETTER TSE
+    (#xE4 ?\u0414) ;; CYRILLIC CAPITAL LETTER DE
+    (#xE5 ?\u0415) ;; CYRILLIC CAPITAL LETTER IE
+    (#xE6 ?\u0424) ;; CYRILLIC CAPITAL LETTER EF
+    (#xE7 ?\u0413) ;; CYRILLIC CAPITAL LETTER GHE
+    (#xE8 ?\u0425) ;; CYRILLIC CAPITAL LETTER HA
+    (#xE9 ?\u0418) ;; CYRILLIC CAPITAL LETTER I
+    (#xEA ?\u0419) ;; CYRILLIC CAPITAL LETTER SHORT I
+    (#xEB ?\u041A) ;; CYRILLIC CAPITAL LETTER KA
+    (#xEC ?\u041B) ;; CYRILLIC CAPITAL LETTER EL
+    (#xED ?\u041C) ;; CYRILLIC CAPITAL LETTER EM
+    (#xEE ?\u041D) ;; CYRILLIC CAPITAL LETTER EN
+    (#xEF ?\u041E) ;; CYRILLIC CAPITAL LETTER O
+    (#xF0 ?\u041F) ;; CYRILLIC CAPITAL LETTER PE
+    (#xF1 ?\u042F) ;; CYRILLIC CAPITAL LETTER YA
+    (#xF2 ?\u0420) ;; CYRILLIC CAPITAL LETTER ER
+    (#xF3 ?\u0421) ;; CYRILLIC CAPITAL LETTER ES
+    (#xF4 ?\u0422) ;; CYRILLIC CAPITAL LETTER TE
+    (#xF5 ?\u0423) ;; CYRILLIC CAPITAL LETTER U
+    (#xF6 ?\u0416) ;; CYRILLIC CAPITAL LETTER ZHE
+    (#xF7 ?\u0412) ;; CYRILLIC CAPITAL LETTER VE
+    (#xF8 ?\u042C) ;; CYRILLIC CAPITAL LETTER SOFT SIGN
+    (#xF9 ?\u042B) ;; CYRILLIC CAPITAL LETTER YERU
+    (#xFA ?\u0417) ;; CYRILLIC CAPITAL LETTER ZE
+    (#xFB ?\u0428) ;; CYRILLIC CAPITAL LETTER SHA
+    (#xFC ?\u042D) ;; CYRILLIC CAPITAL LETTER E
+    (#xFD ?\u0429) ;; CYRILLIC CAPITAL LETTER SHCHA
+    (#xFE ?\u0427) ;; CYRILLIC CAPITAL LETTER CHE
+    (#xFF ?\u042A)) ;; CYRILLIC CAPITAL LETTER HARD SIGN
+   mnemonic ",L:>(B"
    documentation
    "KOI-8 for old-orthography Russian; also known as KOI-C.
 
--- a/lisp/mule/general-late.el	Sat Sep 19 17:56:23 2009 +0200
+++ b/lisp/mule/general-late.el	Sat Sep 19 22:53:13 2009 +0100
@@ -65,31 +65,41 @@
 			       Installation-file-coding-system)
 			    Installation-string)
 
-      ;; Convince the byte compiler that, really, this file can't be encoded
-      ;; as binary. Ugh.
-      system-type (symbol-value (intern "\u0073ystem-type"))
+      ;; This used to be here to convince the byte-compiler to encode the
+      ;; output file using escape-quoted. This is no longer necessary, but
+      ;; keeping it here avoids doing the eval-when-compile clause below
+      ;; twice, which is a significant improvement.
+      system-type (symbol-value (intern "\u0073ystem-type")))
 
-      unicode-query-coding-skip-chars-arg
-      (eval-when-compile 
-        (when-fboundp 'map-charset-chars 
-          (loop
-            for charset in (charset-list)
-            with skip-chars-string = ""
-            do
-            (block no-ucs-mapping
-              (map-charset-chars
-               #'(lambda (begin end)
-                   (loop
-                     while (and begin (>= end begin))
-                     do
-                     (when (= -1 (char-to-unicode begin))
-                       (return-from no-ucs-mapping))
-                     (setq begin (int-to-char (1+ begin)))))
-               charset)
-              (setq skip-chars-string
-                    (concat skip-chars-string
-                            (charset-skip-chars-string charset))))
-            finally return skip-chars-string))))
+;; When this file is being compiled, all the charsets have been loaded, so
+;; we can construct the query-skip-chars-arg string correctly. 
+(set-unicode-query-skip-chars-args
+ (eval-when-compile 
+   (when-fboundp 'map-charset-chars 
+     (loop
+       for charset in (charset-list)
+       with skip-chars-string = ""
+       do
+       (block no-ucs-mapping
+         (map-charset-chars
+          #'(lambda (begin end)
+              (loop
+                while (and begin (>= end begin))
+                do
+                (when (= -1 (char-to-unicode begin))
+                  (return-from no-ucs-mapping))
+                (setq begin (int-to-char (1+ begin)))))
+          charset)
+         (setq skip-chars-string
+               (concat skip-chars-string
+                       (charset-skip-chars-string charset))))
+       finally return skip-chars-string)))
+ unicode-invalid-sequence-regexp-range
+ (eval-when-compile
+   (concat (loop
+             for i from #x80 to #xFF
+             collect (aref (decode-coding-string (int-char i)
+                                                 'utf-8) 0)))))
 
 ;; At this point in the dump, all the charsets have been loaded. Now, load
 ;; their Unicode mappings.
--- a/lisp/mule/greek.el	Sat Sep 19 17:56:23 2009 +0200
+++ b/lisp/mule/greek.el	Sat Sep 19 22:53:13 2009 +0100
@@ -118,254 +118,256 @@
       (string (char-syntax (make-char 'latin-iso8859-1 latin-1)))
       syntax-table))
 
-(make-8-bit-coding-system
- 'iso-8859-7
- '((#x80 ?\u0080) ;; <control>
-   (#x81 ?\u0081) ;; <control>
-   (#x82 ?\u0082) ;; <control>
-   (#x83 ?\u0083) ;; <control>
-   (#x84 ?\u0084) ;; <control>
-   (#x85 ?\u0085) ;; <control>
-   (#x86 ?\u0086) ;; <control>
-   (#x87 ?\u0087) ;; <control>
-   (#x88 ?\u0088) ;; <control>
-   (#x89 ?\u0089) ;; <control>
-   (#x8A ?\u008A) ;; <control>
-   (#x8B ?\u008B) ;; <control>
-   (#x8C ?\u008C) ;; <control>
-   (#x8D ?\u008D) ;; <control>
-   (#x8E ?\u008E) ;; <control>
-   (#x8F ?\u008F) ;; <control>
-   (#x90 ?\u0090) ;; <control>
-   (#x91 ?\u0091) ;; <control>
-   (#x92 ?\u0092) ;; <control>
-   (#x93 ?\u0093) ;; <control>
-   (#x94 ?\u0094) ;; <control>
-   (#x95 ?\u0095) ;; <control>
-   (#x96 ?\u0096) ;; <control>
-   (#x97 ?\u0097) ;; <control>
-   (#x98 ?\u0098) ;; <control>
-   (#x99 ?\u0099) ;; <control>
-   (#x9A ?\u009A) ;; <control>
-   (#x9B ?\u009B) ;; <control>
-   (#x9C ?\u009C) ;; <control>
-   (#x9D ?\u009D) ;; <control>
-   (#x9E ?\u009E) ;; <control>
-   (#x9F ?\u009F) ;; <control>
-   (#xA0 ?\u00A0) ;; NO-BREAK SPACE
-   (#xA1 ?\u2018) ;; LEFT SINGLE QUOTATION MARK
-   (#xA2 ?\u2019) ;; RIGHT SINGLE QUOTATION MARK
-   (#xA3 ?\u00A3) ;; POUND SIGN
-   (#xA4 ?\u20AC) ;; EURO SIGN
-   (#xA5 ?\u20AF) ;; DRACHMA SIGN
-   (#xA6 ?\u00A6) ;; BROKEN BAR
-   (#xA7 ?\u00A7) ;; SECTION SIGN
-   (#xA8 ?\u00A8) ;; DIAERESIS
-   (#xA9 ?\u00A9) ;; COPYRIGHT SIGN
-   (#xAA ?\u037A) ;; GREEK YPOGEGRAMMENI
-   (#xAB ?\u00AB) ;; LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-   (#xAC ?\u00AC) ;; NOT SIGN
-   (#xAD ?\u00AD) ;; SOFT HYPHEN
-   (#xAF ?\u2015) ;; HORIZONTAL BAR
-   (#xB0 ?\u00B0) ;; DEGREE SIGN
-   (#xB1 ?\u00B1) ;; PLUS-MINUS SIGN
-   (#xB2 ?\u00B2) ;; SUPERSCRIPT TWO
-   (#xB3 ?\u00B3) ;; SUPERSCRIPT THREE
-   (#xB4 ?\u0384) ;; GREEK TONOS
-   (#xB5 ?\u0385) ;; GREEK DIALYTIKA TONOS
-   (#xB6 ?\u0386) ;; GREEK CAPITAL LETTER ALPHA WITH TONOS
-   (#xB7 ?\u00B7) ;; MIDDLE DOT
-   (#xB8 ?\u0388) ;; GREEK CAPITAL LETTER EPSILON WITH TONOS
-   (#xB9 ?\u0389) ;; GREEK CAPITAL LETTER ETA WITH TONOS
-   (#xBA ?\u038A) ;; GREEK CAPITAL LETTER IOTA WITH TONOS
-   (#xBB ?\u00BB) ;; RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-   (#xBC ?\u038C) ;; GREEK CAPITAL LETTER OMICRON WITH TONOS
-   (#xBD ?\u00BD) ;; VULGAR FRACTION ONE HALF
-   (#xBE ?\u038E) ;; GREEK CAPITAL LETTER UPSILON WITH TONOS
-   (#xBF ?\u038F) ;; GREEK CAPITAL LETTER OMEGA WITH TONOS
-   (#xC0 ?\u0390) ;; GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
-   (#xC1 ?\u0391) ;; GREEK CAPITAL LETTER ALPHA
-   (#xC2 ?\u0392) ;; GREEK CAPITAL LETTER BETA
-   (#xC3 ?\u0393) ;; GREEK CAPITAL LETTER GAMMA
-   (#xC4 ?\u0394) ;; GREEK CAPITAL LETTER DELTA
-   (#xC5 ?\u0395) ;; GREEK CAPITAL LETTER EPSILON
-   (#xC6 ?\u0396) ;; GREEK CAPITAL LETTER ZETA
-   (#xC7 ?\u0397) ;; GREEK CAPITAL LETTER ETA
-   (#xC8 ?\u0398) ;; GREEK CAPITAL LETTER THETA
-   (#xC9 ?\u0399) ;; GREEK CAPITAL LETTER IOTA
-   (#xCA ?\u039A) ;; GREEK CAPITAL LETTER KAPPA
-   (#xCB ?\u039B) ;; GREEK CAPITAL LETTER LAMDA
-   (#xCC ?\u039C) ;; GREEK CAPITAL LETTER MU
-   (#xCD ?\u039D) ;; GREEK CAPITAL LETTER NU
-   (#xCE ?\u039E) ;; GREEK CAPITAL LETTER XI
-   (#xCF ?\u039F) ;; GREEK CAPITAL LETTER OMICRON
-   (#xD0 ?\u03A0) ;; GREEK CAPITAL LETTER PI
-   (#xD1 ?\u03A1) ;; GREEK CAPITAL LETTER RHO
-   (#xD3 ?\u03A3) ;; GREEK CAPITAL LETTER SIGMA
-   (#xD4 ?\u03A4) ;; GREEK CAPITAL LETTER TAU
-   (#xD5 ?\u03A5) ;; GREEK CAPITAL LETTER UPSILON
-   (#xD6 ?\u03A6) ;; GREEK CAPITAL LETTER PHI
-   (#xD7 ?\u03A7) ;; GREEK CAPITAL LETTER CHI
-   (#xD8 ?\u03A8) ;; GREEK CAPITAL LETTER PSI
-   (#xD9 ?\u03A9) ;; GREEK CAPITAL LETTER OMEGA
-   (#xDA ?\u03AA) ;; GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
-   (#xDB ?\u03AB) ;; GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
-   (#xDC ?\u03AC) ;; GREEK SMALL LETTER ALPHA WITH TONOS
-   (#xDD ?\u03AD) ;; GREEK SMALL LETTER EPSILON WITH TONOS
-   (#xDE ?\u03AE) ;; GREEK SMALL LETTER ETA WITH TONOS
-   (#xDF ?\u03AF) ;; GREEK SMALL LETTER IOTA WITH TONOS
-   (#xE0 ?\u03B0) ;; GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
-   (#xE1 ?\u03B1) ;; GREEK SMALL LETTER ALPHA
-   (#xE2 ?\u03B2) ;; GREEK SMALL LETTER BETA
-   (#xE3 ?\u03B3) ;; GREEK SMALL LETTER GAMMA
-   (#xE4 ?\u03B4) ;; GREEK SMALL LETTER DELTA
-   (#xE5 ?\u03B5) ;; GREEK SMALL LETTER EPSILON
-   (#xE6 ?\u03B6) ;; GREEK SMALL LETTER ZETA
-   (#xE7 ?\u03B7) ;; GREEK SMALL LETTER ETA
-   (#xE8 ?\u03B8) ;; GREEK SMALL LETTER THETA
-   (#xE9 ?\u03B9) ;; GREEK SMALL LETTER IOTA
-   (#xEA ?\u03BA) ;; GREEK SMALL LETTER KAPPA
-   (#xEB ?\u03BB) ;; GREEK SMALL LETTER LAMDA
-   (#xEC ?\u03BC) ;; GREEK SMALL LETTER MU
-   (#xED ?\u03BD) ;; GREEK SMALL LETTER NU
-   (#xEE ?\u03BE) ;; GREEK SMALL LETTER XI
-   (#xEF ?\u03BF) ;; GREEK SMALL LETTER OMICRON
-   (#xF0 ?\u03C0) ;; GREEK SMALL LETTER PI
-   (#xF1 ?\u03C1) ;; GREEK SMALL LETTER RHO
-   (#xF2 ?\u03C2) ;; GREEK SMALL LETTER FINAL SIGMA
-   (#xF3 ?\u03C3) ;; GREEK SMALL LETTER SIGMA
-   (#xF4 ?\u03C4) ;; GREEK SMALL LETTER TAU
-   (#xF5 ?\u03C5) ;; GREEK SMALL LETTER UPSILON
-   (#xF6 ?\u03C6) ;; GREEK SMALL LETTER PHI
-   (#xF7 ?\u03C7) ;; GREEK SMALL LETTER CHI
-   (#xF8 ?\u03C8) ;; GREEK SMALL LETTER PSI
-   (#xF9 ?\u03C9) ;; GREEK SMALL LETTER OMEGA
-   (#xFA ?\u03CA) ;; GREEK SMALL LETTER IOTA WITH DIALYTIKA
-   (#xFB ?\u03CB) ;; GREEK SMALL LETTER UPSILON WITH DIALYTIKA
-   (#xFC ?\u03CC) ;; GREEK SMALL LETTER OMICRON WITH TONOS
-   (#xFD ?\u03CD) ;; GREEK SMALL LETTER UPSILON WITH TONOS
-   (#xFE ?\u03CE));; GREEK SMALL LETTER OMEGA WITH TONOS
- "ISO-8859-7 (Greek)"
- '(mnemonic "Grk"
+(make-coding-system
+ 'iso-8859-7 'fixed-width "ISO-8859-7 (Greek)"
+ '(unicode-map
+   ((#x80 ?\u0080) ;; <control>
+    (#x81 ?\u0081) ;; <control>
+    (#x82 ?\u0082) ;; <control>
+    (#x83 ?\u0083) ;; <control>
+    (#x84 ?\u0084) ;; <control>
+    (#x85 ?\u0085) ;; <control>
+    (#x86 ?\u0086) ;; <control>
+    (#x87 ?\u0087) ;; <control>
+    (#x88 ?\u0088) ;; <control>
+    (#x89 ?\u0089) ;; <control>
+    (#x8A ?\u008A) ;; <control>
+    (#x8B ?\u008B) ;; <control>
+    (#x8C ?\u008C) ;; <control>
+    (#x8D ?\u008D) ;; <control>
+    (#x8E ?\u008E) ;; <control>
+    (#x8F ?\u008F) ;; <control>
+    (#x90 ?\u0090) ;; <control>
+    (#x91 ?\u0091) ;; <control>
+    (#x92 ?\u0092) ;; <control>
+    (#x93 ?\u0093) ;; <control>
+    (#x94 ?\u0094) ;; <control>
+    (#x95 ?\u0095) ;; <control>
+    (#x96 ?\u0096) ;; <control>
+    (#x97 ?\u0097) ;; <control>
+    (#x98 ?\u0098) ;; <control>
+    (#x99 ?\u0099) ;; <control>
+    (#x9A ?\u009A) ;; <control>
+    (#x9B ?\u009B) ;; <control>
+    (#x9C ?\u009C) ;; <control>
+    (#x9D ?\u009D) ;; <control>
+    (#x9E ?\u009E) ;; <control>
+    (#x9F ?\u009F) ;; <control>
+    (#xA0 ?\u00A0) ;; NO-BREAK SPACE
+    (#xA1 ?\u2018) ;; LEFT SINGLE QUOTATION MARK
+    (#xA2 ?\u2019) ;; RIGHT SINGLE QUOTATION MARK
+    (#xA3 ?\u00A3) ;; POUND SIGN
+    (#xA4 ?\u20AC) ;; EURO SIGN
+    (#xA5 ?\u20AF) ;; DRACHMA SIGN
+    (#xA6 ?\u00A6) ;; BROKEN BAR
+    (#xA7 ?\u00A7) ;; SECTION SIGN
+    (#xA8 ?\u00A8) ;; DIAERESIS
+    (#xA9 ?\u00A9) ;; COPYRIGHT SIGN
+    (#xAA ?\u037A) ;; GREEK YPOGEGRAMMENI
+    (#xAB ?\u00AB) ;; LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    (#xAC ?\u00AC) ;; NOT SIGN
+    (#xAD ?\u00AD) ;; SOFT HYPHEN
+    (#xAF ?\u2015) ;; HORIZONTAL BAR
+    (#xB0 ?\u00B0) ;; DEGREE SIGN
+    (#xB1 ?\u00B1) ;; PLUS-MINUS SIGN
+    (#xB2 ?\u00B2) ;; SUPERSCRIPT TWO
+    (#xB3 ?\u00B3) ;; SUPERSCRIPT THREE
+    (#xB4 ?\u0384) ;; GREEK TONOS
+    (#xB5 ?\u0385) ;; GREEK DIALYTIKA TONOS
+    (#xB6 ?\u0386) ;; GREEK CAPITAL LETTER ALPHA WITH TONOS
+    (#xB7 ?\u00B7) ;; MIDDLE DOT
+    (#xB8 ?\u0388) ;; GREEK CAPITAL LETTER EPSILON WITH TONOS
+    (#xB9 ?\u0389) ;; GREEK CAPITAL LETTER ETA WITH TONOS
+    (#xBA ?\u038A) ;; GREEK CAPITAL LETTER IOTA WITH TONOS
+    (#xBB ?\u00BB) ;; RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    (#xBC ?\u038C) ;; GREEK CAPITAL LETTER OMICRON WITH TONOS
+    (#xBD ?\u00BD) ;; VULGAR FRACTION ONE HALF
+    (#xBE ?\u038E) ;; GREEK CAPITAL LETTER UPSILON WITH TONOS
+    (#xBF ?\u038F) ;; GREEK CAPITAL LETTER OMEGA WITH TONOS
+    (#xC0 ?\u0390) ;; GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+    (#xC1 ?\u0391) ;; GREEK CAPITAL LETTER ALPHA
+    (#xC2 ?\u0392) ;; GREEK CAPITAL LETTER BETA
+    (#xC3 ?\u0393) ;; GREEK CAPITAL LETTER GAMMA
+    (#xC4 ?\u0394) ;; GREEK CAPITAL LETTER DELTA
+    (#xC5 ?\u0395) ;; GREEK CAPITAL LETTER EPSILON
+    (#xC6 ?\u0396) ;; GREEK CAPITAL LETTER ZETA
+    (#xC7 ?\u0397) ;; GREEK CAPITAL LETTER ETA
+    (#xC8 ?\u0398) ;; GREEK CAPITAL LETTER THETA
+    (#xC9 ?\u0399) ;; GREEK CAPITAL LETTER IOTA
+    (#xCA ?\u039A) ;; GREEK CAPITAL LETTER KAPPA
+    (#xCB ?\u039B) ;; GREEK CAPITAL LETTER LAMDA
+    (#xCC ?\u039C) ;; GREEK CAPITAL LETTER MU
+    (#xCD ?\u039D) ;; GREEK CAPITAL LETTER NU
+    (#xCE ?\u039E) ;; GREEK CAPITAL LETTER XI
+    (#xCF ?\u039F) ;; GREEK CAPITAL LETTER OMICRON
+    (#xD0 ?\u03A0) ;; GREEK CAPITAL LETTER PI
+    (#xD1 ?\u03A1) ;; GREEK CAPITAL LETTER RHO
+    (#xD3 ?\u03A3) ;; GREEK CAPITAL LETTER SIGMA
+    (#xD4 ?\u03A4) ;; GREEK CAPITAL LETTER TAU
+    (#xD5 ?\u03A5) ;; GREEK CAPITAL LETTER UPSILON
+    (#xD6 ?\u03A6) ;; GREEK CAPITAL LETTER PHI
+    (#xD7 ?\u03A7) ;; GREEK CAPITAL LETTER CHI
+    (#xD8 ?\u03A8) ;; GREEK CAPITAL LETTER PSI
+    (#xD9 ?\u03A9) ;; GREEK CAPITAL LETTER OMEGA
+    (#xDA ?\u03AA) ;; GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
+    (#xDB ?\u03AB) ;; GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+    (#xDC ?\u03AC) ;; GREEK SMALL LETTER ALPHA WITH TONOS
+    (#xDD ?\u03AD) ;; GREEK SMALL LETTER EPSILON WITH TONOS
+    (#xDE ?\u03AE) ;; GREEK SMALL LETTER ETA WITH TONOS
+    (#xDF ?\u03AF) ;; GREEK SMALL LETTER IOTA WITH TONOS
+    (#xE0 ?\u03B0) ;; GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+    (#xE1 ?\u03B1) ;; GREEK SMALL LETTER ALPHA
+    (#xE2 ?\u03B2) ;; GREEK SMALL LETTER BETA
+    (#xE3 ?\u03B3) ;; GREEK SMALL LETTER GAMMA
+    (#xE4 ?\u03B4) ;; GREEK SMALL LETTER DELTA
+    (#xE5 ?\u03B5) ;; GREEK SMALL LETTER EPSILON
+    (#xE6 ?\u03B6) ;; GREEK SMALL LETTER ZETA
+    (#xE7 ?\u03B7) ;; GREEK SMALL LETTER ETA
+    (#xE8 ?\u03B8) ;; GREEK SMALL LETTER THETA
+    (#xE9 ?\u03B9) ;; GREEK SMALL LETTER IOTA
+    (#xEA ?\u03BA) ;; GREEK SMALL LETTER KAPPA
+    (#xEB ?\u03BB) ;; GREEK SMALL LETTER LAMDA
+    (#xEC ?\u03BC) ;; GREEK SMALL LETTER MU
+    (#xED ?\u03BD) ;; GREEK SMALL LETTER NU
+    (#xEE ?\u03BE) ;; GREEK SMALL LETTER XI
+    (#xEF ?\u03BF) ;; GREEK SMALL LETTER OMICRON
+    (#xF0 ?\u03C0) ;; GREEK SMALL LETTER PI
+    (#xF1 ?\u03C1) ;; GREEK SMALL LETTER RHO
+    (#xF2 ?\u03C2) ;; GREEK SMALL LETTER FINAL SIGMA
+    (#xF3 ?\u03C3) ;; GREEK SMALL LETTER SIGMA
+    (#xF4 ?\u03C4) ;; GREEK SMALL LETTER TAU
+    (#xF5 ?\u03C5) ;; GREEK SMALL LETTER UPSILON
+    (#xF6 ?\u03C6) ;; GREEK SMALL LETTER PHI
+    (#xF7 ?\u03C7) ;; GREEK SMALL LETTER CHI
+    (#xF8 ?\u03C8) ;; GREEK SMALL LETTER PSI
+    (#xF9 ?\u03C9) ;; GREEK SMALL LETTER OMEGA
+    (#xFA ?\u03CA) ;; GREEK SMALL LETTER IOTA WITH DIALYTIKA
+    (#xFB ?\u03CB) ;; GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+    (#xFC ?\u03CC) ;; GREEK SMALL LETTER OMICRON WITH TONOS
+    (#xFD ?\u03CD) ;; GREEK SMALL LETTER UPSILON WITH TONOS
+    (#xFE ?\u03CE)) ;; GREEK SMALL LETTER OMEGA WITH TONOS
+   mnemonic "Grk"
    aliases (greek-iso-8bit)))
 
-(make-8-bit-coding-system 
- 'windows-1253
- '((#x80 ?\u20AC) ;; EURO SIGN
-   (#x82 ?\u201A) ;; SINGLE LOW-9 QUOTATION MARK
-   (#x83 ?\u0192) ;; LATIN SMALL LETTER F WITH HOOK
-   (#x84 ?\u201E) ;; DOUBLE LOW-9 QUOTATION MARK
-   (#x85 ?\u2026) ;; HORIZONTAL ELLIPSIS
-   (#x86 ?\u2020) ;; DAGGER
-   (#x87 ?\u2021) ;; DOUBLE DAGGER
-   (#x89 ?\u2030) ;; PER MILLE SIGN
-   (#x8B ?\u2039) ;; SINGLE LEFT-POINTING ANGLE QUOTATION MARK
-   (#x91 ?\u2018) ;; LEFT SINGLE QUOTATION MARK
-   (#x92 ?\u2019) ;; RIGHT SINGLE QUOTATION MARK
-   (#x93 ?\u201C) ;; LEFT DOUBLE QUOTATION MARK
-   (#x94 ?\u201D) ;; RIGHT DOUBLE QUOTATION MARK
-   (#x95 ?\u2022) ;; BULLET
-   (#x96 ?\u2013) ;; EN DASH
-   (#x97 ?\u2014) ;; EM DASH
-   (#x99 ?\u2122) ;; TRADE MARK SIGN
-   (#x9B ?\u203A) ;; SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-   (#xA0 ?\u00A0) ;; NO-BREAK SPACE
-   (#xA1 ?\u0385) ;; GREEK DIALYTIKA TONOS
-   (#xA2 ?\u0386) ;; GREEK CAPITAL LETTER ALPHA WITH TONOS
-   (#xA3 ?\u00A3) ;; POUND SIGN
-   (#xA4 ?\u00A4) ;; CURRENCY SIGN
-   (#xA5 ?\u00A5) ;; YEN SIGN
-   (#xA6 ?\u00A6) ;; BROKEN BAR
-   (#xA7 ?\u00A7) ;; SECTION SIGN
-   (#xA8 ?\u00A8) ;; DIAERESIS
-   (#xA9 ?\u00A9) ;; COPYRIGHT SIGN
-   (#xAB ?\u00AB) ;; LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-   (#xAC ?\u00AC) ;; NOT SIGN
-   (#xAD ?\u00AD) ;; SOFT HYPHEN
-   (#xAE ?\u00AE) ;; REGISTERED SIGN
-   (#xAF ?\u2015) ;; HORIZONTAL BAR
-   (#xB0 ?\u00B0) ;; DEGREE SIGN
-   (#xB1 ?\u00B1) ;; PLUS-MINUS SIGN
-   (#xB2 ?\u00B2) ;; SUPERSCRIPT TWO
-   (#xB3 ?\u00B3) ;; SUPERSCRIPT THREE
-   (#xB4 ?\u0384) ;; GREEK TONOS
-   (#xB5 ?\u00B5) ;; MICRO SIGN
-   (#xB6 ?\u00B6) ;; PILCROW SIGN
-   (#xB7 ?\u00B7) ;; MIDDLE DOT
-   (#xB8 ?\u0388) ;; GREEK CAPITAL LETTER EPSILON WITH TONOS
-   (#xB9 ?\u0389) ;; GREEK CAPITAL LETTER ETA WITH TONOS
-   (#xBA ?\u038A) ;; GREEK CAPITAL LETTER IOTA WITH TONOS
-   (#xBB ?\u00BB) ;; RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-   (#xBC ?\u038C) ;; GREEK CAPITAL LETTER OMICRON WITH TONOS
-   (#xBD ?\u00BD) ;; VULGAR FRACTION ONE HALF
-   (#xBE ?\u038E) ;; GREEK CAPITAL LETTER UPSILON WITH TONOS
-   (#xBF ?\u038F) ;; GREEK CAPITAL LETTER OMEGA WITH TONOS
-   (#xC0 ?\u0390) ;; GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
-   (#xC1 ?\u0391) ;; GREEK CAPITAL LETTER ALPHA
-   (#xC2 ?\u0392) ;; GREEK CAPITAL LETTER BETA
-   (#xC3 ?\u0393) ;; GREEK CAPITAL LETTER GAMMA
-   (#xC4 ?\u0394) ;; GREEK CAPITAL LETTER DELTA
-   (#xC5 ?\u0395) ;; GREEK CAPITAL LETTER EPSILON
-   (#xC6 ?\u0396) ;; GREEK CAPITAL LETTER ZETA
-   (#xC7 ?\u0397) ;; GREEK CAPITAL LETTER ETA
-   (#xC8 ?\u0398) ;; GREEK CAPITAL LETTER THETA
-   (#xC9 ?\u0399) ;; GREEK CAPITAL LETTER IOTA
-   (#xCA ?\u039A) ;; GREEK CAPITAL LETTER KAPPA
-   (#xCB ?\u039B) ;; GREEK CAPITAL LETTER LAMDA
-   (#xCC ?\u039C) ;; GREEK CAPITAL LETTER MU
-   (#xCD ?\u039D) ;; GREEK CAPITAL LETTER NU
-   (#xCE ?\u039E) ;; GREEK CAPITAL LETTER XI
-   (#xCF ?\u039F) ;; GREEK CAPITAL LETTER OMICRON
-   (#xD0 ?\u03A0) ;; GREEK CAPITAL LETTER PI
-   (#xD1 ?\u03A1) ;; GREEK CAPITAL LETTER RHO
-   (#xD3 ?\u03A3) ;; GREEK CAPITAL LETTER SIGMA
-   (#xD4 ?\u03A4) ;; GREEK CAPITAL LETTER TAU
-   (#xD5 ?\u03A5) ;; GREEK CAPITAL LETTER UPSILON
-   (#xD6 ?\u03A6) ;; GREEK CAPITAL LETTER PHI
-   (#xD7 ?\u03A7) ;; GREEK CAPITAL LETTER CHI
-   (#xD8 ?\u03A8) ;; GREEK CAPITAL LETTER PSI
-   (#xD9 ?\u03A9) ;; GREEK CAPITAL LETTER OMEGA
-   (#xDA ?\u03AA) ;; GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
-   (#xDB ?\u03AB) ;; GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
-   (#xDC ?\u03AC) ;; GREEK SMALL LETTER ALPHA WITH TONOS
-   (#xDD ?\u03AD) ;; GREEK SMALL LETTER EPSILON WITH TONOS
-   (#xDE ?\u03AE) ;; GREEK SMALL LETTER ETA WITH TONOS
-   (#xDF ?\u03AF) ;; GREEK SMALL LETTER IOTA WITH TONOS
-   (#xE0 ?\u03B0) ;; GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
-   (#xE1 ?\u03B1) ;; GREEK SMALL LETTER ALPHA
-   (#xE2 ?\u03B2) ;; GREEK SMALL LETTER BETA
-   (#xE3 ?\u03B3) ;; GREEK SMALL LETTER GAMMA
-   (#xE4 ?\u03B4) ;; GREEK SMALL LETTER DELTA
-   (#xE5 ?\u03B5) ;; GREEK SMALL LETTER EPSILON
-   (#xE6 ?\u03B6) ;; GREEK SMALL LETTER ZETA
-   (#xE7 ?\u03B7) ;; GREEK SMALL LETTER ETA
-   (#xE8 ?\u03B8) ;; GREEK SMALL LETTER THETA
-   (#xE9 ?\u03B9) ;; GREEK SMALL LETTER IOTA
-   (#xEA ?\u03BA) ;; GREEK SMALL LETTER KAPPA
-   (#xEB ?\u03BB) ;; GREEK SMALL LETTER LAMDA
-   (#xEC ?\u03BC) ;; GREEK SMALL LETTER MU
-   (#xED ?\u03BD) ;; GREEK SMALL LETTER NU
-   (#xEE ?\u03BE) ;; GREEK SMALL LETTER XI
-   (#xEF ?\u03BF) ;; GREEK SMALL LETTER OMICRON
-   (#xF0 ?\u03C0) ;; GREEK SMALL LETTER PI
-   (#xF1 ?\u03C1) ;; GREEK SMALL LETTER RHO
-   (#xF2 ?\u03C2) ;; GREEK SMALL LETTER FINAL SIGMA
-   (#xF3 ?\u03C3) ;; GREEK SMALL LETTER SIGMA
-   (#xF4 ?\u03C4) ;; GREEK SMALL LETTER TAU
-   (#xF5 ?\u03C5) ;; GREEK SMALL LETTER UPSILON
-   (#xF6 ?\u03C6) ;; GREEK SMALL LETTER PHI
-   (#xF7 ?\u03C7) ;; GREEK SMALL LETTER CHI
-   (#xF8 ?\u03C8) ;; GREEK SMALL LETTER PSI
-   (#xF9 ?\u03C9) ;; GREEK SMALL LETTER OMEGA
-   (#xFA ?\u03CA) ;; GREEK SMALL LETTER IOTA WITH DIALYTIKA
-   (#xFB ?\u03CB) ;; GREEK SMALL LETTER UPSILON WITH DIALYTIKA
-   (#xFC ?\u03CC) ;; GREEK SMALL LETTER OMICRON WITH TONOS
-   (#xFD ?\u03CD) ;; GREEK SMALL LETTER UPSILON WITH TONOS
-   (#xFE ?\u03CE)) ;; GREEK SMALL LETTER OMEGA WITH TONOS
- "Microsoft's Code Page 1253, for monotonic Greek.  "
- '(mnemonic "GrkW"
+(make-coding-system 
+ 'windows-1253 'fixed-width "Microsoft's CP1253"
+ '(unicode-map
+   ((#x80 ?\u20AC) ;; EURO SIGN
+    (#x82 ?\u201A) ;; SINGLE LOW-9 QUOTATION MARK
+    (#x83 ?\u0192) ;; LATIN SMALL LETTER F WITH HOOK
+    (#x84 ?\u201E) ;; DOUBLE LOW-9 QUOTATION MARK
+    (#x85 ?\u2026) ;; HORIZONTAL ELLIPSIS
+    (#x86 ?\u2020) ;; DAGGER
+    (#x87 ?\u2021) ;; DOUBLE DAGGER
+    (#x89 ?\u2030) ;; PER MILLE SIGN
+    (#x8B ?\u2039) ;; SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+    (#x91 ?\u2018) ;; LEFT SINGLE QUOTATION MARK
+    (#x92 ?\u2019) ;; RIGHT SINGLE QUOTATION MARK
+    (#x93 ?\u201C) ;; LEFT DOUBLE QUOTATION MARK
+    (#x94 ?\u201D) ;; RIGHT DOUBLE QUOTATION MARK
+    (#x95 ?\u2022) ;; BULLET
+    (#x96 ?\u2013) ;; EN DASH
+    (#x97 ?\u2014) ;; EM DASH
+    (#x99 ?\u2122) ;; TRADE MARK SIGN
+    (#x9B ?\u203A) ;; SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+    (#xA0 ?\u00A0) ;; NO-BREAK SPACE
+    (#xA1 ?\u0385) ;; GREEK DIALYTIKA TONOS
+    (#xA2 ?\u0386) ;; GREEK CAPITAL LETTER ALPHA WITH TONOS
+    (#xA3 ?\u00A3) ;; POUND SIGN
+    (#xA4 ?\u00A4) ;; CURRENCY SIGN
+    (#xA5 ?\u00A5) ;; YEN SIGN
+    (#xA6 ?\u00A6) ;; BROKEN BAR
+    (#xA7 ?\u00A7) ;; SECTION SIGN
+    (#xA8 ?\u00A8) ;; DIAERESIS
+    (#xA9 ?\u00A9) ;; COPYRIGHT SIGN
+    (#xAB ?\u00AB) ;; LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    (#xAC ?\u00AC) ;; NOT SIGN
+    (#xAD ?\u00AD) ;; SOFT HYPHEN
+    (#xAE ?\u00AE) ;; REGISTERED SIGN
+    (#xAF ?\u2015) ;; HORIZONTAL BAR
+    (#xB0 ?\u00B0) ;; DEGREE SIGN
+    (#xB1 ?\u00B1) ;; PLUS-MINUS SIGN
+    (#xB2 ?\u00B2) ;; SUPERSCRIPT TWO
+    (#xB3 ?\u00B3) ;; SUPERSCRIPT THREE
+    (#xB4 ?\u0384) ;; GREEK TONOS
+    (#xB5 ?\u00B5) ;; MICRO SIGN
+    (#xB6 ?\u00B6) ;; PILCROW SIGN
+    (#xB7 ?\u00B7) ;; MIDDLE DOT
+    (#xB8 ?\u0388) ;; GREEK CAPITAL LETTER EPSILON WITH TONOS
+    (#xB9 ?\u0389) ;; GREEK CAPITAL LETTER ETA WITH TONOS
+    (#xBA ?\u038A) ;; GREEK CAPITAL LETTER IOTA WITH TONOS
+    (#xBB ?\u00BB) ;; RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    (#xBC ?\u038C) ;; GREEK CAPITAL LETTER OMICRON WITH TONOS
+    (#xBD ?\u00BD) ;; VULGAR FRACTION ONE HALF
+    (#xBE ?\u038E) ;; GREEK CAPITAL LETTER UPSILON WITH TONOS
+    (#xBF ?\u038F) ;; GREEK CAPITAL LETTER OMEGA WITH TONOS
+    (#xC0 ?\u0390) ;; GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+    (#xC1 ?\u0391) ;; GREEK CAPITAL LETTER ALPHA
+    (#xC2 ?\u0392) ;; GREEK CAPITAL LETTER BETA
+    (#xC3 ?\u0393) ;; GREEK CAPITAL LETTER GAMMA
+    (#xC4 ?\u0394) ;; GREEK CAPITAL LETTER DELTA
+    (#xC5 ?\u0395) ;; GREEK CAPITAL LETTER EPSILON
+    (#xC6 ?\u0396) ;; GREEK CAPITAL LETTER ZETA
+    (#xC7 ?\u0397) ;; GREEK CAPITAL LETTER ETA
+    (#xC8 ?\u0398) ;; GREEK CAPITAL LETTER THETA
+    (#xC9 ?\u0399) ;; GREEK CAPITAL LETTER IOTA
+    (#xCA ?\u039A) ;; GREEK CAPITAL LETTER KAPPA
+    (#xCB ?\u039B) ;; GREEK CAPITAL LETTER LAMDA
+    (#xCC ?\u039C) ;; GREEK CAPITAL LETTER MU
+    (#xCD ?\u039D) ;; GREEK CAPITAL LETTER NU
+    (#xCE ?\u039E) ;; GREEK CAPITAL LETTER XI
+    (#xCF ?\u039F) ;; GREEK CAPITAL LETTER OMICRON
+    (#xD0 ?\u03A0) ;; GREEK CAPITAL LETTER PI
+    (#xD1 ?\u03A1) ;; GREEK CAPITAL LETTER RHO
+    (#xD3 ?\u03A3) ;; GREEK CAPITAL LETTER SIGMA
+    (#xD4 ?\u03A4) ;; GREEK CAPITAL LETTER TAU
+    (#xD5 ?\u03A5) ;; GREEK CAPITAL LETTER UPSILON
+    (#xD6 ?\u03A6) ;; GREEK CAPITAL LETTER PHI
+    (#xD7 ?\u03A7) ;; GREEK CAPITAL LETTER CHI
+    (#xD8 ?\u03A8) ;; GREEK CAPITAL LETTER PSI
+    (#xD9 ?\u03A9) ;; GREEK CAPITAL LETTER OMEGA
+    (#xDA ?\u03AA) ;; GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
+    (#xDB ?\u03AB) ;; GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+    (#xDC ?\u03AC) ;; GREEK SMALL LETTER ALPHA WITH TONOS
+    (#xDD ?\u03AD) ;; GREEK SMALL LETTER EPSILON WITH TONOS
+    (#xDE ?\u03AE) ;; GREEK SMALL LETTER ETA WITH TONOS
+    (#xDF ?\u03AF) ;; GREEK SMALL LETTER IOTA WITH TONOS
+    (#xE0 ?\u03B0) ;; GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+    (#xE1 ?\u03B1) ;; GREEK SMALL LETTER ALPHA
+    (#xE2 ?\u03B2) ;; GREEK SMALL LETTER BETA
+    (#xE3 ?\u03B3) ;; GREEK SMALL LETTER GAMMA
+    (#xE4 ?\u03B4) ;; GREEK SMALL LETTER DELTA
+    (#xE5 ?\u03B5) ;; GREEK SMALL LETTER EPSILON
+    (#xE6 ?\u03B6) ;; GREEK SMALL LETTER ZETA
+    (#xE7 ?\u03B7) ;; GREEK SMALL LETTER ETA
+    (#xE8 ?\u03B8) ;; GREEK SMALL LETTER THETA
+    (#xE9 ?\u03B9) ;; GREEK SMALL LETTER IOTA
+    (#xEA ?\u03BA) ;; GREEK SMALL LETTER KAPPA
+    (#xEB ?\u03BB) ;; GREEK SMALL LETTER LAMDA
+    (#xEC ?\u03BC) ;; GREEK SMALL LETTER MU
+    (#xED ?\u03BD) ;; GREEK SMALL LETTER NU
+    (#xEE ?\u03BE) ;; GREEK SMALL LETTER XI
+    (#xEF ?\u03BF) ;; GREEK SMALL LETTER OMICRON
+    (#xF0 ?\u03C0) ;; GREEK SMALL LETTER PI
+    (#xF1 ?\u03C1) ;; GREEK SMALL LETTER RHO
+    (#xF2 ?\u03C2) ;; GREEK SMALL LETTER FINAL SIGMA
+    (#xF3 ?\u03C3) ;; GREEK SMALL LETTER SIGMA
+    (#xF4 ?\u03C4) ;; GREEK SMALL LETTER TAU
+    (#xF5 ?\u03C5) ;; GREEK SMALL LETTER UPSILON
+    (#xF6 ?\u03C6) ;; GREEK SMALL LETTER PHI
+    (#xF7 ?\u03C7) ;; GREEK SMALL LETTER CHI
+    (#xF8 ?\u03C8) ;; GREEK SMALL LETTER PSI
+    (#xF9 ?\u03C9) ;; GREEK SMALL LETTER OMEGA
+    (#xFA ?\u03CA) ;; GREEK SMALL LETTER IOTA WITH DIALYTIKA
+    (#xFB ?\u03CB) ;; GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+    (#xFC ?\u03CC) ;; GREEK SMALL LETTER OMICRON WITH TONOS
+    (#xFD ?\u03CD) ;; GREEK SMALL LETTER UPSILON WITH TONOS
+    (#xFE ?\u03CE)) ;; GREEK SMALL LETTER OMEGA WITH TONOS
+   mnemonic "GrkW"
    documentation
-   "This ASCII-compatible encoding is slightly incompatibile with
+   "Microsoft's Code Page 1253, for monotonic Greek.
+
+This ASCII-compatible encoding is slightly incompatibile with
 ISO-8859-7; it provides several widely-used punctuation marks in the C1
 ISO-2022 area, which makes it incompatbile with the latter standard, but
 that latter standard is not used in Greece,  "
--- a/lisp/mule/hebrew.el	Sat Sep 19 17:56:23 2009 +0200
+++ b/lisp/mule/hebrew.el	Sat Sep 19 22:53:13 2009 +0100
@@ -48,102 +48,102 @@
 (modify-syntax-entry (make-char 'hebrew-iso8859-8 32) "w") ; no-break space
 
 
-(make-8-bit-coding-system
- 'iso-8859-8
- '((#x80 ?\u0080) ;; <control>
-   (#x81 ?\u0081) ;; <control>
-   (#x82 ?\u0082) ;; <control>
-   (#x83 ?\u0083) ;; <control>
-   (#x84 ?\u0084) ;; <control>
-   (#x85 ?\u0085) ;; <control>
-   (#x86 ?\u0086) ;; <control>
-   (#x87 ?\u0087) ;; <control>
-   (#x88 ?\u0088) ;; <control>
-   (#x89 ?\u0089) ;; <control>
-   (#x8A ?\u008A) ;; <control>
-   (#x8B ?\u008B) ;; <control>
-   (#x8C ?\u008C) ;; <control>
-   (#x8D ?\u008D) ;; <control>
-   (#x8E ?\u008E) ;; <control>
-   (#x8F ?\u008F) ;; <control>
-   (#x90 ?\u0090) ;; <control>
-   (#x91 ?\u0091) ;; <control>
-   (#x92 ?\u0092) ;; <control>
-   (#x93 ?\u0093) ;; <control>
-   (#x94 ?\u0094) ;; <control>
-   (#x95 ?\u0095) ;; <control>
-   (#x96 ?\u0096) ;; <control>
-   (#x97 ?\u0097) ;; <control>
-   (#x98 ?\u0098) ;; <control>
-   (#x99 ?\u0099) ;; <control>
-   (#x9A ?\u009A) ;; <control>
-   (#x9B ?\u009B) ;; <control>
-   (#x9C ?\u009C) ;; <control>
-   (#x9D ?\u009D) ;; <control>
-   (#x9E ?\u009E) ;; <control>
-   (#x9F ?\u009F) ;; <control>
-   (#xA0 ?\u00A0) ;; NO-BREAK SPACE
-   (#xA2 ?\u00A2) ;; CENT SIGN
-   (#xA3 ?\u00A3) ;; POUND SIGN
-   (#xA4 ?\u00A4) ;; CURRENCY SIGN
-   (#xA5 ?\u00A5) ;; YEN SIGN
-   (#xA6 ?\u00A6) ;; BROKEN BAR
-   (#xA7 ?\u00A7) ;; SECTION SIGN
-   (#xA8 ?\u00A8) ;; DIAERESIS
-   (#xA9 ?\u00A9) ;; COPYRIGHT SIGN
-   (#xAA ?\u00D7) ;; MULTIPLICATION SIGN
-   (#xAB ?\u00AB) ;; LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-   (#xAC ?\u00AC) ;; NOT SIGN
-   (#xAD ?\u00AD) ;; SOFT HYPHEN
-   (#xAE ?\u00AE) ;; REGISTERED SIGN
-   (#xAF ?\u00AF) ;; MACRON
-   (#xB0 ?\u00B0) ;; DEGREE SIGN
-   (#xB1 ?\u00B1) ;; PLUS-MINUS SIGN
-   (#xB2 ?\u00B2) ;; SUPERSCRIPT TWO
-   (#xB3 ?\u00B3) ;; SUPERSCRIPT THREE
-   (#xB4 ?\u00B4) ;; ACUTE ACCENT
-   (#xB5 ?\u00B5) ;; MICRO SIGN
-   (#xB6 ?\u00B6) ;; PILCROW SIGN
-   (#xB7 ?\u00B7) ;; MIDDLE DOT
-   (#xB8 ?\u00B8) ;; CEDILLA
-   (#xB9 ?\u00B9) ;; SUPERSCRIPT ONE
-   (#xBA ?\u00F7) ;; DIVISION SIGN
-   (#xBB ?\u00BB) ;; RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-   (#xBC ?\u00BC) ;; VULGAR FRACTION ONE QUARTER
-   (#xBD ?\u00BD) ;; VULGAR FRACTION ONE HALF
-   (#xBE ?\u00BE) ;; VULGAR FRACTION THREE QUARTERS
-   (#xDF ?\u2017) ;; DOUBLE LOW LINE
-   (#xE0 ?\u05D0) ;; HEBREW LETTER ALEF
-   (#xE1 ?\u05D1) ;; HEBREW LETTER BET
-   (#xE2 ?\u05D2) ;; HEBREW LETTER GIMEL
-   (#xE3 ?\u05D3) ;; HEBREW LETTER DALET
-   (#xE4 ?\u05D4) ;; HEBREW LETTER HE
-   (#xE5 ?\u05D5) ;; HEBREW LETTER VAV
-   (#xE6 ?\u05D6) ;; HEBREW LETTER ZAYIN
-   (#xE7 ?\u05D7) ;; HEBREW LETTER HET
-   (#xE8 ?\u05D8) ;; HEBREW LETTER TET
-   (#xE9 ?\u05D9) ;; HEBREW LETTER YOD
-   (#xEA ?\u05DA) ;; HEBREW LETTER FINAL KAF
-   (#xEB ?\u05DB) ;; HEBREW LETTER KAF
-   (#xEC ?\u05DC) ;; HEBREW LETTER LAMED
-   (#xED ?\u05DD) ;; HEBREW LETTER FINAL MEM
-   (#xEE ?\u05DE) ;; HEBREW LETTER MEM
-   (#xEF ?\u05DF) ;; HEBREW LETTER FINAL NUN
-   (#xF0 ?\u05E0) ;; HEBREW LETTER NUN
-   (#xF1 ?\u05E1) ;; HEBREW LETTER SAMEKH
-   (#xF2 ?\u05E2) ;; HEBREW LETTER AYIN
-   (#xF3 ?\u05E3) ;; HEBREW LETTER FINAL PE
-   (#xF4 ?\u05E4) ;; HEBREW LETTER PE
-   (#xF5 ?\u05E5) ;; HEBREW LETTER FINAL TSADI
-   (#xF6 ?\u05E6) ;; HEBREW LETTER TSADI
-   (#xF7 ?\u05E7) ;; HEBREW LETTER QOF
-   (#xF8 ?\u05E8) ;; HEBREW LETTER RESH
-   (#xF9 ?\u05E9) ;; HEBREW LETTER SHIN
-   (#xFA ?\u05EA) ;; HEBREW LETTER TAV
-   (#xFD ?\u200E) ;; LEFT-TO-RIGHT MARK
-   (#xFE ?\u200F)) ;; RIGHT-TO-LEFT MARK
- "ISO-8859-8 (Hebrew)"
- '(mnemonic "MIME/Hbrw"))
+(make-coding-system
+ 'iso-8859-8 'fixed-width "ISO-8859-8 (Hebrew)"
+ '(unicode-map
+   ((#x80 ?\u0080) ;; <control>
+    (#x81 ?\u0081) ;; <control>
+    (#x82 ?\u0082) ;; <control>
+    (#x83 ?\u0083) ;; <control>
+    (#x84 ?\u0084) ;; <control>
+    (#x85 ?\u0085) ;; <control>
+    (#x86 ?\u0086) ;; <control>
+    (#x87 ?\u0087) ;; <control>
+    (#x88 ?\u0088) ;; <control>
+    (#x89 ?\u0089) ;; <control>
+    (#x8A ?\u008A) ;; <control>
+    (#x8B ?\u008B) ;; <control>
+    (#x8C ?\u008C) ;; <control>
+    (#x8D ?\u008D) ;; <control>
+    (#x8E ?\u008E) ;; <control>
+    (#x8F ?\u008F) ;; <control>
+    (#x90 ?\u0090) ;; <control>
+    (#x91 ?\u0091) ;; <control>
+    (#x92 ?\u0092) ;; <control>
+    (#x93 ?\u0093) ;; <control>
+    (#x94 ?\u0094) ;; <control>
+    (#x95 ?\u0095) ;; <control>
+    (#x96 ?\u0096) ;; <control>
+    (#x97 ?\u0097) ;; <control>
+    (#x98 ?\u0098) ;; <control>
+    (#x99 ?\u0099) ;; <control>
+    (#x9A ?\u009A) ;; <control>
+    (#x9B ?\u009B) ;; <control>
+    (#x9C ?\u009C) ;; <control>
+    (#x9D ?\u009D) ;; <control>
+    (#x9E ?\u009E) ;; <control>
+    (#x9F ?\u009F) ;; <control>
+    (#xA0 ?\u00A0) ;; NO-BREAK SPACE
+    (#xA2 ?\u00A2) ;; CENT SIGN
+    (#xA3 ?\u00A3) ;; POUND SIGN
+    (#xA4 ?\u00A4) ;; CURRENCY SIGN
+    (#xA5 ?\u00A5) ;; YEN SIGN
+    (#xA6 ?\u00A6) ;; BROKEN BAR
+    (#xA7 ?\u00A7) ;; SECTION SIGN
+    (#xA8 ?\u00A8) ;; DIAERESIS
+    (#xA9 ?\u00A9) ;; COPYRIGHT SIGN
+    (#xAA ?\u00D7) ;; MULTIPLICATION SIGN
+    (#xAB ?\u00AB) ;; LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    (#xAC ?\u00AC) ;; NOT SIGN
+    (#xAD ?\u00AD) ;; SOFT HYPHEN
+    (#xAE ?\u00AE) ;; REGISTERED SIGN
+    (#xAF ?\u00AF) ;; MACRON
+    (#xB0 ?\u00B0) ;; DEGREE SIGN
+    (#xB1 ?\u00B1) ;; PLUS-MINUS SIGN
+    (#xB2 ?\u00B2) ;; SUPERSCRIPT TWO
+    (#xB3 ?\u00B3) ;; SUPERSCRIPT THREE
+    (#xB4 ?\u00B4) ;; ACUTE ACCENT
+    (#xB5 ?\u00B5) ;; MICRO SIGN
+    (#xB6 ?\u00B6) ;; PILCROW SIGN
+    (#xB7 ?\u00B7) ;; MIDDLE DOT
+    (#xB8 ?\u00B8) ;; CEDILLA
+    (#xB9 ?\u00B9) ;; SUPERSCRIPT ONE
+    (#xBA ?\u00F7) ;; DIVISION SIGN
+    (#xBB ?\u00BB) ;; RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    (#xBC ?\u00BC) ;; VULGAR FRACTION ONE QUARTER
+    (#xBD ?\u00BD) ;; VULGAR FRACTION ONE HALF
+    (#xBE ?\u00BE) ;; VULGAR FRACTION THREE QUARTERS
+    (#xDF ?\u2017) ;; DOUBLE LOW LINE
+    (#xE0 ?\u05D0) ;; HEBREW LETTER ALEF
+    (#xE1 ?\u05D1) ;; HEBREW LETTER BET
+    (#xE2 ?\u05D2) ;; HEBREW LETTER GIMEL
+    (#xE3 ?\u05D3) ;; HEBREW LETTER DALET
+    (#xE4 ?\u05D4) ;; HEBREW LETTER HE
+    (#xE5 ?\u05D5) ;; HEBREW LETTER VAV
+    (#xE6 ?\u05D6) ;; HEBREW LETTER ZAYIN
+    (#xE7 ?\u05D7) ;; HEBREW LETTER HET
+    (#xE8 ?\u05D8) ;; HEBREW LETTER TET
+    (#xE9 ?\u05D9) ;; HEBREW LETTER YOD
+    (#xEA ?\u05DA) ;; HEBREW LETTER FINAL KAF
+    (#xEB ?\u05DB) ;; HEBREW LETTER KAF
+    (#xEC ?\u05DC) ;; HEBREW LETTER LAMED
+    (#xED ?\u05DD) ;; HEBREW LETTER FINAL MEM
+    (#xEE ?\u05DE) ;; HEBREW LETTER MEM
+    (#xEF ?\u05DF) ;; HEBREW LETTER FINAL NUN
+    (#xF0 ?\u05E0) ;; HEBREW LETTER NUN
+    (#xF1 ?\u05E1) ;; HEBREW LETTER SAMEKH
+    (#xF2 ?\u05E2) ;; HEBREW LETTER AYIN
+    (#xF3 ?\u05E3) ;; HEBREW LETTER FINAL PE
+    (#xF4 ?\u05E4) ;; HEBREW LETTER PE
+    (#xF5 ?\u05E5) ;; HEBREW LETTER FINAL TSADI
+    (#xF6 ?\u05E6) ;; HEBREW LETTER TSADI
+    (#xF7 ?\u05E7) ;; HEBREW LETTER QOF
+    (#xF8 ?\u05E8) ;; HEBREW LETTER RESH
+    (#xF9 ?\u05E9) ;; HEBREW LETTER SHIN
+    (#xFA ?\u05EA) ;; HEBREW LETTER TAV
+    (#xFD ?\u200E) ;; LEFT-TO-RIGHT MARK
+    (#xFE ?\u200F)) ;; RIGHT-TO-LEFT MARK
+   mnemonic "MIME/Hbrw"))
 
 (make-coding-system
  'ctext-hebrew 'iso2022
--- a/lisp/mule/latin.el	Sat Sep 19 17:56:23 2009 +0200
+++ b/lisp/mule/latin.el	Sat Sep 19 22:53:13 2009 +0100
@@ -124,270 +124,273 @@
    (#xDD #xFD) ;; Y WITH ACUTE
    (#xDE #xFE))) ;; T WITH CEDILLA
 
-(make-8-bit-coding-system
- 'iso-8859-2
- '((#x80 ?\u0080) ;; <control>
-   (#x81 ?\u0081) ;; <control>
-   (#x82 ?\u0082) ;; <control>
-   (#x83 ?\u0083) ;; <control>
-   (#x84 ?\u0084) ;; <control>
-   (#x85 ?\u0085) ;; <control>
-   (#x86 ?\u0086) ;; <control>
-   (#x87 ?\u0087) ;; <control>
-   (#x88 ?\u0088) ;; <control>
-   (#x89 ?\u0089) ;; <control>
-   (#x8A ?\u008A) ;; <control>
-   (#x8B ?\u008B) ;; <control>
-   (#x8C ?\u008C) ;; <control>
-   (#x8D ?\u008D) ;; <control>
-   (#x8E ?\u008E) ;; <control>
-   (#x8F ?\u008F) ;; <control>
-   (#x90 ?\u0090) ;; <control>
-   (#x91 ?\u0091) ;; <control>
-   (#x92 ?\u0092) ;; <control>
-   (#x93 ?\u0093) ;; <control>
-   (#x94 ?\u0094) ;; <control>
-   (#x95 ?\u0095) ;; <control>
-   (#x96 ?\u0096) ;; <control>
-   (#x97 ?\u0097) ;; <control>
-   (#x98 ?\u0098) ;; <control>
-   (#x99 ?\u0099) ;; <control>
-   (#x9A ?\u009A) ;; <control>
-   (#x9B ?\u009B) ;; <control>
-   (#x9C ?\u009C) ;; <control>
-   (#x9D ?\u009D) ;; <control>
-   (#x9E ?\u009E) ;; <control>
-   (#x9F ?\u009F) ;; <control>
-   (#xA0 ?\u00A0) ;; NO-BREAK SPACE
-   (#xA1 ?\u0104) ;; LATIN CAPITAL LETTER A WITH OGONEK
-   (#xA2 ?\u02D8) ;; BREVE
-   (#xA3 ?\u0141) ;; LATIN CAPITAL LETTER L WITH STROKE
-   (#xA4 ?\u00A4) ;; CURRENCY SIGN
-   (#xA5 ?\u013D) ;; LATIN CAPITAL LETTER L WITH CARON
-   (#xA6 ?\u015A) ;; LATIN CAPITAL LETTER S WITH ACUTE
-   (#xA7 ?\u00A7) ;; SECTION SIGN
-   (#xA8 ?\u00A8) ;; DIAERESIS
-   (#xA9 ?\u0160) ;; LATIN CAPITAL LETTER S WITH CARON
-   (#xAA ?\u015E) ;; LATIN CAPITAL LETTER S WITH CEDILLA
-   (#xAB ?\u0164) ;; LATIN CAPITAL LETTER T WITH CARON
-   (#xAC ?\u0179) ;; LATIN CAPITAL LETTER Z WITH ACUTE
-   (#xAD ?\u00AD) ;; SOFT HYPHEN
-   (#xAE ?\u017D) ;; LATIN CAPITAL LETTER Z WITH CARON
-   (#xAF ?\u017B) ;; LATIN CAPITAL LETTER Z WITH DOT ABOVE
-   (#xB0 ?\u00B0) ;; DEGREE SIGN
-   (#xB1 ?\u0105) ;; LATIN SMALL LETTER A WITH OGONEK
-   (#xB2 ?\u02DB) ;; OGONEK
-   (#xB3 ?\u0142) ;; LATIN SMALL LETTER L WITH STROKE
-   (#xB4 ?\u00B4) ;; ACUTE ACCENT
-   (#xB5 ?\u013E) ;; LATIN SMALL LETTER L WITH CARON
-   (#xB6 ?\u015B) ;; LATIN SMALL LETTER S WITH ACUTE
-   (#xB7 ?\u02C7) ;; CARON
-   (#xB8 ?\u00B8) ;; CEDILLA
-   (#xB9 ?\u0161) ;; LATIN SMALL LETTER S WITH CARON
-   (#xBA ?\u015F) ;; LATIN SMALL LETTER S WITH CEDILLA
-   (#xBB ?\u0165) ;; LATIN SMALL LETTER T WITH CARON
-   (#xBC ?\u017A) ;; LATIN SMALL LETTER Z WITH ACUTE
-   (#xBD ?\u02DD) ;; DOUBLE ACUTE ACCENT
-   (#xBE ?\u017E) ;; LATIN SMALL LETTER Z WITH CARON
-   (#xBF ?\u017C) ;; LATIN SMALL LETTER Z WITH DOT ABOVE
-   (#xC0 ?\u0154) ;; LATIN CAPITAL LETTER R WITH ACUTE
-   (#xC1 ?\u00C1) ;; LATIN CAPITAL LETTER A WITH ACUTE
-   (#xC2 ?\u00C2) ;; LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-   (#xC3 ?\u0102) ;; LATIN CAPITAL LETTER A WITH BREVE
-   (#xC4 ?\u00C4) ;; LATIN CAPITAL LETTER A WITH DIAERESIS
-   (#xC5 ?\u0139) ;; LATIN CAPITAL LETTER L WITH ACUTE
-   (#xC6 ?\u0106) ;; LATIN CAPITAL LETTER C WITH ACUTE
-   (#xC7 ?\u00C7) ;; LATIN CAPITAL LETTER C WITH CEDILLA
-   (#xC8 ?\u010C) ;; LATIN CAPITAL LETTER C WITH CARON
-   (#xC9 ?\u00C9) ;; LATIN CAPITAL LETTER E WITH ACUTE
-   (#xCA ?\u0118) ;; LATIN CAPITAL LETTER E WITH OGONEK
-   (#xCB ?\u00CB) ;; LATIN CAPITAL LETTER E WITH DIAERESIS
-   (#xCC ?\u011A) ;; LATIN CAPITAL LETTER E WITH CARON
-   (#xCD ?\u00CD) ;; LATIN CAPITAL LETTER I WITH ACUTE
-   (#xCE ?\u00CE) ;; LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-   (#xCF ?\u010E) ;; LATIN CAPITAL LETTER D WITH CARON
-   (#xD0 ?\u0110) ;; LATIN CAPITAL LETTER D WITH STROKE
-   (#xD1 ?\u0143) ;; LATIN CAPITAL LETTER N WITH ACUTE
-   (#xD2 ?\u0147) ;; LATIN CAPITAL LETTER N WITH CARON
-   (#xD3 ?\u00D3) ;; LATIN CAPITAL LETTER O WITH ACUTE
-   (#xD4 ?\u00D4) ;; LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-   (#xD5 ?\u0150) ;; LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
-   (#xD6 ?\u00D6) ;; LATIN CAPITAL LETTER O WITH DIAERESIS
-   (#xD7 ?\u00D7) ;; MULTIPLICATION SIGN
-   (#xD8 ?\u0158) ;; LATIN CAPITAL LETTER R WITH CARON
-   (#xD9 ?\u016E) ;; LATIN CAPITAL LETTER U WITH RING ABOVE
-   (#xDA ?\u00DA) ;; LATIN CAPITAL LETTER U WITH ACUTE
-   (#xDB ?\u0170) ;; LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
-   (#xDC ?\u00DC) ;; LATIN CAPITAL LETTER U WITH DIAERESIS
-   (#xDD ?\u00DD) ;; LATIN CAPITAL LETTER Y WITH ACUTE
-   (#xDE ?\u0162) ;; LATIN CAPITAL LETTER T WITH CEDILLA
-   (#xDF ?\u00DF) ;; LATIN SMALL LETTER SHARP S
-   (#xE0 ?\u0155) ;; LATIN SMALL LETTER R WITH ACUTE
-   (#xE1 ?\u00E1) ;; LATIN SMALL LETTER A WITH ACUTE
-   (#xE2 ?\u00E2) ;; LATIN SMALL LETTER A WITH CIRCUMFLEX
-   (#xE3 ?\u0103) ;; LATIN SMALL LETTER A WITH BREVE
-   (#xE4 ?\u00E4) ;; LATIN SMALL LETTER A WITH DIAERESIS
-   (#xE5 ?\u013A) ;; LATIN SMALL LETTER L WITH ACUTE
-   (#xE6 ?\u0107) ;; LATIN SMALL LETTER C WITH ACUTE
-   (#xE7 ?\u00E7) ;; LATIN SMALL LETTER C WITH CEDILLA
-   (#xE8 ?\u010D) ;; LATIN SMALL LETTER C WITH CARON
-   (#xE9 ?\u00E9) ;; LATIN SMALL LETTER E WITH ACUTE
-   (#xEA ?\u0119) ;; LATIN SMALL LETTER E WITH OGONEK
-   (#xEB ?\u00EB) ;; LATIN SMALL LETTER E WITH DIAERESIS
-   (#xEC ?\u011B) ;; LATIN SMALL LETTER E WITH CARON
-   (#xED ?\u00ED) ;; LATIN SMALL LETTER I WITH ACUTE
-   (#xEE ?\u00EE) ;; LATIN SMALL LETTER I WITH CIRCUMFLEX
-   (#xEF ?\u010F) ;; LATIN SMALL LETTER D WITH CARON
-   (#xF0 ?\u0111) ;; LATIN SMALL LETTER D WITH STROKE
-   (#xF1 ?\u0144) ;; LATIN SMALL LETTER N WITH ACUTE
-   (#xF2 ?\u0148) ;; LATIN SMALL LETTER N WITH CARON
-   (#xF3 ?\u00F3) ;; LATIN SMALL LETTER O WITH ACUTE
-   (#xF4 ?\u00F4) ;; LATIN SMALL LETTER O WITH CIRCUMFLEX
-   (#xF5 ?\u0151) ;; LATIN SMALL LETTER O WITH DOUBLE ACUTE
-   (#xF6 ?\u00F6) ;; LATIN SMALL LETTER O WITH DIAERESIS
-   (#xF7 ?\u00F7) ;; DIVISION SIGN
-   (#xF8 ?\u0159) ;; LATIN SMALL LETTER R WITH CARON
-   (#xF9 ?\u016F) ;; LATIN SMALL LETTER U WITH RING ABOVE
-   (#xFA ?\u00FA) ;; LATIN SMALL LETTER U WITH ACUTE
-   (#xFB ?\u0171) ;; LATIN SMALL LETTER U WITH DOUBLE ACUTE
-   (#xFC ?\u00FC) ;; LATIN SMALL LETTER U WITH DIAERESIS
-   (#xFD ?\u00FD) ;; LATIN SMALL LETTER Y WITH ACUTE
-   (#xFE ?\u0163) ;; LATIN SMALL LETTER T WITH CEDILLA
-   (#xFF ?\u02D9)) ;; DOT ABOVE
-  "ISO-8859-2 (Latin-2) for Central Europe.
+(make-coding-system
+ 'iso-8859-2 'fixed-width "ISO-8859-2 (Latin-2)"
+ '(unicode-map
+   ((#x80 ?\u0080) ;; <control>
+    (#x81 ?\u0081) ;; <control>
+    (#x82 ?\u0082) ;; <control>
+    (#x83 ?\u0083) ;; <control>
+    (#x84 ?\u0084) ;; <control>
+    (#x85 ?\u0085) ;; <control>
+    (#x86 ?\u0086) ;; <control>
+    (#x87 ?\u0087) ;; <control>
+    (#x88 ?\u0088) ;; <control>
+    (#x89 ?\u0089) ;; <control>
+    (#x8A ?\u008A) ;; <control>
+    (#x8B ?\u008B) ;; <control>
+    (#x8C ?\u008C) ;; <control>
+    (#x8D ?\u008D) ;; <control>
+    (#x8E ?\u008E) ;; <control>
+    (#x8F ?\u008F) ;; <control>
+    (#x90 ?\u0090) ;; <control>
+    (#x91 ?\u0091) ;; <control>
+    (#x92 ?\u0092) ;; <control>
+    (#x93 ?\u0093) ;; <control>
+    (#x94 ?\u0094) ;; <control>
+    (#x95 ?\u0095) ;; <control>
+    (#x96 ?\u0096) ;; <control>
+    (#x97 ?\u0097) ;; <control>
+    (#x98 ?\u0098) ;; <control>
+    (#x99 ?\u0099) ;; <control>
+    (#x9A ?\u009A) ;; <control>
+    (#x9B ?\u009B) ;; <control>
+    (#x9C ?\u009C) ;; <control>
+    (#x9D ?\u009D) ;; <control>
+    (#x9E ?\u009E) ;; <control>
+    (#x9F ?\u009F) ;; <control>
+    (#xA0 ?\u00A0) ;; NO-BREAK SPACE
+    (#xA1 ?\u0104) ;; LATIN CAPITAL LETTER A WITH OGONEK
+    (#xA2 ?\u02D8) ;; BREVE
+    (#xA3 ?\u0141) ;; LATIN CAPITAL LETTER L WITH STROKE
+    (#xA4 ?\u00A4) ;; CURRENCY SIGN
+    (#xA5 ?\u013D) ;; LATIN CAPITAL LETTER L WITH CARON
+    (#xA6 ?\u015A) ;; LATIN CAPITAL LETTER S WITH ACUTE
+    (#xA7 ?\u00A7) ;; SECTION SIGN
+    (#xA8 ?\u00A8) ;; DIAERESIS
+    (#xA9 ?\u0160) ;; LATIN CAPITAL LETTER S WITH CARON
+    (#xAA ?\u015E) ;; LATIN CAPITAL LETTER S WITH CEDILLA
+    (#xAB ?\u0164) ;; LATIN CAPITAL LETTER T WITH CARON
+    (#xAC ?\u0179) ;; LATIN CAPITAL LETTER Z WITH ACUTE
+    (#xAD ?\u00AD) ;; SOFT HYPHEN
+    (#xAE ?\u017D) ;; LATIN CAPITAL LETTER Z WITH CARON
+    (#xAF ?\u017B) ;; LATIN CAPITAL LETTER Z WITH DOT ABOVE
+    (#xB0 ?\u00B0) ;; DEGREE SIGN
+    (#xB1 ?\u0105) ;; LATIN SMALL LETTER A WITH OGONEK
+    (#xB2 ?\u02DB) ;; OGONEK
+    (#xB3 ?\u0142) ;; LATIN SMALL LETTER L WITH STROKE
+    (#xB4 ?\u00B4) ;; ACUTE ACCENT
+    (#xB5 ?\u013E) ;; LATIN SMALL LETTER L WITH CARON
+    (#xB6 ?\u015B) ;; LATIN SMALL LETTER S WITH ACUTE
+    (#xB7 ?\u02C7) ;; CARON
+    (#xB8 ?\u00B8) ;; CEDILLA
+    (#xB9 ?\u0161) ;; LATIN SMALL LETTER S WITH CARON
+    (#xBA ?\u015F) ;; LATIN SMALL LETTER S WITH CEDILLA
+    (#xBB ?\u0165) ;; LATIN SMALL LETTER T WITH CARON
+    (#xBC ?\u017A) ;; LATIN SMALL LETTER Z WITH ACUTE
+    (#xBD ?\u02DD) ;; DOUBLE ACUTE ACCENT
+    (#xBE ?\u017E) ;; LATIN SMALL LETTER Z WITH CARON
+    (#xBF ?\u017C) ;; LATIN SMALL LETTER Z WITH DOT ABOVE
+    (#xC0 ?\u0154) ;; LATIN CAPITAL LETTER R WITH ACUTE
+    (#xC1 ?\u00C1) ;; LATIN CAPITAL LETTER A WITH ACUTE
+    (#xC2 ?\u00C2) ;; LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    (#xC3 ?\u0102) ;; LATIN CAPITAL LETTER A WITH BREVE
+    (#xC4 ?\u00C4) ;; LATIN CAPITAL LETTER A WITH DIAERESIS
+    (#xC5 ?\u0139) ;; LATIN CAPITAL LETTER L WITH ACUTE
+    (#xC6 ?\u0106) ;; LATIN CAPITAL LETTER C WITH ACUTE
+    (#xC7 ?\u00C7) ;; LATIN CAPITAL LETTER C WITH CEDILLA
+    (#xC8 ?\u010C) ;; LATIN CAPITAL LETTER C WITH CARON
+    (#xC9 ?\u00C9) ;; LATIN CAPITAL LETTER E WITH ACUTE
+    (#xCA ?\u0118) ;; LATIN CAPITAL LETTER E WITH OGONEK
+    (#xCB ?\u00CB) ;; LATIN CAPITAL LETTER E WITH DIAERESIS
+    (#xCC ?\u011A) ;; LATIN CAPITAL LETTER E WITH CARON
+    (#xCD ?\u00CD) ;; LATIN CAPITAL LETTER I WITH ACUTE
+    (#xCE ?\u00CE) ;; LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    (#xCF ?\u010E) ;; LATIN CAPITAL LETTER D WITH CARON
+    (#xD0 ?\u0110) ;; LATIN CAPITAL LETTER D WITH STROKE
+    (#xD1 ?\u0143) ;; LATIN CAPITAL LETTER N WITH ACUTE
+    (#xD2 ?\u0147) ;; LATIN CAPITAL LETTER N WITH CARON
+    (#xD3 ?\u00D3) ;; LATIN CAPITAL LETTER O WITH ACUTE
+    (#xD4 ?\u00D4) ;; LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    (#xD5 ?\u0150) ;; LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+    (#xD6 ?\u00D6) ;; LATIN CAPITAL LETTER O WITH DIAERESIS
+    (#xD7 ?\u00D7) ;; MULTIPLICATION SIGN
+    (#xD8 ?\u0158) ;; LATIN CAPITAL LETTER R WITH CARON
+    (#xD9 ?\u016E) ;; LATIN CAPITAL LETTER U WITH RING ABOVE
+    (#xDA ?\u00DA) ;; LATIN CAPITAL LETTER U WITH ACUTE
+    (#xDB ?\u0170) ;; LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+    (#xDC ?\u00DC) ;; LATIN CAPITAL LETTER U WITH DIAERESIS
+    (#xDD ?\u00DD) ;; LATIN CAPITAL LETTER Y WITH ACUTE
+    (#xDE ?\u0162) ;; LATIN CAPITAL LETTER T WITH CEDILLA
+    (#xDF ?\u00DF) ;; LATIN SMALL LETTER SHARP S
+    (#xE0 ?\u0155) ;; LATIN SMALL LETTER R WITH ACUTE
+    (#xE1 ?\u00E1) ;; LATIN SMALL LETTER A WITH ACUTE
+    (#xE2 ?\u00E2) ;; LATIN SMALL LETTER A WITH CIRCUMFLEX
+    (#xE3 ?\u0103) ;; LATIN SMALL LETTER A WITH BREVE
+    (#xE4 ?\u00E4) ;; LATIN SMALL LETTER A WITH DIAERESIS
+    (#xE5 ?\u013A) ;; LATIN SMALL LETTER L WITH ACUTE
+    (#xE6 ?\u0107) ;; LATIN SMALL LETTER C WITH ACUTE
+    (#xE7 ?\u00E7) ;; LATIN SMALL LETTER C WITH CEDILLA
+    (#xE8 ?\u010D) ;; LATIN SMALL LETTER C WITH CARON
+    (#xE9 ?\u00E9) ;; LATIN SMALL LETTER E WITH ACUTE
+    (#xEA ?\u0119) ;; LATIN SMALL LETTER E WITH OGONEK
+    (#xEB ?\u00EB) ;; LATIN SMALL LETTER E WITH DIAERESIS
+    (#xEC ?\u011B) ;; LATIN SMALL LETTER E WITH CARON
+    (#xED ?\u00ED) ;; LATIN SMALL LETTER I WITH ACUTE
+    (#xEE ?\u00EE) ;; LATIN SMALL LETTER I WITH CIRCUMFLEX
+    (#xEF ?\u010F) ;; LATIN SMALL LETTER D WITH CARON
+    (#xF0 ?\u0111) ;; LATIN SMALL LETTER D WITH STROKE
+    (#xF1 ?\u0144) ;; LATIN SMALL LETTER N WITH ACUTE
+    (#xF2 ?\u0148) ;; LATIN SMALL LETTER N WITH CARON
+    (#xF3 ?\u00F3) ;; LATIN SMALL LETTER O WITH ACUTE
+    (#xF4 ?\u00F4) ;; LATIN SMALL LETTER O WITH CIRCUMFLEX
+    (#xF5 ?\u0151) ;; LATIN SMALL LETTER O WITH DOUBLE ACUTE
+    (#xF6 ?\u00F6) ;; LATIN SMALL LETTER O WITH DIAERESIS
+    (#xF7 ?\u00F7) ;; DIVISION SIGN
+    (#xF8 ?\u0159) ;; LATIN SMALL LETTER R WITH CARON
+    (#xF9 ?\u016F) ;; LATIN SMALL LETTER U WITH RING ABOVE
+    (#xFA ?\u00FA) ;; LATIN SMALL LETTER U WITH ACUTE
+    (#xFB ?\u0171) ;; LATIN SMALL LETTER U WITH DOUBLE ACUTE
+    (#xFC ?\u00FC) ;; LATIN SMALL LETTER U WITH DIAERESIS
+    (#xFD ?\u00FD) ;; LATIN SMALL LETTER Y WITH ACUTE
+    (#xFE ?\u0163) ;; LATIN SMALL LETTER T WITH CEDILLA
+    (#xFF ?\u02D9)) ;; DOT ABOVE
+   documentation "ISO-8859-2 (Latin-2) for Central Europe.
 See also `windows-1250', and `iso-8859-1', which is compatible with Latin 2
 when used to write German (or English, of course).  "
- '(mnemonic "Latin 2"
+   mnemonic "Latin 2"
    aliases (iso-latin-2 latin-2)))
 
-(make-8-bit-coding-system
- 'windows-1250
- '((#x80 ?\u20AC) ;; EURO SIGN
-   (#x82 ?\u201A) ;; SINGLE LOW-9 QUOTATION MARK
-   (#x84 ?\u201E) ;; DOUBLE LOW-9 QUOTATION MARK
-   (#x85 ?\u2026) ;; HORIZONTAL ELLIPSIS
-   (#x86 ?\u2020) ;; DAGGER
-   (#x87 ?\u2021) ;; DOUBLE DAGGER
-   (#x89 ?\u2030) ;; PER MILLE SIGN
-   (#x8A ?\u0160) ;; LATIN CAPITAL LETTER S WITH CARON
-   (#x8B ?\u2039) ;; SINGLE LEFT-POINTING ANGLE QUOTATION MARK
-   (#x8C ?\u015A) ;; LATIN CAPITAL LETTER S WITH ACUTE
-   (#x8D ?\u0164) ;; LATIN CAPITAL LETTER T WITH CARON
-   (#x8E ?\u017D) ;; LATIN CAPITAL LETTER Z WITH CARON
-   (#x8F ?\u0179) ;; LATIN CAPITAL LETTER Z WITH ACUTE
-   (#x91 ?\u2018) ;; LEFT SINGLE QUOTATION MARK
-   (#x92 ?\u2019) ;; RIGHT SINGLE QUOTATION MARK
-   (#x93 ?\u201C) ;; LEFT DOUBLE QUOTATION MARK
-   (#x94 ?\u201D) ;; RIGHT DOUBLE QUOTATION MARK
-   (#x95 ?\u2022) ;; BULLET
-   (#x96 ?\u2013) ;; EN DASH
-   (#x97 ?\u2014) ;; EM DASH
-   (#x99 ?\u2122) ;; TRADE MARK SIGN
-   (#x9A ?\u0161) ;; LATIN SMALL LETTER S WITH CARON
-   (#x9B ?\u203A) ;; SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-   (#x9C ?\u015B) ;; LATIN SMALL LETTER S WITH ACUTE
-   (#x9D ?\u0165) ;; LATIN SMALL LETTER T WITH CARON
-   (#x9E ?\u017E) ;; LATIN SMALL LETTER Z WITH CARON
-   (#x9F ?\u017A) ;; LATIN SMALL LETTER Z WITH ACUTE
-   (#xA0 ?\u00A0) ;; NO-BREAK SPACE
-   (#xA1 ?\u02C7) ;; CARON
-   (#xA2 ?\u02D8) ;; BREVE
-   (#xA3 ?\u0141) ;; LATIN CAPITAL LETTER L WITH STROKE
-   (#xA4 ?\u00A4) ;; CURRENCY SIGN
-   (#xA5 ?\u0104) ;; LATIN CAPITAL LETTER A WITH OGONEK
-   (#xA6 ?\u00A6) ;; BROKEN BAR
-   (#xA7 ?\u00A7) ;; SECTION SIGN
-   (#xA8 ?\u00A8) ;; DIAERESIS
-   (#xA9 ?\u00A9) ;; COPYRIGHT SIGN
-   (#xAA ?\u015E) ;; LATIN CAPITAL LETTER S WITH CEDILLA
-   (#xAB ?\u00AB) ;; LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-   (#xAC ?\u00AC) ;; NOT SIGN
-   (#xAD ?\u00AD) ;; SOFT HYPHEN
-   (#xAE ?\u00AE) ;; REGISTERED SIGN
-   (#xAF ?\u017B) ;; LATIN CAPITAL LETTER Z WITH DOT ABOVE
-   (#xB0 ?\u00B0) ;; DEGREE SIGN
-   (#xB1 ?\u00B1) ;; PLUS-MINUS SIGN
-   (#xB2 ?\u02DB) ;; OGONEK
-   (#xB3 ?\u0142) ;; LATIN SMALL LETTER L WITH STROKE
-   (#xB4 ?\u00B4) ;; ACUTE ACCENT
-   (#xB5 ?\u00B5) ;; MICRO SIGN
-   (#xB6 ?\u00B6) ;; PILCROW SIGN
-   (#xB7 ?\u00B7) ;; MIDDLE DOT
-   (#xB8 ?\u00B8) ;; CEDILLA
-   (#xB9 ?\u0105) ;; LATIN SMALL LETTER A WITH OGONEK
-   (#xBA ?\u015F) ;; LATIN SMALL LETTER S WITH CEDILLA
-   (#xBB ?\u00BB) ;; RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-   (#xBC ?\u013D) ;; LATIN CAPITAL LETTER L WITH CARON
-   (#xBD ?\u02DD) ;; DOUBLE ACUTE ACCENT
-   (#xBE ?\u013E) ;; LATIN SMALL LETTER L WITH CARON
-   (#xBF ?\u017C) ;; LATIN SMALL LETTER Z WITH DOT ABOVE
-   (#xC0 ?\u0154) ;; LATIN CAPITAL LETTER R WITH ACUTE
-   (#xC1 ?\u00C1) ;; LATIN CAPITAL LETTER A WITH ACUTE
-   (#xC2 ?\u00C2) ;; LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-   (#xC3 ?\u0102) ;; LATIN CAPITAL LETTER A WITH BREVE
-   (#xC4 ?\u00C4) ;; LATIN CAPITAL LETTER A WITH DIAERESIS
-   (#xC5 ?\u0139) ;; LATIN CAPITAL LETTER L WITH ACUTE
-   (#xC6 ?\u0106) ;; LATIN CAPITAL LETTER C WITH ACUTE
-   (#xC7 ?\u00C7) ;; LATIN CAPITAL LETTER C WITH CEDILLA
-   (#xC8 ?\u010C) ;; LATIN CAPITAL LETTER C WITH CARON
-   (#xC9 ?\u00C9) ;; LATIN CAPITAL LETTER E WITH ACUTE
-   (#xCA ?\u0118) ;; LATIN CAPITAL LETTER E WITH OGONEK
-   (#xCB ?\u00CB) ;; LATIN CAPITAL LETTER E WITH DIAERESIS
-   (#xCC ?\u011A) ;; LATIN CAPITAL LETTER E WITH CARON
-   (#xCD ?\u00CD) ;; LATIN CAPITAL LETTER I WITH ACUTE
-   (#xCE ?\u00CE) ;; LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-   (#xCF ?\u010E) ;; LATIN CAPITAL LETTER D WITH CARON
-   (#xD0 ?\u0110) ;; LATIN CAPITAL LETTER D WITH STROKE
-   (#xD1 ?\u0143) ;; LATIN CAPITAL LETTER N WITH ACUTE
-   (#xD2 ?\u0147) ;; LATIN CAPITAL LETTER N WITH CARON
-   (#xD3 ?\u00D3) ;; LATIN CAPITAL LETTER O WITH ACUTE
-   (#xD4 ?\u00D4) ;; LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-   (#xD5 ?\u0150) ;; LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
-   (#xD6 ?\u00D6) ;; LATIN CAPITAL LETTER O WITH DIAERESIS
-   (#xD7 ?\u00D7) ;; MULTIPLICATION SIGN
-   (#xD8 ?\u0158) ;; LATIN CAPITAL LETTER R WITH CARON
-   (#xD9 ?\u016E) ;; LATIN CAPITAL LETTER U WITH RING ABOVE
-   (#xDA ?\u00DA) ;; LATIN CAPITAL LETTER U WITH ACUTE
-   (#xDB ?\u0170) ;; LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
-   (#xDC ?\u00DC) ;; LATIN CAPITAL LETTER U WITH DIAERESIS
-   (#xDD ?\u00DD) ;; LATIN CAPITAL LETTER Y WITH ACUTE
-   (#xDE ?\u0162) ;; LATIN CAPITAL LETTER T WITH CEDILLA
-   (#xDF ?\u00DF) ;; LATIN SMALL LETTER SHARP S
-   (#xE0 ?\u0155) ;; LATIN SMALL LETTER R WITH ACUTE
-   (#xE1 ?\u00E1) ;; LATIN SMALL LETTER A WITH ACUTE
-   (#xE2 ?\u00E2) ;; LATIN SMALL LETTER A WITH CIRCUMFLEX
-   (#xE3 ?\u0103) ;; LATIN SMALL LETTER A WITH BREVE
-   (#xE4 ?\u00E4) ;; LATIN SMALL LETTER A WITH DIAERESIS
-   (#xE5 ?\u013A) ;; LATIN SMALL LETTER L WITH ACUTE
-   (#xE6 ?\u0107) ;; LATIN SMALL LETTER C WITH ACUTE
-   (#xE7 ?\u00E7) ;; LATIN SMALL LETTER C WITH CEDILLA
-   (#xE8 ?\u010D) ;; LATIN SMALL LETTER C WITH CARON
-   (#xE9 ?\u00E9) ;; LATIN SMALL LETTER E WITH ACUTE
-   (#xEA ?\u0119) ;; LATIN SMALL LETTER E WITH OGONEK
-   (#xEB ?\u00EB) ;; LATIN SMALL LETTER E WITH DIAERESIS
-   (#xEC ?\u011B) ;; LATIN SMALL LETTER E WITH CARON
-   (#xED ?\u00ED) ;; LATIN SMALL LETTER I WITH ACUTE
-   (#xEE ?\u00EE) ;; LATIN SMALL LETTER I WITH CIRCUMFLEX
-   (#xEF ?\u010F) ;; LATIN SMALL LETTER D WITH CARON
-   (#xF0 ?\u0111) ;; LATIN SMALL LETTER D WITH STROKE
-   (#xF1 ?\u0144) ;; LATIN SMALL LETTER N WITH ACUTE
-   (#xF2 ?\u0148) ;; LATIN SMALL LETTER N WITH CARON
-   (#xF3 ?\u00F3) ;; LATIN SMALL LETTER O WITH ACUTE
-   (#xF4 ?\u00F4) ;; LATIN SMALL LETTER O WITH CIRCUMFLEX
-   (#xF5 ?\u0151) ;; LATIN SMALL LETTER O WITH DOUBLE ACUTE
-   (#xF6 ?\u00F6) ;; LATIN SMALL LETTER O WITH DIAERESIS
-   (#xF7 ?\u00F7) ;; DIVISION SIGN
-   (#xF8 ?\u0159) ;; LATIN SMALL LETTER R WITH CARON
-   (#xF9 ?\u016F) ;; LATIN SMALL LETTER U WITH RING ABOVE
-   (#xFA ?\u00FA) ;; LATIN SMALL LETTER U WITH ACUTE
-   (#xFB ?\u0171) ;; LATIN SMALL LETTER U WITH DOUBLE ACUTE
-   (#xFC ?\u00FC) ;; LATIN SMALL LETTER U WITH DIAERESIS
-   (#xFD ?\u00FD) ;; LATIN SMALL LETTER Y WITH ACUTE
-   (#xFE ?\u0163) ;; LATIN SMALL LETTER T WITH CEDILLA
-   (#xFF ?\u02D9)) ;; DOT ABOVE
- "CP 1250, Microsoft's encoding for Central Europe. 
+(make-coding-system
+ 'windows-1250 'fixed-width "Microsoft's CP1250"
+ '(unicode-map
+   ((#x80 ?\u20AC) ;; EURO SIGN
+    (#x82 ?\u201A) ;; SINGLE LOW-9 QUOTATION MARK
+    (#x84 ?\u201E) ;; DOUBLE LOW-9 QUOTATION MARK
+    (#x85 ?\u2026) ;; HORIZONTAL ELLIPSIS
+    (#x86 ?\u2020) ;; DAGGER
+    (#x87 ?\u2021) ;; DOUBLE DAGGER
+    (#x89 ?\u2030) ;; PER MILLE SIGN
+    (#x8A ?\u0160) ;; LATIN CAPITAL LETTER S WITH CARON
+    (#x8B ?\u2039) ;; SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+    (#x8C ?\u015A) ;; LATIN CAPITAL LETTER S WITH ACUTE
+    (#x8D ?\u0164) ;; LATIN CAPITAL LETTER T WITH CARON
+    (#x8E ?\u017D) ;; LATIN CAPITAL LETTER Z WITH CARON
+    (#x8F ?\u0179) ;; LATIN CAPITAL LETTER Z WITH ACUTE
+    (#x91 ?\u2018) ;; LEFT SINGLE QUOTATION MARK
+    (#x92 ?\u2019) ;; RIGHT SINGLE QUOTATION MARK
+    (#x93 ?\u201C) ;; LEFT DOUBLE QUOTATION MARK
+    (#x94 ?\u201D) ;; RIGHT DOUBLE QUOTATION MARK
+    (#x95 ?\u2022) ;; BULLET
+    (#x96 ?\u2013) ;; EN DASH
+    (#x97 ?\u2014) ;; EM DASH
+    (#x99 ?\u2122) ;; TRADE MARK SIGN
+    (#x9A ?\u0161) ;; LATIN SMALL LETTER S WITH CARON
+    (#x9B ?\u203A) ;; SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+    (#x9C ?\u015B) ;; LATIN SMALL LETTER S WITH ACUTE
+    (#x9D ?\u0165) ;; LATIN SMALL LETTER T WITH CARON
+    (#x9E ?\u017E) ;; LATIN SMALL LETTER Z WITH CARON
+    (#x9F ?\u017A) ;; LATIN SMALL LETTER Z WITH ACUTE
+    (#xA0 ?\u00A0) ;; NO-BREAK SPACE
+    (#xA1 ?\u02C7) ;; CARON
+    (#xA2 ?\u02D8) ;; BREVE
+    (#xA3 ?\u0141) ;; LATIN CAPITAL LETTER L WITH STROKE
+    (#xA4 ?\u00A4) ;; CURRENCY SIGN
+    (#xA5 ?\u0104) ;; LATIN CAPITAL LETTER A WITH OGONEK
+    (#xA6 ?\u00A6) ;; BROKEN BAR
+    (#xA7 ?\u00A7) ;; SECTION SIGN
+    (#xA8 ?\u00A8) ;; DIAERESIS
+    (#xA9 ?\u00A9) ;; COPYRIGHT SIGN
+    (#xAA ?\u015E) ;; LATIN CAPITAL LETTER S WITH CEDILLA
+    (#xAB ?\u00AB) ;; LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    (#xAC ?\u00AC) ;; NOT SIGN
+    (#xAD ?\u00AD) ;; SOFT HYPHEN
+    (#xAE ?\u00AE) ;; REGISTERED SIGN
+    (#xAF ?\u017B) ;; LATIN CAPITAL LETTER Z WITH DOT ABOVE
+    (#xB0 ?\u00B0) ;; DEGREE SIGN
+    (#xB1 ?\u00B1) ;; PLUS-MINUS SIGN
+    (#xB2 ?\u02DB) ;; OGONEK
+    (#xB3 ?\u0142) ;; LATIN SMALL LETTER L WITH STROKE
+    (#xB4 ?\u00B4) ;; ACUTE ACCENT
+    (#xB5 ?\u00B5) ;; MICRO SIGN
+    (#xB6 ?\u00B6) ;; PILCROW SIGN
+    (#xB7 ?\u00B7) ;; MIDDLE DOT
+    (#xB8 ?\u00B8) ;; CEDILLA
+    (#xB9 ?\u0105) ;; LATIN SMALL LETTER A WITH OGONEK
+    (#xBA ?\u015F) ;; LATIN SMALL LETTER S WITH CEDILLA
+    (#xBB ?\u00BB) ;; RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    (#xBC ?\u013D) ;; LATIN CAPITAL LETTER L WITH CARON
+    (#xBD ?\u02DD) ;; DOUBLE ACUTE ACCENT
+    (#xBE ?\u013E) ;; LATIN SMALL LETTER L WITH CARON
+    (#xBF ?\u017C) ;; LATIN SMALL LETTER Z WITH DOT ABOVE
+    (#xC0 ?\u0154) ;; LATIN CAPITAL LETTER R WITH ACUTE
+    (#xC1 ?\u00C1) ;; LATIN CAPITAL LETTER A WITH ACUTE
+    (#xC2 ?\u00C2) ;; LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    (#xC3 ?\u0102) ;; LATIN CAPITAL LETTER A WITH BREVE
+    (#xC4 ?\u00C4) ;; LATIN CAPITAL LETTER A WITH DIAERESIS
+    (#xC5 ?\u0139) ;; LATIN CAPITAL LETTER L WITH ACUTE
+    (#xC6 ?\u0106) ;; LATIN CAPITAL LETTER C WITH ACUTE
+    (#xC7 ?\u00C7) ;; LATIN CAPITAL LETTER C WITH CEDILLA
+    (#xC8 ?\u010C) ;; LATIN CAPITAL LETTER C WITH CARON
+    (#xC9 ?\u00C9) ;; LATIN CAPITAL LETTER E WITH ACUTE
+    (#xCA ?\u0118) ;; LATIN CAPITAL LETTER E WITH OGONEK
+    (#xCB ?\u00CB) ;; LATIN CAPITAL LETTER E WITH DIAERESIS
+    (#xCC ?\u011A) ;; LATIN CAPITAL LETTER E WITH CARON
+    (#xCD ?\u00CD) ;; LATIN CAPITAL LETTER I WITH ACUTE
+    (#xCE ?\u00CE) ;; LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    (#xCF ?\u010E) ;; LATIN CAPITAL LETTER D WITH CARON
+    (#xD0 ?\u0110) ;; LATIN CAPITAL LETTER D WITH STROKE
+    (#xD1 ?\u0143) ;; LATIN CAPITAL LETTER N WITH ACUTE
+    (#xD2 ?\u0147) ;; LATIN CAPITAL LETTER N WITH CARON
+    (#xD3 ?\u00D3) ;; LATIN CAPITAL LETTER O WITH ACUTE
+    (#xD4 ?\u00D4) ;; LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    (#xD5 ?\u0150) ;; LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+    (#xD6 ?\u00D6) ;; LATIN CAPITAL LETTER O WITH DIAERESIS
+    (#xD7 ?\u00D7) ;; MULTIPLICATION SIGN
+    (#xD8 ?\u0158) ;; LATIN CAPITAL LETTER R WITH CARON
+    (#xD9 ?\u016E) ;; LATIN CAPITAL LETTER U WITH RING ABOVE
+    (#xDA ?\u00DA) ;; LATIN CAPITAL LETTER U WITH ACUTE
+    (#xDB ?\u0170) ;; LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+    (#xDC ?\u00DC) ;; LATIN CAPITAL LETTER U WITH DIAERESIS
+    (#xDD ?\u00DD) ;; LATIN CAPITAL LETTER Y WITH ACUTE
+    (#xDE ?\u0162) ;; LATIN CAPITAL LETTER T WITH CEDILLA
+    (#xDF ?\u00DF) ;; LATIN SMALL LETTER SHARP S
+    (#xE0 ?\u0155) ;; LATIN SMALL LETTER R WITH ACUTE
+    (#xE1 ?\u00E1) ;; LATIN SMALL LETTER A WITH ACUTE
+    (#xE2 ?\u00E2) ;; LATIN SMALL LETTER A WITH CIRCUMFLEX
+    (#xE3 ?\u0103) ;; LATIN SMALL LETTER A WITH BREVE
+    (#xE4 ?\u00E4) ;; LATIN SMALL LETTER A WITH DIAERESIS
+    (#xE5 ?\u013A) ;; LATIN SMALL LETTER L WITH ACUTE
+    (#xE6 ?\u0107) ;; LATIN SMALL LETTER C WITH ACUTE
+    (#xE7 ?\u00E7) ;; LATIN SMALL LETTER C WITH CEDILLA
+    (#xE8 ?\u010D) ;; LATIN SMALL LETTER C WITH CARON
+    (#xE9 ?\u00E9) ;; LATIN SMALL LETTER E WITH ACUTE
+    (#xEA ?\u0119) ;; LATIN SMALL LETTER E WITH OGONEK
+    (#xEB ?\u00EB) ;; LATIN SMALL LETTER E WITH DIAERESIS
+    (#xEC ?\u011B) ;; LATIN SMALL LETTER E WITH CARON
+    (#xED ?\u00ED) ;; LATIN SMALL LETTER I WITH ACUTE
+    (#xEE ?\u00EE) ;; LATIN SMALL LETTER I WITH CIRCUMFLEX
+    (#xEF ?\u010F) ;; LATIN SMALL LETTER D WITH CARON
+    (#xF0 ?\u0111) ;; LATIN SMALL LETTER D WITH STROKE
+    (#xF1 ?\u0144) ;; LATIN SMALL LETTER N WITH ACUTE
+    (#xF2 ?\u0148) ;; LATIN SMALL LETTER N WITH CARON
+    (#xF3 ?\u00F3) ;; LATIN SMALL LETTER O WITH ACUTE
+    (#xF4 ?\u00F4) ;; LATIN SMALL LETTER O WITH CIRCUMFLEX
+    (#xF5 ?\u0151) ;; LATIN SMALL LETTER O WITH DOUBLE ACUTE
+    (#xF6 ?\u00F6) ;; LATIN SMALL LETTER O WITH DIAERESIS
+    (#xF7 ?\u00F7) ;; DIVISION SIGN
+    (#xF8 ?\u0159) ;; LATIN SMALL LETTER R WITH CARON
+    (#xF9 ?\u016F) ;; LATIN SMALL LETTER U WITH RING ABOVE
+    (#xFA ?\u00FA) ;; LATIN SMALL LETTER U WITH ACUTE
+    (#xFB ?\u0171) ;; LATIN SMALL LETTER U WITH DOUBLE ACUTE
+    (#xFC ?\u00FC) ;; LATIN SMALL LETTER U WITH DIAERESIS
+    (#xFD ?\u00FD) ;; LATIN SMALL LETTER Y WITH ACUTE
+    (#xFE ?\u0163) ;; LATIN SMALL LETTER T WITH CEDILLA
+    (#xFF ?\u02D9)) ;; DOT ABOVE
+   documentation
+   "CP 1250, Microsoft's encoding for Central Europe. 
 See also `iso-8859-2' and `window-1252' for Western Europe.  "
- '(mnemonic "CP1250"
+   mnemonic "CP1250"
    aliases (cp1250)))
 
 
@@ -460,131 +463,131 @@
    (#xDD #xFD) ;; U WITH BREVE
    (#xDE #xFE))) ;; S WITH CIRCUMFLEX
 
-(make-8-bit-coding-system
- 'iso-8859-3
- '((#x80 ?\u0080) ;; <control>
-   (#x81 ?\u0081) ;; <control>
-   (#x82 ?\u0082) ;; <control>
-   (#x83 ?\u0083) ;; <control>
-   (#x84 ?\u0084) ;; <control>
-   (#x85 ?\u0085) ;; <control>
-   (#x86 ?\u0086) ;; <control>
-   (#x87 ?\u0087) ;; <control>
-   (#x88 ?\u0088) ;; <control>
-   (#x89 ?\u0089) ;; <control>
-   (#x8A ?\u008A) ;; <control>
-   (#x8B ?\u008B) ;; <control>
-   (#x8C ?\u008C) ;; <control>
-   (#x8D ?\u008D) ;; <control>
-   (#x8E ?\u008E) ;; <control>
-   (#x8F ?\u008F) ;; <control>
-   (#x90 ?\u0090) ;; <control>
-   (#x91 ?\u0091) ;; <control>
-   (#x92 ?\u0092) ;; <control>
-   (#x93 ?\u0093) ;; <control>
-   (#x94 ?\u0094) ;; <control>
-   (#x95 ?\u0095) ;; <control>
-   (#x96 ?\u0096) ;; <control>
-   (#x97 ?\u0097) ;; <control>
-   (#x98 ?\u0098) ;; <control>
-   (#x99 ?\u0099) ;; <control>
-   (#x9A ?\u009A) ;; <control>
-   (#x9B ?\u009B) ;; <control>
-   (#x9C ?\u009C) ;; <control>
-   (#x9D ?\u009D) ;; <control>
-   (#x9E ?\u009E) ;; <control>
-   (#x9F ?\u009F) ;; <control>
-   (#xA0 ?\u00A0) ;; NO-BREAK SPACE
-   (#xA1 ?\u0126) ;; LATIN CAPITAL LETTER H WITH STROKE
-   (#xA2 ?\u02D8) ;; BREVE
-   (#xA3 ?\u00A3) ;; POUND SIGN
-   (#xA4 ?\u00A4) ;; CURRENCY SIGN
-   (#xA6 ?\u0124) ;; LATIN CAPITAL LETTER H WITH CIRCUMFLEX
-   (#xA7 ?\u00A7) ;; SECTION SIGN
-   (#xA8 ?\u00A8) ;; DIAERESIS
-   (#xA9 ?\u0130) ;; LATIN CAPITAL LETTER I WITH DOT ABOVE
-   (#xAA ?\u015E) ;; LATIN CAPITAL LETTER S WITH CEDILLA
-   (#xAB ?\u011E) ;; LATIN CAPITAL LETTER G WITH BREVE
-   (#xAC ?\u0134) ;; LATIN CAPITAL LETTER J WITH CIRCUMFLEX
-   (#xAD ?\u00AD) ;; SOFT HYPHEN
-   (#xAF ?\u017B) ;; LATIN CAPITAL LETTER Z WITH DOT ABOVE
-   (#xB0 ?\u00B0) ;; DEGREE SIGN
-   (#xB1 ?\u0127) ;; LATIN SMALL LETTER H WITH STROKE
-   (#xB2 ?\u00B2) ;; SUPERSCRIPT TWO
-   (#xB3 ?\u00B3) ;; SUPERSCRIPT THREE
-   (#xB4 ?\u00B4) ;; ACUTE ACCENT
-   (#xB5 ?\u00B5) ;; MICRO SIGN
-   (#xB6 ?\u0125) ;; LATIN SMALL LETTER H WITH CIRCUMFLEX
-   (#xB7 ?\u00B7) ;; MIDDLE DOT
-   (#xB8 ?\u00B8) ;; CEDILLA
-   (#xB9 ?\u0131) ;; LATIN SMALL LETTER DOTLESS I
-   (#xBA ?\u015F) ;; LATIN SMALL LETTER S WITH CEDILLA
-   (#xBB ?\u011F) ;; LATIN SMALL LETTER G WITH BREVE
-   (#xBC ?\u0135) ;; LATIN SMALL LETTER J WITH CIRCUMFLEX
-   (#xBD ?\u00BD) ;; VULGAR FRACTION ONE HALF
-   (#xBF ?\u017C) ;; LATIN SMALL LETTER Z WITH DOT ABOVE
-   (#xC0 ?\u00C0) ;; LATIN CAPITAL LETTER A WITH GRAVE
-   (#xC1 ?\u00C1) ;; LATIN CAPITAL LETTER A WITH ACUTE
-   (#xC2 ?\u00C2) ;; LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-   (#xC4 ?\u00C4) ;; LATIN CAPITAL LETTER A WITH DIAERESIS
-   (#xC5 ?\u010A) ;; LATIN CAPITAL LETTER C WITH DOT ABOVE
-   (#xC6 ?\u0108) ;; LATIN CAPITAL LETTER C WITH CIRCUMFLEX
-   (#xC7 ?\u00C7) ;; LATIN CAPITAL LETTER C WITH CEDILLA
-   (#xC8 ?\u00C8) ;; LATIN CAPITAL LETTER E WITH GRAVE
-   (#xC9 ?\u00C9) ;; LATIN CAPITAL LETTER E WITH ACUTE
-   (#xCA ?\u00CA) ;; LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-   (#xCB ?\u00CB) ;; LATIN CAPITAL LETTER E WITH DIAERESIS
-   (#xCC ?\u00CC) ;; LATIN CAPITAL LETTER I WITH GRAVE
-   (#xCD ?\u00CD) ;; LATIN CAPITAL LETTER I WITH ACUTE
-   (#xCE ?\u00CE) ;; LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-   (#xCF ?\u00CF) ;; LATIN CAPITAL LETTER I WITH DIAERESIS
-   (#xD1 ?\u00D1) ;; LATIN CAPITAL LETTER N WITH TILDE
-   (#xD2 ?\u00D2) ;; LATIN CAPITAL LETTER O WITH GRAVE
-   (#xD3 ?\u00D3) ;; LATIN CAPITAL LETTER O WITH ACUTE
-   (#xD4 ?\u00D4) ;; LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-   (#xD5 ?\u0120) ;; LATIN CAPITAL LETTER G WITH DOT ABOVE
-   (#xD6 ?\u00D6) ;; LATIN CAPITAL LETTER O WITH DIAERESIS
-   (#xD7 ?\u00D7) ;; MULTIPLICATION SIGN
-   (#xD8 ?\u011C) ;; LATIN CAPITAL LETTER G WITH CIRCUMFLEX
-   (#xD9 ?\u00D9) ;; LATIN CAPITAL LETTER U WITH GRAVE
-   (#xDA ?\u00DA) ;; LATIN CAPITAL LETTER U WITH ACUTE
-   (#xDB ?\u00DB) ;; LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-   (#xDC ?\u00DC) ;; LATIN CAPITAL LETTER U WITH DIAERESIS
-   (#xDD ?\u016C) ;; LATIN CAPITAL LETTER U WITH BREVE
-   (#xDE ?\u015C) ;; LATIN CAPITAL LETTER S WITH CIRCUMFLEX
-   (#xDF ?\u00DF) ;; LATIN SMALL LETTER SHARP S
-   (#xE0 ?\u00E0) ;; LATIN SMALL LETTER A WITH GRAVE
-   (#xE1 ?\u00E1) ;; LATIN SMALL LETTER A WITH ACUTE
-   (#xE2 ?\u00E2) ;; LATIN SMALL LETTER A WITH CIRCUMFLEX
-   (#xE4 ?\u00E4) ;; LATIN SMALL LETTER A WITH DIAERESIS
-   (#xE5 ?\u010B) ;; LATIN SMALL LETTER C WITH DOT ABOVE
-   (#xE6 ?\u0109) ;; LATIN SMALL LETTER C WITH CIRCUMFLEX
-   (#xE7 ?\u00E7) ;; LATIN SMALL LETTER C WITH CEDILLA
-   (#xE8 ?\u00E8) ;; LATIN SMALL LETTER E WITH GRAVE
-   (#xE9 ?\u00E9) ;; LATIN SMALL LETTER E WITH ACUTE
-   (#xEA ?\u00EA) ;; LATIN SMALL LETTER E WITH CIRCUMFLEX
-   (#xEB ?\u00EB) ;; LATIN SMALL LETTER E WITH DIAERESIS
-   (#xEC ?\u00EC) ;; LATIN SMALL LETTER I WITH GRAVE
-   (#xED ?\u00ED) ;; LATIN SMALL LETTER I WITH ACUTE
-   (#xEE ?\u00EE) ;; LATIN SMALL LETTER I WITH CIRCUMFLEX
-   (#xEF ?\u00EF) ;; LATIN SMALL LETTER I WITH DIAERESIS
-   (#xF1 ?\u00F1) ;; LATIN SMALL LETTER N WITH TILDE
-   (#xF2 ?\u00F2) ;; LATIN SMALL LETTER O WITH GRAVE
-   (#xF3 ?\u00F3) ;; LATIN SMALL LETTER O WITH ACUTE
-   (#xF4 ?\u00F4) ;; LATIN SMALL LETTER O WITH CIRCUMFLEX
-   (#xF5 ?\u0121) ;; LATIN SMALL LETTER G WITH DOT ABOVE
-   (#xF6 ?\u00F6) ;; LATIN SMALL LETTER O WITH DIAERESIS
-   (#xF7 ?\u00F7) ;; DIVISION SIGN
-   (#xF8 ?\u011D) ;; LATIN SMALL LETTER G WITH CIRCUMFLEX
-   (#xF9 ?\u00F9) ;; LATIN SMALL LETTER U WITH GRAVE
-   (#xFA ?\u00FA) ;; LATIN SMALL LETTER U WITH ACUTE
-   (#xFB ?\u00FB) ;; LATIN SMALL LETTER U WITH CIRCUMFLEX
-   (#xFC ?\u00FC) ;; LATIN SMALL LETTER U WITH DIAERESIS
-   (#xFD ?\u016D) ;; LATIN SMALL LETTER U WITH BREVE
-   (#xFE ?\u015D) ;; LATIN SMALL LETTER S WITH CIRCUMFLEX
-   (#xFF ?\u02D9)) ;; DOT ABOVE
- "ISO-8859-3 (Latin-3)"
- '(mnemonic "Latin 3"
+(make-coding-system
+ 'iso-8859-3 'fixed-width "ISO-8859-3 (Latin-3)"
+ '(unicode-map
+   ((#x80 ?\u0080) ;; <control>
+    (#x81 ?\u0081) ;; <control>
+    (#x82 ?\u0082) ;; <control>
+    (#x83 ?\u0083) ;; <control>
+    (#x84 ?\u0084) ;; <control>
+    (#x85 ?\u0085) ;; <control>
+    (#x86 ?\u0086) ;; <control>
+    (#x87 ?\u0087) ;; <control>
+    (#x88 ?\u0088) ;; <control>
+    (#x89 ?\u0089) ;; <control>
+    (#x8A ?\u008A) ;; <control>
+    (#x8B ?\u008B) ;; <control>
+    (#x8C ?\u008C) ;; <control>
+    (#x8D ?\u008D) ;; <control>
+    (#x8E ?\u008E) ;; <control>
+    (#x8F ?\u008F) ;; <control>
+    (#x90 ?\u0090) ;; <control>
+    (#x91 ?\u0091) ;; <control>
+    (#x92 ?\u0092) ;; <control>
+    (#x93 ?\u0093) ;; <control>
+    (#x94 ?\u0094) ;; <control>
+    (#x95 ?\u0095) ;; <control>
+    (#x96 ?\u0096) ;; <control>
+    (#x97 ?\u0097) ;; <control>
+    (#x98 ?\u0098) ;; <control>
+    (#x99 ?\u0099) ;; <control>
+    (#x9A ?\u009A) ;; <control>
+    (#x9B ?\u009B) ;; <control>
+    (#x9C ?\u009C) ;; <control>
+    (#x9D ?\u009D) ;; <control>
+    (#x9E ?\u009E) ;; <control>
+    (#x9F ?\u009F) ;; <control>
+    (#xA0 ?\u00A0) ;; NO-BREAK SPACE
+    (#xA1 ?\u0126) ;; LATIN CAPITAL LETTER H WITH STROKE
+    (#xA2 ?\u02D8) ;; BREVE
+    (#xA3 ?\u00A3) ;; POUND SIGN
+    (#xA4 ?\u00A4) ;; CURRENCY SIGN
+    (#xA6 ?\u0124) ;; LATIN CAPITAL LETTER H WITH CIRCUMFLEX
+    (#xA7 ?\u00A7) ;; SECTION SIGN
+    (#xA8 ?\u00A8) ;; DIAERESIS
+    (#xA9 ?\u0130) ;; LATIN CAPITAL LETTER I WITH DOT ABOVE
+    (#xAA ?\u015E) ;; LATIN CAPITAL LETTER S WITH CEDILLA
+    (#xAB ?\u011E) ;; LATIN CAPITAL LETTER G WITH BREVE
+    (#xAC ?\u0134) ;; LATIN CAPITAL LETTER J WITH CIRCUMFLEX
+    (#xAD ?\u00AD) ;; SOFT HYPHEN
+    (#xAF ?\u017B) ;; LATIN CAPITAL LETTER Z WITH DOT ABOVE
+    (#xB0 ?\u00B0) ;; DEGREE SIGN
+    (#xB1 ?\u0127) ;; LATIN SMALL LETTER H WITH STROKE
+    (#xB2 ?\u00B2) ;; SUPERSCRIPT TWO
+    (#xB3 ?\u00B3) ;; SUPERSCRIPT THREE
+    (#xB4 ?\u00B4) ;; ACUTE ACCENT
+    (#xB5 ?\u00B5) ;; MICRO SIGN
+    (#xB6 ?\u0125) ;; LATIN SMALL LETTER H WITH CIRCUMFLEX
+    (#xB7 ?\u00B7) ;; MIDDLE DOT
+    (#xB8 ?\u00B8) ;; CEDILLA
+    (#xB9 ?\u0131) ;; LATIN SMALL LETTER DOTLESS I
+    (#xBA ?\u015F) ;; LATIN SMALL LETTER S WITH CEDILLA
+    (#xBB ?\u011F) ;; LATIN SMALL LETTER G WITH BREVE
+    (#xBC ?\u0135) ;; LATIN SMALL LETTER J WITH CIRCUMFLEX
+    (#xBD ?\u00BD) ;; VULGAR FRACTION ONE HALF
+    (#xBF ?\u017C) ;; LATIN SMALL LETTER Z WITH DOT ABOVE
+    (#xC0 ?\u00C0) ;; LATIN CAPITAL LETTER A WITH GRAVE
+    (#xC1 ?\u00C1) ;; LATIN CAPITAL LETTER A WITH ACUTE
+    (#xC2 ?\u00C2) ;; LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    (#xC4 ?\u00C4) ;; LATIN CAPITAL LETTER A WITH DIAERESIS
+    (#xC5 ?\u010A) ;; LATIN CAPITAL LETTER C WITH DOT ABOVE
+    (#xC6 ?\u0108) ;; LATIN CAPITAL LETTER C WITH CIRCUMFLEX
+    (#xC7 ?\u00C7) ;; LATIN CAPITAL LETTER C WITH CEDILLA
+    (#xC8 ?\u00C8) ;; LATIN CAPITAL LETTER E WITH GRAVE
+    (#xC9 ?\u00C9) ;; LATIN CAPITAL LETTER E WITH ACUTE
+    (#xCA ?\u00CA) ;; LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+    (#xCB ?\u00CB) ;; LATIN CAPITAL LETTER E WITH DIAERESIS
+    (#xCC ?\u00CC) ;; LATIN CAPITAL LETTER I WITH GRAVE
+    (#xCD ?\u00CD) ;; LATIN CAPITAL LETTER I WITH ACUTE
+    (#xCE ?\u00CE) ;; LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    (#xCF ?\u00CF) ;; LATIN CAPITAL LETTER I WITH DIAERESIS
+    (#xD1 ?\u00D1) ;; LATIN CAPITAL LETTER N WITH TILDE
+    (#xD2 ?\u00D2) ;; LATIN CAPITAL LETTER O WITH GRAVE
+    (#xD3 ?\u00D3) ;; LATIN CAPITAL LETTER O WITH ACUTE
+    (#xD4 ?\u00D4) ;; LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    (#xD5 ?\u0120) ;; LATIN CAPITAL LETTER G WITH DOT ABOVE
+    (#xD6 ?\u00D6) ;; LATIN CAPITAL LETTER O WITH DIAERESIS
+    (#xD7 ?\u00D7) ;; MULTIPLICATION SIGN
+    (#xD8 ?\u011C) ;; LATIN CAPITAL LETTER G WITH CIRCUMFLEX
+    (#xD9 ?\u00D9) ;; LATIN CAPITAL LETTER U WITH GRAVE
+    (#xDA ?\u00DA) ;; LATIN CAPITAL LETTER U WITH ACUTE
+    (#xDB ?\u00DB) ;; LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    (#xDC ?\u00DC) ;; LATIN CAPITAL LETTER U WITH DIAERESIS
+    (#xDD ?\u016C) ;; LATIN CAPITAL LETTER U WITH BREVE
+    (#xDE ?\u015C) ;; LATIN CAPITAL LETTER S WITH CIRCUMFLEX
+    (#xDF ?\u00DF) ;; LATIN SMALL LETTER SHARP S
+    (#xE0 ?\u00E0) ;; LATIN SMALL LETTER A WITH GRAVE
+    (#xE1 ?\u00E1) ;; LATIN SMALL LETTER A WITH ACUTE
+    (#xE2 ?\u00E2) ;; LATIN SMALL LETTER A WITH CIRCUMFLEX
+    (#xE4 ?\u00E4) ;; LATIN SMALL LETTER A WITH DIAERESIS
+    (#xE5 ?\u010B) ;; LATIN SMALL LETTER C WITH DOT ABOVE
+    (#xE6 ?\u0109) ;; LATIN SMALL LETTER C WITH CIRCUMFLEX
+    (#xE7 ?\u00E7) ;; LATIN SMALL LETTER C WITH CEDILLA
+    (#xE8 ?\u00E8) ;; LATIN SMALL LETTER E WITH GRAVE
+    (#xE9 ?\u00E9) ;; LATIN SMALL LETTER E WITH ACUTE
+    (#xEA ?\u00EA) ;; LATIN SMALL LETTER E WITH CIRCUMFLEX
+    (#xEB ?\u00EB) ;; LATIN SMALL LETTER E WITH DIAERESIS
+    (#xEC ?\u00EC) ;; LATIN SMALL LETTER I WITH GRAVE
+    (#xED ?\u00ED) ;; LATIN SMALL LETTER I WITH ACUTE
+    (#xEE ?\u00EE) ;; LATIN SMALL LETTER I WITH CIRCUMFLEX
+    (#xEF ?\u00EF) ;; LATIN SMALL LETTER I WITH DIAERESIS
+    (#xF1 ?\u00F1) ;; LATIN SMALL LETTER N WITH TILDE
+    (#xF2 ?\u00F2) ;; LATIN SMALL LETTER O WITH GRAVE
+    (#xF3 ?\u00F3) ;; LATIN SMALL LETTER O WITH ACUTE
+    (#xF4 ?\u00F4) ;; LATIN SMALL LETTER O WITH CIRCUMFLEX
+    (#xF5 ?\u0121) ;; LATIN SMALL LETTER G WITH DOT ABOVE
+    (#xF6 ?\u00F6) ;; LATIN SMALL LETTER O WITH DIAERESIS
+    (#xF7 ?\u00F7) ;; DIVISION SIGN
+    (#xF8 ?\u011D) ;; LATIN SMALL LETTER G WITH CIRCUMFLEX
+    (#xF9 ?\u00F9) ;; LATIN SMALL LETTER U WITH GRAVE
+    (#xFA ?\u00FA) ;; LATIN SMALL LETTER U WITH ACUTE
+    (#xFB ?\u00FB) ;; LATIN SMALL LETTER U WITH CIRCUMFLEX
+    (#xFC ?\u00FC) ;; LATIN SMALL LETTER U WITH DIAERESIS
+    (#xFD ?\u016D) ;; LATIN SMALL LETTER U WITH BREVE
+    (#xFE ?\u015D) ;; LATIN SMALL LETTER S WITH CIRCUMFLEX
+    (#xFF ?\u02D9)) ;; DOT ABOVE
+   mnemonic "Latin 3"
    documentation "Aimed at Turkish, Maltese and Esperanto.  "
    aliases (iso-latin-3 latin-3)))
 
@@ -660,138 +663,138 @@
    (#xDD #xFD) ;; U WITH TILDE
    (#xDE #xFE))) ;; U WITH MACRON
 
-(make-8-bit-coding-system
- 'iso-8859-4
- '((#x80 ?\u0080) ;; <control>
-   (#x81 ?\u0081) ;; <control>
-   (#x82 ?\u0082) ;; <control>
-   (#x83 ?\u0083) ;; <control>
-   (#x84 ?\u0084) ;; <control>
-   (#x85 ?\u0085) ;; <control>
-   (#x86 ?\u0086) ;; <control>
-   (#x87 ?\u0087) ;; <control>
-   (#x88 ?\u0088) ;; <control>
-   (#x89 ?\u0089) ;; <control>
-   (#x8A ?\u008A) ;; <control>
-   (#x8B ?\u008B) ;; <control>
-   (#x8C ?\u008C) ;; <control>
-   (#x8D ?\u008D) ;; <control>
-   (#x8E ?\u008E) ;; <control>
-   (#x8F ?\u008F) ;; <control>
-   (#x90 ?\u0090) ;; <control>
-   (#x91 ?\u0091) ;; <control>
-   (#x92 ?\u0092) ;; <control>
-   (#x93 ?\u0093) ;; <control>
-   (#x94 ?\u0094) ;; <control>
-   (#x95 ?\u0095) ;; <control>
-   (#x96 ?\u0096) ;; <control>
-   (#x97 ?\u0097) ;; <control>
-   (#x98 ?\u0098) ;; <control>
-   (#x99 ?\u0099) ;; <control>
-   (#x9A ?\u009A) ;; <control>
-   (#x9B ?\u009B) ;; <control>
-   (#x9C ?\u009C) ;; <control>
-   (#x9D ?\u009D) ;; <control>
-   (#x9E ?\u009E) ;; <control>
-   (#x9F ?\u009F) ;; <control>
-   (#xA0 ?\u00A0) ;; NO-BREAK SPACE
-   (#xA1 ?\u0104) ;; LATIN CAPITAL LETTER A WITH OGONEK
-   (#xA2 ?\u0138) ;; LATIN SMALL LETTER KRA
-   (#xA3 ?\u0156) ;; LATIN CAPITAL LETTER R WITH CEDILLA
-   (#xA4 ?\u00A4) ;; CURRENCY SIGN
-   (#xA5 ?\u0128) ;; LATIN CAPITAL LETTER I WITH TILDE
-   (#xA6 ?\u013B) ;; LATIN CAPITAL LETTER L WITH CEDILLA
-   (#xA7 ?\u00A7) ;; SECTION SIGN
-   (#xA8 ?\u00A8) ;; DIAERESIS
-   (#xA9 ?\u0160) ;; LATIN CAPITAL LETTER S WITH CARON
-   (#xAA ?\u0112) ;; LATIN CAPITAL LETTER E WITH MACRON
-   (#xAB ?\u0122) ;; LATIN CAPITAL LETTER G WITH CEDILLA
-   (#xAC ?\u0166) ;; LATIN CAPITAL LETTER T WITH STROKE
-   (#xAD ?\u00AD) ;; SOFT HYPHEN
-   (#xAE ?\u017D) ;; LATIN CAPITAL LETTER Z WITH CARON
-   (#xAF ?\u00AF) ;; MACRON
-   (#xB0 ?\u00B0) ;; DEGREE SIGN
-   (#xB1 ?\u0105) ;; LATIN SMALL LETTER A WITH OGONEK
-   (#xB2 ?\u02DB) ;; OGONEK
-   (#xB3 ?\u0157) ;; LATIN SMALL LETTER R WITH CEDILLA
-   (#xB4 ?\u00B4) ;; ACUTE ACCENT
-   (#xB5 ?\u0129) ;; LATIN SMALL LETTER I WITH TILDE
-   (#xB6 ?\u013C) ;; LATIN SMALL LETTER L WITH CEDILLA
-   (#xB7 ?\u02C7) ;; CARON
-   (#xB8 ?\u00B8) ;; CEDILLA
-   (#xB9 ?\u0161) ;; LATIN SMALL LETTER S WITH CARON
-   (#xBA ?\u0113) ;; LATIN SMALL LETTER E WITH MACRON
-   (#xBB ?\u0123) ;; LATIN SMALL LETTER G WITH CEDILLA
-   (#xBC ?\u0167) ;; LATIN SMALL LETTER T WITH STROKE
-   (#xBD ?\u014A) ;; LATIN CAPITAL LETTER ENG
-   (#xBE ?\u017E) ;; LATIN SMALL LETTER Z WITH CARON
-   (#xBF ?\u014B) ;; LATIN SMALL LETTER ENG
-   (#xC0 ?\u0100) ;; LATIN CAPITAL LETTER A WITH MACRON
-   (#xC1 ?\u00C1) ;; LATIN CAPITAL LETTER A WITH ACUTE
-   (#xC2 ?\u00C2) ;; LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-   (#xC3 ?\u00C3) ;; LATIN CAPITAL LETTER A WITH TILDE
-   (#xC4 ?\u00C4) ;; LATIN CAPITAL LETTER A WITH DIAERESIS
-   (#xC5 ?\u00C5) ;; LATIN CAPITAL LETTER A WITH RING ABOVE
-   (#xC6 ?\u00C6) ;; LATIN CAPITAL LETTER AE
-   (#xC7 ?\u012E) ;; LATIN CAPITAL LETTER I WITH OGONEK
-   (#xC8 ?\u010C) ;; LATIN CAPITAL LETTER C WITH CARON
-   (#xC9 ?\u00C9) ;; LATIN CAPITAL LETTER E WITH ACUTE
-   (#xCA ?\u0118) ;; LATIN CAPITAL LETTER E WITH OGONEK
-   (#xCB ?\u00CB) ;; LATIN CAPITAL LETTER E WITH DIAERESIS
-   (#xCC ?\u0116) ;; LATIN CAPITAL LETTER E WITH DOT ABOVE
-   (#xCD ?\u00CD) ;; LATIN CAPITAL LETTER I WITH ACUTE
-   (#xCE ?\u00CE) ;; LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-   (#xCF ?\u012A) ;; LATIN CAPITAL LETTER I WITH MACRON
-   (#xD0 ?\u0110) ;; LATIN CAPITAL LETTER D WITH STROKE
-   (#xD1 ?\u0145) ;; LATIN CAPITAL LETTER N WITH CEDILLA
-   (#xD2 ?\u014C) ;; LATIN CAPITAL LETTER O WITH MACRON
-   (#xD3 ?\u0136) ;; LATIN CAPITAL LETTER K WITH CEDILLA
-   (#xD4 ?\u00D4) ;; LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-   (#xD5 ?\u00D5) ;; LATIN CAPITAL LETTER O WITH TILDE
-   (#xD6 ?\u00D6) ;; LATIN CAPITAL LETTER O WITH DIAERESIS
-   (#xD7 ?\u00D7) ;; MULTIPLICATION SIGN
-   (#xD8 ?\u00D8) ;; LATIN CAPITAL LETTER O WITH STROKE
-   (#xD9 ?\u0172) ;; LATIN CAPITAL LETTER U WITH OGONEK
-   (#xDA ?\u00DA) ;; LATIN CAPITAL LETTER U WITH ACUTE
-   (#xDB ?\u00DB) ;; LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-   (#xDC ?\u00DC) ;; LATIN CAPITAL LETTER U WITH DIAERESIS
-   (#xDD ?\u0168) ;; LATIN CAPITAL LETTER U WITH TILDE
-   (#xDE ?\u016A) ;; LATIN CAPITAL LETTER U WITH MACRON
-   (#xDF ?\u00DF) ;; LATIN SMALL LETTER SHARP S
-   (#xE0 ?\u0101) ;; LATIN SMALL LETTER A WITH MACRON
-   (#xE1 ?\u00E1) ;; LATIN SMALL LETTER A WITH ACUTE
-   (#xE2 ?\u00E2) ;; LATIN SMALL LETTER A WITH CIRCUMFLEX
-   (#xE3 ?\u00E3) ;; LATIN SMALL LETTER A WITH TILDE
-   (#xE4 ?\u00E4) ;; LATIN SMALL LETTER A WITH DIAERESIS
-   (#xE5 ?\u00E5) ;; LATIN SMALL LETTER A WITH RING ABOVE
-   (#xE6 ?\u00E6) ;; LATIN SMALL LETTER AE
-   (#xE7 ?\u012F) ;; LATIN SMALL LETTER I WITH OGONEK
-   (#xE8 ?\u010D) ;; LATIN SMALL LETTER C WITH CARON
-   (#xE9 ?\u00E9) ;; LATIN SMALL LETTER E WITH ACUTE
-   (#xEA ?\u0119) ;; LATIN SMALL LETTER E WITH OGONEK
-   (#xEB ?\u00EB) ;; LATIN SMALL LETTER E WITH DIAERESIS
-   (#xEC ?\u0117) ;; LATIN SMALL LETTER E WITH DOT ABOVE
-   (#xED ?\u00ED) ;; LATIN SMALL LETTER I WITH ACUTE
-   (#xEE ?\u00EE) ;; LATIN SMALL LETTER I WITH CIRCUMFLEX
-   (#xEF ?\u012B) ;; LATIN SMALL LETTER I WITH MACRON
-   (#xF0 ?\u0111) ;; LATIN SMALL LETTER D WITH STROKE
-   (#xF1 ?\u0146) ;; LATIN SMALL LETTER N WITH CEDILLA
-   (#xF2 ?\u014D) ;; LATIN SMALL LETTER O WITH MACRON
-   (#xF3 ?\u0137) ;; LATIN SMALL LETTER K WITH CEDILLA
-   (#xF4 ?\u00F4) ;; LATIN SMALL LETTER O WITH CIRCUMFLEX
-   (#xF5 ?\u00F5) ;; LATIN SMALL LETTER O WITH TILDE
-   (#xF6 ?\u00F6) ;; LATIN SMALL LETTER O WITH DIAERESIS
-   (#xF7 ?\u00F7) ;; DIVISION SIGN
-   (#xF8 ?\u00F8) ;; LATIN SMALL LETTER O WITH STROKE
-   (#xF9 ?\u0173) ;; LATIN SMALL LETTER U WITH OGONEK
-   (#xFA ?\u00FA) ;; LATIN SMALL LETTER U WITH ACUTE
-   (#xFB ?\u00FB) ;; LATIN SMALL LETTER U WITH CIRCUMFLEX
-   (#xFC ?\u00FC) ;; LATIN SMALL LETTER U WITH DIAERESIS
-   (#xFD ?\u0169) ;; LATIN SMALL LETTER U WITH TILDE
-   (#xFE ?\u016B) ;; LATIN SMALL LETTER U WITH MACRON
-   (#xFF ?\u02D9));; DOT ABOVE
- "ISO-8859-4 (Latin-4)"
- '(mnemonic "Latin 4"
+(make-coding-system
+ 'iso-8859-4 'fixed-width "ISO-8859-4 (Latin-4)"
+ '(unicode-map
+   ((#x80 ?\u0080) ;; <control>
+    (#x81 ?\u0081) ;; <control>
+    (#x82 ?\u0082) ;; <control>
+    (#x83 ?\u0083) ;; <control>
+    (#x84 ?\u0084) ;; <control>
+    (#x85 ?\u0085) ;; <control>
+    (#x86 ?\u0086) ;; <control>
+    (#x87 ?\u0087) ;; <control>
+    (#x88 ?\u0088) ;; <control>
+    (#x89 ?\u0089) ;; <control>
+    (#x8A ?\u008A) ;; <control>
+    (#x8B ?\u008B) ;; <control>
+    (#x8C ?\u008C) ;; <control>
+    (#x8D ?\u008D) ;; <control>
+    (#x8E ?\u008E) ;; <control>
+    (#x8F ?\u008F) ;; <control>
+    (#x90 ?\u0090) ;; <control>
+    (#x91 ?\u0091) ;; <control>
+    (#x92 ?\u0092) ;; <control>
+    (#x93 ?\u0093) ;; <control>
+    (#x94 ?\u0094) ;; <control>
+    (#x95 ?\u0095) ;; <control>
+    (#x96 ?\u0096) ;; <control>
+    (#x97 ?\u0097) ;; <control>
+    (#x98 ?\u0098) ;; <control>
+    (#x99 ?\u0099) ;; <control>
+    (#x9A ?\u009A) ;; <control>
+    (#x9B ?\u009B) ;; <control>
+    (#x9C ?\u009C) ;; <control>
+    (#x9D ?\u009D) ;; <control>
+    (#x9E ?\u009E) ;; <control>
+    (#x9F ?\u009F) ;; <control>
+    (#xA0 ?\u00A0) ;; NO-BREAK SPACE
+    (#xA1 ?\u0104) ;; LATIN CAPITAL LETTER A WITH OGONEK
+    (#xA2 ?\u0138) ;; LATIN SMALL LETTER KRA
+    (#xA3 ?\u0156) ;; LATIN CAPITAL LETTER R WITH CEDILLA
+    (#xA4 ?\u00A4) ;; CURRENCY SIGN
+    (#xA5 ?\u0128) ;; LATIN CAPITAL LETTER I WITH TILDE
+    (#xA6 ?\u013B) ;; LATIN CAPITAL LETTER L WITH CEDILLA
+    (#xA7 ?\u00A7) ;; SECTION SIGN
+    (#xA8 ?\u00A8) ;; DIAERESIS
+    (#xA9 ?\u0160) ;; LATIN CAPITAL LETTER S WITH CARON
+    (#xAA ?\u0112) ;; LATIN CAPITAL LETTER E WITH MACRON
+    (#xAB ?\u0122) ;; LATIN CAPITAL LETTER G WITH CEDILLA
+    (#xAC ?\u0166) ;; LATIN CAPITAL LETTER T WITH STROKE
+    (#xAD ?\u00AD) ;; SOFT HYPHEN
+    (#xAE ?\u017D) ;; LATIN CAPITAL LETTER Z WITH CARON
+    (#xAF ?\u00AF) ;; MACRON
+    (#xB0 ?\u00B0) ;; DEGREE SIGN
+    (#xB1 ?\u0105) ;; LATIN SMALL LETTER A WITH OGONEK
+    (#xB2 ?\u02DB) ;; OGONEK
+    (#xB3 ?\u0157) ;; LATIN SMALL LETTER R WITH CEDILLA
+    (#xB4 ?\u00B4) ;; ACUTE ACCENT
+    (#xB5 ?\u0129) ;; LATIN SMALL LETTER I WITH TILDE
+    (#xB6 ?\u013C) ;; LATIN SMALL LETTER L WITH CEDILLA
+    (#xB7 ?\u02C7) ;; CARON
+    (#xB8 ?\u00B8) ;; CEDILLA
+    (#xB9 ?\u0161) ;; LATIN SMALL LETTER S WITH CARON
+    (#xBA ?\u0113) ;; LATIN SMALL LETTER E WITH MACRON
+    (#xBB ?\u0123) ;; LATIN SMALL LETTER G WITH CEDILLA
+    (#xBC ?\u0167) ;; LATIN SMALL LETTER T WITH STROKE
+    (#xBD ?\u014A) ;; LATIN CAPITAL LETTER ENG
+    (#xBE ?\u017E) ;; LATIN SMALL LETTER Z WITH CARON
+    (#xBF ?\u014B) ;; LATIN SMALL LETTER ENG
+    (#xC0 ?\u0100) ;; LATIN CAPITAL LETTER A WITH MACRON
+    (#xC1 ?\u00C1) ;; LATIN CAPITAL LETTER A WITH ACUTE
+    (#xC2 ?\u00C2) ;; LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    (#xC3 ?\u00C3) ;; LATIN CAPITAL LETTER A WITH TILDE
+    (#xC4 ?\u00C4) ;; LATIN CAPITAL LETTER A WITH DIAERESIS
+    (#xC5 ?\u00C5) ;; LATIN CAPITAL LETTER A WITH RING ABOVE
+    (#xC6 ?\u00C6) ;; LATIN CAPITAL LETTER AE
+    (#xC7 ?\u012E) ;; LATIN CAPITAL LETTER I WITH OGONEK
+    (#xC8 ?\u010C) ;; LATIN CAPITAL LETTER C WITH CARON
+    (#xC9 ?\u00C9) ;; LATIN CAPITAL LETTER E WITH ACUTE
+    (#xCA ?\u0118) ;; LATIN CAPITAL LETTER E WITH OGONEK
+    (#xCB ?\u00CB) ;; LATIN CAPITAL LETTER E WITH DIAERESIS
+    (#xCC ?\u0116) ;; LATIN CAPITAL LETTER E WITH DOT ABOVE
+    (#xCD ?\u00CD) ;; LATIN CAPITAL LETTER I WITH ACUTE
+    (#xCE ?\u00CE) ;; LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    (#xCF ?\u012A) ;; LATIN CAPITAL LETTER I WITH MACRON
+    (#xD0 ?\u0110) ;; LATIN CAPITAL LETTER D WITH STROKE
+    (#xD1 ?\u0145) ;; LATIN CAPITAL LETTER N WITH CEDILLA
+    (#xD2 ?\u014C) ;; LATIN CAPITAL LETTER O WITH MACRON
+    (#xD3 ?\u0136) ;; LATIN CAPITAL LETTER K WITH CEDILLA
+    (#xD4 ?\u00D4) ;; LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    (#xD5 ?\u00D5) ;; LATIN CAPITAL LETTER O WITH TILDE
+    (#xD6 ?\u00D6) ;; LATIN CAPITAL LETTER O WITH DIAERESIS
+    (#xD7 ?\u00D7) ;; MULTIPLICATION SIGN
+    (#xD8 ?\u00D8) ;; LATIN CAPITAL LETTER O WITH STROKE
+    (#xD9 ?\u0172) ;; LATIN CAPITAL LETTER U WITH OGONEK
+    (#xDA ?\u00DA) ;; LATIN CAPITAL LETTER U WITH ACUTE
+    (#xDB ?\u00DB) ;; LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    (#xDC ?\u00DC) ;; LATIN CAPITAL LETTER U WITH DIAERESIS
+    (#xDD ?\u0168) ;; LATIN CAPITAL LETTER U WITH TILDE
+    (#xDE ?\u016A) ;; LATIN CAPITAL LETTER U WITH MACRON
+    (#xDF ?\u00DF) ;; LATIN SMALL LETTER SHARP S
+    (#xE0 ?\u0101) ;; LATIN SMALL LETTER A WITH MACRON
+    (#xE1 ?\u00E1) ;; LATIN SMALL LETTER A WITH ACUTE
+    (#xE2 ?\u00E2) ;; LATIN SMALL LETTER A WITH CIRCUMFLEX
+    (#xE3 ?\u00E3) ;; LATIN SMALL LETTER A WITH TILDE
+    (#xE4 ?\u00E4) ;; LATIN SMALL LETTER A WITH DIAERESIS
+    (#xE5 ?\u00E5) ;; LATIN SMALL LETTER A WITH RING ABOVE
+    (#xE6 ?\u00E6) ;; LATIN SMALL LETTER AE
+    (#xE7 ?\u012F) ;; LATIN SMALL LETTER I WITH OGONEK
+    (#xE8 ?\u010D) ;; LATIN SMALL LETTER C WITH CARON
+    (#xE9 ?\u00E9) ;; LATIN SMALL LETTER E WITH ACUTE
+    (#xEA ?\u0119) ;; LATIN SMALL LETTER E WITH OGONEK
+    (#xEB ?\u00EB) ;; LATIN SMALL LETTER E WITH DIAERESIS
+    (#xEC ?\u0117) ;; LATIN SMALL LETTER E WITH DOT ABOVE
+    (#xED ?\u00ED) ;; LATIN SMALL LETTER I WITH ACUTE
+    (#xEE ?\u00EE) ;; LATIN SMALL LETTER I WITH CIRCUMFLEX
+    (#xEF ?\u012B) ;; LATIN SMALL LETTER I WITH MACRON
+    (#xF0 ?\u0111) ;; LATIN SMALL LETTER D WITH STROKE
+    (#xF1 ?\u0146) ;; LATIN SMALL LETTER N WITH CEDILLA
+    (#xF2 ?\u014D) ;; LATIN SMALL LETTER O WITH MACRON
+    (#xF3 ?\u0137) ;; LATIN SMALL LETTER K WITH CEDILLA
+    (#xF4 ?\u00F4) ;; LATIN SMALL LETTER O WITH CIRCUMFLEX
+    (#xF5 ?\u00F5) ;; LATIN SMALL LETTER O WITH TILDE
+    (#xF6 ?\u00F6) ;; LATIN SMALL LETTER O WITH DIAERESIS
+    (#xF7 ?\u00F7) ;; DIVISION SIGN
+    (#xF8 ?\u00F8) ;; LATIN SMALL LETTER O WITH STROKE
+    (#xF9 ?\u0173) ;; LATIN SMALL LETTER U WITH OGONEK
+    (#xFA ?\u00FA) ;; LATIN SMALL LETTER U WITH ACUTE
+    (#xFB ?\u00FB) ;; LATIN SMALL LETTER U WITH CIRCUMFLEX
+    (#xFC ?\u00FC) ;; LATIN SMALL LETTER U WITH DIAERESIS
+    (#xFD ?\u0169) ;; LATIN SMALL LETTER U WITH TILDE
+    (#xFE ?\u016B) ;; LATIN SMALL LETTER U WITH MACRON
+    (#xFF ?\u02D9)) ;; DOT ABOVE
+   mnemonic "Latin 4"
    aliases (iso-latin-4 latin-4)
    documentation "Obsolete coding system for the Baltic rim.  "))
 
@@ -873,138 +876,138 @@
    (#xDD #xFD) ;; Y WITH ACUTE
    (#xDE #xFE))) ;; Y WITH CIRCUMFLEX
 
-(make-8-bit-coding-system
- 'iso-8859-14
- '((#x80 ?\u0080) ;; <control>
-   (#x81 ?\u0081) ;; <control>
-   (#x82 ?\u0082) ;; <control>
-   (#x83 ?\u0083) ;; <control>
-   (#x84 ?\u0084) ;; <control>
-   (#x85 ?\u0085) ;; <control>
-   (#x86 ?\u0086) ;; <control>
-   (#x87 ?\u0087) ;; <control>
-   (#x88 ?\u0088) ;; <control>
-   (#x89 ?\u0089) ;; <control>
-   (#x8A ?\u008A) ;; <control>
-   (#x8B ?\u008B) ;; <control>
-   (#x8C ?\u008C) ;; <control>
-   (#x8D ?\u008D) ;; <control>
-   (#x8E ?\u008E) ;; <control>
-   (#x8F ?\u008F) ;; <control>
-   (#x90 ?\u0090) ;; <control>
-   (#x91 ?\u0091) ;; <control>
-   (#x92 ?\u0092) ;; <control>
-   (#x93 ?\u0093) ;; <control>
-   (#x94 ?\u0094) ;; <control>
-   (#x95 ?\u0095) ;; <control>
-   (#x96 ?\u0096) ;; <control>
-   (#x97 ?\u0097) ;; <control>
-   (#x98 ?\u0098) ;; <control>
-   (#x99 ?\u0099) ;; <control>
-   (#x9A ?\u009A) ;; <control>
-   (#x9B ?\u009B) ;; <control>
-   (#x9C ?\u009C) ;; <control>
-   (#x9D ?\u009D) ;; <control>
-   (#x9E ?\u009E) ;; <control>
-   (#x9F ?\u009F) ;; <control>
-   (#xA0 ?\u00A0) ;; NO-BREAK SPACE
-   (#xA1 ?\u1E02) ;; LATIN CAPITAL LETTER B WITH DOT ABOVE
-   (#xA2 ?\u1E03) ;; LATIN SMALL LETTER B WITH DOT ABOVE
-   (#xA3 ?\u00A3) ;; POUND SIGN
-   (#xA4 ?\u010A) ;; LATIN CAPITAL LETTER C WITH DOT ABOVE
-   (#xA5 ?\u010B) ;; LATIN SMALL LETTER C WITH DOT ABOVE
-   (#xA6 ?\u1E0A) ;; LATIN CAPITAL LETTER D WITH DOT ABOVE
-   (#xA7 ?\u00A7) ;; SECTION SIGN
-   (#xA8 ?\u1E80) ;; LATIN CAPITAL LETTER W WITH GRAVE
-   (#xA9 ?\u00A9) ;; COPYRIGHT SIGN
-   (#xAA ?\u1E82) ;; LATIN CAPITAL LETTER W WITH ACUTE
-   (#xAB ?\u1E0B) ;; LATIN SMALL LETTER D WITH DOT ABOVE
-   (#xAC ?\u1EF2) ;; LATIN CAPITAL LETTER Y WITH GRAVE
-   (#xAD ?\u00AD) ;; SOFT HYPHEN
-   (#xAE ?\u00AE) ;; REGISTERED SIGN
-   (#xAF ?\u0178) ;; LATIN CAPITAL LETTER Y WITH DIAERESIS
-   (#xB0 ?\u1E1E) ;; LATIN CAPITAL LETTER F WITH DOT ABOVE
-   (#xB1 ?\u1E1F) ;; LATIN SMALL LETTER F WITH DOT ABOVE
-   (#xB2 ?\u0120) ;; LATIN CAPITAL LETTER G WITH DOT ABOVE
-   (#xB3 ?\u0121) ;; LATIN SMALL LETTER G WITH DOT ABOVE
-   (#xB4 ?\u1E40) ;; LATIN CAPITAL LETTER M WITH DOT ABOVE
-   (#xB5 ?\u1E41) ;; LATIN SMALL LETTER M WITH DOT ABOVE
-   (#xB6 ?\u00B6) ;; PILCROW SIGN
-   (#xB7 ?\u1E56) ;; LATIN CAPITAL LETTER P WITH DOT ABOVE
-   (#xB8 ?\u1E81) ;; LATIN SMALL LETTER W WITH GRAVE
-   (#xB9 ?\u1E57) ;; LATIN SMALL LETTER P WITH DOT ABOVE
-   (#xBA ?\u1E83) ;; LATIN SMALL LETTER W WITH ACUTE
-   (#xBB ?\u1E60) ;; LATIN CAPITAL LETTER S WITH DOT ABOVE
-   (#xBC ?\u1EF3) ;; LATIN SMALL LETTER Y WITH GRAVE
-   (#xBD ?\u1E84) ;; LATIN CAPITAL LETTER W WITH DIAERESIS
-   (#xBE ?\u1E85) ;; LATIN SMALL LETTER W WITH DIAERESIS
-   (#xBF ?\u1E61) ;; LATIN SMALL LETTER S WITH DOT ABOVE
-   (#xC0 ?\u00C0) ;; LATIN CAPITAL LETTER A WITH GRAVE
-   (#xC1 ?\u00C1) ;; LATIN CAPITAL LETTER A WITH ACUTE
-   (#xC2 ?\u00C2) ;; LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-   (#xC3 ?\u00C3) ;; LATIN CAPITAL LETTER A WITH TILDE
-   (#xC4 ?\u00C4) ;; LATIN CAPITAL LETTER A WITH DIAERESIS
-   (#xC5 ?\u00C5) ;; LATIN CAPITAL LETTER A WITH RING ABOVE
-   (#xC6 ?\u00C6) ;; LATIN CAPITAL LETTER AE
-   (#xC7 ?\u00C7) ;; LATIN CAPITAL LETTER C WITH CEDILLA
-   (#xC8 ?\u00C8) ;; LATIN CAPITAL LETTER E WITH GRAVE
-   (#xC9 ?\u00C9) ;; LATIN CAPITAL LETTER E WITH ACUTE
-   (#xCA ?\u00CA) ;; LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-   (#xCB ?\u00CB) ;; LATIN CAPITAL LETTER E WITH DIAERESIS
-   (#xCC ?\u00CC) ;; LATIN CAPITAL LETTER I WITH GRAVE
-   (#xCD ?\u00CD) ;; LATIN CAPITAL LETTER I WITH ACUTE
-   (#xCE ?\u00CE) ;; LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-   (#xCF ?\u00CF) ;; LATIN CAPITAL LETTER I WITH DIAERESIS
-   (#xD0 ?\u0174) ;; LATIN CAPITAL LETTER W WITH CIRCUMFLEX
-   (#xD1 ?\u00D1) ;; LATIN CAPITAL LETTER N WITH TILDE
-   (#xD2 ?\u00D2) ;; LATIN CAPITAL LETTER O WITH GRAVE
-   (#xD3 ?\u00D3) ;; LATIN CAPITAL LETTER O WITH ACUTE
-   (#xD4 ?\u00D4) ;; LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-   (#xD5 ?\u00D5) ;; LATIN CAPITAL LETTER O WITH TILDE
-   (#xD6 ?\u00D6) ;; LATIN CAPITAL LETTER O WITH DIAERESIS
-   (#xD7 ?\u1E6A) ;; LATIN CAPITAL LETTER T WITH DOT ABOVE
-   (#xD8 ?\u00D8) ;; LATIN CAPITAL LETTER O WITH STROKE
-   (#xD9 ?\u00D9) ;; LATIN CAPITAL LETTER U WITH GRAVE
-   (#xDA ?\u00DA) ;; LATIN CAPITAL LETTER U WITH ACUTE
-   (#xDB ?\u00DB) ;; LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-   (#xDC ?\u00DC) ;; LATIN CAPITAL LETTER U WITH DIAERESIS
-   (#xDD ?\u00DD) ;; LATIN CAPITAL LETTER Y WITH ACUTE
-   (#xDE ?\u0176) ;; LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
-   (#xDF ?\u00DF) ;; LATIN SMALL LETTER SHARP S
-   (#xE0 ?\u00E0) ;; LATIN SMALL LETTER A WITH GRAVE
-   (#xE1 ?\u00E1) ;; LATIN SMALL LETTER A WITH ACUTE
-   (#xE2 ?\u00E2) ;; LATIN SMALL LETTER A WITH CIRCUMFLEX
-   (#xE3 ?\u00E3) ;; LATIN SMALL LETTER A WITH TILDE
-   (#xE4 ?\u00E4) ;; LATIN SMALL LETTER A WITH DIAERESIS
-   (#xE5 ?\u00E5) ;; LATIN SMALL LETTER A WITH RING ABOVE
-   (#xE6 ?\u00E6) ;; LATIN SMALL LETTER AE
-   (#xE7 ?\u00E7) ;; LATIN SMALL LETTER C WITH CEDILLA
-   (#xE8 ?\u00E8) ;; LATIN SMALL LETTER E WITH GRAVE
-   (#xE9 ?\u00E9) ;; LATIN SMALL LETTER E WITH ACUTE
-   (#xEA ?\u00EA) ;; LATIN SMALL LETTER E WITH CIRCUMFLEX
-   (#xEB ?\u00EB) ;; LATIN SMALL LETTER E WITH DIAERESIS
-   (#xEC ?\u00EC) ;; LATIN SMALL LETTER I WITH GRAVE
-   (#xED ?\u00ED) ;; LATIN SMALL LETTER I WITH ACUTE
-   (#xEE ?\u00EE) ;; LATIN SMALL LETTER I WITH CIRCUMFLEX
-   (#xEF ?\u00EF) ;; LATIN SMALL LETTER I WITH DIAERESIS
-   (#xF0 ?\u0175) ;; LATIN SMALL LETTER W WITH CIRCUMFLEX
-   (#xF1 ?\u00F1) ;; LATIN SMALL LETTER N WITH TILDE
-   (#xF2 ?\u00F2) ;; LATIN SMALL LETTER O WITH GRAVE
-   (#xF3 ?\u00F3) ;; LATIN SMALL LETTER O WITH ACUTE
-   (#xF4 ?\u00F4) ;; LATIN SMALL LETTER O WITH CIRCUMFLEX
-   (#xF5 ?\u00F5) ;; LATIN SMALL LETTER O WITH TILDE
-   (#xF6 ?\u00F6) ;; LATIN SMALL LETTER O WITH DIAERESIS
-   (#xF7 ?\u1E6B) ;; LATIN SMALL LETTER T WITH DOT ABOVE
-   (#xF8 ?\u00F8) ;; LATIN SMALL LETTER O WITH STROKE
-   (#xF9 ?\u00F9) ;; LATIN SMALL LETTER U WITH GRAVE
-   (#xFA ?\u00FA) ;; LATIN SMALL LETTER U WITH ACUTE
-   (#xFB ?\u00FB) ;; LATIN SMALL LETTER U WITH CIRCUMFLEX
-   (#xFC ?\u00FC) ;; LATIN SMALL LETTER U WITH DIAERESIS
-   (#xFD ?\u00FD) ;; LATIN SMALL LETTER Y WITH ACUTE
-   (#xFE ?\u0177) ;; LATIN SMALL LETTER Y WITH CIRCUMFLEX
-   (#xFF ?\u00FF)) ;; LATIN SMALL LETTER Y WITH DIAERESIS
- "ISO-8859-14 (Latin-8)"
- '(mnemonic "Latin 8"
+(make-coding-system
+ 'iso-8859-14 'fixed-width "ISO-8859-14 (Latin-8)"
+ '(unicode-map
+   ((#x80 ?\u0080) ;; <control>
+    (#x81 ?\u0081) ;; <control>
+    (#x82 ?\u0082) ;; <control>
+    (#x83 ?\u0083) ;; <control>
+    (#x84 ?\u0084) ;; <control>
+    (#x85 ?\u0085) ;; <control>
+    (#x86 ?\u0086) ;; <control>
+    (#x87 ?\u0087) ;; <control>
+    (#x88 ?\u0088) ;; <control>
+    (#x89 ?\u0089) ;; <control>
+    (#x8A ?\u008A) ;; <control>
+    (#x8B ?\u008B) ;; <control>
+    (#x8C ?\u008C) ;; <control>
+    (#x8D ?\u008D) ;; <control>
+    (#x8E ?\u008E) ;; <control>
+    (#x8F ?\u008F) ;; <control>
+    (#x90 ?\u0090) ;; <control>
+    (#x91 ?\u0091) ;; <control>
+    (#x92 ?\u0092) ;; <control>
+    (#x93 ?\u0093) ;; <control>
+    (#x94 ?\u0094) ;; <control>
+    (#x95 ?\u0095) ;; <control>
+    (#x96 ?\u0096) ;; <control>
+    (#x97 ?\u0097) ;; <control>
+    (#x98 ?\u0098) ;; <control>
+    (#x99 ?\u0099) ;; <control>
+    (#x9A ?\u009A) ;; <control>
+    (#x9B ?\u009B) ;; <control>
+    (#x9C ?\u009C) ;; <control>
+    (#x9D ?\u009D) ;; <control>
+    (#x9E ?\u009E) ;; <control>
+    (#x9F ?\u009F) ;; <control>
+    (#xA0 ?\u00A0) ;; NO-BREAK SPACE
+    (#xA1 ?\u1E02) ;; LATIN CAPITAL LETTER B WITH DOT ABOVE
+    (#xA2 ?\u1E03) ;; LATIN SMALL LETTER B WITH DOT ABOVE
+    (#xA3 ?\u00A3) ;; POUND SIGN
+    (#xA4 ?\u010A) ;; LATIN CAPITAL LETTER C WITH DOT ABOVE
+    (#xA5 ?\u010B) ;; LATIN SMALL LETTER C WITH DOT ABOVE
+    (#xA6 ?\u1E0A) ;; LATIN CAPITAL LETTER D WITH DOT ABOVE
+    (#xA7 ?\u00A7) ;; SECTION SIGN
+    (#xA8 ?\u1E80) ;; LATIN CAPITAL LETTER W WITH GRAVE
+    (#xA9 ?\u00A9) ;; COPYRIGHT SIGN
+    (#xAA ?\u1E82) ;; LATIN CAPITAL LETTER W WITH ACUTE
+    (#xAB ?\u1E0B) ;; LATIN SMALL LETTER D WITH DOT ABOVE
+    (#xAC ?\u1EF2) ;; LATIN CAPITAL LETTER Y WITH GRAVE
+    (#xAD ?\u00AD) ;; SOFT HYPHEN
+    (#xAE ?\u00AE) ;; REGISTERED SIGN
+    (#xAF ?\u0178) ;; LATIN CAPITAL LETTER Y WITH DIAERESIS
+    (#xB0 ?\u1E1E) ;; LATIN CAPITAL LETTER F WITH DOT ABOVE
+    (#xB1 ?\u1E1F) ;; LATIN SMALL LETTER F WITH DOT ABOVE
+    (#xB2 ?\u0120) ;; LATIN CAPITAL LETTER G WITH DOT ABOVE
+    (#xB3 ?\u0121) ;; LATIN SMALL LETTER G WITH DOT ABOVE
+    (#xB4 ?\u1E40) ;; LATIN CAPITAL LETTER M WITH DOT ABOVE
+    (#xB5 ?\u1E41) ;; LATIN SMALL LETTER M WITH DOT ABOVE
+    (#xB6 ?\u00B6) ;; PILCROW SIGN
+    (#xB7 ?\u1E56) ;; LATIN CAPITAL LETTER P WITH DOT ABOVE
+    (#xB8 ?\u1E81) ;; LATIN SMALL LETTER W WITH GRAVE
+    (#xB9 ?\u1E57) ;; LATIN SMALL LETTER P WITH DOT ABOVE
+    (#xBA ?\u1E83) ;; LATIN SMALL LETTER W WITH ACUTE
+    (#xBB ?\u1E60) ;; LATIN CAPITAL LETTER S WITH DOT ABOVE
+    (#xBC ?\u1EF3) ;; LATIN SMALL LETTER Y WITH GRAVE
+    (#xBD ?\u1E84) ;; LATIN CAPITAL LETTER W WITH DIAERESIS
+    (#xBE ?\u1E85) ;; LATIN SMALL LETTER W WITH DIAERESIS
+    (#xBF ?\u1E61) ;; LATIN SMALL LETTER S WITH DOT ABOVE
+    (#xC0 ?\u00C0) ;; LATIN CAPITAL LETTER A WITH GRAVE
+    (#xC1 ?\u00C1) ;; LATIN CAPITAL LETTER A WITH ACUTE
+    (#xC2 ?\u00C2) ;; LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    (#xC3 ?\u00C3) ;; LATIN CAPITAL LETTER A WITH TILDE
+    (#xC4 ?\u00C4) ;; LATIN CAPITAL LETTER A WITH DIAERESIS
+    (#xC5 ?\u00C5) ;; LATIN CAPITAL LETTER A WITH RING ABOVE
+    (#xC6 ?\u00C6) ;; LATIN CAPITAL LETTER AE
+    (#xC7 ?\u00C7) ;; LATIN CAPITAL LETTER C WITH CEDILLA
+    (#xC8 ?\u00C8) ;; LATIN CAPITAL LETTER E WITH GRAVE
+    (#xC9 ?\u00C9) ;; LATIN CAPITAL LETTER E WITH ACUTE
+    (#xCA ?\u00CA) ;; LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+    (#xCB ?\u00CB) ;; LATIN CAPITAL LETTER E WITH DIAERESIS
+    (#xCC ?\u00CC) ;; LATIN CAPITAL LETTER I WITH GRAVE
+    (#xCD ?\u00CD) ;; LATIN CAPITAL LETTER I WITH ACUTE
+    (#xCE ?\u00CE) ;; LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    (#xCF ?\u00CF) ;; LATIN CAPITAL LETTER I WITH DIAERESIS
+    (#xD0 ?\u0174) ;; LATIN CAPITAL LETTER W WITH CIRCUMFLEX
+    (#xD1 ?\u00D1) ;; LATIN CAPITAL LETTER N WITH TILDE
+    (#xD2 ?\u00D2) ;; LATIN CAPITAL LETTER O WITH GRAVE
+    (#xD3 ?\u00D3) ;; LATIN CAPITAL LETTER O WITH ACUTE
+    (#xD4 ?\u00D4) ;; LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    (#xD5 ?\u00D5) ;; LATIN CAPITAL LETTER O WITH TILDE
+    (#xD6 ?\u00D6) ;; LATIN CAPITAL LETTER O WITH DIAERESIS
+    (#xD7 ?\u1E6A) ;; LATIN CAPITAL LETTER T WITH DOT ABOVE
+    (#xD8 ?\u00D8) ;; LATIN CAPITAL LETTER O WITH STROKE
+    (#xD9 ?\u00D9) ;; LATIN CAPITAL LETTER U WITH GRAVE
+    (#xDA ?\u00DA) ;; LATIN CAPITAL LETTER U WITH ACUTE
+    (#xDB ?\u00DB) ;; LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    (#xDC ?\u00DC) ;; LATIN CAPITAL LETTER U WITH DIAERESIS
+    (#xDD ?\u00DD) ;; LATIN CAPITAL LETTER Y WITH ACUTE
+    (#xDE ?\u0176) ;; LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
+    (#xDF ?\u00DF) ;; LATIN SMALL LETTER SHARP S
+    (#xE0 ?\u00E0) ;; LATIN SMALL LETTER A WITH GRAVE
+    (#xE1 ?\u00E1) ;; LATIN SMALL LETTER A WITH ACUTE
+    (#xE2 ?\u00E2) ;; LATIN SMALL LETTER A WITH CIRCUMFLEX
+    (#xE3 ?\u00E3) ;; LATIN SMALL LETTER A WITH TILDE
+    (#xE4 ?\u00E4) ;; LATIN SMALL LETTER A WITH DIAERESIS
+    (#xE5 ?\u00E5) ;; LATIN SMALL LETTER A WITH RING ABOVE
+    (#xE6 ?\u00E6) ;; LATIN SMALL LETTER AE
+    (#xE7 ?\u00E7) ;; LATIN SMALL LETTER C WITH CEDILLA
+    (#xE8 ?\u00E8) ;; LATIN SMALL LETTER E WITH GRAVE
+    (#xE9 ?\u00E9) ;; LATIN SMALL LETTER E WITH ACUTE
+    (#xEA ?\u00EA) ;; LATIN SMALL LETTER E WITH CIRCUMFLEX
+    (#xEB ?\u00EB) ;; LATIN SMALL LETTER E WITH DIAERESIS
+    (#xEC ?\u00EC) ;; LATIN SMALL LETTER I WITH GRAVE
+    (#xED ?\u00ED) ;; LATIN SMALL LETTER I WITH ACUTE
+    (#xEE ?\u00EE) ;; LATIN SMALL LETTER I WITH CIRCUMFLEX
+    (#xEF ?\u00EF) ;; LATIN SMALL LETTER I WITH DIAERESIS
+    (#xF0 ?\u0175) ;; LATIN SMALL LETTER W WITH CIRCUMFLEX
+    (#xF1 ?\u00F1) ;; LATIN SMALL LETTER N WITH TILDE
+    (#xF2 ?\u00F2) ;; LATIN SMALL LETTER O WITH GRAVE
+    (#xF3 ?\u00F3) ;; LATIN SMALL LETTER O WITH ACUTE
+    (#xF4 ?\u00F4) ;; LATIN SMALL LETTER O WITH CIRCUMFLEX
+    (#xF5 ?\u00F5) ;; LATIN SMALL LETTER O WITH TILDE
+    (#xF6 ?\u00F6) ;; LATIN SMALL LETTER O WITH DIAERESIS
+    (#xF7 ?\u1E6B) ;; LATIN SMALL LETTER T WITH DOT ABOVE
+    (#xF8 ?\u00F8) ;; LATIN SMALL LETTER O WITH STROKE
+    (#xF9 ?\u00F9) ;; LATIN SMALL LETTER U WITH GRAVE
+    (#xFA ?\u00FA) ;; LATIN SMALL LETTER U WITH ACUTE
+    (#xFB ?\u00FB) ;; LATIN SMALL LETTER U WITH CIRCUMFLEX
+    (#xFC ?\u00FC) ;; LATIN SMALL LETTER U WITH DIAERESIS
+    (#xFD ?\u00FD) ;; LATIN SMALL LETTER Y WITH ACUTE
+    (#xFE ?\u0177) ;; LATIN SMALL LETTER Y WITH CIRCUMFLEX
+    (#xFF ?\u00FF)) ;; LATIN SMALL LETTER Y WITH DIAERESIS
+   mnemonic "Latin 8"
    aliases (iso-latin-8 latin-8)))
 
 
@@ -1079,138 +1082,140 @@
    (#xDD #xFD) ;; Y WITH ACUTE
    (#xDE #xFE))) ;; THORN
 
-(make-8-bit-coding-system
- 'iso-8859-15 
- '((#x80 ?\u0080) ;; <control>
-   (#x81 ?\u0081) ;; <control>
-   (#x82 ?\u0082) ;; <control>
-   (#x83 ?\u0083) ;; <control>
-   (#x84 ?\u0084) ;; <control>
-   (#x85 ?\u0085) ;; <control>
-   (#x86 ?\u0086) ;; <control>
-   (#x87 ?\u0087) ;; <control>
-   (#x88 ?\u0088) ;; <control>
-   (#x89 ?\u0089) ;; <control>
-   (#x8A ?\u008A) ;; <control>
-   (#x8B ?\u008B) ;; <control>
-   (#x8C ?\u008C) ;; <control>
-   (#x8D ?\u008D) ;; <control>
-   (#x8E ?\u008E) ;; <control>
-   (#x8F ?\u008F) ;; <control>
-   (#x90 ?\u0090) ;; <control>
-   (#x91 ?\u0091) ;; <control>
-   (#x92 ?\u0092) ;; <control>
-   (#x93 ?\u0093) ;; <control>
-   (#x94 ?\u0094) ;; <control>
-   (#x95 ?\u0095) ;; <control>
-   (#x96 ?\u0096) ;; <control>
-   (#x97 ?\u0097) ;; <control>
-   (#x98 ?\u0098) ;; <control>
-   (#x99 ?\u0099) ;; <control>
-   (#x9A ?\u009A) ;; <control>
-   (#x9B ?\u009B) ;; <control>
-   (#x9C ?\u009C) ;; <control>
-   (#x9D ?\u009D) ;; <control>
-   (#x9E ?\u009E) ;; <control>
-   (#x9F ?\u009F) ;; <control>
-   (#xA0 ?\u00A0) ;; NO-BREAK SPACE
-   (#xA1 ?\u00A1) ;; INVERTED EXCLAMATION MARK
-   (#xA2 ?\u00A2) ;; CENT SIGN
-   (#xA3 ?\u00A3) ;; POUND SIGN
-   (#xA4 ?\u20AC) ;; EURO SIGN
-   (#xA5 ?\u00A5) ;; YEN SIGN
-   (#xA6 ?\u0160) ;; LATIN CAPITAL LETTER S WITH CARON
-   (#xA7 ?\u00A7) ;; SECTION SIGN
-   (#xA8 ?\u0161) ;; LATIN SMALL LETTER S WITH CARON
-   (#xA9 ?\u00A9) ;; COPYRIGHT SIGN
-   (#xAA ?\u00AA) ;; FEMININE ORDINAL INDICATOR
-   (#xAB ?\u00AB) ;; LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-   (#xAC ?\u00AC) ;; NOT SIGN
-   (#xAD ?\u00AD) ;; SOFT HYPHEN
-   (#xAE ?\u00AE) ;; REGISTERED SIGN
-   (#xAF ?\u00AF) ;; MACRON
-   (#xB0 ?\u00B0) ;; DEGREE SIGN
-   (#xB1 ?\u00B1) ;; PLUS-MINUS SIGN
-   (#xB2 ?\u00B2) ;; SUPERSCRIPT TWO
-   (#xB3 ?\u00B3) ;; SUPERSCRIPT THREE
-   (#xB4 ?\u017D) ;; LATIN CAPITAL LETTER Z WITH CARON
-   (#xB5 ?\u00B5) ;; MICRO SIGN
-   (#xB6 ?\u00B6) ;; PILCROW SIGN
-   (#xB7 ?\u00B7) ;; MIDDLE DOT
-   (#xB8 ?\u017E) ;; LATIN SMALL LETTER Z WITH CARON
-   (#xB9 ?\u00B9) ;; SUPERSCRIPT ONE
-   (#xBA ?\u00BA) ;; MASCULINE ORDINAL INDICATOR
-   (#xBB ?\u00BB) ;; RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-   (#xBC ?\u0152) ;; LATIN CAPITAL LIGATURE OE
-   (#xBD ?\u0153) ;; LATIN SMALL LIGATURE OE
-   (#xBE ?\u0178) ;; LATIN CAPITAL LETTER Y WITH DIAERESIS
-   (#xBF ?\u00BF) ;; INVERTED QUESTION MARK
-   (#xC0 ?\u00C0) ;; LATIN CAPITAL LETTER A WITH GRAVE
-   (#xC1 ?\u00C1) ;; LATIN CAPITAL LETTER A WITH ACUTE
-   (#xC2 ?\u00C2) ;; LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-   (#xC3 ?\u00C3) ;; LATIN CAPITAL LETTER A WITH TILDE
-   (#xC4 ?\u00C4) ;; LATIN CAPITAL LETTER A WITH DIAERESIS
-   (#xC5 ?\u00C5) ;; LATIN CAPITAL LETTER A WITH RING ABOVE
-   (#xC6 ?\u00C6) ;; LATIN CAPITAL LETTER AE
-   (#xC7 ?\u00C7) ;; LATIN CAPITAL LETTER C WITH CEDILLA
-   (#xC8 ?\u00C8) ;; LATIN CAPITAL LETTER E WITH GRAVE
-   (#xC9 ?\u00C9) ;; LATIN CAPITAL LETTER E WITH ACUTE
-   (#xCA ?\u00CA) ;; LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-   (#xCB ?\u00CB) ;; LATIN CAPITAL LETTER E WITH DIAERESIS
-   (#xCC ?\u00CC) ;; LATIN CAPITAL LETTER I WITH GRAVE
-   (#xCD ?\u00CD) ;; LATIN CAPITAL LETTER I WITH ACUTE
-   (#xCE ?\u00CE) ;; LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-   (#xCF ?\u00CF) ;; LATIN CAPITAL LETTER I WITH DIAERESIS
-   (#xD0 ?\u00D0) ;; LATIN CAPITAL LETTER ETH
-   (#xD1 ?\u00D1) ;; LATIN CAPITAL LETTER N WITH TILDE
-   (#xD2 ?\u00D2) ;; LATIN CAPITAL LETTER O WITH GRAVE
-   (#xD3 ?\u00D3) ;; LATIN CAPITAL LETTER O WITH ACUTE
-   (#xD4 ?\u00D4) ;; LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-   (#xD5 ?\u00D5) ;; LATIN CAPITAL LETTER O WITH TILDE
-   (#xD6 ?\u00D6) ;; LATIN CAPITAL LETTER O WITH DIAERESIS
-   (#xD7 ?\u00D7) ;; MULTIPLICATION SIGN
-   (#xD8 ?\u00D8) ;; LATIN CAPITAL LETTER O WITH STROKE
-   (#xD9 ?\u00D9) ;; LATIN CAPITAL LETTER U WITH GRAVE
-   (#xDA ?\u00DA) ;; LATIN CAPITAL LETTER U WITH ACUTE
-   (#xDB ?\u00DB) ;; LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-   (#xDC ?\u00DC) ;; LATIN CAPITAL LETTER U WITH DIAERESIS
-   (#xDD ?\u00DD) ;; LATIN CAPITAL LETTER Y WITH ACUTE
-   (#xDE ?\u00DE) ;; LATIN CAPITAL LETTER THORN
-   (#xDF ?\u00DF) ;; LATIN SMALL LETTER SHARP S
-   (#xE0 ?\u00E0) ;; LATIN SMALL LETTER A WITH GRAVE
-   (#xE1 ?\u00E1) ;; LATIN SMALL LETTER A WITH ACUTE
-   (#xE2 ?\u00E2) ;; LATIN SMALL LETTER A WITH CIRCUMFLEX
-   (#xE3 ?\u00E3) ;; LATIN SMALL LETTER A WITH TILDE
-   (#xE4 ?\u00E4) ;; LATIN SMALL LETTER A WITH DIAERESIS
-   (#xE5 ?\u00E5) ;; LATIN SMALL LETTER A WITH RING ABOVE
-   (#xE6 ?\u00E6) ;; LATIN SMALL LETTER AE
-   (#xE7 ?\u00E7) ;; LATIN SMALL LETTER C WITH CEDILLA
-   (#xE8 ?\u00E8) ;; LATIN SMALL LETTER E WITH GRAVE
-   (#xE9 ?\u00E9) ;; LATIN SMALL LETTER E WITH ACUTE
-   (#xEA ?\u00EA) ;; LATIN SMALL LETTER E WITH CIRCUMFLEX
-   (#xEB ?\u00EB) ;; LATIN SMALL LETTER E WITH DIAERESIS
-   (#xEC ?\u00EC) ;; LATIN SMALL LETTER I WITH GRAVE
-   (#xED ?\u00ED) ;; LATIN SMALL LETTER I WITH ACUTE
-   (#xEE ?\u00EE) ;; LATIN SMALL LETTER I WITH CIRCUMFLEX
-   (#xEF ?\u00EF) ;; LATIN SMALL LETTER I WITH DIAERESIS
-   (#xF0 ?\u00F0) ;; LATIN SMALL LETTER ETH
-   (#xF1 ?\u00F1) ;; LATIN SMALL LETTER N WITH TILDE
-   (#xF2 ?\u00F2) ;; LATIN SMALL LETTER O WITH GRAVE
-   (#xF3 ?\u00F3) ;; LATIN SMALL LETTER O WITH ACUTE
-   (#xF4 ?\u00F4) ;; LATIN SMALL LETTER O WITH CIRCUMFLEX
-   (#xF5 ?\u00F5) ;; LATIN SMALL LETTER O WITH TILDE
-   (#xF6 ?\u00F6) ;; LATIN SMALL LETTER O WITH DIAERESIS
-   (#xF7 ?\u00F7) ;; DIVISION SIGN
-   (#xF8 ?\u00F8) ;; LATIN SMALL LETTER O WITH STROKE
-   (#xF9 ?\u00F9) ;; LATIN SMALL LETTER U WITH GRAVE
-   (#xFA ?\u00FA) ;; LATIN SMALL LETTER U WITH ACUTE
-   (#xFB ?\u00FB) ;; LATIN SMALL LETTER U WITH CIRCUMFLEX
-   (#xFC ?\u00FC) ;; LATIN SMALL LETTER U WITH DIAERESIS
-   (#xFD ?\u00FD) ;; LATIN SMALL LETTER Y WITH ACUTE
-   (#xFE ?\u00FE) ;; LATIN SMALL LETTER THORN
-   (#xFF ?\u00FF)) ;; LATIN SMALL LETTER Y WITH DIAERESIS
- "ISO 4873 conforming 8-bit code (ASCII + Latin 9; aka Latin-1 with Euro)"
-  '(mnemonic "Latin 9"
+(make-coding-system
+ 'iso-8859-15 'fixed-width "ISO-8859-15 (Latin-9"
+ '(unicode-map
+   ((#x80 ?\u0080) ;; <control>
+    (#x81 ?\u0081) ;; <control>
+    (#x82 ?\u0082) ;; <control>
+    (#x83 ?\u0083) ;; <control>
+    (#x84 ?\u0084) ;; <control>
+    (#x85 ?\u0085) ;; <control>
+    (#x86 ?\u0086) ;; <control>
+    (#x87 ?\u0087) ;; <control>
+    (#x88 ?\u0088) ;; <control>
+    (#x89 ?\u0089) ;; <control>
+    (#x8A ?\u008A) ;; <control>
+    (#x8B ?\u008B) ;; <control>
+    (#x8C ?\u008C) ;; <control>
+    (#x8D ?\u008D) ;; <control>
+    (#x8E ?\u008E) ;; <control>
+    (#x8F ?\u008F) ;; <control>
+    (#x90 ?\u0090) ;; <control>
+    (#x91 ?\u0091) ;; <control>
+    (#x92 ?\u0092) ;; <control>
+    (#x93 ?\u0093) ;; <control>
+    (#x94 ?\u0094) ;; <control>
+    (#x95 ?\u0095) ;; <control>
+    (#x96 ?\u0096) ;; <control>
+    (#x97 ?\u0097) ;; <control>
+    (#x98 ?\u0098) ;; <control>
+    (#x99 ?\u0099) ;; <control>
+    (#x9A ?\u009A) ;; <control>
+    (#x9B ?\u009B) ;; <control>
+    (#x9C ?\u009C) ;; <control>
+    (#x9D ?\u009D) ;; <control>
+    (#x9E ?\u009E) ;; <control>
+    (#x9F ?\u009F) ;; <control>
+    (#xA0 ?\u00A0) ;; NO-BREAK SPACE
+    (#xA1 ?\u00A1) ;; INVERTED EXCLAMATION MARK
+    (#xA2 ?\u00A2) ;; CENT SIGN
+    (#xA3 ?\u00A3) ;; POUND SIGN
+    (#xA4 ?\u20AC) ;; EURO SIGN
+    (#xA5 ?\u00A5) ;; YEN SIGN
+    (#xA6 ?\u0160) ;; LATIN CAPITAL LETTER S WITH CARON
+    (#xA7 ?\u00A7) ;; SECTION SIGN
+    (#xA8 ?\u0161) ;; LATIN SMALL LETTER S WITH CARON
+    (#xA9 ?\u00A9) ;; COPYRIGHT SIGN
+    (#xAA ?\u00AA) ;; FEMININE ORDINAL INDICATOR
+    (#xAB ?\u00AB) ;; LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    (#xAC ?\u00AC) ;; NOT SIGN
+    (#xAD ?\u00AD) ;; SOFT HYPHEN
+    (#xAE ?\u00AE) ;; REGISTERED SIGN
+    (#xAF ?\u00AF) ;; MACRON
+    (#xB0 ?\u00B0) ;; DEGREE SIGN
+    (#xB1 ?\u00B1) ;; PLUS-MINUS SIGN
+    (#xB2 ?\u00B2) ;; SUPERSCRIPT TWO
+    (#xB3 ?\u00B3) ;; SUPERSCRIPT THREE
+    (#xB4 ?\u017D) ;; LATIN CAPITAL LETTER Z WITH CARON
+    (#xB5 ?\u00B5) ;; MICRO SIGN
+    (#xB6 ?\u00B6) ;; PILCROW SIGN
+    (#xB7 ?\u00B7) ;; MIDDLE DOT
+    (#xB8 ?\u017E) ;; LATIN SMALL LETTER Z WITH CARON
+    (#xB9 ?\u00B9) ;; SUPERSCRIPT ONE
+    (#xBA ?\u00BA) ;; MASCULINE ORDINAL INDICATOR
+    (#xBB ?\u00BB) ;; RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    (#xBC ?\u0152) ;; LATIN CAPITAL LIGATURE OE
+    (#xBD ?\u0153) ;; LATIN SMALL LIGATURE OE
+    (#xBE ?\u0178) ;; LATIN CAPITAL LETTER Y WITH DIAERESIS
+    (#xBF ?\u00BF) ;; INVERTED QUESTION MARK
+    (#xC0 ?\u00C0) ;; LATIN CAPITAL LETTER A WITH GRAVE
+    (#xC1 ?\u00C1) ;; LATIN CAPITAL LETTER A WITH ACUTE
+    (#xC2 ?\u00C2) ;; LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    (#xC3 ?\u00C3) ;; LATIN CAPITAL LETTER A WITH TILDE
+    (#xC4 ?\u00C4) ;; LATIN CAPITAL LETTER A WITH DIAERESIS
+    (#xC5 ?\u00C5) ;; LATIN CAPITAL LETTER A WITH RING ABOVE
+    (#xC6 ?\u00C6) ;; LATIN CAPITAL LETTER AE
+    (#xC7 ?\u00C7) ;; LATIN CAPITAL LETTER C WITH CEDILLA
+    (#xC8 ?\u00C8) ;; LATIN CAPITAL LETTER E WITH GRAVE
+    (#xC9 ?\u00C9) ;; LATIN CAPITAL LETTER E WITH ACUTE
+    (#xCA ?\u00CA) ;; LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+    (#xCB ?\u00CB) ;; LATIN CAPITAL LETTER E WITH DIAERESIS
+    (#xCC ?\u00CC) ;; LATIN CAPITAL LETTER I WITH GRAVE
+    (#xCD ?\u00CD) ;; LATIN CAPITAL LETTER I WITH ACUTE
+    (#xCE ?\u00CE) ;; LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    (#xCF ?\u00CF) ;; LATIN CAPITAL LETTER I WITH DIAERESIS
+    (#xD0 ?\u00D0) ;; LATIN CAPITAL LETTER ETH
+    (#xD1 ?\u00D1) ;; LATIN CAPITAL LETTER N WITH TILDE
+    (#xD2 ?\u00D2) ;; LATIN CAPITAL LETTER O WITH GRAVE
+    (#xD3 ?\u00D3) ;; LATIN CAPITAL LETTER O WITH ACUTE
+    (#xD4 ?\u00D4) ;; LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    (#xD5 ?\u00D5) ;; LATIN CAPITAL LETTER O WITH TILDE
+    (#xD6 ?\u00D6) ;; LATIN CAPITAL LETTER O WITH DIAERESIS
+    (#xD7 ?\u00D7) ;; MULTIPLICATION SIGN
+    (#xD8 ?\u00D8) ;; LATIN CAPITAL LETTER O WITH STROKE
+    (#xD9 ?\u00D9) ;; LATIN CAPITAL LETTER U WITH GRAVE
+    (#xDA ?\u00DA) ;; LATIN CAPITAL LETTER U WITH ACUTE
+    (#xDB ?\u00DB) ;; LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    (#xDC ?\u00DC) ;; LATIN CAPITAL LETTER U WITH DIAERESIS
+    (#xDD ?\u00DD) ;; LATIN CAPITAL LETTER Y WITH ACUTE
+    (#xDE ?\u00DE) ;; LATIN CAPITAL LETTER THORN
+    (#xDF ?\u00DF) ;; LATIN SMALL LETTER SHARP S
+    (#xE0 ?\u00E0) ;; LATIN SMALL LETTER A WITH GRAVE
+    (#xE1 ?\u00E1) ;; LATIN SMALL LETTER A WITH ACUTE
+    (#xE2 ?\u00E2) ;; LATIN SMALL LETTER A WITH CIRCUMFLEX
+    (#xE3 ?\u00E3) ;; LATIN SMALL LETTER A WITH TILDE
+    (#xE4 ?\u00E4) ;; LATIN SMALL LETTER A WITH DIAERESIS
+    (#xE5 ?\u00E5) ;; LATIN SMALL LETTER A WITH RING ABOVE
+    (#xE6 ?\u00E6) ;; LATIN SMALL LETTER AE
+    (#xE7 ?\u00E7) ;; LATIN SMALL LETTER C WITH CEDILLA
+    (#xE8 ?\u00E8) ;; LATIN SMALL LETTER E WITH GRAVE
+    (#xE9 ?\u00E9) ;; LATIN SMALL LETTER E WITH ACUTE
+    (#xEA ?\u00EA) ;; LATIN SMALL LETTER E WITH CIRCUMFLEX
+    (#xEB ?\u00EB) ;; LATIN SMALL LETTER E WITH DIAERESIS
+    (#xEC ?\u00EC) ;; LATIN SMALL LETTER I WITH GRAVE
+    (#xED ?\u00ED) ;; LATIN SMALL LETTER I WITH ACUTE
+    (#xEE ?\u00EE) ;; LATIN SMALL LETTER I WITH CIRCUMFLEX
+    (#xEF ?\u00EF) ;; LATIN SMALL LETTER I WITH DIAERESIS
+    (#xF0 ?\u00F0) ;; LATIN SMALL LETTER ETH
+    (#xF1 ?\u00F1) ;; LATIN SMALL LETTER N WITH TILDE
+    (#xF2 ?\u00F2) ;; LATIN SMALL LETTER O WITH GRAVE
+    (#xF3 ?\u00F3) ;; LATIN SMALL LETTER O WITH ACUTE
+    (#xF4 ?\u00F4) ;; LATIN SMALL LETTER O WITH CIRCUMFLEX
+    (#xF5 ?\u00F5) ;; LATIN SMALL LETTER O WITH TILDE
+    (#xF6 ?\u00F6) ;; LATIN SMALL LETTER O WITH DIAERESIS
+    (#xF7 ?\u00F7) ;; DIVISION SIGN
+    (#xF8 ?\u00F8) ;; LATIN SMALL LETTER O WITH STROKE
+    (#xF9 ?\u00F9) ;; LATIN SMALL LETTER U WITH GRAVE
+    (#xFA ?\u00FA) ;; LATIN SMALL LETTER U WITH ACUTE
+    (#xFB ?\u00FB) ;; LATIN SMALL LETTER U WITH CIRCUMFLEX
+    (#xFC ?\u00FC) ;; LATIN SMALL LETTER U WITH DIAERESIS
+    (#xFD ?\u00FD) ;; LATIN SMALL LETTER Y WITH ACUTE
+    (#xFE ?\u00FE) ;; LATIN SMALL LETTER THORN
+    (#xFF ?\u00FF)) ;; LATIN SMALL LETTER Y WITH DIAERESIS
+   documentation "ISO 4873 conforming 8-bit code.
+(ASCII + Latin 9; aka Latin-1 with Euro)"
+    mnemonic "Latin 9"
     aliases (iso-latin-9 latin-9 latin-0)))
 
 ;; end of ISO 8859-15. 
@@ -1309,138 +1314,138 @@
    (#xDE #xFE))) ;; T WITH COMMA BELOW
 
 ;; Add a coding system for ISO 8859-16.
-(make-8-bit-coding-system
- 'iso-8859-16
- '((#x80 ?\u0080) ;; <control>
-   (#x81 ?\u0081) ;; <control>
-   (#x82 ?\u0082) ;; <control>
-   (#x83 ?\u0083) ;; <control>
-   (#x84 ?\u0084) ;; <control>
-   (#x85 ?\u0085) ;; <control>
-   (#x86 ?\u0086) ;; <control>
-   (#x87 ?\u0087) ;; <control>
-   (#x88 ?\u0088) ;; <control>
-   (#x89 ?\u0089) ;; <control>
-   (#x8A ?\u008A) ;; <control>
-   (#x8B ?\u008B) ;; <control>
-   (#x8C ?\u008C) ;; <control>
-   (#x8D ?\u008D) ;; <control>
-   (#x8E ?\u008E) ;; <control>
-   (#x8F ?\u008F) ;; <control>
-   (#x90 ?\u0090) ;; <control>
-   (#x91 ?\u0091) ;; <control>
-   (#x92 ?\u0092) ;; <control>
-   (#x93 ?\u0093) ;; <control>
-   (#x94 ?\u0094) ;; <control>
-   (#x95 ?\u0095) ;; <control>
-   (#x96 ?\u0096) ;; <control>
-   (#x97 ?\u0097) ;; <control>
-   (#x98 ?\u0098) ;; <control>
-   (#x99 ?\u0099) ;; <control>
-   (#x9A ?\u009A) ;; <control>
-   (#x9B ?\u009B) ;; <control>
-   (#x9C ?\u009C) ;; <control>
-   (#x9D ?\u009D) ;; <control>
-   (#x9E ?\u009E) ;; <control>
-   (#x9F ?\u009F) ;; <control>
-   (#xA0 ?\u00A0) ;; NO-BREAK SPACE
-   (#xA1 ?\u0104) ;; LATIN CAPITAL LETTER A WITH OGONEK
-   (#xA2 ?\u0105) ;; LATIN SMALL LETTER A WITH OGONEK
-   (#xA3 ?\u0141) ;; LATIN CAPITAL LETTER L WITH STROKE
-   (#xA4 ?\u20AC) ;; EURO SIGN
-   (#xA5 ?\u201E) ;; DOUBLE LOW-9 QUOTATION MARK
-   (#xA6 ?\u0160) ;; LATIN CAPITAL LETTER S WITH CARON
-   (#xA7 ?\u00A7) ;; SECTION SIGN
-   (#xA8 ?\u0161) ;; LATIN SMALL LETTER S WITH CARON
-   (#xA9 ?\u00A9) ;; COPYRIGHT SIGN
-   (#xAA ?\u0218) ;; LATIN CAPITAL LETTER S WITH COMMA BELOW
-   (#xAB ?\u00AB) ;; LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-   (#xAC ?\u0179) ;; LATIN CAPITAL LETTER Z WITH ACUTE
-   (#xAD ?\u00AD) ;; SOFT HYPHEN
-   (#xAE ?\u017A) ;; LATIN SMALL LETTER Z WITH ACUTE
-   (#xAF ?\u017B) ;; LATIN CAPITAL LETTER Z WITH DOT ABOVE
-   (#xB0 ?\u00B0) ;; DEGREE SIGN
-   (#xB1 ?\u00B1) ;; PLUS-MINUS SIGN
-   (#xB2 ?\u010C) ;; LATIN CAPITAL LETTER C WITH CARON
-   (#xB3 ?\u0142) ;; LATIN SMALL LETTER L WITH STROKE
-   (#xB4 ?\u017D) ;; LATIN CAPITAL LETTER Z WITH CARON
-   (#xB5 ?\u201D) ;; RIGHT DOUBLE QUOTATION MARK
-   (#xB6 ?\u00B6) ;; PILCROW SIGN
-   (#xB7 ?\u00B7) ;; MIDDLE DOT
-   (#xB8 ?\u017E) ;; LATIN SMALL LETTER Z WITH CARON
-   (#xB9 ?\u010D) ;; LATIN SMALL LETTER C WITH CARON
-   (#xBA ?\u0219) ;; LATIN SMALL LETTER S WITH COMMA BELOW
-   (#xBB ?\u00BB) ;; RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-   (#xBC ?\u0152) ;; LATIN CAPITAL LIGATURE OE
-   (#xBD ?\u0153) ;; LATIN SMALL LIGATURE OE
-   (#xBE ?\u0178) ;; LATIN CAPITAL LETTER Y WITH DIAERESIS
-   (#xBF ?\u017C) ;; LATIN SMALL LETTER Z WITH DOT ABOVE
-   (#xC0 ?\u00C0) ;; LATIN CAPITAL LETTER A WITH GRAVE
-   (#xC1 ?\u00C1) ;; LATIN CAPITAL LETTER A WITH ACUTE
-   (#xC2 ?\u00C2) ;; LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-   (#xC3 ?\u0102) ;; LATIN CAPITAL LETTER A WITH BREVE
-   (#xC4 ?\u00C4) ;; LATIN CAPITAL LETTER A WITH DIAERESIS
-   (#xC5 ?\u0106) ;; LATIN CAPITAL LETTER C WITH ACUTE
-   (#xC6 ?\u00C6) ;; LATIN CAPITAL LETTER AE
-   (#xC7 ?\u00C7) ;; LATIN CAPITAL LETTER C WITH CEDILLA
-   (#xC8 ?\u00C8) ;; LATIN CAPITAL LETTER E WITH GRAVE
-   (#xC9 ?\u00C9) ;; LATIN CAPITAL LETTER E WITH ACUTE
-   (#xCA ?\u00CA) ;; LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-   (#xCB ?\u00CB) ;; LATIN CAPITAL LETTER E WITH DIAERESIS
-   (#xCC ?\u00CC) ;; LATIN CAPITAL LETTER I WITH GRAVE
-   (#xCD ?\u00CD) ;; LATIN CAPITAL LETTER I WITH ACUTE
-   (#xCE ?\u00CE) ;; LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-   (#xCF ?\u00CF) ;; LATIN CAPITAL LETTER I WITH DIAERESIS
-   (#xD0 ?\u0110) ;; LATIN CAPITAL LETTER D WITH STROKE
-   (#xD1 ?\u0143) ;; LATIN CAPITAL LETTER N WITH ACUTE
-   (#xD2 ?\u00D2) ;; LATIN CAPITAL LETTER O WITH GRAVE
-   (#xD3 ?\u00D3) ;; LATIN CAPITAL LETTER O WITH ACUTE
-   (#xD4 ?\u00D4) ;; LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-   (#xD5 ?\u0150) ;; LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
-   (#xD6 ?\u00D6) ;; LATIN CAPITAL LETTER O WITH DIAERESIS
-   (#xD7 ?\u015A) ;; LATIN CAPITAL LETTER S WITH ACUTE
-   (#xD8 ?\u0170) ;; LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
-   (#xD9 ?\u00D9) ;; LATIN CAPITAL LETTER U WITH GRAVE
-   (#xDA ?\u00DA) ;; LATIN CAPITAL LETTER U WITH ACUTE
-   (#xDB ?\u00DB) ;; LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-   (#xDC ?\u00DC) ;; LATIN CAPITAL LETTER U WITH DIAERESIS
-   (#xDD ?\u0118) ;; LATIN CAPITAL LETTER E WITH OGONEK
-   (#xDE ?\u021A) ;; LATIN CAPITAL LETTER T WITH COMMA BELOW
-   (#xDF ?\u00DF) ;; LATIN SMALL LETTER SHARP S
-   (#xE0 ?\u00E0) ;; LATIN SMALL LETTER A WITH GRAVE
-   (#xE1 ?\u00E1) ;; LATIN SMALL LETTER A WITH ACUTE
-   (#xE2 ?\u00E2) ;; LATIN SMALL LETTER A WITH CIRCUMFLEX
-   (#xE3 ?\u0103) ;; LATIN SMALL LETTER A WITH BREVE
-   (#xE4 ?\u00E4) ;; LATIN SMALL LETTER A WITH DIAERESIS
-   (#xE5 ?\u0107) ;; LATIN SMALL LETTER C WITH ACUTE
-   (#xE6 ?\u00E6) ;; LATIN SMALL LETTER AE
-   (#xE7 ?\u00E7) ;; LATIN SMALL LETTER C WITH CEDILLA
-   (#xE8 ?\u00E8) ;; LATIN SMALL LETTER E WITH GRAVE
-   (#xE9 ?\u00E9) ;; LATIN SMALL LETTER E WITH ACUTE
-   (#xEA ?\u00EA) ;; LATIN SMALL LETTER E WITH CIRCUMFLEX
-   (#xEB ?\u00EB) ;; LATIN SMALL LETTER E WITH DIAERESIS
-   (#xEC ?\u00EC) ;; LATIN SMALL LETTER I WITH GRAVE
-   (#xED ?\u00ED) ;; LATIN SMALL LETTER I WITH ACUTE
-   (#xEE ?\u00EE) ;; LATIN SMALL LETTER I WITH CIRCUMFLEX
-   (#xEF ?\u00EF) ;; LATIN SMALL LETTER I WITH DIAERESIS
-   (#xF0 ?\u0111) ;; LATIN SMALL LETTER D WITH STROKE
-   (#xF1 ?\u0144) ;; LATIN SMALL LETTER N WITH ACUTE
-   (#xF2 ?\u00F2) ;; LATIN SMALL LETTER O WITH GRAVE
-   (#xF3 ?\u00F3) ;; LATIN SMALL LETTER O WITH ACUTE
-   (#xF4 ?\u00F4) ;; LATIN SMALL LETTER O WITH CIRCUMFLEX
-   (#xF5 ?\u0151) ;; LATIN SMALL LETTER O WITH DOUBLE ACUTE
-   (#xF6 ?\u00F6) ;; LATIN SMALL LETTER O WITH DIAERESIS
-   (#xF7 ?\u015B) ;; LATIN SMALL LETTER S WITH ACUTE
-   (#xF8 ?\u0171) ;; LATIN SMALL LETTER U WITH DOUBLE ACUTE
-   (#xF9 ?\u00F9) ;; LATIN SMALL LETTER U WITH GRAVE
-   (#xFA ?\u00FA) ;; LATIN SMALL LETTER U WITH ACUTE
-   (#xFB ?\u00FB) ;; LATIN SMALL LETTER U WITH CIRCUMFLEX
-   (#xFC ?\u00FC) ;; LATIN SMALL LETTER U WITH DIAERESIS
-   (#xFD ?\u0119) ;; LATIN SMALL LETTER E WITH OGONEK
-   (#xFE ?\u021B) ;; LATIN SMALL LETTER T WITH COMMA BELOW
-   (#xFF ?\u00FF)) ;; LATIN SMALL LETTER Y WITH DIAERESIS
- "ISO-8859-16 (Latin-10)"
- '(mnemonic "Latin 10"
+(make-coding-system
+ 'iso-8859-16 'fixed-width "ISO-8859-16 (Latin-10)"
+ '(unicode-map
+   ((#x80 ?\u0080) ;; <control>
+    (#x81 ?\u0081) ;; <control>
+    (#x82 ?\u0082) ;; <control>
+    (#x83 ?\u0083) ;; <control>
+    (#x84 ?\u0084) ;; <control>
+    (#x85 ?\u0085) ;; <control>
+    (#x86 ?\u0086) ;; <control>
+    (#x87 ?\u0087) ;; <control>
+    (#x88 ?\u0088) ;; <control>
+    (#x89 ?\u0089) ;; <control>
+    (#x8A ?\u008A) ;; <control>
+    (#x8B ?\u008B) ;; <control>
+    (#x8C ?\u008C) ;; <control>
+    (#x8D ?\u008D) ;; <control>
+    (#x8E ?\u008E) ;; <control>
+    (#x8F ?\u008F) ;; <control>
+    (#x90 ?\u0090) ;; <control>
+    (#x91 ?\u0091) ;; <control>
+    (#x92 ?\u0092) ;; <control>
+    (#x93 ?\u0093) ;; <control>
+    (#x94 ?\u0094) ;; <control>
+    (#x95 ?\u0095) ;; <control>
+    (#x96 ?\u0096) ;; <control>
+    (#x97 ?\u0097) ;; <control>
+    (#x98 ?\u0098) ;; <control>
+    (#x99 ?\u0099) ;; <control>
+    (#x9A ?\u009A) ;; <control>
+    (#x9B ?\u009B) ;; <control>
+    (#x9C ?\u009C) ;; <control>
+    (#x9D ?\u009D) ;; <control>
+    (#x9E ?\u009E) ;; <control>
+    (#x9F ?\u009F) ;; <control>
+    (#xA0 ?\u00A0) ;; NO-BREAK SPACE
+    (#xA1 ?\u0104) ;; LATIN CAPITAL LETTER A WITH OGONEK
+    (#xA2 ?\u0105) ;; LATIN SMALL LETTER A WITH OGONEK
+    (#xA3 ?\u0141) ;; LATIN CAPITAL LETTER L WITH STROKE
+    (#xA4 ?\u20AC) ;; EURO SIGN
+    (#xA5 ?\u201E) ;; DOUBLE LOW-9 QUOTATION MARK
+    (#xA6 ?\u0160) ;; LATIN CAPITAL LETTER S WITH CARON
+    (#xA7 ?\u00A7) ;; SECTION SIGN
+    (#xA8 ?\u0161) ;; LATIN SMALL LETTER S WITH CARON
+    (#xA9 ?\u00A9) ;; COPYRIGHT SIGN
+    (#xAA ?\u0218) ;; LATIN CAPITAL LETTER S WITH COMMA BELOW
+    (#xAB ?\u00AB) ;; LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    (#xAC ?\u0179) ;; LATIN CAPITAL LETTER Z WITH ACUTE
+    (#xAD ?\u00AD) ;; SOFT HYPHEN
+    (#xAE ?\u017A) ;; LATIN SMALL LETTER Z WITH ACUTE
+    (#xAF ?\u017B) ;; LATIN CAPITAL LETTER Z WITH DOT ABOVE
+    (#xB0 ?\u00B0) ;; DEGREE SIGN
+    (#xB1 ?\u00B1) ;; PLUS-MINUS SIGN
+    (#xB2 ?\u010C) ;; LATIN CAPITAL LETTER C WITH CARON
+    (#xB3 ?\u0142) ;; LATIN SMALL LETTER L WITH STROKE
+    (#xB4 ?\u017D) ;; LATIN CAPITAL LETTER Z WITH CARON
+    (#xB5 ?\u201D) ;; RIGHT DOUBLE QUOTATION MARK
+    (#xB6 ?\u00B6) ;; PILCROW SIGN
+    (#xB7 ?\u00B7) ;; MIDDLE DOT
+    (#xB8 ?\u017E) ;; LATIN SMALL LETTER Z WITH CARON
+    (#xB9 ?\u010D) ;; LATIN SMALL LETTER C WITH CARON
+    (#xBA ?\u0219) ;; LATIN SMALL LETTER S WITH COMMA BELOW
+    (#xBB ?\u00BB) ;; RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    (#xBC ?\u0152) ;; LATIN CAPITAL LIGATURE OE
+    (#xBD ?\u0153) ;; LATIN SMALL LIGATURE OE
+    (#xBE ?\u0178) ;; LATIN CAPITAL LETTER Y WITH DIAERESIS
+    (#xBF ?\u017C) ;; LATIN SMALL LETTER Z WITH DOT ABOVE
+    (#xC0 ?\u00C0) ;; LATIN CAPITAL LETTER A WITH GRAVE
+    (#xC1 ?\u00C1) ;; LATIN CAPITAL LETTER A WITH ACUTE
+    (#xC2 ?\u00C2) ;; LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    (#xC3 ?\u0102) ;; LATIN CAPITAL LETTER A WITH BREVE
+    (#xC4 ?\u00C4) ;; LATIN CAPITAL LETTER A WITH DIAERESIS
+    (#xC5 ?\u0106) ;; LATIN CAPITAL LETTER C WITH ACUTE
+    (#xC6 ?\u00C6) ;; LATIN CAPITAL LETTER AE
+    (#xC7 ?\u00C7) ;; LATIN CAPITAL LETTER C WITH CEDILLA
+    (#xC8 ?\u00C8) ;; LATIN CAPITAL LETTER E WITH GRAVE
+    (#xC9 ?\u00C9) ;; LATIN CAPITAL LETTER E WITH ACUTE
+    (#xCA ?\u00CA) ;; LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+    (#xCB ?\u00CB) ;; LATIN CAPITAL LETTER E WITH DIAERESIS
+    (#xCC ?\u00CC) ;; LATIN CAPITAL LETTER I WITH GRAVE
+    (#xCD ?\u00CD) ;; LATIN CAPITAL LETTER I WITH ACUTE
+    (#xCE ?\u00CE) ;; LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    (#xCF ?\u00CF) ;; LATIN CAPITAL LETTER I WITH DIAERESIS
+    (#xD0 ?\u0110) ;; LATIN CAPITAL LETTER D WITH STROKE
+    (#xD1 ?\u0143) ;; LATIN CAPITAL LETTER N WITH ACUTE
+    (#xD2 ?\u00D2) ;; LATIN CAPITAL LETTER O WITH GRAVE
+    (#xD3 ?\u00D3) ;; LATIN CAPITAL LETTER O WITH ACUTE
+    (#xD4 ?\u00D4) ;; LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    (#xD5 ?\u0150) ;; LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+    (#xD6 ?\u00D6) ;; LATIN CAPITAL LETTER O WITH DIAERESIS
+    (#xD7 ?\u015A) ;; LATIN CAPITAL LETTER S WITH ACUTE
+    (#xD8 ?\u0170) ;; LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+    (#xD9 ?\u00D9) ;; LATIN CAPITAL LETTER U WITH GRAVE
+    (#xDA ?\u00DA) ;; LATIN CAPITAL LETTER U WITH ACUTE
+    (#xDB ?\u00DB) ;; LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    (#xDC ?\u00DC) ;; LATIN CAPITAL LETTER U WITH DIAERESIS
+    (#xDD ?\u0118) ;; LATIN CAPITAL LETTER E WITH OGONEK
+    (#xDE ?\u021A) ;; LATIN CAPITAL LETTER T WITH COMMA BELOW
+    (#xDF ?\u00DF) ;; LATIN SMALL LETTER SHARP S
+    (#xE0 ?\u00E0) ;; LATIN SMALL LETTER A WITH GRAVE
+    (#xE1 ?\u00E1) ;; LATIN SMALL LETTER A WITH ACUTE
+    (#xE2 ?\u00E2) ;; LATIN SMALL LETTER A WITH CIRCUMFLEX
+    (#xE3 ?\u0103) ;; LATIN SMALL LETTER A WITH BREVE
+    (#xE4 ?\u00E4) ;; LATIN SMALL LETTER A WITH DIAERESIS
+    (#xE5 ?\u0107) ;; LATIN SMALL LETTER C WITH ACUTE
+    (#xE6 ?\u00E6) ;; LATIN SMALL LETTER AE
+    (#xE7 ?\u00E7) ;; LATIN SMALL LETTER C WITH CEDILLA
+    (#xE8 ?\u00E8) ;; LATIN SMALL LETTER E WITH GRAVE
+    (#xE9 ?\u00E9) ;; LATIN SMALL LETTER E WITH ACUTE
+    (#xEA ?\u00EA) ;; LATIN SMALL LETTER E WITH CIRCUMFLEX
+    (#xEB ?\u00EB) ;; LATIN SMALL LETTER E WITH DIAERESIS
+    (#xEC ?\u00EC) ;; LATIN SMALL LETTER I WITH GRAVE
+    (#xED ?\u00ED) ;; LATIN SMALL LETTER I WITH ACUTE
+    (#xEE ?\u00EE) ;; LATIN SMALL LETTER I WITH CIRCUMFLEX
+    (#xEF ?\u00EF) ;; LATIN SMALL LETTER I WITH DIAERESIS
+    (#xF0 ?\u0111) ;; LATIN SMALL LETTER D WITH STROKE
+    (#xF1 ?\u0144) ;; LATIN SMALL LETTER N WITH ACUTE
+    (#xF2 ?\u00F2) ;; LATIN SMALL LETTER O WITH GRAVE
+    (#xF3 ?\u00F3) ;; LATIN SMALL LETTER O WITH ACUTE
+    (#xF4 ?\u00F4) ;; LATIN SMALL LETTER O WITH CIRCUMFLEX
+    (#xF5 ?\u0151) ;; LATIN SMALL LETTER O WITH DOUBLE ACUTE
+    (#xF6 ?\u00F6) ;; LATIN SMALL LETTER O WITH DIAERESIS
+    (#xF7 ?\u015B) ;; LATIN SMALL LETTER S WITH ACUTE
+    (#xF8 ?\u0171) ;; LATIN SMALL LETTER U WITH DOUBLE ACUTE
+    (#xF9 ?\u00F9) ;; LATIN SMALL LETTER U WITH GRAVE
+    (#xFA ?\u00FA) ;; LATIN SMALL LETTER U WITH ACUTE
+    (#xFB ?\u00FB) ;; LATIN SMALL LETTER U WITH CIRCUMFLEX
+    (#xFC ?\u00FC) ;; LATIN SMALL LETTER U WITH DIAERESIS
+    (#xFD ?\u0119) ;; LATIN SMALL LETTER E WITH OGONEK
+    (#xFE ?\u021B) ;; LATIN SMALL LETTER T WITH COMMA BELOW
+    (#xFF ?\u00FF)) ;; LATIN SMALL LETTER Y WITH DIAERESIS
+   mnemonic "Latin 10"
    aliases (iso-latin-10)))
 
 ;; end of ISO 8859-16. 
@@ -1517,138 +1522,138 @@
                 (make-char 'latin-iso8859-9 #xfd)
                 ?I (standard-case-table))
 
-(make-8-bit-coding-system
- 'iso-8859-9 
- '((#x80 ?\u0080) ;; <control>
-   (#x81 ?\u0081) ;; <control>
-   (#x82 ?\u0082) ;; <control>
-   (#x83 ?\u0083) ;; <control>
-   (#x84 ?\u0084) ;; <control>
-   (#x85 ?\u0085) ;; <control>
-   (#x86 ?\u0086) ;; <control>
-   (#x87 ?\u0087) ;; <control>
-   (#x88 ?\u0088) ;; <control>
-   (#x89 ?\u0089) ;; <control>
-   (#x8A ?\u008A) ;; <control>
-   (#x8B ?\u008B) ;; <control>
-   (#x8C ?\u008C) ;; <control>
-   (#x8D ?\u008D) ;; <control>
-   (#x8E ?\u008E) ;; <control>
-   (#x8F ?\u008F) ;; <control>
-   (#x90 ?\u0090) ;; <control>
-   (#x91 ?\u0091) ;; <control>
-   (#x92 ?\u0092) ;; <control>
-   (#x93 ?\u0093) ;; <control>
-   (#x94 ?\u0094) ;; <control>
-   (#x95 ?\u0095) ;; <control>
-   (#x96 ?\u0096) ;; <control>
-   (#x97 ?\u0097) ;; <control>
-   (#x98 ?\u0098) ;; <control>
-   (#x99 ?\u0099) ;; <control>
-   (#x9A ?\u009A) ;; <control>
-   (#x9B ?\u009B) ;; <control>
-   (#x9C ?\u009C) ;; <control>
-   (#x9D ?\u009D) ;; <control>
-   (#x9E ?\u009E) ;; <control>
-   (#x9F ?\u009F) ;; <control>
-   (#xA0 ?\u00A0) ;; NO-BREAK SPACE
-   (#xA1 ?\u00A1) ;; INVERTED EXCLAMATION MARK
-   (#xA2 ?\u00A2) ;; CENT SIGN
-   (#xA3 ?\u00A3) ;; POUND SIGN
-   (#xA4 ?\u00A4) ;; CURRENCY SIGN
-   (#xA5 ?\u00A5) ;; YEN SIGN
-   (#xA6 ?\u00A6) ;; BROKEN BAR
-   (#xA7 ?\u00A7) ;; SECTION SIGN
-   (#xA8 ?\u00A8) ;; DIAERESIS
-   (#xA9 ?\u00A9) ;; COPYRIGHT SIGN
-   (#xAA ?\u00AA) ;; FEMININE ORDINAL INDICATOR
-   (#xAB ?\u00AB) ;; LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-   (#xAC ?\u00AC) ;; NOT SIGN
-   (#xAD ?\u00AD) ;; SOFT HYPHEN
-   (#xAE ?\u00AE) ;; REGISTERED SIGN
-   (#xAF ?\u00AF) ;; MACRON
-   (#xB0 ?\u00B0) ;; DEGREE SIGN
-   (#xB1 ?\u00B1) ;; PLUS-MINUS SIGN
-   (#xB2 ?\u00B2) ;; SUPERSCRIPT TWO
-   (#xB3 ?\u00B3) ;; SUPERSCRIPT THREE
-   (#xB4 ?\u00B4) ;; ACUTE ACCENT
-   (#xB5 ?\u00B5) ;; MICRO SIGN
-   (#xB6 ?\u00B6) ;; PILCROW SIGN
-   (#xB7 ?\u00B7) ;; MIDDLE DOT
-   (#xB8 ?\u00B8) ;; CEDILLA
-   (#xB9 ?\u00B9) ;; SUPERSCRIPT ONE
-   (#xBA ?\u00BA) ;; MASCULINE ORDINAL INDICATOR
-   (#xBB ?\u00BB) ;; RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-   (#xBC ?\u00BC) ;; VULGAR FRACTION ONE QUARTER
-   (#xBD ?\u00BD) ;; VULGAR FRACTION ONE HALF
-   (#xBE ?\u00BE) ;; VULGAR FRACTION THREE QUARTERS
-   (#xBF ?\u00BF) ;; INVERTED QUESTION MARK
-   (#xC0 ?\u00C0) ;; LATIN CAPITAL LETTER A WITH GRAVE
-   (#xC1 ?\u00C1) ;; LATIN CAPITAL LETTER A WITH ACUTE
-   (#xC2 ?\u00C2) ;; LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-   (#xC3 ?\u00C3) ;; LATIN CAPITAL LETTER A WITH TILDE
-   (#xC4 ?\u00C4) ;; LATIN CAPITAL LETTER A WITH DIAERESIS
-   (#xC5 ?\u00C5) ;; LATIN CAPITAL LETTER A WITH RING ABOVE
-   (#xC6 ?\u00C6) ;; LATIN CAPITAL LETTER AE
-   (#xC7 ?\u00C7) ;; LATIN CAPITAL LETTER C WITH CEDILLA
-   (#xC8 ?\u00C8) ;; LATIN CAPITAL LETTER E WITH GRAVE
-   (#xC9 ?\u00C9) ;; LATIN CAPITAL LETTER E WITH ACUTE
-   (#xCA ?\u00CA) ;; LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-   (#xCB ?\u00CB) ;; LATIN CAPITAL LETTER E WITH DIAERESIS
-   (#xCC ?\u00CC) ;; LATIN CAPITAL LETTER I WITH GRAVE
-   (#xCD ?\u00CD) ;; LATIN CAPITAL LETTER I WITH ACUTE
-   (#xCE ?\u00CE) ;; LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-   (#xCF ?\u00CF) ;; LATIN CAPITAL LETTER I WITH DIAERESIS
-   (#xD0 ?\u011E) ;; LATIN CAPITAL LETTER G WITH BREVE
-   (#xD1 ?\u00D1) ;; LATIN CAPITAL LETTER N WITH TILDE
-   (#xD2 ?\u00D2) ;; LATIN CAPITAL LETTER O WITH GRAVE
-   (#xD3 ?\u00D3) ;; LATIN CAPITAL LETTER O WITH ACUTE
-   (#xD4 ?\u00D4) ;; LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-   (#xD5 ?\u00D5) ;; LATIN CAPITAL LETTER O WITH TILDE
-   (#xD6 ?\u00D6) ;; LATIN CAPITAL LETTER O WITH DIAERESIS
-   (#xD7 ?\u00D7) ;; MULTIPLICATION SIGN
-   (#xD8 ?\u00D8) ;; LATIN CAPITAL LETTER O WITH STROKE
-   (#xD9 ?\u00D9) ;; LATIN CAPITAL LETTER U WITH GRAVE
-   (#xDA ?\u00DA) ;; LATIN CAPITAL LETTER U WITH ACUTE
-   (#xDB ?\u00DB) ;; LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-   (#xDC ?\u00DC) ;; LATIN CAPITAL LETTER U WITH DIAERESIS
-   (#xDD ?\u0130) ;; LATIN CAPITAL LETTER I WITH DOT ABOVE
-   (#xDE ?\u015E) ;; LATIN CAPITAL LETTER S WITH CEDILLA
-   (#xDF ?\u00DF) ;; LATIN SMALL LETTER SHARP S
-   (#xE0 ?\u00E0) ;; LATIN SMALL LETTER A WITH GRAVE
-   (#xE1 ?\u00E1) ;; LATIN SMALL LETTER A WITH ACUTE
-   (#xE2 ?\u00E2) ;; LATIN SMALL LETTER A WITH CIRCUMFLEX
-   (#xE3 ?\u00E3) ;; LATIN SMALL LETTER A WITH TILDE
-   (#xE4 ?\u00E4) ;; LATIN SMALL LETTER A WITH DIAERESIS
-   (#xE5 ?\u00E5) ;; LATIN SMALL LETTER A WITH RING ABOVE
-   (#xE6 ?\u00E6) ;; LATIN SMALL LETTER AE
-   (#xE7 ?\u00E7) ;; LATIN SMALL LETTER C WITH CEDILLA
-   (#xE8 ?\u00E8) ;; LATIN SMALL LETTER E WITH GRAVE
-   (#xE9 ?\u00E9) ;; LATIN SMALL LETTER E WITH ACUTE
-   (#xEA ?\u00EA) ;; LATIN SMALL LETTER E WITH CIRCUMFLEX
-   (#xEB ?\u00EB) ;; LATIN SMALL LETTER E WITH DIAERESIS
-   (#xEC ?\u00EC) ;; LATIN SMALL LETTER I WITH GRAVE
-   (#xED ?\u00ED) ;; LATIN SMALL LETTER I WITH ACUTE
-   (#xEE ?\u00EE) ;; LATIN SMALL LETTER I WITH CIRCUMFLEX
-   (#xEF ?\u00EF) ;; LATIN SMALL LETTER I WITH DIAERESIS
-   (#xF0 ?\u011F) ;; LATIN SMALL LETTER G WITH BREVE
-   (#xF1 ?\u00F1) ;; LATIN SMALL LETTER N WITH TILDE
-   (#xF2 ?\u00F2) ;; LATIN SMALL LETTER O WITH GRAVE
-   (#xF3 ?\u00F3) ;; LATIN SMALL LETTER O WITH ACUTE
-   (#xF4 ?\u00F4) ;; LATIN SMALL LETTER O WITH CIRCUMFLEX
-   (#xF5 ?\u00F5) ;; LATIN SMALL LETTER O WITH TILDE
-   (#xF6 ?\u00F6) ;; LATIN SMALL LETTER O WITH DIAERESIS
-   (#xF7 ?\u00F7) ;; DIVISION SIGN
-   (#xF8 ?\u00F8) ;; LATIN SMALL LETTER O WITH STROKE
-   (#xF9 ?\u00F9) ;; LATIN SMALL LETTER U WITH GRAVE
-   (#xFA ?\u00FA) ;; LATIN SMALL LETTER U WITH ACUTE
-   (#xFB ?\u00FB) ;; LATIN SMALL LETTER U WITH CIRCUMFLEX
-   (#xFC ?\u00FC) ;; LATIN SMALL LETTER U WITH DIAERESIS
-   (#xFD ?\u0131) ;; LATIN SMALL LETTER DOTLESS I
-   (#xFE ?\u015F) ;; LATIN SMALL LETTER S WITH CEDILLA
-   (#xFF ?\u00FF)) ;; LATIN SMALL LETTER Y WITH DIAERESIS
- "ISO-8859-9 (Latin-5)"
- '(mnemonic "Latin 5"
+(make-coding-system
+ 'iso-8859-9 'fixed-width "ISO-8859-9 (Latin-5)"
+ '(unicode-map
+   ((#x80 ?\u0080) ;; <control>
+    (#x81 ?\u0081) ;; <control>
+    (#x82 ?\u0082) ;; <control>
+    (#x83 ?\u0083) ;; <control>
+    (#x84 ?\u0084) ;; <control>
+    (#x85 ?\u0085) ;; <control>
+    (#x86 ?\u0086) ;; <control>
+    (#x87 ?\u0087) ;; <control>
+    (#x88 ?\u0088) ;; <control>
+    (#x89 ?\u0089) ;; <control>
+    (#x8A ?\u008A) ;; <control>
+    (#x8B ?\u008B) ;; <control>
+    (#x8C ?\u008C) ;; <control>
+    (#x8D ?\u008D) ;; <control>
+    (#x8E ?\u008E) ;; <control>
+    (#x8F ?\u008F) ;; <control>
+    (#x90 ?\u0090) ;; <control>
+    (#x91 ?\u0091) ;; <control>
+    (#x92 ?\u0092) ;; <control>
+    (#x93 ?\u0093) ;; <control>
+    (#x94 ?\u0094) ;; <control>
+    (#x95 ?\u0095) ;; <control>
+    (#x96 ?\u0096) ;; <control>
+    (#x97 ?\u0097) ;; <control>
+    (#x98 ?\u0098) ;; <control>
+    (#x99 ?\u0099) ;; <control>
+    (#x9A ?\u009A) ;; <control>
+    (#x9B ?\u009B) ;; <control>
+    (#x9C ?\u009C) ;; <control>
+    (#x9D ?\u009D) ;; <control>
+    (#x9E ?\u009E) ;; <control>
+    (#x9F ?\u009F) ;; <control>
+    (#xA0 ?\u00A0) ;; NO-BREAK SPACE
+    (#xA1 ?\u00A1) ;; INVERTED EXCLAMATION MARK
+    (#xA2 ?\u00A2) ;; CENT SIGN
+    (#xA3 ?\u00A3) ;; POUND SIGN
+    (#xA4 ?\u00A4) ;; CURRENCY SIGN
+    (#xA5 ?\u00A5) ;; YEN SIGN
+    (#xA6 ?\u00A6) ;; BROKEN BAR
+    (#xA7 ?\u00A7) ;; SECTION SIGN
+    (#xA8 ?\u00A8) ;; DIAERESIS
+    (#xA9 ?\u00A9) ;; COPYRIGHT SIGN
+    (#xAA ?\u00AA) ;; FEMININE ORDINAL INDICATOR
+    (#xAB ?\u00AB) ;; LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    (#xAC ?\u00AC) ;; NOT SIGN
+    (#xAD ?\u00AD) ;; SOFT HYPHEN
+    (#xAE ?\u00AE) ;; REGISTERED SIGN
+    (#xAF ?\u00AF) ;; MACRON
+    (#xB0 ?\u00B0) ;; DEGREE SIGN
+    (#xB1 ?\u00B1) ;; PLUS-MINUS SIGN
+    (#xB2 ?\u00B2) ;; SUPERSCRIPT TWO
+    (#xB3 ?\u00B3) ;; SUPERSCRIPT THREE
+    (#xB4 ?\u00B4) ;; ACUTE ACCENT
+    (#xB5 ?\u00B5) ;; MICRO SIGN
+    (#xB6 ?\u00B6) ;; PILCROW SIGN
+    (#xB7 ?\u00B7) ;; MIDDLE DOT
+    (#xB8 ?\u00B8) ;; CEDILLA
+    (#xB9 ?\u00B9) ;; SUPERSCRIPT ONE
+    (#xBA ?\u00BA) ;; MASCULINE ORDINAL INDICATOR
+    (#xBB ?\u00BB) ;; RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    (#xBC ?\u00BC) ;; VULGAR FRACTION ONE QUARTER
+    (#xBD ?\u00BD) ;; VULGAR FRACTION ONE HALF
+    (#xBE ?\u00BE) ;; VULGAR FRACTION THREE QUARTERS
+    (#xBF ?\u00BF) ;; INVERTED QUESTION MARK
+    (#xC0 ?\u00C0) ;; LATIN CAPITAL LETTER A WITH GRAVE
+    (#xC1 ?\u00C1) ;; LATIN CAPITAL LETTER A WITH ACUTE
+    (#xC2 ?\u00C2) ;; LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    (#xC3 ?\u00C3) ;; LATIN CAPITAL LETTER A WITH TILDE
+    (#xC4 ?\u00C4) ;; LATIN CAPITAL LETTER A WITH DIAERESIS
+    (#xC5 ?\u00C5) ;; LATIN CAPITAL LETTER A WITH RING ABOVE
+    (#xC6 ?\u00C6) ;; LATIN CAPITAL LETTER AE
+    (#xC7 ?\u00C7) ;; LATIN CAPITAL LETTER C WITH CEDILLA
+    (#xC8 ?\u00C8) ;; LATIN CAPITAL LETTER E WITH GRAVE
+    (#xC9 ?\u00C9) ;; LATIN CAPITAL LETTER E WITH ACUTE
+    (#xCA ?\u00CA) ;; LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+    (#xCB ?\u00CB) ;; LATIN CAPITAL LETTER E WITH DIAERESIS
+    (#xCC ?\u00CC) ;; LATIN CAPITAL LETTER I WITH GRAVE
+    (#xCD ?\u00CD) ;; LATIN CAPITAL LETTER I WITH ACUTE
+    (#xCE ?\u00CE) ;; LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    (#xCF ?\u00CF) ;; LATIN CAPITAL LETTER I WITH DIAERESIS
+    (#xD0 ?\u011E) ;; LATIN CAPITAL LETTER G WITH BREVE
+    (#xD1 ?\u00D1) ;; LATIN CAPITAL LETTER N WITH TILDE
+    (#xD2 ?\u00D2) ;; LATIN CAPITAL LETTER O WITH GRAVE
+    (#xD3 ?\u00D3) ;; LATIN CAPITAL LETTER O WITH ACUTE
+    (#xD4 ?\u00D4) ;; LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    (#xD5 ?\u00D5) ;; LATIN CAPITAL LETTER O WITH TILDE
+    (#xD6 ?\u00D6) ;; LATIN CAPITAL LETTER O WITH DIAERESIS
+    (#xD7 ?\u00D7) ;; MULTIPLICATION SIGN
+    (#xD8 ?\u00D8) ;; LATIN CAPITAL LETTER O WITH STROKE
+    (#xD9 ?\u00D9) ;; LATIN CAPITAL LETTER U WITH GRAVE
+    (#xDA ?\u00DA) ;; LATIN CAPITAL LETTER U WITH ACUTE
+    (#xDB ?\u00DB) ;; LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    (#xDC ?\u00DC) ;; LATIN CAPITAL LETTER U WITH DIAERESIS
+    (#xDD ?\u0130) ;; LATIN CAPITAL LETTER I WITH DOT ABOVE
+    (#xDE ?\u015E) ;; LATIN CAPITAL LETTER S WITH CEDILLA
+    (#xDF ?\u00DF) ;; LATIN SMALL LETTER SHARP S
+    (#xE0 ?\u00E0) ;; LATIN SMALL LETTER A WITH GRAVE
+    (#xE1 ?\u00E1) ;; LATIN SMALL LETTER A WITH ACUTE
+    (#xE2 ?\u00E2) ;; LATIN SMALL LETTER A WITH CIRCUMFLEX
+    (#xE3 ?\u00E3) ;; LATIN SMALL LETTER A WITH TILDE
+    (#xE4 ?\u00E4) ;; LATIN SMALL LETTER A WITH DIAERESIS
+    (#xE5 ?\u00E5) ;; LATIN SMALL LETTER A WITH RING ABOVE
+    (#xE6 ?\u00E6) ;; LATIN SMALL LETTER AE
+    (#xE7 ?\u00E7) ;; LATIN SMALL LETTER C WITH CEDILLA
+    (#xE8 ?\u00E8) ;; LATIN SMALL LETTER E WITH GRAVE
+    (#xE9 ?\u00E9) ;; LATIN SMALL LETTER E WITH ACUTE
+    (#xEA ?\u00EA) ;; LATIN SMALL LETTER E WITH CIRCUMFLEX
+    (#xEB ?\u00EB) ;; LATIN SMALL LETTER E WITH DIAERESIS
+    (#xEC ?\u00EC) ;; LATIN SMALL LETTER I WITH GRAVE
+    (#xED ?\u00ED) ;; LATIN SMALL LETTER I WITH ACUTE
+    (#xEE ?\u00EE) ;; LATIN SMALL LETTER I WITH CIRCUMFLEX
+    (#xEF ?\u00EF) ;; LATIN SMALL LETTER I WITH DIAERESIS
+    (#xF0 ?\u011F) ;; LATIN SMALL LETTER G WITH BREVE
+    (#xF1 ?\u00F1) ;; LATIN SMALL LETTER N WITH TILDE
+    (#xF2 ?\u00F2) ;; LATIN SMALL LETTER O WITH GRAVE
+    (#xF3 ?\u00F3) ;; LATIN SMALL LETTER O WITH ACUTE
+    (#xF4 ?\u00F4) ;; LATIN SMALL LETTER O WITH CIRCUMFLEX
+    (#xF5 ?\u00F5) ;; LATIN SMALL LETTER O WITH TILDE
+    (#xF6 ?\u00F6) ;; LATIN SMALL LETTER O WITH DIAERESIS
+    (#xF7 ?\u00F7) ;; DIVISION SIGN
+    (#xF8 ?\u00F8) ;; LATIN SMALL LETTER O WITH STROKE
+    (#xF9 ?\u00F9) ;; LATIN SMALL LETTER U WITH GRAVE
+    (#xFA ?\u00FA) ;; LATIN SMALL LETTER U WITH ACUTE
+    (#xFB ?\u00FB) ;; LATIN SMALL LETTER U WITH CIRCUMFLEX
+    (#xFC ?\u00FC) ;; LATIN SMALL LETTER U WITH DIAERESIS
+    (#xFD ?\u0131) ;; LATIN SMALL LETTER DOTLESS I
+    (#xFE ?\u015F) ;; LATIN SMALL LETTER S WITH CEDILLA
+    (#xFF ?\u00FF)) ;; LATIN SMALL LETTER Y WITH DIAERESIS
+   mnemonic "Latin 5"
    aliases (iso-latin-5 latin-5)))
 
 ;; end of ISO-8859-9
@@ -1734,8 +1739,8 @@
      (invalid-sequence-coding-system ,(or invalid-sequence-coding-system
                                           codesys))
      (documentation . ,(if (listp supported-langs) (car supported-langs)
-			 (format "\
-Generic language environment for %s (%s)." nice-charset-1 nice-charset-2))))
+			 (format "Generic language environment for %s (%s)."
+                                 nice-charset-1 nice-charset-2))))
    '("European"))
   (loop for (name locale tutorial sample-text input-method) in langenvs
     do
@@ -1752,8 +1757,8 @@
 			(tutorial-coding-system . ,codesys)))
        ,@(if sample-text `((sample-text . ,sample-text)))
        (input-method . ,(or input-method default-input))
-       (documentation . ,(format "\
-This language environment supports %s. " name)))
+       (documentation . ,(format "This language environment supports %s. "
+                                 name)))
      '("European"))))
 
 ;; The case table for Turkish is special:
@@ -1776,268 +1781,270 @@
                      ;; Restore the normal case mappings for the characters.
                      (put-case-table-pair ?I ?i (standard-case-table))))
 
-(make-8-bit-coding-system
- 'macintosh
- '((#x80 ?\u00C4) ;; LATIN CAPITAL LETTER A WITH DIAERESIS
-   (#x81 ?\u00C5) ;; LATIN CAPITAL LETTER A WITH RING ABOVE
-   (#x82 ?\u00C7) ;; LATIN CAPITAL LETTER C WITH CEDILLA
-   (#x83 ?\u00C9) ;; LATIN CAPITAL LETTER E WITH ACUTE
-   (#x84 ?\u00D1) ;; LATIN CAPITAL LETTER N WITH TILDE
-   (#x85 ?\u00D6) ;; LATIN CAPITAL LETTER O WITH DIAERESIS
-   (#x86 ?\u00DC) ;; LATIN CAPITAL LETTER U WITH DIAERESIS
-   (#x87 ?\u00E1) ;; LATIN SMALL LETTER A WITH ACUTE
-   (#x88 ?\u00E0) ;; LATIN SMALL LETTER A WITH GRAVE
-   (#x89 ?\u00E2) ;; LATIN SMALL LETTER A WITH CIRCUMFLEX
-   (#x8A ?\u00E4) ;; LATIN SMALL LETTER A WITH DIAERESIS
-   (#x8B ?\u00E3) ;; LATIN SMALL LETTER A WITH TILDE
-   (#x8C ?\u00E5) ;; LATIN SMALL LETTER A WITH RING ABOVE
-   (#x8D ?\u00E7) ;; LATIN SMALL LETTER C WITH CEDILLA
-   (#x8E ?\u00E9) ;; LATIN SMALL LETTER E WITH ACUTE
-   (#x8F ?\u00E8) ;; LATIN SMALL LETTER E WITH GRAVE
-   (#x90 ?\u00EA) ;; LATIN SMALL LETTER E WITH CIRCUMFLEX
-   (#x91 ?\u00EB) ;; LATIN SMALL LETTER E WITH DIAERESIS
-   (#x92 ?\u00ED) ;; LATIN SMALL LETTER I WITH ACUTE
-   (#x93 ?\u00EC) ;; LATIN SMALL LETTER I WITH GRAVE
-   (#x94 ?\u00EE) ;; LATIN SMALL LETTER I WITH CIRCUMFLEX
-   (#x95 ?\u00EF) ;; LATIN SMALL LETTER I WITH DIAERESIS
-   (#x96 ?\u00F1) ;; LATIN SMALL LETTER N WITH TILDE
-   (#x97 ?\u00F3) ;; LATIN SMALL LETTER O WITH ACUTE
-   (#x98 ?\u00F2) ;; LATIN SMALL LETTER O WITH GRAVE
-   (#x99 ?\u00F4) ;; LATIN SMALL LETTER O WITH CIRCUMFLEX
-   (#x9A ?\u00F6) ;; LATIN SMALL LETTER O WITH DIAERESIS
-   (#x9B ?\u00F5) ;; LATIN SMALL LETTER O WITH TILDE
-   (#x9C ?\u00FA) ;; LATIN SMALL LETTER U WITH ACUTE
-   (#x9D ?\u00F9) ;; LATIN SMALL LETTER U WITH GRAVE
-   (#x9E ?\u00FB) ;; LATIN SMALL LETTER U WITH CIRCUMFLEX
-   (#x9F ?\u00FC) ;; LATIN SMALL LETTER U WITH DIAERESIS
-   (#xA0 ?\u2020) ;; DAGGER
-   (#xA1 ?\u00B0) ;; DEGREE SIGN
-   (#xA2 ?\u00A2) ;; CENT SIGN
-   (#xA3 ?\u00A3) ;; POUND SIGN
-   (#xA4 ?\u00A7) ;; SECTION SIGN
-   (#xA5 ?\u2022) ;; BULLET
-   (#xA6 ?\u00B6) ;; PILCROW SIGN
-   (#xA7 ?\u00DF) ;; LATIN SMALL LETTER SHARP S
-   (#xA8 ?\u00AE) ;; REGISTERED SIGN
-   (#xA9 ?\u00A9) ;; COPYRIGHT SIGN
-   (#xAA ?\u2122) ;; TRADE MARK SIGN
-   (#xAB ?\u00B4) ;; ACUTE ACCENT
-   (#xAC ?\u00A8) ;; DIAERESIS
-   (#xAD ?\u2260) ;; NOT EQUAL TO
-   (#xAE ?\u00C6) ;; LATIN CAPITAL LETTER AE
-   (#xAF ?\u00D8) ;; LATIN CAPITAL LETTER O WITH STROKE
-   (#xB0 ?\u221E) ;; INFINITY
-   (#xB1 ?\u00B1) ;; PLUS-MINUS SIGN
-   (#xB2 ?\u2264) ;; LESS-THAN OR EQUAL TO
-   (#xB3 ?\u2265) ;; GREATER-THAN OR EQUAL TO
-   (#xB4 ?\u00A5) ;; YEN SIGN
-   (#xB5 ?\u00B5) ;; MICRO SIGN
-   (#xB6 ?\u2202) ;; PARTIAL DIFFERENTIAL
-   (#xB7 ?\u2211) ;; N-ARY SUMMATION
-   (#xB8 ?\u220F) ;; N-ARY PRODUCT
-   (#xB9 ?\u03C0) ;; GREEK SMALL LETTER PI
-   (#xBA ?\u222B) ;; INTEGRAL
-   (#xBB ?\u00AA) ;; FEMININE ORDINAL INDICATOR
-   (#xBC ?\u00BA) ;; MASCULINE ORDINAL INDICATOR
-   (#xBD ?\u03A9) ;; GREEK CAPITAL LETTER OMEGA
-   (#xBE ?\u00E6) ;; LATIN SMALL LETTER AE
-   (#xBF ?\u00F8) ;; LATIN SMALL LETTER O WITH STROKE
-   (#xC0 ?\u00BF) ;; INVERTED QUESTION MARK
-   (#xC1 ?\u00A1) ;; INVERTED EXCLAMATION MARK
-   (#xC2 ?\u00AC) ;; NOT SIGN
-   (#xC3 ?\u221A) ;; SQUARE ROOT
-   (#xC4 ?\u0192) ;; LATIN SMALL LETTER F WITH HOOK
-   (#xC5 ?\u2248) ;; ALMOST EQUAL TO
-   (#xC6 ?\u2206) ;; INCREMENT
-   (#xC7 ?\u00AB) ;; LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-   (#xC8 ?\u00BB) ;; RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-   (#xC9 ?\u2026) ;; HORIZONTAL ELLIPSIS
-   (#xCA ?\u00A0) ;; NO-BREAK SPACE
-   (#xCB ?\u00C0) ;; LATIN CAPITAL LETTER A WITH GRAVE
-   (#xCC ?\u00C3) ;; LATIN CAPITAL LETTER A WITH TILDE
-   (#xCD ?\u00D5) ;; LATIN CAPITAL LETTER O WITH TILDE
-   (#xCE ?\u0152) ;; LATIN CAPITAL LIGATURE OE
-   (#xCF ?\u0153) ;; LATIN SMALL LIGATURE OE
-   (#xD0 ?\u2013) ;; EN DASH
-   (#xD1 ?\u2014) ;; EM DASH
-   (#xD2 ?\u201C) ;; LEFT DOUBLE QUOTATION MARK
-   (#xD3 ?\u201D) ;; RIGHT DOUBLE QUOTATION MARK
-   (#xD4 ?\u2018) ;; LEFT SINGLE QUOTATION MARK
-   (#xD5 ?\u2019) ;; RIGHT SINGLE QUOTATION MARK
-   (#xD6 ?\u00F7) ;; DIVISION SIGN
-   (#xD7 ?\u25CA) ;; LOZENGE
-   (#xD8 ?\u00FF) ;; LATIN SMALL LETTER Y WITH DIAERESIS
-   (#xD9 ?\u0178) ;; LATIN CAPITAL LETTER Y WITH DIAERESIS
-   (#xDA ?\u2044) ;; FRACTION SLASH
-   (#xDB ?\u20AC) ;; EURO SIGN
-   (#xDC ?\u2039) ;; SINGLE LEFT-POINTING ANGLE QUOTATION MARK
-   (#xDD ?\u203A) ;; SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-   (#xDE ?\uFB01) ;; LATIN SMALL LIGATURE FI
-   (#xDF ?\uFB02) ;; LATIN SMALL LIGATURE FL
-   (#xE0 ?\u2021) ;; DOUBLE DAGGER
-   (#xE1 ?\u00B7) ;; MIDDLE DOT
-   (#xE2 ?\u201A) ;; SINGLE LOW-9 QUOTATION MARK
-   (#xE3 ?\u201E) ;; DOUBLE LOW-9 QUOTATION MARK
-   (#xE4 ?\u2030) ;; PER MILLE SIGN
-   (#xE5 ?\u00C2) ;; LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-   (#xE6 ?\u00CA) ;; LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-   (#xE7 ?\u00C1) ;; LATIN CAPITAL LETTER A WITH ACUTE
-   (#xE8 ?\u00CB) ;; LATIN CAPITAL LETTER E WITH DIAERESIS
-   (#xE9 ?\u00C8) ;; LATIN CAPITAL LETTER E WITH GRAVE
-   (#xEA ?\u00CD) ;; LATIN CAPITAL LETTER I WITH ACUTE
-   (#xEB ?\u00CE) ;; LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-   (#xEC ?\u00CF) ;; LATIN CAPITAL LETTER I WITH DIAERESIS
-   (#xED ?\u00CC) ;; LATIN CAPITAL LETTER I WITH GRAVE
-   (#xEE ?\u00D3) ;; LATIN CAPITAL LETTER O WITH ACUTE
-   (#xEF ?\u00D4) ;; LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-   (#xF0 ?\uF8FF) ;; Apple logo
-   (#xF1 ?\u00D2) ;; LATIN CAPITAL LETTER O WITH GRAVE
-   (#xF2 ?\u00DA) ;; LATIN CAPITAL LETTER U WITH ACUTE
-   (#xF3 ?\u00DB) ;; LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-   (#xF4 ?\u00D9) ;; LATIN CAPITAL LETTER U WITH GRAVE
-   (#xF5 ?\u0131) ;; LATIN SMALL LETTER DOTLESS I
-   (#xF6 ?\u02C6) ;; MODIFIER LETTER CIRCUMFLEX ACCENT
-   (#xF7 ?\u02DC) ;; SMALL TILDE
-   (#xF8 ?\u00AF) ;; MACRON
-   (#xF9 ?\u02D8) ;; BREVE
-   (#xFA ?\u02D9) ;; DOT ABOVE
-   (#xFB ?\u02DA) ;; RING ABOVE
-   (#xFC ?\u00B8) ;; CEDILLA
-   (#xFD ?\u02DD) ;; DOUBLE ACUTE ACCENT
-   (#xFE ?\u02DB) ;; OGONEK
-   (#xFF ?\u02C7)) ;; CARON
- "The Macintosh encoding for Western Europe and the Americas"
- '(mnemonic "MR"
-   documentation "MacRoman, MIME name macintosh"
-   aliases (cp10000 MacRoman mac-roman)))
-
-(make-8-bit-coding-system
- 'windows-1252
- '((#x80 ?\u20AC) ;; EURO SIGN
-   (#x82 ?\u201A) ;; SINGLE LOW-9 QUOTATION MARK
-   (#x83 ?\u0192) ;; LATIN SMALL LETTER F WITH HOOK
-   (#x84 ?\u201E) ;; DOUBLE LOW-9 QUOTATION MARK
-   (#x85 ?\u2026) ;; HORIZONTAL ELLIPSIS
-   (#x86 ?\u2020) ;; DAGGER
-   (#x87 ?\u2021) ;; DOUBLE DAGGER
-   (#x88 ?\u02C6) ;; MODIFIER LETTER CIRCUMFLEX ACCENT
-   (#x89 ?\u2030) ;; PER MILLE SIGN
-   (#x8A ?\u0160) ;; LATIN CAPITAL LETTER S WITH CARON
-   (#x8B ?\u2039) ;; SINGLE LEFT-POINTING ANGLE QUOTATION MARK
-   (#x8C ?\u0152) ;; LATIN CAPITAL LIGATURE OE
-   (#x8E ?\u017D) ;; LATIN CAPITAL LETTER Z WITH CARON
-   (#x91 ?\u2018) ;; LEFT SINGLE QUOTATION MARK
-   (#x92 ?\u2019) ;; RIGHT SINGLE QUOTATION MARK
-   (#x93 ?\u201C) ;; LEFT DOUBLE QUOTATION MARK
-   (#x94 ?\u201D) ;; RIGHT DOUBLE QUOTATION MARK
-   (#x95 ?\u2022) ;; BULLET
-   (#x96 ?\u2013) ;; EN DASH
-   (#x97 ?\u2014) ;; EM DASH
-   (#x98 ?\u02DC) ;; SMALL TILDE
-   (#x99 ?\u2122) ;; TRADE MARK SIGN
-   (#x9A ?\u0161) ;; LATIN SMALL LETTER S WITH CARON
-   (#x9B ?\u203A) ;; SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-   (#x9C ?\u0153) ;; LATIN SMALL LIGATURE OE
-   (#x9E ?\u017E) ;; LATIN SMALL LETTER Z WITH CARON
-   (#x9F ?\u0178) ;; LATIN CAPITAL LETTER Y WITH DIAERESIS
-   (#xA0 ?\u00A0) ;; NO-BREAK SPACE
-   (#xA1 ?\u00A1) ;; INVERTED EXCLAMATION MARK
-   (#xA2 ?\u00A2) ;; CENT SIGN
-   (#xA3 ?\u00A3) ;; POUND SIGN
-   (#xA4 ?\u00A4) ;; CURRENCY SIGN
-   (#xA5 ?\u00A5) ;; YEN SIGN
-   (#xA6 ?\u00A6) ;; BROKEN BAR
-   (#xA7 ?\u00A7) ;; SECTION SIGN
-   (#xA8 ?\u00A8) ;; DIAERESIS
-   (#xA9 ?\u00A9) ;; COPYRIGHT SIGN
-   (#xAA ?\u00AA) ;; FEMININE ORDINAL INDICATOR
-   (#xAB ?\u00AB) ;; LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-   (#xAC ?\u00AC) ;; NOT SIGN
-   (#xAD ?\u00AD) ;; SOFT HYPHEN
-   (#xAE ?\u00AE) ;; REGISTERED SIGN
-   (#xAF ?\u00AF) ;; MACRON
-   (#xB0 ?\u00B0) ;; DEGREE SIGN
-   (#xB1 ?\u00B1) ;; PLUS-MINUS SIGN
-   (#xB2 ?\u00B2) ;; SUPERSCRIPT TWO
-   (#xB3 ?\u00B3) ;; SUPERSCRIPT THREE
-   (#xB4 ?\u00B4) ;; ACUTE ACCENT
-   (#xB5 ?\u00B5) ;; MICRO SIGN
-   (#xB6 ?\u00B6) ;; PILCROW SIGN
-   (#xB7 ?\u00B7) ;; MIDDLE DOT
-   (#xB8 ?\u00B8) ;; CEDILLA
-   (#xB9 ?\u00B9) ;; SUPERSCRIPT ONE
-   (#xBA ?\u00BA) ;; MASCULINE ORDINAL INDICATOR
-   (#xBB ?\u00BB) ;; RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-   (#xBC ?\u00BC) ;; VULGAR FRACTION ONE QUARTER
-   (#xBD ?\u00BD) ;; VULGAR FRACTION ONE HALF
-   (#xBE ?\u00BE) ;; VULGAR FRACTION THREE QUARTERS
-   (#xBF ?\u00BF) ;; INVERTED QUESTION MARK
-   (#xC0 ?\u00C0) ;; LATIN CAPITAL LETTER A WITH GRAVE
-   (#xC1 ?\u00C1) ;; LATIN CAPITAL LETTER A WITH ACUTE
-   (#xC2 ?\u00C2) ;; LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-   (#xC3 ?\u00C3) ;; LATIN CAPITAL LETTER A WITH TILDE
-   (#xC4 ?\u00C4) ;; LATIN CAPITAL LETTER A WITH DIAERESIS
-   (#xC5 ?\u00C5) ;; LATIN CAPITAL LETTER A WITH RING ABOVE
-   (#xC6 ?\u00C6) ;; LATIN CAPITAL LETTER AE
-   (#xC7 ?\u00C7) ;; LATIN CAPITAL LETTER C WITH CEDILLA
-   (#xC8 ?\u00C8) ;; LATIN CAPITAL LETTER E WITH GRAVE
-   (#xC9 ?\u00C9) ;; LATIN CAPITAL LETTER E WITH ACUTE
-   (#xCA ?\u00CA) ;; LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-   (#xCB ?\u00CB) ;; LATIN CAPITAL LETTER E WITH DIAERESIS
-   (#xCC ?\u00CC) ;; LATIN CAPITAL LETTER I WITH GRAVE
-   (#xCD ?\u00CD) ;; LATIN CAPITAL LETTER I WITH ACUTE
-   (#xCE ?\u00CE) ;; LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-   (#xCF ?\u00CF) ;; LATIN CAPITAL LETTER I WITH DIAERESIS
-   (#xD0 ?\u00D0) ;; LATIN CAPITAL LETTER ETH
-   (#xD1 ?\u00D1) ;; LATIN CAPITAL LETTER N WITH TILDE
-   (#xD2 ?\u00D2) ;; LATIN CAPITAL LETTER O WITH GRAVE
-   (#xD3 ?\u00D3) ;; LATIN CAPITAL LETTER O WITH ACUTE
-   (#xD4 ?\u00D4) ;; LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-   (#xD5 ?\u00D5) ;; LATIN CAPITAL LETTER O WITH TILDE
-   (#xD6 ?\u00D6) ;; LATIN CAPITAL LETTER O WITH DIAERESIS
-   (#xD7 ?\u00D7) ;; MULTIPLICATION SIGN
-   (#xD8 ?\u00D8) ;; LATIN CAPITAL LETTER O WITH STROKE
-   (#xD9 ?\u00D9) ;; LATIN CAPITAL LETTER U WITH GRAVE
-   (#xDA ?\u00DA) ;; LATIN CAPITAL LETTER U WITH ACUTE
-   (#xDB ?\u00DB) ;; LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-   (#xDC ?\u00DC) ;; LATIN CAPITAL LETTER U WITH DIAERESIS
-   (#xDD ?\u00DD) ;; LATIN CAPITAL LETTER Y WITH ACUTE
-   (#xDE ?\u00DE) ;; LATIN CAPITAL LETTER THORN
-   (#xDF ?\u00DF) ;; LATIN SMALL LETTER SHARP S
-   (#xE0 ?\u00E0) ;; LATIN SMALL LETTER A WITH GRAVE
-   (#xE1 ?\u00E1) ;; LATIN SMALL LETTER A WITH ACUTE
-   (#xE2 ?\u00E2) ;; LATIN SMALL LETTER A WITH CIRCUMFLEX
-   (#xE3 ?\u00E3) ;; LATIN SMALL LETTER A WITH TILDE
-   (#xE4 ?\u00E4) ;; LATIN SMALL LETTER A WITH DIAERESIS
-   (#xE5 ?\u00E5) ;; LATIN SMALL LETTER A WITH RING ABOVE
-   (#xE6 ?\u00E6) ;; LATIN SMALL LETTER AE
-   (#xE7 ?\u00E7) ;; LATIN SMALL LETTER C WITH CEDILLA
-   (#xE8 ?\u00E8) ;; LATIN SMALL LETTER E WITH GRAVE
-   (#xE9 ?\u00E9) ;; LATIN SMALL LETTER E WITH ACUTE
-   (#xEA ?\u00EA) ;; LATIN SMALL LETTER E WITH CIRCUMFLEX
-   (#xEB ?\u00EB) ;; LATIN SMALL LETTER E WITH DIAERESIS
-   (#xEC ?\u00EC) ;; LATIN SMALL LETTER I WITH GRAVE
-   (#xED ?\u00ED) ;; LATIN SMALL LETTER I WITH ACUTE
-   (#xEE ?\u00EE) ;; LATIN SMALL LETTER I WITH CIRCUMFLEX
-   (#xEF ?\u00EF) ;; LATIN SMALL LETTER I WITH DIAERESIS
-   (#xF0 ?\u00F0) ;; LATIN SMALL LETTER ETH
-   (#xF1 ?\u00F1) ;; LATIN SMALL LETTER N WITH TILDE
-   (#xF2 ?\u00F2) ;; LATIN SMALL LETTER O WITH GRAVE
-   (#xF3 ?\u00F3) ;; LATIN SMALL LETTER O WITH ACUTE
-   (#xF4 ?\u00F4) ;; LATIN SMALL LETTER O WITH CIRCUMFLEX
-   (#xF5 ?\u00F5) ;; LATIN SMALL LETTER O WITH TILDE
-   (#xF6 ?\u00F6) ;; LATIN SMALL LETTER O WITH DIAERESIS
-   (#xF7 ?\u00F7) ;; DIVISION SIGN
-   (#xF8 ?\u00F8) ;; LATIN SMALL LETTER O WITH STROKE
-   (#xF9 ?\u00F9) ;; LATIN SMALL LETTER U WITH GRAVE
-   (#xFA ?\u00FA) ;; LATIN SMALL LETTER U WITH ACUTE
-   (#xFB ?\u00FB) ;; LATIN SMALL LETTER U WITH CIRCUMFLEX
-   (#xFC ?\u00FC) ;; LATIN SMALL LETTER U WITH DIAERESIS
-   (#xFD ?\u00FD) ;; LATIN SMALL LETTER Y WITH ACUTE
-   (#xFE ?\u00FE) ;; LATIN SMALL LETTER THORN
-   (#xFF ?\u00FF));; LATIN SMALL LETTER Y WITH DIAERESIS
- "Microsoft's extension of iso-8859-1 for Western Europe and the Americas.  "
- '(mnemonic "cp1252"
+(make-coding-system
+ 'macintosh 'fixed-width "MacRoman"
+ '(unicode-map
+   ((#x80 ?\u00C4) ;; LATIN CAPITAL LETTER A WITH DIAERESIS
+    (#x81 ?\u00C5) ;; LATIN CAPITAL LETTER A WITH RING ABOVE
+    (#x82 ?\u00C7) ;; LATIN CAPITAL LETTER C WITH CEDILLA
+    (#x83 ?\u00C9) ;; LATIN CAPITAL LETTER E WITH ACUTE
+    (#x84 ?\u00D1) ;; LATIN CAPITAL LETTER N WITH TILDE
+    (#x85 ?\u00D6) ;; LATIN CAPITAL LETTER O WITH DIAERESIS
+    (#x86 ?\u00DC) ;; LATIN CAPITAL LETTER U WITH DIAERESIS
+    (#x87 ?\u00E1) ;; LATIN SMALL LETTER A WITH ACUTE
+    (#x88 ?\u00E0) ;; LATIN SMALL LETTER A WITH GRAVE
+    (#x89 ?\u00E2) ;; LATIN SMALL LETTER A WITH CIRCUMFLEX
+    (#x8A ?\u00E4) ;; LATIN SMALL LETTER A WITH DIAERESIS
+    (#x8B ?\u00E3) ;; LATIN SMALL LETTER A WITH TILDE
+    (#x8C ?\u00E5) ;; LATIN SMALL LETTER A WITH RING ABOVE
+    (#x8D ?\u00E7) ;; LATIN SMALL LETTER C WITH CEDILLA
+    (#x8E ?\u00E9) ;; LATIN SMALL LETTER E WITH ACUTE
+    (#x8F ?\u00E8) ;; LATIN SMALL LETTER E WITH GRAVE
+    (#x90 ?\u00EA) ;; LATIN SMALL LETTER E WITH CIRCUMFLEX
+    (#x91 ?\u00EB) ;; LATIN SMALL LETTER E WITH DIAERESIS
+    (#x92 ?\u00ED) ;; LATIN SMALL LETTER I WITH ACUTE
+    (#x93 ?\u00EC) ;; LATIN SMALL LETTER I WITH GRAVE
+    (#x94 ?\u00EE) ;; LATIN SMALL LETTER I WITH CIRCUMFLEX
+    (#x95 ?\u00EF) ;; LATIN SMALL LETTER I WITH DIAERESIS
+    (#x96 ?\u00F1) ;; LATIN SMALL LETTER N WITH TILDE
+    (#x97 ?\u00F3) ;; LATIN SMALL LETTER O WITH ACUTE
+    (#x98 ?\u00F2) ;; LATIN SMALL LETTER O WITH GRAVE
+    (#x99 ?\u00F4) ;; LATIN SMALL LETTER O WITH CIRCUMFLEX
+    (#x9A ?\u00F6) ;; LATIN SMALL LETTER O WITH DIAERESIS
+    (#x9B ?\u00F5) ;; LATIN SMALL LETTER O WITH TILDE
+    (#x9C ?\u00FA) ;; LATIN SMALL LETTER U WITH ACUTE
+    (#x9D ?\u00F9) ;; LATIN SMALL LETTER U WITH GRAVE
+    (#x9E ?\u00FB) ;; LATIN SMALL LETTER U WITH CIRCUMFLEX
+    (#x9F ?\u00FC) ;; LATIN SMALL LETTER U WITH DIAERESIS
+    (#xA0 ?\u2020) ;; DAGGER
+    (#xA1 ?\u00B0) ;; DEGREE SIGN
+    (#xA2 ?\u00A2) ;; CENT SIGN
+    (#xA3 ?\u00A3) ;; POUND SIGN
+    (#xA4 ?\u00A7) ;; SECTION SIGN
+    (#xA5 ?\u2022) ;; BULLET
+    (#xA6 ?\u00B6) ;; PILCROW SIGN
+    (#xA7 ?\u00DF) ;; LATIN SMALL LETTER SHARP S
+    (#xA8 ?\u00AE) ;; REGISTERED SIGN
+    (#xA9 ?\u00A9) ;; COPYRIGHT SIGN
+    (#xAA ?\u2122) ;; TRADE MARK SIGN
+    (#xAB ?\u00B4) ;; ACUTE ACCENT
+    (#xAC ?\u00A8) ;; DIAERESIS
+    (#xAD ?\u2260) ;; NOT EQUAL TO
+    (#xAE ?\u00C6) ;; LATIN CAPITAL LETTER AE
+    (#xAF ?\u00D8) ;; LATIN CAPITAL LETTER O WITH STROKE
+    (#xB0 ?\u221E) ;; INFINITY
+    (#xB1 ?\u00B1) ;; PLUS-MINUS SIGN
+    (#xB2 ?\u2264) ;; LESS-THAN OR EQUAL TO
+    (#xB3 ?\u2265) ;; GREATER-THAN OR EQUAL TO
+    (#xB4 ?\u00A5) ;; YEN SIGN
+    (#xB5 ?\u00B5) ;; MICRO SIGN
+    (#xB6 ?\u2202) ;; PARTIAL DIFFERENTIAL
+    (#xB7 ?\u2211) ;; N-ARY SUMMATION
+    (#xB8 ?\u220F) ;; N-ARY PRODUCT
+    (#xB9 ?\u03C0) ;; GREEK SMALL LETTER PI
+    (#xBA ?\u222B) ;; INTEGRAL
+    (#xBB ?\u00AA) ;; FEMININE ORDINAL INDICATOR
+    (#xBC ?\u00BA) ;; MASCULINE ORDINAL INDICATOR
+    (#xBD ?\u03A9) ;; GREEK CAPITAL LETTER OMEGA
+    (#xBE ?\u00E6) ;; LATIN SMALL LETTER AE
+    (#xBF ?\u00F8) ;; LATIN SMALL LETTER O WITH STROKE
+    (#xC0 ?\u00BF) ;; INVERTED QUESTION MARK
+    (#xC1 ?\u00A1) ;; INVERTED EXCLAMATION MARK
+    (#xC2 ?\u00AC) ;; NOT SIGN
+    (#xC3 ?\u221A) ;; SQUARE ROOT
+    (#xC4 ?\u0192) ;; LATIN SMALL LETTER F WITH HOOK
+    (#xC5 ?\u2248) ;; ALMOST EQUAL TO
+    (#xC6 ?\u2206) ;; INCREMENT
+    (#xC7 ?\u00AB) ;; LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    (#xC8 ?\u00BB) ;; RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    (#xC9 ?\u2026) ;; HORIZONTAL ELLIPSIS
+    (#xCA ?\u00A0) ;; NO-BREAK SPACE
+    (#xCB ?\u00C0) ;; LATIN CAPITAL LETTER A WITH GRAVE
+    (#xCC ?\u00C3) ;; LATIN CAPITAL LETTER A WITH TILDE
+    (#xCD ?\u00D5) ;; LATIN CAPITAL LETTER O WITH TILDE
+    (#xCE ?\u0152) ;; LATIN CAPITAL LIGATURE OE
+    (#xCF ?\u0153) ;; LATIN SMALL LIGATURE OE
+    (#xD0 ?\u2013) ;; EN DASH
+    (#xD1 ?\u2014) ;; EM DASH
+    (#xD2 ?\u201C) ;; LEFT DOUBLE QUOTATION MARK
+    (#xD3 ?\u201D) ;; RIGHT DOUBLE QUOTATION MARK
+    (#xD4 ?\u2018) ;; LEFT SINGLE QUOTATION MARK
+    (#xD5 ?\u2019) ;; RIGHT SINGLE QUOTATION MARK
+    (#xD6 ?\u00F7) ;; DIVISION SIGN
+    (#xD7 ?\u25CA) ;; LOZENGE
+    (#xD8 ?\u00FF) ;; LATIN SMALL LETTER Y WITH DIAERESIS
+    (#xD9 ?\u0178) ;; LATIN CAPITAL LETTER Y WITH DIAERESIS
+    (#xDA ?\u2044) ;; FRACTION SLASH
+    (#xDB ?\u20AC) ;; EURO SIGN
+    (#xDC ?\u2039) ;; SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+    (#xDD ?\u203A) ;; SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+    (#xDE ?\uFB01) ;; LATIN SMALL LIGATURE FI
+    (#xDF ?\uFB02) ;; LATIN SMALL LIGATURE FL
+    (#xE0 ?\u2021) ;; DOUBLE DAGGER
+    (#xE1 ?\u00B7) ;; MIDDLE DOT
+    (#xE2 ?\u201A) ;; SINGLE LOW-9 QUOTATION MARK
+    (#xE3 ?\u201E) ;; DOUBLE LOW-9 QUOTATION MARK
+    (#xE4 ?\u2030) ;; PER MILLE SIGN
+    (#xE5 ?\u00C2) ;; LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    (#xE6 ?\u00CA) ;; LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+    (#xE7 ?\u00C1) ;; LATIN CAPITAL LETTER A WITH ACUTE
+    (#xE8 ?\u00CB) ;; LATIN CAPITAL LETTER E WITH DIAERESIS
+    (#xE9 ?\u00C8) ;; LATIN CAPITAL LETTER E WITH GRAVE
+    (#xEA ?\u00CD) ;; LATIN CAPITAL LETTER I WITH ACUTE
+    (#xEB ?\u00CE) ;; LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    (#xEC ?\u00CF) ;; LATIN CAPITAL LETTER I WITH DIAERESIS
+    (#xED ?\u00CC) ;; LATIN CAPITAL LETTER I WITH GRAVE
+    (#xEE ?\u00D3) ;; LATIN CAPITAL LETTER O WITH ACUTE
+    (#xEF ?\u00D4) ;; LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    (#xF0 ?\uF8FF) ;; Apple logo
+    (#xF1 ?\u00D2) ;; LATIN CAPITAL LETTER O WITH GRAVE
+    (#xF2 ?\u00DA) ;; LATIN CAPITAL LETTER U WITH ACUTE
+    (#xF3 ?\u00DB) ;; LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    (#xF4 ?\u00D9) ;; LATIN CAPITAL LETTER U WITH GRAVE
+    (#xF5 ?\u0131) ;; LATIN SMALL LETTER DOTLESS I
+    (#xF6 ?\u02C6) ;; MODIFIER LETTER CIRCUMFLEX ACCENT
+    (#xF7 ?\u02DC) ;; SMALL TILDE
+    (#xF8 ?\u00AF) ;; MACRON
+    (#xF9 ?\u02D8) ;; BREVE
+    (#xFA ?\u02D9) ;; DOT ABOVE
+    (#xFB ?\u02DA) ;; RING ABOVE
+    (#xFC ?\u00B8) ;; CEDILLA
+    (#xFD ?\u02DD) ;; DOUBLE ACUTE ACCENT
+    (#xFE ?\u02DB) ;; OGONEK
+    (#xFF ?\u02C7)) ;; CARON
+   mnemonic "MR"
+   documentation "The Macintosh encoding for Western Europe and the Americas"
+   aliases (cp10000 MacRoman)))
+ 
+(make-coding-system
+ 'windows-1252 'fixed-width "Microsoft's CP1252"
+ '(unicode-map
+   ((#x80 ?\u20AC) ;; EURO SIGN
+    (#x82 ?\u201A) ;; SINGLE LOW-9 QUOTATION MARK
+    (#x83 ?\u0192) ;; LATIN SMALL LETTER F WITH HOOK
+    (#x84 ?\u201E) ;; DOUBLE LOW-9 QUOTATION MARK
+    (#x85 ?\u2026) ;; HORIZONTAL ELLIPSIS
+    (#x86 ?\u2020) ;; DAGGER
+    (#x87 ?\u2021) ;; DOUBLE DAGGER
+    (#x88 ?\u02C6) ;; MODIFIER LETTER CIRCUMFLEX ACCENT
+    (#x89 ?\u2030) ;; PER MILLE SIGN
+    (#x8A ?\u0160) ;; LATIN CAPITAL LETTER S WITH CARON
+    (#x8B ?\u2039) ;; SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+    (#x8C ?\u0152) ;; LATIN CAPITAL LIGATURE OE
+    (#x8E ?\u017D) ;; LATIN CAPITAL LETTER Z WITH CARON
+    (#x91 ?\u2018) ;; LEFT SINGLE QUOTATION MARK
+    (#x92 ?\u2019) ;; RIGHT SINGLE QUOTATION MARK
+    (#x93 ?\u201C) ;; LEFT DOUBLE QUOTATION MARK
+    (#x94 ?\u201D) ;; RIGHT DOUBLE QUOTATION MARK
+    (#x95 ?\u2022) ;; BULLET
+    (#x96 ?\u2013) ;; EN DASH
+    (#x97 ?\u2014) ;; EM DASH
+    (#x98 ?\u02DC) ;; SMALL TILDE
+    (#x99 ?\u2122) ;; TRADE MARK SIGN
+    (#x9A ?\u0161) ;; LATIN SMALL LETTER S WITH CARON
+    (#x9B ?\u203A) ;; SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+    (#x9C ?\u0153) ;; LATIN SMALL LIGATURE OE
+    (#x9E ?\u017E) ;; LATIN SMALL LETTER Z WITH CARON
+    (#x9F ?\u0178) ;; LATIN CAPITAL LETTER Y WITH DIAERESIS
+    (#xA0 ?\u00A0) ;; NO-BREAK SPACE
+    (#xA1 ?\u00A1) ;; INVERTED EXCLAMATION MARK
+    (#xA2 ?\u00A2) ;; CENT SIGN
+    (#xA3 ?\u00A3) ;; POUND SIGN
+    (#xA4 ?\u00A4) ;; CURRENCY SIGN
+    (#xA5 ?\u00A5) ;; YEN SIGN
+    (#xA6 ?\u00A6) ;; BROKEN BAR
+    (#xA7 ?\u00A7) ;; SECTION SIGN
+    (#xA8 ?\u00A8) ;; DIAERESIS
+    (#xA9 ?\u00A9) ;; COPYRIGHT SIGN
+    (#xAA ?\u00AA) ;; FEMININE ORDINAL INDICATOR
+    (#xAB ?\u00AB) ;; LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    (#xAC ?\u00AC) ;; NOT SIGN
+    (#xAD ?\u00AD) ;; SOFT HYPHEN
+    (#xAE ?\u00AE) ;; REGISTERED SIGN
+    (#xAF ?\u00AF) ;; MACRON
+    (#xB0 ?\u00B0) ;; DEGREE SIGN
+    (#xB1 ?\u00B1) ;; PLUS-MINUS SIGN
+    (#xB2 ?\u00B2) ;; SUPERSCRIPT TWO
+    (#xB3 ?\u00B3) ;; SUPERSCRIPT THREE
+    (#xB4 ?\u00B4) ;; ACUTE ACCENT
+    (#xB5 ?\u00B5) ;; MICRO SIGN
+    (#xB6 ?\u00B6) ;; PILCROW SIGN
+    (#xB7 ?\u00B7) ;; MIDDLE DOT
+    (#xB8 ?\u00B8) ;; CEDILLA
+    (#xB9 ?\u00B9) ;; SUPERSCRIPT ONE
+    (#xBA ?\u00BA) ;; MASCULINE ORDINAL INDICATOR
+    (#xBB ?\u00BB) ;; RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    (#xBC ?\u00BC) ;; VULGAR FRACTION ONE QUARTER
+    (#xBD ?\u00BD) ;; VULGAR FRACTION ONE HALF
+    (#xBE ?\u00BE) ;; VULGAR FRACTION THREE QUARTERS
+    (#xBF ?\u00BF) ;; INVERTED QUESTION MARK
+    (#xC0 ?\u00C0) ;; LATIN CAPITAL LETTER A WITH GRAVE
+    (#xC1 ?\u00C1) ;; LATIN CAPITAL LETTER A WITH ACUTE
+    (#xC2 ?\u00C2) ;; LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    (#xC3 ?\u00C3) ;; LATIN CAPITAL LETTER A WITH TILDE
+    (#xC4 ?\u00C4) ;; LATIN CAPITAL LETTER A WITH DIAERESIS
+    (#xC5 ?\u00C5) ;; LATIN CAPITAL LETTER A WITH RING ABOVE
+    (#xC6 ?\u00C6) ;; LATIN CAPITAL LETTER AE
+    (#xC7 ?\u00C7) ;; LATIN CAPITAL LETTER C WITH CEDILLA
+    (#xC8 ?\u00C8) ;; LATIN CAPITAL LETTER E WITH GRAVE
+    (#xC9 ?\u00C9) ;; LATIN CAPITAL LETTER E WITH ACUTE
+    (#xCA ?\u00CA) ;; LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+    (#xCB ?\u00CB) ;; LATIN CAPITAL LETTER E WITH DIAERESIS
+    (#xCC ?\u00CC) ;; LATIN CAPITAL LETTER I WITH GRAVE
+    (#xCD ?\u00CD) ;; LATIN CAPITAL LETTER I WITH ACUTE
+    (#xCE ?\u00CE) ;; LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    (#xCF ?\u00CF) ;; LATIN CAPITAL LETTER I WITH DIAERESIS
+    (#xD0 ?\u00D0) ;; LATIN CAPITAL LETTER ETH
+    (#xD1 ?\u00D1) ;; LATIN CAPITAL LETTER N WITH TILDE
+    (#xD2 ?\u00D2) ;; LATIN CAPITAL LETTER O WITH GRAVE
+    (#xD3 ?\u00D3) ;; LATIN CAPITAL LETTER O WITH ACUTE
+    (#xD4 ?\u00D4) ;; LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    (#xD5 ?\u00D5) ;; LATIN CAPITAL LETTER O WITH TILDE
+    (#xD6 ?\u00D6) ;; LATIN CAPITAL LETTER O WITH DIAERESIS
+    (#xD7 ?\u00D7) ;; MULTIPLICATION SIGN
+    (#xD8 ?\u00D8) ;; LATIN CAPITAL LETTER O WITH STROKE
+    (#xD9 ?\u00D9) ;; LATIN CAPITAL LETTER U WITH GRAVE
+    (#xDA ?\u00DA) ;; LATIN CAPITAL LETTER U WITH ACUTE
+    (#xDB ?\u00DB) ;; LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    (#xDC ?\u00DC) ;; LATIN CAPITAL LETTER U WITH DIAERESIS
+    (#xDD ?\u00DD) ;; LATIN CAPITAL LETTER Y WITH ACUTE
+    (#xDE ?\u00DE) ;; LATIN CAPITAL LETTER THORN
+    (#xDF ?\u00DF) ;; LATIN SMALL LETTER SHARP S
+    (#xE0 ?\u00E0) ;; LATIN SMALL LETTER A WITH GRAVE
+    (#xE1 ?\u00E1) ;; LATIN SMALL LETTER A WITH ACUTE
+    (#xE2 ?\u00E2) ;; LATIN SMALL LETTER A WITH CIRCUMFLEX
+    (#xE3 ?\u00E3) ;; LATIN SMALL LETTER A WITH TILDE
+    (#xE4 ?\u00E4) ;; LATIN SMALL LETTER A WITH DIAERESIS
+    (#xE5 ?\u00E5) ;; LATIN SMALL LETTER A WITH RING ABOVE
+    (#xE6 ?\u00E6) ;; LATIN SMALL LETTER AE
+    (#xE7 ?\u00E7) ;; LATIN SMALL LETTER C WITH CEDILLA
+    (#xE8 ?\u00E8) ;; LATIN SMALL LETTER E WITH GRAVE
+    (#xE9 ?\u00E9) ;; LATIN SMALL LETTER E WITH ACUTE
+    (#xEA ?\u00EA) ;; LATIN SMALL LETTER E WITH CIRCUMFLEX
+    (#xEB ?\u00EB) ;; LATIN SMALL LETTER E WITH DIAERESIS
+    (#xEC ?\u00EC) ;; LATIN SMALL LETTER I WITH GRAVE
+    (#xED ?\u00ED) ;; LATIN SMALL LETTER I WITH ACUTE
+    (#xEE ?\u00EE) ;; LATIN SMALL LETTER I WITH CIRCUMFLEX
+    (#xEF ?\u00EF) ;; LATIN SMALL LETTER I WITH DIAERESIS
+    (#xF0 ?\u00F0) ;; LATIN SMALL LETTER ETH
+    (#xF1 ?\u00F1) ;; LATIN SMALL LETTER N WITH TILDE
+    (#xF2 ?\u00F2) ;; LATIN SMALL LETTER O WITH GRAVE
+    (#xF3 ?\u00F3) ;; LATIN SMALL LETTER O WITH ACUTE
+    (#xF4 ?\u00F4) ;; LATIN SMALL LETTER O WITH CIRCUMFLEX
+    (#xF5 ?\u00F5) ;; LATIN SMALL LETTER O WITH TILDE
+    (#xF6 ?\u00F6) ;; LATIN SMALL LETTER O WITH DIAERESIS
+    (#xF7 ?\u00F7) ;; DIVISION SIGN
+    (#xF8 ?\u00F8) ;; LATIN SMALL LETTER O WITH STROKE
+    (#xF9 ?\u00F9) ;; LATIN SMALL LETTER U WITH GRAVE
+    (#xFA ?\u00FA) ;; LATIN SMALL LETTER U WITH ACUTE
+    (#xFB ?\u00FB) ;; LATIN SMALL LETTER U WITH CIRCUMFLEX
+    (#xFC ?\u00FC) ;; LATIN SMALL LETTER U WITH DIAERESIS
+    (#xFD ?\u00FD) ;; LATIN SMALL LETTER Y WITH ACUTE
+    (#xFE ?\u00FE) ;; LATIN SMALL LETTER THORN
+    (#xFF ?\u00FF)) ;; LATIN SMALL LETTER Y WITH DIAERESIS
+   documentation "Microsoft's extension of iso-8859-1 for Western Europe \
+and the Americas.  "
+   mnemonic "cp1252"
    aliases (cp1252)))
 
 ;; Provide language environments that prefer specific coding systems.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lisp/mule/make-coding-system.el	Sat Sep 19 22:53:13 2009 +0100
@@ -0,0 +1,984 @@
+;;; make-coding-system.el; Provides the #'make-coding-system function and
+;;; much of the implementation of the fixed-width coding system type.
+
+;; Copyright (C) 2009 Free Software Foundation
+
+;; Author: Aidan Kehoe
+
+;; This file is part of XEmacs.
+
+;; XEmacs is free software; you can redistribute it and/or modify it
+;; under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+
+;; XEmacs is distributed in the hope that it will be useful, but
+;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+;; General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with XEmacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
+
+;;; Commentary:
+
+;;; Code:
+
+(defvar fixed-width-private-use-start (decode-char 'ucs #xE000)
+  "Start of a 256 code private use area for fixed-width coding systems.
+
+This is used to ensure that distinct octets on disk for a given coding
+system map to distinct XEmacs characters, preventing spurious changes when
+a file is read, not changed, and then written.  ")
+
+(defun fixed-width-generate-helper (decode-table encode-table
+				   encode-failure-octet)
+  "Helper func, `fixed-width-generate-encode-program-and-skip-chars-strings',
+which see.
+
+Deals with the case where ASCII and another character set can both be
+encoded unambiguously and completely into the coding-system; if this is so,
+returns multiple values comprisig of such a ccl-program and the character
+set in question.  If not, it returns nil."
+  (let ((tentative-encode-program-parts
+	 (eval-when-compile 
+	   (let* ((vec-len 128)
+		  (compiled 
+		   (append
+                    (ccl-compile
+                     `(1
+                       (loop
+                         (read-multibyte-character r0 r1)
+                         (if (r0 == ,(charset-id 'ascii))
+                             (write r1)
+                           ((if (r0 == #xABAB)
+                                ;; #xBFFE is a sentinel in the compiled
+                                ;; program.
+				((r0 = r1 & #x7F)
+				 (write r0 ,(make-vector vec-len #xBFFE)))
+                              ((mule-to-unicode r0 r1)
+                               (if (r0 == #xFFFD)
+                                   (write #xBEEF)
+                                 ((lookup-integer encode-table-sym r0 r3)
+                                  (if r7
+                                      (write-multibyte-character r0 r3)
+                                    (write #xBEEF))))))))
+                         (repeat)))) nil))
+		  (first-part compiled)
+		  (last-part
+		   (member-if-not (lambda (entr) (eq #xBFFE entr))
+				  (member-if
+                                   (lambda (entr) (eq #xBFFE entr))
+                                   first-part))))
+	     (while compiled
+	       (when (eq #xBFFE (cadr compiled))
+		 (assert (= vec-len (search '(#xBFFE) (cdr compiled)
+					    :test #'/=)) nil
+					    "Strange ccl vector length")
+		 (setcdr compiled nil))
+	       (setq compiled (cdr compiled)))
+             ;; Is the generated code as we expect it to be?
+	     (assert (and (memq #xABAB first-part)
+			  (memq #xBEEF14 last-part))
+	    nil
+	    "This code assumes that the constant #xBEEF is #xBEEF14 in \
+compiled CCL code,\nand that the constant #xABAB is #xABAB. If that is
+not the case, and it appears not to be--that's why you're getting this
+message--it will not work.  ")
+	     (list first-part last-part vec-len))))
+	(charset-lower -1)
+	(charset-upper -1)
+	worth-trying known-charsets encode-program
+	other-charset-vector ucs)
+
+    (loop for char across decode-table
+      do (pushnew (char-charset char) known-charsets))
+    (setq known-charsets (delq 'ascii known-charsets))
+
+    (loop for known-charset in known-charsets 
+      do
+      ;; This is not possible for two dimensional charsets. 
+      (when (eq 1 (charset-dimension known-charset))
+        (if (eq 'control-1 known-charset)
+            (setq charset-lower 0
+                  charset-upper 31)
+	  ;; There should be a nicer way to get the limits here.
+          (condition-case args-out-of-range
+              (make-char known-charset #x100)
+            (args-out-of-range 
+             (setq charset-lower (third args-out-of-range)
+                   charset-upper (fourth args-out-of-range)))))
+	(loop
+	  for i from charset-lower to charset-upper
+	  always (and (setq ucs 
+			    (encode-char (make-char known-charset i) 'ucs))
+		      (gethash ucs encode-table))
+	  finally (setq worth-trying known-charset))
+
+	;; Only trying this for one charset at a time, the first find.
+	(when worth-trying (return))
+
+	;; Okay, this charset is not worth trying, Try the next.
+	(setq charset-lower -1
+	      charset-upper -1
+	      worth-trying nil)))
+
+    (when worth-trying
+      (setq other-charset-vector
+	    (make-vector (third tentative-encode-program-parts)
+			 encode-failure-octet))
+      (loop for i from charset-lower to charset-upper
+        do (aset other-charset-vector i
+		 (gethash (encode-char (make-char worth-trying i)
+				       'ucs) encode-table)))
+      (setq encode-program
+            (nsublis
+             (list (cons #xABAB (charset-id worth-trying)))
+             (nconc
+              (copy-list (first 
+                          tentative-encode-program-parts))
+              (append other-charset-vector nil)
+              (copy-tree (second 
+                          tentative-encode-program-parts))))))
+    (and encode-program (values encode-program worth-trying))))
+
+(defun fixed-width-generate-encode-program-and-skip-chars-strings
+  (decode-table encode-table encode-failure-octet)
+  "Generate a CCL program to encode a 8-bit fixed-width charset.
+
+DECODE-TABLE must have 256 non-cons entries, and will be regarded as
+describing a map from the octet corresponding to an offset in the
+table to the that entry in the table.  ENCODE-TABLE is a hash table
+map from unicode values to characters in the range [0,255].
+ENCODE-FAILURE-OCTET describes an integer between 0 and 255
+\(inclusive) to write in the event that a character cannot be encoded."
+  (check-argument-type #'vectorp decode-table)
+  (check-argument-range (length decode-table) #x100 #x100)
+  (check-argument-type #'hash-table-p encode-table)
+  (check-argument-type #'integerp encode-failure-octet)
+  (check-argument-range encode-failure-octet #x00 #xFF)
+  (let ((encode-program nil)
+	(general-encode-program
+	 (eval-when-compile
+	   (let ((prog (append 
+			(ccl-compile
+			 `(1
+			   (loop
+			     (read-multibyte-character r0 r1)
+			     (mule-to-unicode r0 r1)
+			     (if (r0 == #xFFFD)
+				 (write #xBEEF)
+			       ((lookup-integer encode-table-sym r0 r3)
+				(if r7
+				    (write-multibyte-character r0 r3)
+				  (write #xBEEF))))
+			     (repeat)))) nil)))
+	     (assert (memq #xBEEF14 prog)
+		     nil
+		     "This code assumes that the constant #xBEEF is #xBEEF14 \
+in compiled CCL code.\nIf that is not the case, and it appears not to
+be--that's why you're getting this message--it will not work.  ")
+	     prog)))
+	(encode-program-with-ascii-optimisation
+	 (eval-when-compile 
+	   (let ((prog (append
+			(ccl-compile
+			 `(1
+			   (loop
+			     (read-multibyte-character r0 r1)
+			     (if (r0 == ,(charset-id 'ascii))
+				 (write r1)
+			       ((mule-to-unicode r0 r1)
+				(if (r0 == #xFFFD)
+				    (write #xBEEF)
+				  ((lookup-integer encode-table-sym r0 r3)
+				   (if r7
+				       (write-multibyte-character r0 r3)
+				     (write #xBEEF))))))
+			     (repeat)))) nil)))
+	     (assert (memq #xBEEF14 prog)
+		     nil
+		     "This code assumes that the constant #xBEEF is #xBEEF14 \
+in compiled CCL code.\nIf that is not the case, and it appears not to
+be--that's why you're getting this message--it will not work.  ")
+	     prog)))
+         (ascii-encodes-as-itself nil)
+         (control-1-encodes-as-itself t)
+         (invalid-sequence-code-point-start
+          (eval-when-compile
+            (char-to-unicode
+             (aref (decode-coding-string "\xd8\x00\x00\x00" 'utf-16-be) 3))))
+         further-char-set skip-chars invalid-sequences-skip-chars)
+
+    ;; Is this coding system ASCII-compatible? If so, we can avoid the hash
+    ;; table lookup for those characters. 
+    (loop
+      for i from #x00 to #x7f
+      always (eq (int-to-char i) (gethash i encode-table))
+      finally (setq ascii-encodes-as-itself t))
+
+    ;; Note that this logic handles EBCDIC badly. For example, CP037,
+    ;; MIME name ebcdic-na, has the entire repertoire of ASCII and
+    ;; Latin 1, and thus a more optimal ccl encode program would check
+    ;; for those character sets and use tables. But for now, we do a
+    ;; hash table lookup for every character.
+    (if (null ascii-encodes-as-itself)
+	;; General encode program. Pros; general and correct. Cons;
+	;; slow, a hash table lookup + mule-unicode conversion is done
+	;; for every character encoding. 
+	(setq encode-program general-encode-program)
+      (multiple-value-setq
+          (encode-program further-char-set)
+        ;; Encode program with ascii-ascii mapping (based on a
+        ;; character's mule character set), and one other mule
+        ;; character set using table-based encoding, other
+        ;; character sets using hash table lookups.
+        ;; fixed-width-non-ascii-completely-coveredp only returns
+        ;; such a mapping if some non-ASCII charset with
+        ;; characters in decode-table is entirely covered by
+        ;; encode-table.
+        (fixed-width-generate-helper decode-table encode-table
+                                    encode-failure-octet))
+      (unless encode-program
+	;; If fixed-width-non-ascii-completely-coveredp returned nil,
+	;; but ASCII still encodes as itself, do one-to-one mapping
+	;; for ASCII, and a hash table lookup for everything else.
+	(setq encode-program encode-program-with-ascii-optimisation)))
+
+    (setq encode-program
+          (nsublis
+           (list (cons #xBEEF14 
+                       (logior (lsh encode-failure-octet 8)
+                               #x14)))
+           (copy-tree encode-program)))
+    (loop
+      for i from #x80 to #x9f
+      do (unless (= i (aref decode-table i))
+           (setq control-1-encodes-as-itself nil)
+           (return)))
+    (loop
+      for i from #x00 to #xFF
+      initially (setq skip-chars
+                      (cond
+                       ((and ascii-encodes-as-itself
+                             control-1-encodes-as-itself further-char-set)
+                        (concat "\x00-\x9f" (charset-skip-chars-string
+                                             further-char-set)))
+                       ((and ascii-encodes-as-itself
+                             control-1-encodes-as-itself)
+                        "\x00-\x9f")
+                       ((null ascii-encodes-as-itself)
+                        (skip-chars-quote (apply #'string
+                                                 (append decode-table nil))))
+                       (further-char-set
+                        (concat (charset-skip-chars-string 'ascii)
+                                (charset-skip-chars-string further-char-set)))
+                       (t 
+                        (charset-skip-chars-string 'ascii)))
+                      invalid-sequences-skip-chars "")
+      with decoded-ucs = nil
+      with decoded = nil
+      with no-ascii-transparency-skip-chars-list = 
+           (unless ascii-encodes-as-itself (append decode-table nil))
+      ;; Can't use #'match-string here, see:
+      ;; http://mid.gmane.org/18829.34118.709782.704574@parhasard.net
+      with skip-chars-test = 
+           #'(lambda (skip-chars-string testing)
+               (with-temp-buffer
+                 (insert testing)
+                 (goto-char (point-min))
+                 (skip-chars-forward skip-chars-string)
+                 (= (point) (point-max))))
+      do
+      (setq decoded (aref decode-table i)
+            decoded-ucs (char-to-unicode decoded))
+      (cond
+       ((<= invalid-sequence-code-point-start decoded-ucs
+            (+ invalid-sequence-code-point-start #xFF))
+        (setq invalid-sequences-skip-chars
+              (concat (string decoded)
+                      invalid-sequences-skip-chars))
+        (assert (not (funcall skip-chars-test skip-chars decoded))
+                "This char should only be skipped with \
+`invalid-sequences-skip-chars', not by `skip-chars'"))
+       ((not (funcall skip-chars-test skip-chars decoded))
+        (if ascii-encodes-as-itself
+            (setq skip-chars (concat skip-chars (string decoded)))
+          (push decoded no-ascii-transparency-skip-chars-list))))
+      finally (unless ascii-encodes-as-itself
+                (setq skip-chars
+                      (skip-chars-quote
+                       (apply #'string
+                              no-ascii-transparency-skip-chars-list)))))
+    (values encode-program skip-chars invalid-sequences-skip-chars)))
+
+(defun fixed-width-create-decode-encode-tables (unicode-map)
+  "Return multiple values \(DECODE-TABLE ENCODE-TABLE) given UNICODE-MAP. 
+UNICODE-MAP should be an alist mapping from integer octet values to
+characters with UCS code points; DECODE-TABLE will be a 256-element
+vector, and ENCODE-TABLE will be a hash table mapping from 256 numbers
+to 256 distinct characters."
+  (check-argument-type #'listp unicode-map)
+  (let ((decode-table (make-vector 256 nil))
+        (encode-table (make-hash-table :size 256))
+	(private-use-start (encode-char fixed-width-private-use-start 'ucs))
+        (invalid-sequence-code-point-start
+         (eval-when-compile
+           (char-to-unicode
+            (aref (decode-coding-string "\xd8\x00\x00\x00" 'utf-16-be) 3))))
+	desired-ucs decode-table-entry)
+
+    (loop for (external internal)
+      in unicode-map
+      do
+      (aset decode-table external internal)
+      (assert (not (eq (encode-char internal 'ucs) -1))
+	      nil
+	      "Looks like you're creating a fixed-width coding system \
+in a dumped file, \nand you're either not providing a literal unicode map
+or PROPS. Don't do that; fixed-width coding systems rely on sensible
+Unicode mappings being available, which they are at compile time for
+dumped files (but this requires the mentioned literals), but not, for
+most of them, at run time.  ")
+
+      (puthash (encode-char internal 'ucs)
+	       ;; This is semantically an integer, but Dave Love's design
+	       ;; for lookup-integer in CCL means we need to store it as a
+	       ;; character.
+	       (int-to-char external)
+	       encode-table))
+
+    ;; Now, go through the decode table. For octet values above #x7f, if the
+    ;; decode table entry is nil, this means that they have an undefined
+    ;; mapping (= they map to XEmacs characters with keys in
+    ;; unicode-error-default-translation-table); for octet values below or
+    ;; equal to #x7f, it means that they map to ASCII.
+
+    ;; If any entry (whether below or above #x7f) in the decode-table
+    ;; already maps to some character with a key in
+    ;; unicode-error-default-translation-table, it is treated as an
+    ;; undefined octet by `query-coding-region'. That is, it is not
+    ;; necessary for an octet value to be above #x7f for this to happen.
+
+    (dotimes (i 256)
+      (setq decode-table-entry (aref decode-table i))
+      (if decode-table-entry
+          (when (get-char-table
+                 decode-table-entry
+                 unicode-error-default-translation-table)
+            ;; The caller is explicitly specifying that this octet
+            ;; corresponds to an invalid sequence on disk:
+            (assert (= (get-char-table
+                        decode-table-entry
+                        unicode-error-default-translation-table) i)
+                    "Bad argument for a fixed-width coding system.
+If you're going to designate an octet with value below #x80 as invalid
+for this coding system, make sure to map it to the invalid sequence
+character corresponding to its octet value on disk. "))
+
+        ;; decode-table-entry is nil; either the octet is to be treated as
+        ;; contributing to an error sequence (when (> #x7f i)), or it should
+        ;; be attempted to treat it as ASCII-equivalent. 
+        (setq desired-ucs (or (and (< i #x80) i)
+                              (+ invalid-sequence-code-point-start i)))
+        (while (gethash desired-ucs encode-table)
+          (assert (not (< i #x80))
+                  "UCS code point should not already be in encode-table!"
+                  ;; There is one invalid sequence char per octet value;
+                  ;; with fixed-width coding systems, it makes no sense
+                  ;; for us to be multiply allocating them.
+                  (gethash desired-ucs encode-table))
+          (setq desired-ucs (+ private-use-start desired-ucs)
+                private-use-start (+ private-use-start 1)))
+        (puthash desired-ucs (int-to-char i) encode-table)
+        (setq desired-ucs (if (> desired-ucs #xFF)
+                              (unicode-to-char desired-ucs)
+                            ;; So we get Latin-1 when run at dump time,
+                            ;; instead of JIT-allocated characters.
+                            (int-to-char desired-ucs)))
+        (aset decode-table i desired-ucs)))
+    (values decode-table encode-table)))
+
+(defun fixed-width-generate-decode-program (decode-table)
+  "Given DECODE-TABLE, generate a CCL program to decode an 8-bit charset.
+DECODE-TABLE must have 256 non-cons entries, and will be regarded as
+describing a map from the octet corresponding to an offset in the
+table to the that entry in the table.  "
+  (check-argument-type #'vectorp decode-table)
+  (check-argument-range (length decode-table) #x100 #x100)
+  (let ((decode-program-parts
+	 (eval-when-compile
+	   (let* ((compiled
+		   (append 
+		    (ccl-compile 
+		     `(3
+		       ((read r0)
+                        (loop
+			 (write-read-repeat r0 ,(make-vector
+						 256 'sentinel)))))) nil))
+		  (first-part compiled)
+		  (last-part
+		   (member-if-not #'symbolp
+				  (member-if-not #'integerp first-part))))
+	     ;; Chop off the sentinel sentinel sentinel [..] part. 
+	     (while compiled
+	       (if (symbolp (cadr compiled))
+		   (setcdr compiled nil))
+	       (setq compiled (cdr compiled)))
+	     (list first-part last-part)))))
+   (nconc
+    ;; copy-list needed, because the structure of the literal provided
+    ;; by our eval-when-compile hangs around.
+    (copy-list (first decode-program-parts))
+    (append decode-table nil)
+    (second decode-program-parts))))
+
+(defun fixed-width-choose-category (decode-table)
+  "Given DECODE-TABLE, return an appropriate coding category.
+DECODE-TABLE is a 256-entry vector describing the mapping from octets on
+disk to XEmacs characters for some fixed-width 8-bit coding system."
+  (check-argument-type #'vectorp decode-table)
+  (check-argument-range (length decode-table) #x100 #x100)
+  (loop
+    named category
+    for i from #x80 to #x9F
+    do (unless (= i (aref decode-table i))
+	 (return-from category 'no-conversion))
+    finally return 'iso-8-1))
+
+(defun fixed-width-rework-props-runtime (name props)
+  "Rework PROPS to a form understood by `make-coding-system-internal'. 
+
+NAME must be a symbol, describing a fixed-width coding system that is
+about to be created.  Much of the implementation of the fixed-width
+coding system is in Lisp, and this function allows us to rework the
+arguments that `make-coding-system-internal' sees accordingly.
+
+If you are calling this function from anywhere but
+`make-coding-system', you're probably doing something wrong."
+  (check-argument-type #'symbolp name)
+  (check-valid-plist props)
+  (let  ((encode-failure-octet (or (plist-get props 'encode-failure-octet)
+				   (char-to-int ?~)))
+         (unicode-map (plist-get props 'unicode-map))
+	 (hash-table-sym (gensym (format "%s-encode-table" name)))
+	 encode-program decode-program decode-table encode-table skip-chars
+         invalid-sequences-skip-chars category)
+
+    (check-argument-range encode-failure-octet 0 #xFF)
+    ;; unicode-map must be a true list, and must be non-nil.
+    (check-argument-type #'true-list-p unicode-map)
+    (check-argument-type #'consp unicode-map)
+
+    ;; Don't pass on our extra data to make-coding-system-internal.
+    (setq props (plist-remprop props 'encode-failure-octet)
+	  props (plist-remprop props 'unicode-map))
+
+    (multiple-value-setq
+	(decode-table encode-table)
+      (fixed-width-create-decode-encode-tables unicode-map))
+
+    ;; Register the decode-table. 
+    (define-translation-hash-table hash-table-sym encode-table)
+
+    ;; Generate the programs and skip-chars strings. 
+    (setq decode-program (fixed-width-generate-decode-program decode-table))
+    (multiple-value-setq
+        (encode-program skip-chars invalid-sequences-skip-chars)
+      (fixed-width-generate-encode-program-and-skip-chars-strings
+       decode-table encode-table encode-failure-octet))
+
+    (setq category (fixed-width-choose-category decode-table))
+
+    (unless (vectorp encode-program) 
+      (setq encode-program 
+	    (apply #'vector
+		   (nsublis (list (cons 'encode-table-sym hash-table-sym))
+			    (copy-tree encode-program)))))
+    (unless (vectorp decode-program)
+      (setq decode-program
+	    (apply #'vector decode-program)))
+
+    (loop for (symbol . value)
+      in `((decode . ,decode-program)
+           (encode . ,encode-program)
+           (from-unicode . ,encode-table)
+           (query-skip-chars . ,skip-chars)
+           (invalid-sequences-skip-chars . ,invalid-sequences-skip-chars)
+           (category . ,category))
+      with default = (gensym)
+      do
+      (unless (eq default (plist-get props symbol default))
+        (error
+         'invalid-argument
+         "Explicit property not allowed for fixed-width coding systems"
+         symbol))
+      (setq props (nconc (list symbol value) props)))
+    props))
+
+;;;###autoload
+(defun make-coding-system (name type description props)
+  "Register symbol NAME as a coding system.
+
+TYPE describes the conversion method used and should be one of
+
+nil or `undecided'
+     Automatic conversion.  XEmacs attempts to detect the coding system
+     used in the file.
+`chain'
+     Chain two or more coding systems together to make a combination coding
+     system.
+`no-conversion'
+     No conversion.  Use this for binary files and such.  On output,
+     graphic characters that are not in ASCII or Latin-1 will be
+     replaced by a ?. (For a no-conversion-encoded buffer, these
+     characters will only be present if you explicitly insert them.)
+`convert-eol'
+     Convert CRLF sequences or CR to LF.
+`shift-jis'
+     Shift-JIS (a Japanese encoding commonly used in PC operating systems).
+`unicode'
+     Any Unicode encoding (UCS-4, UTF-8, UTF-16, etc.).
+`mswindows-unicode-to-multibyte'
+     (MS Windows only) Converts from Windows Unicode to Windows Multibyte
+     (any code page encoding) upon encoding, and the other way upon decoding.
+`mswindows-multibyte'
+     Converts to or from Windows Multibyte (any code page encoding).
+     This is resolved into a chain of `mswindows-unicode' and
+     `mswindows-unicode-to-multibyte'.
+`iso2022'
+     Any ISO2022-compliant encoding.  Among other things, this includes
+     JIS (the Japanese encoding commonly used for e-mail), EUC (the
+     standard Unix encoding for Japanese and other languages), and
+     Compound Text (the encoding used in X11).  You can specify more
+     specific information about the conversion with the PROPS argument.
+`fixed-width'
+     A fixed-width eight bit encoding that is not necessarily compliant with
+     ISO 2022.  This coding system assumes Unicode equivalency, that is, if
+     two given XEmacs characters have the same Unicode mapping, they will
+     always map to the same octet on disk.
+`big5'
+     Big5 (the encoding commonly used for Mandarin Chinese in Taiwan).
+`ccl'
+     The conversion is performed using a user-written pseudo-code
+     program.  CCL (Code Conversion Language) is the name of this
+     pseudo-code.
+`gzip'
+     GZIP compression format.
+`internal'
+     Write out or read in the raw contents of the memory representing
+     the buffer's text.  This is primarily useful for debugging
+     purposes, and is only enabled when XEmacs has been compiled with
+     DEBUG_XEMACS defined (via the --debug configure option).
+     WARNING: Reading in a file using `internal' conversion can result
+     in an internal inconsistency in the memory representing a
+     buffer's text, which will produce unpredictable results and may
+     cause XEmacs to crash.  Under normal circumstances you should
+     never use `internal' conversion.
+
+DESCRIPTION is a short English phrase describing the coding system,
+suitable for use as a menu item. (See also the `documentation' property
+below.)
+
+PROPS is a property list, describing the specific nature of the
+character set.  Recognized properties are:
+
+`mnemonic'
+     String to be displayed in the modeline when this coding system is
+     active.
+
+`documentation'
+     Detailed documentation on the coding system.
+
+`aliases'
+     A list of aliases for the coding system.  See
+     `define-coding-system-alias'.
+
+`eol-type'
+     End-of-line conversion to be used.  It should be one of
+
+	nil
+		Automatically detect the end-of-line type (LF, CRLF,
+		or CR).  Also generate subsidiary coding systems named
+		`NAME-unix', `NAME-dos', and `NAME-mac', that are
+		identical to this coding system but have an EOL-TYPE
+		value of `lf', `crlf', and `cr', respectively.
+	`lf'
+		The end of a line is marked externally using ASCII LF.
+		Since this is also the way that XEmacs represents an
+		end-of-line internally, specifying this option results
+		in no end-of-line conversion.  This is the standard
+		format for Unix text files.
+	`crlf'
+		The end of a line is marked externally using ASCII
+		CRLF.  This is the standard format for MS-DOS text
+		files.
+	`cr'
+		The end of a line is marked externally using ASCII CR.
+		This is the standard format for Macintosh text files.
+	t
+		Automatically detect the end-of-line type but do not
+		generate subsidiary coding systems.  (This value is
+		converted to nil when stored internally, and
+		`coding-system-property' will return nil.)
+
+`post-read-conversion'
+     The value is a function to call after some text is inserted and
+     decoded by the coding system itself and before any functions in
+     `after-change-functions' are called. (#### Not actually true in
+     XEmacs. `after-change-functions' will be called twice if
+     `post-read-conversion' changes something.) The argument of this
+     function is the same as for a function in
+     `after-insert-file-functions', i.e. LENGTH of the text inserted,
+     with point at the head of the text to be decoded.
+
+`pre-write-conversion'
+     The value is a function to call after all functions in
+     `write-region-annotate-functions' and `buffer-file-format' are
+     called, and before the text is encoded by the coding system itself.
+     The arguments to this function are the same as those of a function
+     in `write-region-annotate-functions', i.e. FROM and TO, specifying
+     a region of text.
+
+The following properties are used by `default-query-coding-region',
+the default implementation of `query-coding-region'. This
+implementation and these properties are not used by the Unicode coding
+systems, nor by fixed-width coding systems. 
+
+`safe-chars'
+     The value is a char table.  If a character has non-nil value in it,
+     the character is safely supported by the coding system.  
+     This overrides the `safe-charsets' property.
+   
+`safe-charsets'
+     The value is a list of charsets safely supported by the coding
+     system.  For coding systems based on ISO 2022, XEmacs may try to
+     encode characters outside these character sets, but outside of
+     East Asia and East Asian coding systems, it is unlikely that
+     consumers of the data will understand XEmacs' encoding.
+     The value t means that all XEmacs character sets handles are supported.  
+
+The following properties are allowed for FSF compatibility but currently
+ignored:
+
+`translation-table-for-decode'
+     The value is a translation table to be applied on decoding.  See
+     the function `make-translation-table' for the format of translation
+     table.  This is not applicable to CCL-based coding systems.
+    
+`translation-table-for-encode'
+     The value is a translation table to be applied on encoding.  This is
+     not applicable to CCL-based coding systems.
+     
+`mime-charset'
+     The value is a symbol of which name is `MIME-charset' parameter of
+     the coding system.
+    
+`valid-codes' (meaningful only for a coding system based on CCL)
+     The value is a list to indicate valid byte ranges of the encoded
+     file.  Each element of the list is an integer or a cons of integer.
+     In the former case, the integer value is a valid byte code.  In the
+     latter case, the integers specifies the range of valid byte codes.
+
+The following additional property is recognized if TYPE is `convert-eol':
+
+`subtype'
+     One of `lf', `crlf', `cr' or nil (for autodetection).  When decoding,
+     the corresponding sequence will be converted to LF.  When encoding,
+     the opposite happens.  This coding system converts characters to
+     characters.
+
+
+
+The following additional properties are recognized if TYPE is `iso2022':
+
+`charset-g0'
+`charset-g1'
+`charset-g2'
+`charset-g3'
+     The character set initially designated to the G0 - G3 registers.
+     The value should be one of
+
+          -- A charset object (designate that character set)
+	  -- nil (do not ever use this register)
+	  -- t (no character set is initially designated to
+		the register, but may be later on; this automatically
+		sets the corresponding `force-g*-on-output' property)
+
+`force-g0-on-output'
+`force-g1-on-output'
+`force-g2-on-output'
+`force-g2-on-output'
+     If non-nil, send an explicit designation sequence on output before
+     using the specified register.
+
+`short'
+     If non-nil, use the short forms \"ESC $ @\", \"ESC $ A\", and
+     \"ESC $ B\" on output in place of the full designation sequences
+     \"ESC $ ( @\", \"ESC $ ( A\", and \"ESC $ ( B\".
+
+`no-ascii-eol'
+     If non-nil, don't designate ASCII to G0 at each end of line on output.
+     Setting this to non-nil also suppresses other state-resetting that
+     normally happens at the end of a line.
+
+`no-ascii-cntl'
+     If non-nil, don't designate ASCII to G0 before control chars on output.
+
+`seven'
+     If non-nil, use 7-bit environment on output.  Otherwise, use 8-bit
+     environment.
+
+`lock-shift'
+     If non-nil, use locking-shift (SO/SI) instead of single-shift
+     or designation by escape sequence.
+
+`no-iso6429'
+     If non-nil, don't use ISO6429's direction specification.
+
+`escape-quoted'
+     If non-nil, literal control characters that are the same as
+     the beginning of a recognized ISO2022 or ISO6429 escape sequence
+     (in particular, ESC (0x1B), SO (0x0E), SI (0x0F), SS2 (0x8E),
+     SS3 (0x8F), and CSI (0x9B)) are \"quoted\" with an escape character
+     so that they can be properly distinguished from an escape sequence.
+     (Note that doing this results in a non-portable encoding.) This
+     encoding flag is used for byte-compiled files.  Note that ESC
+     is a good choice for a quoting character because there are no
+     escape sequences whose second byte is a character from the Control-0
+     or Control-1 character sets; this is explicitly disallowed by the
+     ISO2022 standard.
+
+`input-charset-conversion'
+     A list of conversion specifications, specifying conversion of
+     characters in one charset to another when decoding is performed.
+     Each specification is a list of two elements: the source charset,
+     and the destination charset.
+
+`output-charset-conversion'
+     A list of conversion specifications, specifying conversion of
+     characters in one charset to another when encoding is performed.
+     The form of each specification is the same as for
+     `input-charset-conversion'.
+
+The following additional properties are recognized if TYPE is
+`fixed-width':
+
+`unicode-map'
+     Required.  A plist describing a map from octets in the coding system
+     NAME (as integers) to XEmacs characters.  Those XEmacs characters will
+     be used explicitly on decoding, but for encoding (most relevantly, on
+     writing to disk) XEmacs characters that map to the same Unicode code
+     point will be unified.  This means that the ISO-8859-? characters that
+     map to the same Unicode code point will not be distinct when written to
+     disk, which is normally what is intended; it also means that East Asian
+     Han characters from different XEmacs character sets will not be
+     distinct when written to disk, which is less often what is intended.
+
+     Any octets not mapped, and with values above #x7f, will be decoded into
+     XEmacs characters that reflect that their values are undefined.  These
+     characters will be displayed in a language-environment-specific
+     way. See `unicode-error-default-translation-table' and the
+     `invalid-sequence-coding-system' argument to `set-language-info'.
+
+     These characters will normally be treated as invalid when checking
+     whether text can be encoded with `query-coding-region'--see the
+     IGNORE-INVALID-SEQUENCESP argument to that function to avoid this.  It
+     is possible to specify that octets with values less than #x80 (or
+     indeed greater than it) be treated in this way, by specifying
+     explicitly that they correspond to the character mapping to that octet
+     in `unicode-error-default-translation-table'.  Far fewer coding systems
+     override the ASCII mapping, though, so this is not the default.
+
+`encode-failure-octet'
+     An integer between 0 and 255 to write in place of XEmacs characters
+     that cannot be encoded, defaulting to the code for tilde `~'.
+
+The following additional properties are recognized (and required)
+if TYPE is `ccl':
+
+`decode'
+     CCL program used for decoding (converting to internal format).
+
+`encode'
+     CCL program used for encoding (converting to external format).
+
+
+The following additional properties are recognized if TYPE is `chain':
+
+`chain'
+     List of coding systems to be chained together, in decoding order.
+
+`canonicalize-after-coding'
+     Coding system to be returned by the detector routines in place of
+     this coding system.
+
+
+
+The following additional properties are recognized if TYPE is `unicode':
+
+`unicode-type'
+     One of `utf-16', `utf-8', `ucs-4', or `utf-7' (the latter is not
+     yet implemented).  `utf-16' is the basic two-byte encoding;
+     `ucs-4' is the four-byte encoding; `utf-8' is an ASCII-compatible
+     variable-width 8-bit encoding; `utf-7' is a 7-bit encoding using
+     only characters that will safely pass through all mail gateways.
+     [[ This should be \"transformation format\".  There should also be
+     `ucs-2' (or `bmp' -- no surrogates) and `utf-32' (range checked). ]]
+
+`little-endian'
+     If non-nil, `utf-16' and `ucs-4' will write out the groups of two
+     or four bytes little-endian instead of big-endian.  This is required,
+     for example, under Windows.
+
+`need-bom'
+     If non-nil, a byte order mark (BOM, or Unicode FFFE) should be
+     written out at the beginning of the data.  This serves both to
+     identify the endianness of the following data and to mark the
+     data as Unicode (at least, this is how Windows uses it).
+     [[ The correct term is \"signature\", since this technique may also
+     be used with UTF-8.  That is the term used in the standard. ]]
+
+
+The following additional properties are recognized if TYPE is
+`mswindows-multibyte':
+
+`code-page'
+     Either a number (specifying a particular code page) or one of the
+     symbols `ansi', `oem', `mac', or `ebcdic', specifying the ANSI,
+     OEM, Macintosh, or EBCDIC code page associated with a particular
+     locale (given by the `locale' property).  NOTE: EBCDIC code pages
+     only exist in Windows 2000 and later.
+
+`locale'
+     If `code-page' is a symbol, this specifies the locale whose code
+     page of the corresponding type should be used.  This should be
+     one of the following: A cons of two strings, (LANGUAGE
+     . SUBLANGUAGE) (see `mswindows-set-current-locale'); a string (a
+     language; SUBLANG_DEFAULT, i.e. the default sublanguage, is
+     used); or one of the symbols `current', `user-default', or
+     `system-default', corresponding to the values of
+     `mswindows-current-locale', `mswindows-user-default-locale', or
+     `mswindows-system-default-locale', respectively.
+
+
+The following additional properties are recognized if TYPE is `undecided':
+\[[ Doesn't GNU use \"detect-*\" for the following two? ]]
+
+`do-eol'
+     Do EOL detection.
+
+`do-coding'
+     Do encoding detection.
+
+`coding-system'
+     If encoding detection is not done, use the specified coding system
+     to do decoding.  This is used internally when implementing coding
+     systems with an EOL type that specifies autodetection (the default),
+     so that the detector routines return the proper subsidiary.
+
+
+
+The following additional property is recognized if TYPE is `gzip':
+
+`level'
+     Compression level: 0 through 9, or `default' (currently 6)."
+  (when (eq 'fixed-width type)
+    (setq props (fixed-width-rework-props-runtime name props)))
+  (make-coding-system-internal name type description props))
+
+(define-compiler-macro make-coding-system (&whole form name type
+                                           &optional description props)
+  (if (equal '(quote fixed-width) type)
+      (if (memq (car-safe props) '(quote eval-when-compile))
+          (let* ((props (if (eq 'eval-when-compile (car props))
+                            (eval (cadr props))
+                          (cadr props)))
+                 (encode-failure-octet
+                  (or (plist-get props 'encode-failure-octet)
+                      (char-to-int ?~)))
+                 (unicode-map (plist-get props 'unicode-map))
+                 (default-plist-entry (gensym))
+                 (encode-table-sym (gensym 
+                                    (if (eq 'quote (car name))
+                                        (format "%s-enc-" (second name)))))
+                 encode-program decode-program
+                 decode-table encode-table
+                 skip-chars invalid-sequences-skip-chars category)
+
+            (check-argument-range encode-failure-octet 0 #xFF)
+            ;; unicode-map must be a true list, and must be non-nil.
+            (check-argument-type #'true-list-p unicode-map)
+            (check-argument-type #'consp unicode-map)
+
+            ;; Don't pass on our extra data to make-coding-system-internal.
+            (setq props (plist-remprop props 'encode-failure-octet)
+                  props (plist-remprop props 'unicode-map))
+
+            (multiple-value-setq
+                (decode-table encode-table)
+              (fixed-width-create-decode-encode-tables unicode-map))
+    
+            ;; Generate the decode and encode programs, and the skip-chars
+            ;; arguments.
+            (setq decode-program
+                  (fixed-width-generate-decode-program decode-table)
+                  category (fixed-width-choose-category decode-table))
+
+            (multiple-value-setq
+                (encode-program skip-chars invalid-sequences-skip-chars)
+              (fixed-width-generate-encode-program-and-skip-chars-strings
+               decode-table encode-table encode-failure-octet))
+
+            (unless (vectorp decode-program)
+              (setq decode-program
+                    (apply #'vector decode-program)))
+
+            (unless (eq default-plist-entry (plist-get props 'encode
+                                                       default-plist-entry))
+              (error
+               'invalid-argument
+               "Explicit property not allowed for fixed-width coding system"
+               'encode))
+            (loop for (symbol . value)
+              in `((decode . ,decode-program)
+                   (from-unicode . ,encode-table)
+                   (query-skip-chars . ,skip-chars)
+                   (invalid-sequences-skip-chars .
+                                                 ,invalid-sequences-skip-chars)
+                   (category . ,category))
+              do
+              (unless (eq default-plist-entry (plist-get props symbol
+                                                         default-plist-entry))
+                (error
+                 'invalid-argument
+                 "Explicit property not allowed for \
+fixed-width coding systems"
+                 symbol))
+              (setq props (nconc (list symbol value) props)))
+            `(progn
+              (define-translation-hash-table ',encode-table-sym ,encode-table)
+              (make-coding-system-internal
+               ,name ,type ,description
+               ',(nconc (list 'encode
+                              (apply #'vector
+                                     (nsublis
+                                      (list (cons 'encode-table-sym
+                                                  encode-table-sym))
+                                      encode-program)))
+                        props))))
+        ;; The form does not use literals; call make-coding-system at
+        ;; run time.
+        form)
+    (if (byte-compile-constp type)
+        ;; This is not a fixed-width call; compile it to a form that 21.4
+        ;; can also understand.
+        `(funcall (or (and (fboundp 'make-coding-system-internal)
+                           'make-coding-system-internal)
+                      'make-coding-system)
+          ,@(cdr form))
+      ;; TYPE is not literal; work things out at runtime.
+      form)))
+
--- a/lisp/mule/mule-coding.el	Sat Sep 19 17:56:23 2009 +0200
+++ b/lisp/mule/mule-coding.el	Sat Sep 19 22:53:13 2009 +0100
@@ -28,9 +28,6 @@
 
 ;;; split off of mule.el and mostly moved to coding.el
 
-;; Needed for make-8-bit-coding-system. 
-(eval-when-compile (require 'ccl))
-
 ;;; Code:
 
 (defun coding-system-force-on-output (coding-system register)
@@ -222,730 +219,16 @@
     (put symbol 'translation-hash-table-id id)
     id))
 
-(defvar make-8-bit-private-use-start (decode-char 'ucs #xE000)
-  "Start of a 256 code private use area for make-8-bit-coding-system.
-
-This is used to ensure that distinct octets on disk for a given coding
-system map to distinct XEmacs characters, preventing a spurious changes when
-a file is read, not changed, and then written.  ")
-
-(defun make-8-bit-generate-helper (decode-table encode-table
-				   encode-failure-octet)
-  "Helper function, `make-8-bit-generate-encode-program-and-skip-chars-strings',
-which see.
-
-Deals with the case where ASCII and another character set can both be
-encoded unambiguously and completely into the coding-system; if this is so,
-returns a list comprised of such a ccl-program and the character set in
-question.  If not, it returns a list with both entries nil."
-  (let ((tentative-encode-program-parts
-	 (eval-when-compile 
-	   (let* ((vec-len 128)
-		  (compiled 
-		   (append
-                    (ccl-compile
-                     `(1
-                       (loop
-                         (read-multibyte-character r0 r1)
-                         (if (r0 == ,(charset-id 'ascii))
-                             (write r1)
-                           ((if (r0 == #xABAB)
-                                ;; #xBFFE is a sentinel in the compiled
-                                ;; program.
-				((r0 = r1 & #x7F)
-				 (write r0 ,(make-vector vec-len #xBFFE)))
-                              ((mule-to-unicode r0 r1)
-                               (if (r0 == #xFFFD)
-                                   (write #xBEEF)
-                                 ((lookup-integer encode-table-sym r0 r3)
-                                  (if r7
-                                      (write-multibyte-character r0 r3)
-                                    (write #xBEEF))))))))
-                         (repeat)))) nil))
-		  (first-part compiled)
-		  (last-part
-		   (member-if-not (lambda (entr) (eq #xBFFE entr))
-				  (member-if
-                                   (lambda (entr) (eq #xBFFE entr))
-                                   first-part))))
-	     (while compiled
-	       (when (eq #xBFFE (cadr compiled))
-		 (assert (= vec-len (search '(#xBFFE) (cdr compiled)
-					    :test #'/=)) nil
-					    "Strange ccl vector length")
-		 (setcdr compiled nil))
-	       (setq compiled (cdr compiled)))
-             ;; Is the generated code as we expect it to be?
-	     (assert (and (memq #xABAB first-part)
-			  (memq #xBEEF14 last-part))
-	    nil
-	    "This code assumes that the constant #xBEEF is #xBEEF14 in \
-compiled CCL code,\nand that the constant #xABAB is #xABAB. If that is
-not the case, and it appears not to be--that's why you're getting this
-message--it will not work.  ")
-	     (list first-part last-part vec-len))))
-	(charset-lower -1)
-	(charset-upper -1)
-	worth-trying known-charsets encode-program
-	other-charset-vector ucs)
-
-    (loop for char across decode-table
-      do (pushnew (char-charset char) known-charsets))
-    (setq known-charsets (delq 'ascii known-charsets))
-
-    (loop for known-charset in known-charsets 
-      do
-      ;; This is not possible for two dimensional charsets. 
-      (when (eq 1 (charset-dimension known-charset))
-        (if (eq 'control-1 known-charset)
-            (setq charset-lower 0
-                  charset-upper 31)
-	  ;; There should be a nicer way to get the limits here.
-          (condition-case args-out-of-range
-              (make-char known-charset #x100)
-            (args-out-of-range 
-             (setq charset-lower (third args-out-of-range)
-                   charset-upper (fourth args-out-of-range)))))
-	(loop
-	  for i from charset-lower to charset-upper
-	  always (and (setq ucs 
-			    (encode-char (make-char known-charset i) 'ucs))
-		      (gethash ucs encode-table))
-	  finally (setq worth-trying known-charset))
-
-	;; Only trying this for one charset at a time, the first find.
-	(when worth-trying (return))
-
-	;; Okay, this charset is not worth trying, Try the next.
-	(setq charset-lower -1
-	      charset-upper -1
-	      worth-trying nil)))
-
-    (when worth-trying
-      (setq other-charset-vector
-	    (make-vector (third tentative-encode-program-parts)
-			 encode-failure-octet))
-      (loop for i from charset-lower to charset-upper
-        do (aset other-charset-vector i
-		 (gethash (encode-char (make-char worth-trying i)
-				       'ucs) encode-table)))
-      (setq encode-program
-            (nsublis
-             (list (cons #xABAB (charset-id worth-trying)))
-             (nconc
-              (copy-list (first 
-                          tentative-encode-program-parts))
-              (append other-charset-vector nil)
-              (copy-tree (second 
-                          tentative-encode-program-parts))))))
-    (values encode-program worth-trying)))
-
-(defun make-8-bit-generate-encode-program-and-skip-chars-strings
-  (decode-table encode-table encode-failure-octet)
-  "Generate a CCL program to encode a 8-bit fixed-width charset.
-
-DECODE-TABLE must have 256 non-cons entries, and will be regarded as
-describing a map from the octet corresponding to an offset in the
-table to the that entry in the table.  ENCODE-TABLE is a hash table
-map from unicode values to characters in the range [0,255].
-ENCODE-FAILURE-OCTET describes an integer between 0 and 255
-\(inclusive) to write in the event that a character cannot be encoded.  "
-  (check-argument-type #'vectorp decode-table)
-  (check-argument-range (length decode-table) #x100 #x100)
-  (check-argument-type #'hash-table-p encode-table)
-  (check-argument-type #'integerp encode-failure-octet)
-  (check-argument-range encode-failure-octet #x00 #xFF)
-  (let ((encode-program nil)
-	(general-encode-program
-	 (eval-when-compile
-	   (let ((prog (append 
-			(ccl-compile
-			 `(1
-			   (loop
-			     (read-multibyte-character r0 r1)
-			     (mule-to-unicode r0 r1)
-			     (if (r0 == #xFFFD)
-				 (write #xBEEF)
-			       ((lookup-integer encode-table-sym r0 r3)
-				(if r7
-				    (write-multibyte-character r0 r3)
-				  (write #xBEEF))))
-			     (repeat)))) nil)))
-	     (assert (memq #xBEEF14 prog)
-		     nil
-		     "This code assumes that the constant #xBEEF is #xBEEF14 \
-in compiled CCL code.\nIf that is not the case, and it appears not to
-be--that's why you're getting this message--it will not work.  ")
-	     prog)))
-	(encode-program-with-ascii-optimisation
-	 (eval-when-compile 
-	   (let ((prog (append
-			(ccl-compile
-			 `(1
-			   (loop
-			     (read-multibyte-character r0 r1)
-			     (if (r0 == ,(charset-id 'ascii))
-				 (write r1)
-			       ((mule-to-unicode r0 r1)
-				(if (r0 == #xFFFD)
-				    (write #xBEEF)
-				  ((lookup-integer encode-table-sym r0 r3)
-				   (if r7
-				       (write-multibyte-character r0 r3)
-				     (write #xBEEF))))))
-			     (repeat)))) nil)))
-	     (assert (memq #xBEEF14 prog)
-		     nil
-		     "This code assumes that the constant #xBEEF is #xBEEF14 \
-in compiled CCL code.\nIf that is not the case, and it appears not to
-be--that's why you're getting this message--it will not work.  ")
-	     prog)))
-         (ascii-encodes-as-itself nil)
-         (control-1-encodes-as-itself t)
-         (invalid-sequence-code-point-start
-          (eval-when-compile
-            (char-to-unicode
-             (aref (decode-coding-string "\xd8\x00\x00\x00" 'utf-16-be) 3))))
-         further-char-set skip-chars invalid-sequences-skip-chars)
-
-    ;; Is this coding system ASCII-compatible? If so, we can avoid the hash
-    ;; table lookup for those characters. 
-    (loop
-      for i from #x00 to #x7f
-      always (eq (int-to-char i) (gethash i encode-table))
-      finally (setq ascii-encodes-as-itself t))
-
-    ;; Note that this logic handles EBCDIC badly. For example, CP037,
-    ;; MIME name ebcdic-na, has the entire repertoire of ASCII and
-    ;; Latin 1, and thus a more optimal ccl encode program would check
-    ;; for those character sets and use tables. But for now, we do a
-    ;; hash table lookup for every character.
-    (if (null ascii-encodes-as-itself)
-	;; General encode program. Pros; general and correct. Cons;
-	;; slow, a hash table lookup + mule-unicode conversion is done
-	;; for every character encoding. 
-	(setq encode-program general-encode-program)
-      (multiple-value-setq
-          (encode-program further-char-set)
-        ;; Encode program with ascii-ascii mapping (based on a
-        ;; character's mule character set), and one other mule
-        ;; character set using table-based encoding, other
-        ;; character sets using hash table lookups.
-        ;; make-8-bit-non-ascii-completely-coveredp only returns
-        ;; such a mapping if some non-ASCII charset with
-        ;; characters in decode-table is entirely covered by
-        ;; encode-table.
-        (make-8-bit-generate-helper decode-table encode-table
-                                    encode-failure-octet))
-      (unless encode-program
-	;; If make-8-bit-non-ascii-completely-coveredp returned nil,
-	;; but ASCII still encodes as itself, do one-to-one mapping
-	;; for ASCII, and a hash table lookup for everything else.
-	(setq encode-program encode-program-with-ascii-optimisation)))
-
-    (setq encode-program
-          (nsublis
-           (list (cons #xBEEF14 
-                       (logior (lsh encode-failure-octet 8)
-                               #x14)))
-           (copy-tree encode-program)))
-    (loop
-      for i from #x80 to #x9f
-      do (unless (= i (aref decode-table i))
-           (setq control-1-encodes-as-itself nil)
-           (return)))
-    (loop
-      for i from #x00 to #xFF
-      initially (setq skip-chars
-                      (cond
-                       ((and ascii-encodes-as-itself
-                             control-1-encodes-as-itself further-char-set)
-                        (concat "\x00-\x9f" (charset-skip-chars-string
-                                             further-char-set)))
-                       ((and ascii-encodes-as-itself
-                             control-1-encodes-as-itself)
-                        "\x00-\x9f")
-                       ((null ascii-encodes-as-itself)
-                        (skip-chars-quote (apply #'string
-                                                 (append decode-table nil))))
-                       (further-char-set
-                        (concat (charset-skip-chars-string 'ascii)
-                                (charset-skip-chars-string further-char-set)))
-                       (t 
-                        (charset-skip-chars-string 'ascii)))
-                      invalid-sequences-skip-chars "")
-      with decoded-ucs = nil
-      with decoded = nil
-      with no-ascii-transparency-skip-chars-list = 
-           (unless ascii-encodes-as-itself (append decode-table nil))
-      ;; Can't use #'match-string here, see:
-      ;; http://mid.gmane.org/18829.34118.709782.704574@parhasard.net
-      with skip-chars-test = 
-           #'(lambda (skip-chars-string testing)
-               (with-temp-buffer
-                 (insert testing)
-                 (goto-char (point-min))
-                 (skip-chars-forward skip-chars-string)
-                 (= (point) (point-max))))
-      do
-      (setq decoded (aref decode-table i)
-            decoded-ucs (char-to-unicode decoded))
-      (cond
-       ((<= invalid-sequence-code-point-start decoded-ucs
-            (+ invalid-sequence-code-point-start #xFF))
-        (setq invalid-sequences-skip-chars
-              (concat (string decoded)
-                      invalid-sequences-skip-chars))
-        (assert (not (funcall skip-chars-test skip-chars decoded))
-                "This char should only be skipped with \
-`invalid-sequences-skip-chars', not by `skip-chars'"))
-       ((not (funcall skip-chars-test skip-chars decoded))
-        (if ascii-encodes-as-itself
-            (setq skip-chars (concat skip-chars (string decoded)))
-          (push decoded no-ascii-transparency-skip-chars-list))))
-      finally (unless ascii-encodes-as-itself
-                (setq skip-chars
-                      (skip-chars-quote
-                       (apply #'string
-                              no-ascii-transparency-skip-chars-list)))))
-    (values encode-program skip-chars invalid-sequences-skip-chars)))
-
-(defun make-8-bit-create-decode-encode-tables (unicode-map)
-  "Return a list \(DECODE-TABLE ENCODE-TABLE) given UNICODE-MAP. 
-UNICODE-MAP should be an alist mapping from integer octet values to
-characters with UCS code points; DECODE-TABLE will be a 256-element
-vector, and ENCODE-TABLE will be a hash table mapping from 256 numbers
-to 256 distinct characters.  "
-  (check-argument-type #'listp unicode-map)
-  (let ((decode-table (make-vector 256 nil))
-        (encode-table (make-hash-table :size 256))
-	(private-use-start (encode-char make-8-bit-private-use-start 'ucs))
-        (invalid-sequence-code-point-start
-         (eval-when-compile
-           (char-to-unicode
-            (aref (decode-coding-string "\xd8\x00\x00\x00" 'utf-16-be) 3))))
-	desired-ucs decode-table-entry)
-
-    (loop for (external internal)
-      in unicode-map
-      do
-      (aset decode-table external internal)
-      (assert (not (eq (encode-char internal 'ucs) -1))
-	      nil
-	      "Looks like you're calling make-8-bit-coding-system in a \
-dumped file, \nand you're either not providing a literal UNICODE-MAP
-or PROPS. Don't do that; make-8-bit-coding-system relies on sensible
-Unicode mappings being available, which they are at compile time for
-dumped files (but this requires the mentioned literals), but not, for
-most of them, at run time.  ")
-
-      (puthash (encode-char internal 'ucs)
-	       ;; This is semantically an integer, but Dave Love's design
-	       ;; for lookup-integer in CCL means we need to store it as a
-	       ;; character.
-	       (int-to-char external)
-	       encode-table))
-
-    ;; Now, go through the decode table. For octet values above #x7f, if the
-    ;; decode table entry is nil, this means that they have an undefined
-    ;; mapping (= they map to XEmacs characters with keys in
-    ;; unicode-error-default-translation-table); for octet values below or
-    ;; equal to #x7f, it means that they map to ASCII.
-
-    ;; If any entry (whether below or above #x7f) in the decode-table
-    ;; already maps to some character with a key in
-    ;; unicode-error-default-translation-table, it is treated as an
-    ;; undefined octet by `query-coding-region'. That is, it is not
-    ;; necessary for an octet value to be above #x7f for this to happen.
-
-    (dotimes (i 256)
-      (setq decode-table-entry (aref decode-table i))
-      (if decode-table-entry
-          (when (get-char-table
-                 decode-table-entry
-                 unicode-error-default-translation-table)
-            ;; The caller is explicitly specifying that this octet
-            ;; corresponds to an invalid sequence on disk:
-            (assert (= (get-char-table
-                        decode-table-entry
-                        unicode-error-default-translation-table) i)
-                    "Bad argument to `make-8-bit-coding-system'.
-If you're going to designate an octet with value below #x80 as invalid
-for this coding system, make sure to map it to the invalid sequence
-character corresponding to its octet value on disk. "))
-
-        ;; decode-table-entry is nil; either the octet is to be treated as
-        ;; contributing to an error sequence (when (> #x7f i)), or it should
-        ;; be attempted to treat it as ASCII-equivalent. 
-        (setq desired-ucs (or (and (< i #x80) i)
-                              (+ invalid-sequence-code-point-start i)))
-        (while (gethash desired-ucs encode-table)
-          (assert (not (< i #x80))
-                  "UCS code point should not already be in encode-table!"
-                  ;; There is one invalid sequence char per octet value;
-                  ;; with eight-bit-fixed coding systems, it makes no sense
-                  ;; for us to be multiply allocating them.
-                  (gethash desired-ucs encode-table))
-          (setq desired-ucs (+ private-use-start desired-ucs)
-                private-use-start (+ private-use-start 1)))
-        (puthash desired-ucs (int-to-char i) encode-table)
-        (setq desired-ucs (if (> desired-ucs #xFF)
-                              (unicode-to-char desired-ucs)
-                            ;; So we get Latin-1 when run at dump time,
-                            ;; instead of JIT-allocated characters.
-                            (int-to-char desired-ucs)))
-        (aset decode-table i desired-ucs)))
-    (values decode-table encode-table)))
-
-(defun make-8-bit-generate-decode-program (decode-table)
-  "Given DECODE-TABLE, generate a CCL program to decode an 8-bit charset.
-DECODE-TABLE must have 256 non-cons entries, and will be regarded as
-describing a map from the octet corresponding to an offset in the
-table to the that entry in the table.  "
-  (check-argument-type #'vectorp decode-table)
-  (check-argument-range (length decode-table) #x100 #x100)
-  (let ((decode-program-parts
-	 (eval-when-compile
-	   (let* ((compiled
-		   (append 
-		    (ccl-compile 
-		     `(3
-		       ((read r0)
-                        (loop
-			 (write-read-repeat r0 ,(make-vector
-						 256 'sentinel)))))) nil))
-		  (first-part compiled)
-		  (last-part
-		   (member-if-not #'symbolp
-				  (member-if-not #'integerp first-part))))
-	     ;; Chop off the sentinel sentinel sentinel [..] part. 
-	     (while compiled
-	       (if (symbolp (cadr compiled))
-		   (setcdr compiled nil))
-	       (setq compiled (cdr compiled)))
-	     (list first-part last-part)))))
-   (nconc
-    ;; copy-list needed, because the structure of the literal provided
-    ;; by our eval-when-compile hangs around.
-    (copy-list (first decode-program-parts))
-    (append decode-table nil)
-    (second decode-program-parts))))
-
-(defun make-8-bit-choose-category (decode-table)
-  "Given DECODE-TABLE, return an appropriate coding category.
-DECODE-TABLE is a 256-entry vector describing the mapping from octets on
-disk to XEmacs characters for some fixed-width 8-bit coding system.  "
-  (check-argument-type #'vectorp decode-table)
-  (check-argument-range (length decode-table) #x100 #x100)
-  (loop
-    named category
-    for i from #x80 to #x9F
-    do (unless (= i (aref decode-table i))
-	 (return-from category 'no-conversion))
-    finally return 'iso-8-1))
-
-(defun 8-bit-fixed-query-coding-region (begin end coding-system &optional
-                                        buffer ignore-invalid-sequencesp
-                                        errorp highlightp)
-  "The `query-coding-region' implementation for 8-bit-fixed coding systems.
-
-Uses the `8-bit-fixed-query-from-unicode' and `8-bit-fixed-query-skip-chars'
-coding system properties.  The former is a hash table mapping from valid
-Unicode code points to on-disk octets in the coding system; the latter a set
-of characters as used by `skip-chars-forward'.  Both of these properties are
-generated automatically by `make-8-bit-coding-system'.
-
-See that the documentation of `query-coding-region'; see also
-`make-8-bit-coding-system'. "
-  (check-argument-type #'coding-system-p
-                       (setq coding-system (find-coding-system coding-system)))
-  (check-argument-type #'integer-or-marker-p begin)
-  (check-argument-type #'integer-or-marker-p end)
-  (let ((from-unicode
-         (or (coding-system-get coding-system '8-bit-fixed-query-from-unicode)
-	     (coding-system-get (coding-system-base coding-system)
-				'8-bit-fixed-query-from-unicode)))
-        (skip-chars-arg
-         (or (coding-system-get coding-system '8-bit-fixed-query-skip-chars)
-	     (coding-system-get (coding-system-base coding-system)
-				'8-bit-fixed-query-skip-chars)))
-	(invalid-sequences-skip-chars
-	 (or (coding-system-get coding-system
-				'8-bit-fixed-invalid-sequences-skip-chars)
-	     (coding-system-get (coding-system-base coding-system)
-				'8-bit-fixed-invalid-sequences-skip-chars)))
-	(ranges (make-range-table))
-        (case-fold-search nil)
-        char-after fail-range-start fail-range-end extent
-	failed invalid-sequences-looking-at failed-reason
-        previous-failed-reason)
-    (check-type from-unicode hash-table)
-    (check-type skip-chars-arg string)
-    (check-type invalid-sequences-skip-chars string)
-    (setq invalid-sequences-looking-at
-	  (if (equal "" invalid-sequences-skip-chars)
-	      ;; Regexp that will never match.
-	      #r".\{0,0\}" 
-	      (concat "[" invalid-sequences-skip-chars "]")))
-    (when ignore-invalid-sequencesp
-      (setq skip-chars-arg
-	    (concat skip-chars-arg invalid-sequences-skip-chars)))
-    (save-excursion
-      (when highlightp
-        (query-coding-clear-highlights begin end buffer))
-      (goto-char begin buffer)
-      (skip-chars-forward skip-chars-arg end buffer)
-      (while (< (point buffer) end)
-	(setq char-after (char-after (point buffer) buffer)
-	      fail-range-start (point buffer))
-	(while (and
-		(< (point buffer) end)
-		(or (and 
-                     (not (gethash (encode-char char-after 'ucs) from-unicode))
-                     (setq failed-reason 'unencodable))
-                    (and (not ignore-invalid-sequencesp)
-                         (looking-at invalid-sequences-looking-at buffer)
-                         (setq failed-reason 'invalid-sequence)))
-                (or (null previous-failed-reason)
-                    (eq previous-failed-reason failed-reason)))
-	  (forward-char 1 buffer)
-	  (setq char-after (char-after (point buffer) buffer)
-		failed t
-                previous-failed-reason failed-reason))
-	(if (= fail-range-start (point buffer))
-	    ;; The character can actually be encoded by the coding
-	    ;; system; check the characters past it.
-	    (forward-char 1 buffer)
-	  ;; The character actually failed. 
-	  (when errorp 
-	    (error 'text-conversion-error
-		   (format "Cannot encode %s using coding system"
-			   (buffer-substring fail-range-start (point buffer)
-					     buffer))
-		   (coding-system-name coding-system)))
-          (assert (not (null previous-failed-reason)) t
-                  "previous-failed-reason should always be non-nil here")
-	  (put-range-table fail-range-start
-			   ;; If char-after is non-nil, we're not at
-			   ;; the end of the buffer.
-			   (setq fail-range-end (if char-after
-						    (point buffer)
-						  (point-max buffer)))
-			   previous-failed-reason ranges)
-          (setq previous-failed-reason nil)
-	  (when highlightp
-	    (setq extent (make-extent fail-range-start fail-range-end buffer))
-	    (set-extent-priority extent (+ mouse-highlight-priority 2))
-	    (set-extent-face extent 'query-coding-warning-face))
-	  (skip-chars-forward skip-chars-arg end buffer)))
-      (if failed 
-	  (values nil ranges)
-	(values t nil)))))
-
-(defun make-8-bit-coding-system (name unicode-map &optional description props)
-  "Make and return a fixed-width 8-bit CCL coding system named NAME.
-NAME must be a symbol, and UNICODE-MAP a list. 
-
-UNICODE-MAP is a plist describing a map from octets in the coding
-system NAME (as integers) to XEmacs characters.  Those XEmacs
-characters will be used explicitly on decoding, but for encoding (most
-relevantly, on writing to disk) XEmacs characters that map to the same
-Unicode code point will be unified.  This means that the ISO-8859-? 
-characters that map to the same Unicode code point will not be
-distinct when written to disk, which is normally what is intended; it
-also means that East Asian Han characters from different XEmacs
-character sets will not be distinct when written to disk, which is
-less often what is intended.
-
-Any octets not mapped, and with values above #x7f, will be decoded into
-XEmacs characters that reflect that their values are undefined.  These
-characters will be displayed in a language-environment-specific way. See
-`unicode-error-default-translation-table' and the
-`invalid-sequence-coding-system' argument to `set-language-info'.
-
-These characters will normally be treated as invalid when checking whether
-text can be encoded with `query-coding-region'--see the
-IGNORE-INVALID-SEQUENCESP argument to that function to avoid this.  It is
-possible to specify that octets with values less than #x80 (or indeed
-greater than it) be treated in this way, by specifying explicitly that they
-correspond to the character mapping to that octet in
-`unicode-error-default-translation-table'.  Far fewer coding systems
-override the ASCII mapping, though, so this is not the default.
-
-DESCRIPTION and PROPS are as in `make-coding-system', which see.  This
-function also accepts two additional (optional) properties in PROPS;
-`aliases', giving a list of aliases to be initialized for this
-coding-system, and `encode-failure-octet', an integer between 0 and 256 to
-write in place of XEmacs characters that cannot be encoded, defaulting to
-the code for tilde `~'.  "
-  (check-argument-type #'symbolp name)
-  (check-argument-type #'listp unicode-map)
-  (check-argument-type #'stringp
-		       (or description 
-			   (setq description
-				 (format "Coding system used for %s." name))))
-  (check-valid-plist props)
-  (let  ((encode-failure-octet (or (plist-get props 'encode-failure-octet)
-				   (char-to-int ?~)))
-	 (aliases (plist-get props 'aliases))
-	 (hash-table-sym (gentemp (format "%s-encode-table" name)))
-	 encode-program decode-program result decode-table encode-table
-         skip-chars invalid-sequences-skip-chars)
-
-    ;; Some more sanity checking. 
-    (check-argument-range encode-failure-octet 0 #xFF)
-    (check-argument-type #'listp aliases)
-
-    ;; Don't pass on our extra data to make-coding-system.
-    (setq props (plist-remprop props 'encode-failure-octet)
-	  props (plist-remprop props 'aliases))
-
-    (multiple-value-setq
-	(decode-table encode-table)
-      (make-8-bit-create-decode-encode-tables unicode-map))
-
-    ;; Register the decode-table. 
-    (define-translation-hash-table hash-table-sym encode-table)
-
-    ;; Generate the programs and skip-chars strings. 
-    (setq decode-program (make-8-bit-generate-decode-program decode-table))
-    (multiple-value-setq
-        (encode-program skip-chars invalid-sequences-skip-chars)
-      (make-8-bit-generate-encode-program-and-skip-chars-strings
-       decode-table encode-table encode-failure-octet))
-
-    (unless (vectorp encode-program) 
-      (setq encode-program 
-	    (apply #'vector
-		   (nsublis (list (cons 'encode-table-sym hash-table-sym))
-			    (copy-tree encode-program)))))
-    (unless (vectorp decode-program)
-      (setq decode-program
-	    (apply #'vector decode-program)))
-
-    ;; And now generate the actual coding system.
-    (setq result 
-	  (make-coding-system 
-           name  'ccl
-           description 
-           (plist-put (plist-put props 'decode decode-program)
-                      'encode encode-program)))
-    (coding-system-put name '8-bit-fixed t)
-    (coding-system-put name 'category 
-                       (make-8-bit-choose-category decode-table))
-    (coding-system-put name '8-bit-fixed-query-skip-chars
-                       skip-chars)
-    (coding-system-put name '8-bit-fixed-invalid-sequences-skip-chars
-                       invalid-sequences-skip-chars) 
-    (coding-system-put name '8-bit-fixed-query-from-unicode encode-table)
-    (coding-system-put name 'query-coding-function
-                       #'8-bit-fixed-query-coding-region)
-    (coding-system-put (intern (format "%s-unix" name))
-		       'query-coding-function
-                       #'8-bit-fixed-query-coding-region)
-    (coding-system-put (intern (format "%s-dos" name))
-		       'query-coding-function
-                       #'8-bit-fixed-query-coding-region)
-    (coding-system-put (intern (format "%s-mac" name))
-		       'query-coding-function
-                       #'8-bit-fixed-query-coding-region)
-    (loop for alias in aliases
-      do (define-coding-system-alias alias name))
-    result))
-
-(define-compiler-macro make-8-bit-coding-system (&whole form name unicode-map
-						 &optional description props)
-  ;; We provide the compiler macro (= macro that is expanded only on
-  ;; compilation, and that can punt to a runtime version of the
-  ;; associate function if necessary) not for reasons of speed, though
-  ;; it does speed up things at runtime a little, but because the
-  ;; Unicode mappings are available at compile time in the dumped
-  ;; files, but they are not available at run time for the vast
-  ;; majority of them.
-
-  (if (not (and (and (consp name) (eq (car name) 'quote))
-		(and (consp unicode-map) (eq (car unicode-map) 'quote))
-		(and (or (and (consp props) (eq (car props) 'quote))
-			 (null props)))))
-      ;; The call does not use literals; do it at runtime.
-      form
-    (setq name (cadr name)
-	  unicode-map (cadr unicode-map)
-	  props (if props (cadr props)))
-    (let  ((encode-failure-octet
-	    (or (plist-get props 'encode-failure-octet) (char-to-int ?~)))
-	   (aliases (plist-get props 'aliases))
-	   encode-program decode-program
-	   decode-table encode-table
-           skip-chars invalid-sequences-skip-chars)
-
-      ;; Some sanity checking. 
-      (check-argument-range encode-failure-octet 0 #xFF)
-      (check-argument-type #'listp aliases)
-
-      ;; Don't pass on our extra data to make-coding-system.
-      (setq props (plist-remprop props 'encode-failure-octet)
-	    props (plist-remprop props 'aliases))
-
-      ;; Work out encode-table and decode-table
-      (multiple-value-setq
-          (decode-table encode-table)
-        (make-8-bit-create-decode-encode-tables unicode-map))
-
-      ;; Generate the decode and encode programs, and the skip-chars
-      ;; arguments.
-      (setq decode-program (make-8-bit-generate-decode-program decode-table))
-      (multiple-value-setq
-          (encode-program skip-chars invalid-sequences-skip-chars)
-        (make-8-bit-generate-encode-program-and-skip-chars-strings
-         decode-table encode-table encode-failure-octet))
-
-      ;; And return the generated code. 
-      `(let ((encode-table-sym (gentemp (format "%s-encode-table" ',name)))
-             (encode-table ,encode-table))
-        (define-translation-hash-table encode-table-sym encode-table)
-        (make-coding-system 
-         ',name 'ccl ,description
-         (plist-put (plist-put ',props 'decode 
-                               ,(apply #'vector decode-program))
-                    'encode
-                    (apply #'vector
-                           (nsublis
-                            (list (cons
-                                   'encode-table-sym
-                                   (symbol-value 'encode-table-sym)))
-                            ',encode-program))))
-	(coding-system-put ',name '8-bit-fixed t)
-        (coding-system-put ',name 'category 
-                           ',(make-8-bit-choose-category decode-table))
-        (coding-system-put ',name '8-bit-fixed-query-skip-chars
-                           ,skip-chars)
-        (coding-system-put ',name '8-bit-fixed-invalid-sequences-skip-chars
-                           ,invalid-sequences-skip-chars) 
-        (coding-system-put ',name '8-bit-fixed-query-from-unicode encode-table)
-        (coding-system-put ',name 'query-coding-function
-                           #'8-bit-fixed-query-coding-region)
-	(coding-system-put ',(intern (format "%s-unix" name))
-			   'query-coding-function
-			   #'8-bit-fixed-query-coding-region)
-	(coding-system-put ',(intern (format "%s-dos" name))
-			   'query-coding-function
-			   #'8-bit-fixed-query-coding-region)
-	(coding-system-put ',(intern (format "%s-mac" name))
-			   'query-coding-function
-			   #'8-bit-fixed-query-coding-region)
-        ,(macroexpand `(loop for alias in ',aliases
-                        do (define-coding-system-alias alias
-                             ',name)))
-        (find-coding-system ',name)))))
-
 ;; Ideally this would be in latin.el, but code-init.el uses it.
-(make-8-bit-coding-system
+(make-coding-system
  'iso-8859-1 
- (loop
-   for i from #x80 to #xff
-   collect (list i (int-char i))) ;; Identical to Latin-1.
+ 'fixed-width
  "ISO-8859-1 (Latin-1)"
- '(mnemonic "Latin 1"
-   documentation "The most used encoding of Western Europe and the Americas."
-   aliases (iso-latin-1 latin-1)))
+ (eval-when-compile
+   `(unicode-map 
+     ,(loop
+        for i from #x80 to #xff
+        collect (list i (int-char i))) ;; Identical to Latin-1.
+     mnemonic "Latin 1"
+     documentation "The most used encoding of Western Europe and the Americas."
+     aliases (iso-latin-1 latin-1))))
--- a/lisp/mule/thai-xtis.el	Sat Sep 19 17:56:23 2009 +0200
+++ b/lisp/mule/thai-xtis.el	Sat Sep 19 22:53:13 2009 +0100
@@ -347,23 +347,15 @@
 	      (repeat))))
 	(write-read-repeat r0))))))
 
-(if (featurep 'xemacs)
-    (progn
-      (make-coding-system
-       'tis-620 'ccl
-       "TIS620 (Thai)"
-       `(mnemonic "TIS620"
-	 decode ccl-decode-thai-xtis
-	 encode ccl-encode-thai-xtis
-         safe-charsets (ascii thai-xtis)
-	 documentation "external=tis620, internal=thai-xtis"))
-      (coding-system-put 'tis-620 'category 'iso-8-1))
-  (make-coding-system
-   'tis-620 4 ?T "external=tis620, internal=thai-xtis"
-   '(ccl-decode-thai-xtis . ccl-encode-thai-xtis)
-   '((safe-charsets . t)))
-  )
-
+(make-coding-system
+ 'tis-620 'ccl
+ "TIS620 (Thai)"
+ `(mnemonic "TIS620"
+   decode ccl-decode-thai-xtis
+   encode ccl-encode-thai-xtis
+   safe-charsets (ascii thai-xtis)
+   documentation "external=tis620, internal=thai-xtis"))
+(coding-system-put 'tis-620 'category 'iso-8-1)
 
 (set-language-info-alist
  "Thai-XTIS"
--- a/lisp/mule/vietnamese.el	Sat Sep 19 17:56:23 2009 +0200
+++ b/lisp/mule/vietnamese.el	Sat Sep 19 22:53:13 2009 +0100
@@ -64,144 +64,144 @@
 (modify-category-entry 'vietnamese-viscii-lower ?v)
 (modify-category-entry 'vietnamese-viscii-upper ?v)
 
-(make-8-bit-coding-system 
- 'viscii
- '((#x02 ?\u1EB2) ;; CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
-   (#x05 ?\u1EB4) ;; CAPITAL LETTER A WITH BREVE AND TILDE
-   (#x06 ?\u1EAA) ;; CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
-   (#x14 ?\u1EF6) ;; CAPITAL LETTER Y WITH HOOK ABOVE
-   (#x19 ?\u1EF8) ;; CAPITAL LETTER Y WITH TILDE
-   (#x1E ?\u1EF4) ;; CAPITAL LETTER Y WITH DOT BELOW
-   (#x80 ?\u1EA0) ;; CAPITAL LETTER A WITH DOT BELOW
-   (#x81 ?\u1EAE) ;; CAPITAL LETTER A WITH BREVE AND ACUTE
-   (#x82 ?\u1EB0) ;; CAPITAL LETTER A WITH BREVE AND GRAVE
-   (#x83 ?\u1EB6) ;; CAPITAL LETTER A WITH BREVE AND DOT BELOW
-   (#x84 ?\u1EA4) ;; CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
-   (#x85 ?\u1EA6) ;; CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
-   (#x86 ?\u1EA8) ;; CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
-   (#x87 ?\u1EAC) ;; CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
-   (#x88 ?\u1EBC) ;; CAPITAL LETTER E WITH TILDE
-   (#x89 ?\u1EB8) ;; CAPITAL LETTER E WITH DOT BELOW
-   (#x8A ?\u1EBE) ;; CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
-   (#x8B ?\u1EC0) ;; CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
-   (#x8C ?\u1EC2) ;; CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
-   (#x8D ?\u1EC4) ;; CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
-   (#x8E ?\u1EC6) ;; CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
-   (#x8F ?\u1ED0) ;; CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
-   (#x90 ?\u1ED2) ;; CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
-   (#x91 ?\u1ED4) ;; CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
-   (#x92 ?\u1ED6) ;; CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
-   (#x93 ?\u1ED8) ;; CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
-   (#x94 ?\u1EE2) ;; CAPITAL LETTER O WITH HORN AND DOT BELOW
-   (#x95 ?\u1EDA) ;; CAPITAL LETTER O WITH HORN AND ACUTE
-   (#x96 ?\u1EDC) ;; CAPITAL LETTER O WITH HORN AND GRAVE
-   (#x97 ?\u1EDE) ;; CAPITAL LETTER O WITH HORN AND HOOK ABOVE
-   (#x98 ?\u1ECA) ;; CAPITAL LETTER I WITH DOT BELOW
-   (#x99 ?\u1ECE) ;; CAPITAL LETTER O WITH HOOK ABOVE
-   (#x9A ?\u1ECC) ;; CAPITAL LETTER O WITH DOT BELOW
-   (#x9B ?\u1EC8) ;; CAPITAL LETTER I WITH HOOK ABOVE
-   (#x9C ?\u1EE6) ;; CAPITAL LETTER U WITH HOOK ABOVE
-   (#x9D ?\u0168) ;; CAPITAL LETTER U WITH TILDE
-   (#x9E ?\u1EE4) ;; CAPITAL LETTER U WITH DOT BELOW
-   (#x9F ?\u1EF2) ;; CAPITAL LETTER Y WITH GRAVE
-   (#xA0 ?\u00D5) ;; CAPITAL LETTER O WITH TILDE
-   (#xA1 ?\u1EAF) ;; SMALL LETTER A WITH BREVE AND ACUTE
-   (#xA2 ?\u1EB1) ;; SMALL LETTER A WITH BREVE AND GRAVE
-   (#xA3 ?\u1EB7) ;; SMALL LETTER A WITH BREVE AND DOT BELOW
-   (#xA4 ?\u1EA5) ;; SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
-   (#xA5 ?\u1EA7) ;; SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
-   (#xA6 ?\u1EA8) ;; CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
-   (#xA7 ?\u1EAD) ;; SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
-   (#xA8 ?\u1EBD) ;; SMALL LETTER E WITH TILDE
-   (#xA9 ?\u1EB9) ;; SMALL LETTER E WITH DOT BELOW
-   (#xAA ?\u1EBF) ;; SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
-   (#xAB ?\u1EC1) ;; SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
-   (#xAC ?\u1EC3) ;; SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
-   (#xAD ?\u1EC5) ;; SMALL LETTER E WITH CIRCUMFLEX AND TILDE
-   (#xAE ?\u1EC7) ;; SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
-   (#xAF ?\u1ED1) ;; SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
-   (#xB0 ?\u1ED3) ;; SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
-   (#xB1 ?\u1ED5) ;; SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
-   (#xB2 ?\u1ED7) ;; SMALL LETTER O WITH CIRCUMFLEX AND TILDE
-   (#xB3 ?\u1EE0) ;; CAPITAL LETTER O WITH HORN AND TILDE
-   (#xB4 ?\u01A0) ;; CAPITAL LETTER O WITH HORN
-   (#xB5 ?\u1ED9) ;; SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
-   (#xB6 ?\u1EDD) ;; SMALL LETTER O WITH HORN AND GRAVE
-   (#xB7 ?\u1EDF) ;; SMALL LETTER O WITH HORN AND HOOK ABOVE
-   (#xB8 ?\u1ECB) ;; SMALL LETTER I WITH DOT BELOW
-   (#xB9 ?\u1EF0) ;; CAPITAL LETTER U WITH HORN AND DOT BELOW
-   (#xBA ?\u1EE8) ;; CAPITAL LETTER U WITH HORN AND ACUTE
-   (#xBB ?\u1EEA) ;; CAPITAL LETTER U WITH HORN AND GRAVE
-   (#xBC ?\u1EEC) ;; CAPITAL LETTER U WITH HORN AND HOOK ABOVE
-   (#xBD ?\u01A1) ;; SMALL LETTER O WITH HORN
-   (#xBE ?\u1EDB) ;; SMALL LETTER O WITH HORN AND ACUTE
-   (#xBF ?\u01AF) ;; CAPITAL LETTER U WITH HORN
-   (#xC0 ?\u00C0) ;; CAPITAL LETTER A WITH GRAVE
-   (#xC1 ?\u00C1) ;; CAPITAL LETTER A WITH ACUTE
-   (#xC2 ?\u00C2) ;; CAPITAL LETTER A WITH CIRCUMFLEX
-   (#xC3 ?\u00C3) ;; CAPITAL LETTER A WITH TILDE
-   (#xC4 ?\u1EA2) ;; CAPITAL LETTER A WITH HOOK ABOVE
-   (#xC5 ?\u0102) ;; CAPITAL LETTER A WITH BREVE
-   (#xC6 ?\u1EB3) ;; SMALL LETTER A WITH BREVE AND HOOK ABOVE
-   (#xC7 ?\u1EB5) ;; SMALL LETTER A WITH BREVE AND TILDE
-   (#xC8 ?\u00C8) ;; CAPITAL LETTER E WITH GRAVE
-   (#xC9 ?\u00C9) ;; CAPITAL LETTER E WITH ACUTE
-   (#xCA ?\u00CA) ;; CAPITAL LETTER E WITH CIRCUMFLEX
-   (#xCB ?\u1EBA) ;; CAPITAL LETTER E WITH HOOK ABOVE
-   (#xCC ?\u00CC) ;; CAPITAL LETTER I WITH GRAVE
-   (#xCD ?\u00CD) ;; CAPITAL LETTER I WITH ACUTE
-   (#xCE ?\u0128) ;; CAPITAL LETTER I WITH TILDE
-   (#xCF ?\u1EF3) ;; SMALL LETTER Y WITH GRAVE
-   (#xD0 ?\u0110) ;; CAPITAL LETTER D WITH STROKE
-   (#xD1 ?\u1EE9) ;; SMALL LETTER U WITH HORN AND ACUTE
-   (#xD2 ?\u00D2) ;; CAPITAL LETTER O WITH GRAVE
-   (#xD3 ?\u00D3) ;; CAPITAL LETTER O WITH ACUTE
-   (#xD4 ?\u00D4) ;; CAPITAL LETTER O WITH CIRCUMFLEX
-   (#xD5 ?\u1EA1) ;; SMALL LETTER A WITH DOT BELOW
-   (#xD6 ?\u1EF7) ;; SMALL LETTER Y WITH HOOK ABOVE
-   (#xD7 ?\u1EEB) ;; SMALL LETTER U WITH HORN AND GRAVE
-   (#xD8 ?\u1EED) ;; SMALL LETTER U WITH HORN AND HOOK ABOVE
-   (#xD9 ?\u00D9) ;; CAPITAL LETTER U WITH GRAVE
-   (#xDA ?\u00DA) ;; CAPITAL LETTER U WITH ACUTE
-   (#xDB ?\u1EF9) ;; SMALL LETTER Y WITH TILDE
-   (#xDC ?\u1EF5) ;; SMALL LETTER Y WITH DOT BELOW
-   (#xDD ?\u00DD) ;; CAPITAL LETTER Y WITH ACUTE
-   (#xDE ?\u1EE1) ;; SMALL LETTER O WITH HORN AND TILDE
-   (#xDF ?\u01B0) ;; SMALL LETTER U WITH HORN
-   (#xE0 ?\u00E0) ;; SMALL LETTER A WITH GRAVE
-   (#xE1 ?\u00E1) ;; SMALL LETTER A WITH ACUTE
-   (#xE2 ?\u00E2) ;; SMALL LETTER A WITH CIRCUMFLEX
-   (#xE3 ?\u00E3) ;; SMALL LETTER A WITH TILDE
-   (#xE4 ?\u1EA3) ;; SMALL LETTER A WITH HOOK ABOVE
-   (#xE5 ?\u0103) ;; SMALL LETTER A WITH BREVE
-   (#xE6 ?\u1EEF) ;; SMALL LETTER U WITH HORN AND TILDE
-   (#xE7 ?\u1EAB) ;; SMALL LETTER A WITH CIRCUMFLEX AND TILDE
-   (#xE8 ?\u00E8) ;; SMALL LETTER E WITH GRAVE
-   (#xE9 ?\u00E9) ;; SMALL LETTER E WITH ACUTE
-   (#xEA ?\u00EA) ;; SMALL LETTER E WITH CIRCUMFLEX
-   (#xEB ?\u1EBB) ;; SMALL LETTER E WITH HOOK ABOVE
-   (#xEC ?\u00EC) ;; SMALL LETTER I WITH GRAVE
-   (#xED ?\u00ED) ;; SMALL LETTER I WITH ACUTE
-   (#xEE ?\u0129) ;; SMALL LETTER I WITH TILDE
-   (#xEF ?\u1EC9) ;; SMALL LETTER I WITH HOOK ABOVE
-   (#xF0 ?\u0111) ;; SMALL LETTER D WITH STROKE
-   (#xF1 ?\u1EF1) ;; SMALL LETTER U WITH HORN AND DOT BELOW
-   (#xF2 ?\u00F2) ;; SMALL LETTER O WITH GRAVE
-   (#xF3 ?\u00F3) ;; SMALL LETTER O WITH ACUTE
-   (#xF4 ?\u00F4) ;; SMALL LETTER O WITH CIRCUMFLEX
-   (#xF5 ?\u00F5) ;; SMALL LETTER O WITH TILDE
-   (#xF6 ?\u1ECF) ;; SMALL LETTER O WITH HOOK ABOVE
-   (#xF7 ?\u1ECD) ;; SMALL LETTER O WITH DOT BELOW
-   (#xF8 ?\u1EE5) ;; SMALL LETTER U WITH DOT BELOW
-   (#xF9 ?\u00F9) ;; SMALL LETTER U WITH GRAVE
-   (#xFA ?\u00FA) ;; SMALL LETTER U WITH ACUTE
-   (#xFB ?\u0169) ;; SMALL LETTER U WITH TILDE
-   (#xFC ?\u1EE7) ;; SMALL LETTER U WITH HOOK ABOVE
-   (#xFD ?\u00FD) ;; SMALL LETTER Y WITH ACUTE
-   (#xFE ?\u1EE3) ;; SMALL LETTER O WITH HORN AND DOT BELOW
-   (#xFF ?\u1EEE)) ;; CAPITAL LETTER U WITH HORN AND TILDE
- "VISCII 1.1 (Vietnamese)"
- '(mnemonic "VISCII"))
+(make-coding-system 
+ 'viscii 'fixed-width "VISCII 1.1 (Vietnamese)"
+ '(unicode-map
+   ((#x02 ?\u1EB2) ;; CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
+    (#x05 ?\u1EB4) ;; CAPITAL LETTER A WITH BREVE AND TILDE
+    (#x06 ?\u1EAA) ;; CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
+    (#x14 ?\u1EF6) ;; CAPITAL LETTER Y WITH HOOK ABOVE
+    (#x19 ?\u1EF8) ;; CAPITAL LETTER Y WITH TILDE
+    (#x1E ?\u1EF4) ;; CAPITAL LETTER Y WITH DOT BELOW
+    (#x80 ?\u1EA0) ;; CAPITAL LETTER A WITH DOT BELOW
+    (#x81 ?\u1EAE) ;; CAPITAL LETTER A WITH BREVE AND ACUTE
+    (#x82 ?\u1EB0) ;; CAPITAL LETTER A WITH BREVE AND GRAVE
+    (#x83 ?\u1EB6) ;; CAPITAL LETTER A WITH BREVE AND DOT BELOW
+    (#x84 ?\u1EA4) ;; CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
+    (#x85 ?\u1EA6) ;; CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
+    (#x86 ?\u1EA8) ;; CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+    (#x87 ?\u1EAC) ;; CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+    (#x88 ?\u1EBC) ;; CAPITAL LETTER E WITH TILDE
+    (#x89 ?\u1EB8) ;; CAPITAL LETTER E WITH DOT BELOW
+    (#x8A ?\u1EBE) ;; CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
+    (#x8B ?\u1EC0) ;; CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
+    (#x8C ?\u1EC2) ;; CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+    (#x8D ?\u1EC4) ;; CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
+    (#x8E ?\u1EC6) ;; CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+    (#x8F ?\u1ED0) ;; CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
+    (#x90 ?\u1ED2) ;; CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
+    (#x91 ?\u1ED4) ;; CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+    (#x92 ?\u1ED6) ;; CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
+    (#x93 ?\u1ED8) ;; CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+    (#x94 ?\u1EE2) ;; CAPITAL LETTER O WITH HORN AND DOT BELOW
+    (#x95 ?\u1EDA) ;; CAPITAL LETTER O WITH HORN AND ACUTE
+    (#x96 ?\u1EDC) ;; CAPITAL LETTER O WITH HORN AND GRAVE
+    (#x97 ?\u1EDE) ;; CAPITAL LETTER O WITH HORN AND HOOK ABOVE
+    (#x98 ?\u1ECA) ;; CAPITAL LETTER I WITH DOT BELOW
+    (#x99 ?\u1ECE) ;; CAPITAL LETTER O WITH HOOK ABOVE
+    (#x9A ?\u1ECC) ;; CAPITAL LETTER O WITH DOT BELOW
+    (#x9B ?\u1EC8) ;; CAPITAL LETTER I WITH HOOK ABOVE
+    (#x9C ?\u1EE6) ;; CAPITAL LETTER U WITH HOOK ABOVE
+    (#x9D ?\u0168) ;; CAPITAL LETTER U WITH TILDE
+    (#x9E ?\u1EE4) ;; CAPITAL LETTER U WITH DOT BELOW
+    (#x9F ?\u1EF2) ;; CAPITAL LETTER Y WITH GRAVE
+    (#xA0 ?\u00D5) ;; CAPITAL LETTER O WITH TILDE
+    (#xA1 ?\u1EAF) ;; SMALL LETTER A WITH BREVE AND ACUTE
+    (#xA2 ?\u1EB1) ;; SMALL LETTER A WITH BREVE AND GRAVE
+    (#xA3 ?\u1EB7) ;; SMALL LETTER A WITH BREVE AND DOT BELOW
+    (#xA4 ?\u1EA5) ;; SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
+    (#xA5 ?\u1EA7) ;; SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
+    (#xA6 ?\u1EA8) ;; CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+    (#xA7 ?\u1EAD) ;; SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+    (#xA8 ?\u1EBD) ;; SMALL LETTER E WITH TILDE
+    (#xA9 ?\u1EB9) ;; SMALL LETTER E WITH DOT BELOW
+    (#xAA ?\u1EBF) ;; SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
+    (#xAB ?\u1EC1) ;; SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
+    (#xAC ?\u1EC3) ;; SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+    (#xAD ?\u1EC5) ;; SMALL LETTER E WITH CIRCUMFLEX AND TILDE
+    (#xAE ?\u1EC7) ;; SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+    (#xAF ?\u1ED1) ;; SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
+    (#xB0 ?\u1ED3) ;; SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
+    (#xB1 ?\u1ED5) ;; SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+    (#xB2 ?\u1ED7) ;; SMALL LETTER O WITH CIRCUMFLEX AND TILDE
+    (#xB3 ?\u1EE0) ;; CAPITAL LETTER O WITH HORN AND TILDE
+    (#xB4 ?\u01A0) ;; CAPITAL LETTER O WITH HORN
+    (#xB5 ?\u1ED9) ;; SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+    (#xB6 ?\u1EDD) ;; SMALL LETTER O WITH HORN AND GRAVE
+    (#xB7 ?\u1EDF) ;; SMALL LETTER O WITH HORN AND HOOK ABOVE
+    (#xB8 ?\u1ECB) ;; SMALL LETTER I WITH DOT BELOW
+    (#xB9 ?\u1EF0) ;; CAPITAL LETTER U WITH HORN AND DOT BELOW
+    (#xBA ?\u1EE8) ;; CAPITAL LETTER U WITH HORN AND ACUTE
+    (#xBB ?\u1EEA) ;; CAPITAL LETTER U WITH HORN AND GRAVE
+    (#xBC ?\u1EEC) ;; CAPITAL LETTER U WITH HORN AND HOOK ABOVE
+    (#xBD ?\u01A1) ;; SMALL LETTER O WITH HORN
+    (#xBE ?\u1EDB) ;; SMALL LETTER O WITH HORN AND ACUTE
+    (#xBF ?\u01AF) ;; CAPITAL LETTER U WITH HORN
+    (#xC0 ?\u00C0) ;; CAPITAL LETTER A WITH GRAVE
+    (#xC1 ?\u00C1) ;; CAPITAL LETTER A WITH ACUTE
+    (#xC2 ?\u00C2) ;; CAPITAL LETTER A WITH CIRCUMFLEX
+    (#xC3 ?\u00C3) ;; CAPITAL LETTER A WITH TILDE
+    (#xC4 ?\u1EA2) ;; CAPITAL LETTER A WITH HOOK ABOVE
+    (#xC5 ?\u0102) ;; CAPITAL LETTER A WITH BREVE
+    (#xC6 ?\u1EB3) ;; SMALL LETTER A WITH BREVE AND HOOK ABOVE
+    (#xC7 ?\u1EB5) ;; SMALL LETTER A WITH BREVE AND TILDE
+    (#xC8 ?\u00C8) ;; CAPITAL LETTER E WITH GRAVE
+    (#xC9 ?\u00C9) ;; CAPITAL LETTER E WITH ACUTE
+    (#xCA ?\u00CA) ;; CAPITAL LETTER E WITH CIRCUMFLEX
+    (#xCB ?\u1EBA) ;; CAPITAL LETTER E WITH HOOK ABOVE
+    (#xCC ?\u00CC) ;; CAPITAL LETTER I WITH GRAVE
+    (#xCD ?\u00CD) ;; CAPITAL LETTER I WITH ACUTE
+    (#xCE ?\u0128) ;; CAPITAL LETTER I WITH TILDE
+    (#xCF ?\u1EF3) ;; SMALL LETTER Y WITH GRAVE
+    (#xD0 ?\u0110) ;; CAPITAL LETTER D WITH STROKE
+    (#xD1 ?\u1EE9) ;; SMALL LETTER U WITH HORN AND ACUTE
+    (#xD2 ?\u00D2) ;; CAPITAL LETTER O WITH GRAVE
+    (#xD3 ?\u00D3) ;; CAPITAL LETTER O WITH ACUTE
+    (#xD4 ?\u00D4) ;; CAPITAL LETTER O WITH CIRCUMFLEX
+    (#xD5 ?\u1EA1) ;; SMALL LETTER A WITH DOT BELOW
+    (#xD6 ?\u1EF7) ;; SMALL LETTER Y WITH HOOK ABOVE
+    (#xD7 ?\u1EEB) ;; SMALL LETTER U WITH HORN AND GRAVE
+    (#xD8 ?\u1EED) ;; SMALL LETTER U WITH HORN AND HOOK ABOVE
+    (#xD9 ?\u00D9) ;; CAPITAL LETTER U WITH GRAVE
+    (#xDA ?\u00DA) ;; CAPITAL LETTER U WITH ACUTE
+    (#xDB ?\u1EF9) ;; SMALL LETTER Y WITH TILDE
+    (#xDC ?\u1EF5) ;; SMALL LETTER Y WITH DOT BELOW
+    (#xDD ?\u00DD) ;; CAPITAL LETTER Y WITH ACUTE
+    (#xDE ?\u1EE1) ;; SMALL LETTER O WITH HORN AND TILDE
+    (#xDF ?\u01B0) ;; SMALL LETTER U WITH HORN
+    (#xE0 ?\u00E0) ;; SMALL LETTER A WITH GRAVE
+    (#xE1 ?\u00E1) ;; SMALL LETTER A WITH ACUTE
+    (#xE2 ?\u00E2) ;; SMALL LETTER A WITH CIRCUMFLEX
+    (#xE3 ?\u00E3) ;; SMALL LETTER A WITH TILDE
+    (#xE4 ?\u1EA3) ;; SMALL LETTER A WITH HOOK ABOVE
+    (#xE5 ?\u0103) ;; SMALL LETTER A WITH BREVE
+    (#xE6 ?\u1EEF) ;; SMALL LETTER U WITH HORN AND TILDE
+    (#xE7 ?\u1EAB) ;; SMALL LETTER A WITH CIRCUMFLEX AND TILDE
+    (#xE8 ?\u00E8) ;; SMALL LETTER E WITH GRAVE
+    (#xE9 ?\u00E9) ;; SMALL LETTER E WITH ACUTE
+    (#xEA ?\u00EA) ;; SMALL LETTER E WITH CIRCUMFLEX
+    (#xEB ?\u1EBB) ;; SMALL LETTER E WITH HOOK ABOVE
+    (#xEC ?\u00EC) ;; SMALL LETTER I WITH GRAVE
+    (#xED ?\u00ED) ;; SMALL LETTER I WITH ACUTE
+    (#xEE ?\u0129) ;; SMALL LETTER I WITH TILDE
+    (#xEF ?\u1EC9) ;; SMALL LETTER I WITH HOOK ABOVE
+    (#xF0 ?\u0111) ;; SMALL LETTER D WITH STROKE
+    (#xF1 ?\u1EF1) ;; SMALL LETTER U WITH HORN AND DOT BELOW
+    (#xF2 ?\u00F2) ;; SMALL LETTER O WITH GRAVE
+    (#xF3 ?\u00F3) ;; SMALL LETTER O WITH ACUTE
+    (#xF4 ?\u00F4) ;; SMALL LETTER O WITH CIRCUMFLEX
+    (#xF5 ?\u00F5) ;; SMALL LETTER O WITH TILDE
+    (#xF6 ?\u1ECF) ;; SMALL LETTER O WITH HOOK ABOVE
+    (#xF7 ?\u1ECD) ;; SMALL LETTER O WITH DOT BELOW
+    (#xF8 ?\u1EE5) ;; SMALL LETTER U WITH DOT BELOW
+    (#xF9 ?\u00F9) ;; SMALL LETTER U WITH GRAVE
+    (#xFA ?\u00FA) ;; SMALL LETTER U WITH ACUTE
+    (#xFB ?\u0169) ;; SMALL LETTER U WITH TILDE
+    (#xFC ?\u1EE7) ;; SMALL LETTER U WITH HOOK ABOVE
+    (#xFD ?\u00FD) ;; SMALL LETTER Y WITH ACUTE
+    (#xFE ?\u1EE3) ;; SMALL LETTER O WITH HORN AND DOT BELOW
+    (#xFF ?\u1EEE)) ;; CAPITAL LETTER U WITH HORN AND TILDE
+   mnemonic "VISCII"))
 
 (set-language-info-alist
  "Vietnamese" '((charset vietnamese-viscii-lower vietnamese-viscii-upper)
--- a/lisp/unicode.el	Sat Sep 19 17:56:23 2009 +0200
+++ b/lisp/unicode.el	Sat Sep 19 22:53:13 2009 +0100
@@ -164,6 +164,68 @@
 	latin-jisx0201 chinese-cns11643-3 chinese-cns11643-4
 	chinese-cns11643-5 chinese-cns11643-6 chinese-cns11643-7)))))
 
+(defconst ccl-encode-to-ucs-2
+  (eval-when-compile
+    (let ((pre-existing 
+           ;; This is the compiled CCL program from the assert
+           ;; below. Since this file is dumped and ccl.el isn't (and
+           ;; even when it was, it was dumped much later than this
+           ;; one), we can't compile the program at dump time. We can
+           ;; check at byte compile time that the program is as
+           ;; expected, though.
+           [1 16 131127 7 98872 65823 1307 5 -65536 65313 64833 1028
+              147513 8 82009 255 22]))
+      (when (featurep 'mule)
+        ;; Check that the pre-existing constant reflects the intended
+        ;; CCL program.
+        (assert
+         (equal pre-existing
+                (ccl-compile
+                 `(1 
+                   ( ;; mule-to-unicode's first argument is the
+                    ;; charset ID, the second its first byte
+                    ;; left shifted by 7 bits masked with its
+                    ;; second byte.
+                    (r1 = (r1 << 7)) 
+                    (r1 = (r1 | r2)) 
+                    (mule-to-unicode r0 r1) 
+                    (if (r0 & ,(lognot #xFFFF))
+                        ;; Redisplay looks in r1 and r2 for the first
+                        ;; and second bytes of the X11 font,
+                        ;; respectively. For non-BMP characters we
+                        ;; display U+FFFD.
+                        ((r1 = #xFF)
+                         (r2 = #xFD))
+                      ((r1 = (r0 >> 8)) 
+                       (r2 = (r0 & #xFF))))))))
+         nil 
+         "The pre-compiled CCL program appears broken. "))
+      pre-existing))
+  "CCL program to transform Mule characters to UCS-2.")
+
+(when (featurep 'mule)
+  (put 'ccl-encode-to-ucs-2 'ccl-program-idx
+       (declare-fboundp
+	(register-ccl-program 'ccl-encode-to-ucs-2 ccl-encode-to-ucs-2))))
+
+(defun decode-char (quote-ucs code &optional restriction) 
+  "FSF compatibility--return Mule character with Unicode codepoint CODE.
+The second argument must be 'ucs, the third argument is ignored.  "
+  ;; We're prepared to accept invalid Unicode in unicode-to-char, but not in
+  ;; this function, which is the API that should actually be used, since
+  ;; it's available in GNU and in Mule-UCS.
+  (check-argument-range code #x0 #x10FFFF)
+  (assert (eq quote-ucs 'ucs) t
+	  "Sorry, decode-char doesn't yet support anything but the UCS.  ")
+  (unicode-to-char code))
+
+(defun encode-char (char quote-ucs &optional restriction)
+  "FSF compatibility--return the Unicode code point of CHAR.
+The second argument must be 'ucs, the third argument is ignored.  "
+  (assert (eq quote-ucs 'ucs) t
+	  "Sorry, encode-char doesn't yet support anything but the UCS.  ")
+  (char-to-unicode char))
+
 (make-coding-system
  'utf-16 'unicode
  "UTF-16"
@@ -309,68 +371,6 @@
    little-endian t
    need-bom t))
 
-(defun decode-char (quote-ucs code &optional restriction) 
-  "FSF compatibility--return Mule character with Unicode codepoint CODE.
-The second argument must be 'ucs, the third argument is ignored.  "
-  ;; We're prepared to accept invalid Unicode in unicode-to-char, but not in
-  ;; this function, which is the API that should actually be used, since
-  ;; it's available in GNU and in Mule-UCS.
-  (check-argument-range code #x0 #x10FFFF)
-  (assert (eq quote-ucs 'ucs) t
-	  "Sorry, decode-char doesn't yet support anything but the UCS.  ")
-  (unicode-to-char code))
-
-(defun encode-char (char quote-ucs &optional restriction)
-  "FSF compatibility--return the Unicode code point of CHAR.
-The second argument must be 'ucs, the third argument is ignored.  "
-  (assert (eq quote-ucs 'ucs) t
-	  "Sorry, encode-char doesn't yet support anything but the UCS.  ")
-  (char-to-unicode char))
-
-(defconst ccl-encode-to-ucs-2
-  (eval-when-compile
-    (let ((pre-existing 
-           ;; This is the compiled CCL program from the assert
-           ;; below. Since this file is dumped and ccl.el isn't (and
-           ;; even when it was, it was dumped much later than this
-           ;; one), we can't compile the program at dump time. We can
-           ;; check at byte compile time that the program is as
-           ;; expected, though.
-           [1 16 131127 7 98872 65823 1307 5 -65536 65313 64833 1028
-              147513 8 82009 255 22]))
-      (when (featurep 'mule)
-        ;; Check that the pre-existing constant reflects the intended
-        ;; CCL program.
-        (assert
-         (equal pre-existing
-                (ccl-compile
-                 `(1 
-                   ( ;; mule-to-unicode's first argument is the
-                    ;; charset ID, the second its first byte
-                    ;; left shifted by 7 bits masked with its
-                    ;; second byte.
-                    (r1 = (r1 << 7)) 
-                    (r1 = (r1 | r2)) 
-                    (mule-to-unicode r0 r1) 
-                    (if (r0 & ,(lognot #xFFFF))
-                        ;; Redisplay looks in r1 and r2 for the first
-                        ;; and second bytes of the X11 font,
-                        ;; respectively. For non-BMP characters we
-                        ;; display U+FFFD.
-                        ((r1 = #xFF)
-                         (r2 = #xFD))
-                      ((r1 = (r0 >> 8)) 
-                       (r2 = (r0 & #xFF))))))))
-         nil 
-         "The pre-compiled CCL program appears broken. "))
-      pre-existing))
-  "CCL program to transform Mule characters to UCS-2.")
-
-(when (featurep 'mule)
-  (put 'ccl-encode-to-ucs-2 'ccl-program-idx
-       (declare-fboundp
-	(register-ccl-program 'ccl-encode-to-ucs-2 ccl-encode-to-ucs-2))))
-
 ;; Now, create jit-ucs-charset-0 entries for those characters in Windows
 ;; Glyph List 4 that would otherwise end up in East Asian character sets.
 ;; 
@@ -613,112 +613,6 @@
 ;; Sure would be nice to be able to use defface here. 
 (copy-face 'highlight 'unicode-invalid-sequence-warning-face)
 
-(defvar unicode-query-coding-skip-chars-arg nil ;; Set in general-late.el
-  "Used by `unicode-query-coding-region' to skip chars with known mappings.")
-
-(defun unicode-query-coding-region (begin end coding-system
-				    &optional buffer ignore-invalid-sequencesp
-                                    errorp highlightp)
-  "The `query-coding-region' implementation for Unicode coding systems.
-
-Supports IGNORE-INVALID-SEQUENCESP, that is, XEmacs characters that reflect
-invalid octets on disk will be treated as encodable if this argument is
-specified, and as not encodable if it is not specified."
-
-  ;; Potential problem here; the octets that correspond to octets from #x00
-  ;; to #x7f on disk will be treated by utf-8 and utf-7 as invalid
-  ;; sequences, and thus, in theory, encodable.
-
-  (check-argument-type #'coding-system-p
-                       (setq coding-system (find-coding-system coding-system)))
-  (check-argument-type #'integer-or-marker-p begin)
-  (check-argument-type #'integer-or-marker-p end)
-  (let* ((skip-chars-arg (concat unicode-query-coding-skip-chars-arg
-				 (if ignore-invalid-sequencesp
-				     unicode-invalid-sequence-regexp-range
-				   "")))
-         (ranges (make-range-table))
-         (looking-at-arg (concat "[" skip-chars-arg "]"))
-         (case-fold-search nil)
-	 (invalid-sequence-lower-unicode-bound
-	  (char-to-unicode
-	   (aref (decode-coding-string "\xd8\x00\x00\x00"
-				       'utf-16-be) 3)))
-	  (invalid-sequence-upper-unicode-bound
-	   (char-to-unicode
-	    (aref (decode-coding-string "\xd8\x00\x00\xFF"
-					'utf-16-be) 3)))
-         fail-range-start fail-range-end char-after failed
-	 extent char-unicode failed-reason previous-failed-reason)
-    (save-excursion
-      (when highlightp
-        (query-coding-clear-highlights begin end buffer))
-      (goto-char begin buffer)
-      (skip-chars-forward skip-chars-arg end buffer)
-      (while (< (point buffer) end)
-        (setq char-after (char-after (point buffer) buffer)
-              fail-range-start (point buffer))
-        (while (and
-                (< (point buffer) end)
-                (not (looking-at looking-at-arg))
-                (or (and
-                     (= -1 (setq char-unicode (char-to-unicode char-after)))
-                     (setq failed-reason 'unencodable))
-                    (and (not ignore-invalid-sequencesp)
-                         ;; The default case, with ignore-invalid-sequencesp
-                         ;; not specified:
-                         ;; If the character is in the Unicode range that
-                         ;; corresponds to an invalid octet, we want to
-                         ;; treat it as unencodable.
-                         (<= invalid-sequence-lower-unicode-bound
-                             char-unicode)
-                         (<= char-unicode
-			     invalid-sequence-upper-unicode-bound)
-                         (setq failed-reason 'invalid-sequence)))
-                (or (null previous-failed-reason)
-                    (eq previous-failed-reason failed-reason)))
-          (forward-char 1 buffer)
-          (setq char-after (char-after (point buffer) buffer)
-                failed t
-                previous-failed-reason failed-reason))
-        (if (= fail-range-start (point buffer))
-            ;; The character can actually be encoded by the coding
-            ;; system; check the characters past it.
-	    (forward-char 1 buffer)
-          ;; Can't be encoded; note this.
-          (when errorp 
-            (error 'text-conversion-error
-                   (format "Cannot encode %s using coding system"
-                           (buffer-substring fail-range-start (point buffer)
-                                             buffer))
-                   (coding-system-name coding-system)))
-          (assert
-           (not (null previous-failed-reason)) t
-           "If we've got here, previous-failed-reason should be non-nil.")
-          (put-range-table fail-range-start
-                           ;; If char-after is non-nil, we're not at
-                           ;; the end of the buffer.
-                           (setq fail-range-end (if char-after
-                                                    (point buffer)
-                                                  (point-max buffer)))
-                           previous-failed-reason ranges)
-          (setq previous-failed-reason nil)
-          (when highlightp
-            (setq extent (make-extent fail-range-start fail-range-end buffer))
-            (set-extent-priority extent (+ mouse-highlight-priority 2))
-            (set-extent-face extent 'query-coding-warning-face)))
-        (skip-chars-forward skip-chars-arg end buffer))
-      (if failed
-          (values nil ranges)
-        (values t nil)))))
-
-(loop
-  for coding-system in (coding-system-list)
-  initially (unless (featurep 'mule) (return))
-  do (when (eq 'unicode (coding-system-type coding-system))
-       (coding-system-put coding-system 'query-coding-function
-			  #'unicode-query-coding-region)))
-
 (unless (featurep 'mule)
   ;; We do this in such a roundabout way--instead of having the above defun
   ;; and defvar calls inside a (when (featurep 'mule) ...) form--to have
--- a/lisp/update-elc.el	Sat Sep 19 17:56:23 2009 +0200
+++ b/lisp/update-elc.el	Sat Sep 19 22:53:13 2009 +0100
@@ -122,9 +122,11 @@
 Files in `additional-dump-dependencies' do not need to be listed here.")
 
 (defvar additional-dump-dependencies
-  '("loadup.el"
-    "loadup-el.el"
-    "update-elc.el")
+  (nconc '("loadup.el"
+           "loadup-el.el"
+           "update-elc.el")
+         (if (featurep 'mule)
+             '("mule/make-coding-system")))
   "Lisp files that are not dumped but which the dump depends on.
 If any of these files are changed, we need to redump.")
 
--- a/src/ChangeLog	Sat Sep 19 17:56:23 2009 +0200
+++ b/src/ChangeLog	Sat Sep 19 22:53:13 2009 +0100
@@ -1,3 +1,59 @@
+2009-09-19  Aidan Kehoe  <kehoea@parhasard.net>
+
+	Move the #'query-coding-region implementation to C.
+
+	This is necessary because there is no reasonable way to access the
+	corresponding mswindows-multibyte functionality from Lisp, and we
+	need such functionality if we're going to have a reliable and
+	portable #'query-coding-region implementation. However, this
+	change doesn't yet provide #'query-coding-region for the
+	mswindow-multibyte coding systems, there should be no functional
+	differences between an XEmacs with this change and one without it.
+
+	* mule-coding.c (struct fixed_width_coding_system): 
+	Add a new coding system type, fixed_width, and implement it. It
+	uses the CCL infrastructure but has a much simpler creation API,
+	and its own query_method, formerly in lisp/mule/mule-coding.el.
+	* unicode.c:
+	Move the Unicode query method implementation here from
+	unicode.el. 
+	* lisp.h: Declare Fmake_coding_system_internal, Fcopy_range_table
+	here. 
+	* intl-win32.c (complex_vars_of_intl_win32): 
+	Use Fmake_coding_system_internal, not Fmake_coding_system.
+	* general-slots.h: Add Qsucceeded, Qunencodable, Qinvalid_sequence
+	here. 
+	* file-coding.h (enum coding_system_variant):
+	Add fixed_width_coding_system here. 
+	(struct coding_system_methods): 
+	Add query_method and query_lstream_method to the coding system
+	methods. 
+	Provide flags for the query methods.
+	Declare the default query method; initialise it correctly in
+	INITIALIZE_CODING_SYSTEM_TYPE.
+	* file-coding.c (default_query_method): 
+	New function, the default query method for coding systems that do
+	not set it. Moved from coding.el.
+	(make_coding_system_1): 
+	Accept new elements in PROPS in #'make-coding-system; aliases, a
+	list of aliases; safe-chars and safe-charsets (these were
+	previously accepted but not saved); and category.
+	(Fmake_coding_system_internal): 
+	New function, what used to be #'make-coding-system--on Mule
+	builds, we've now moved some of the functionality of this to
+	Lisp. 
+	(Fcoding_system_canonical_name_p):
+	Move this earlier in the file, since it's now called from within
+	make_coding_system_1. 
+	(Fquery_coding_region): 
+	Move the implementation of this here, from coding.el. 
+	(complex_vars_of_file_coding): 
+	Call Fmake_coding_system_internal, not Fmake_coding_system;
+	specify safe-charsets properties when we're a mule build. 
+	* extents.h (mouse_highlight_priority, Fset_extent_priority,
+	Fset_extent_face, Fmap_extents):
+	Make these available to other C files.
+
 2009-09-11  Aidan Kehoe  <kehoea@parhasard.net>
 
 	* unicode.c (unicode_convert): 
--- a/src/extents.h	Sat Sep 19 17:56:23 2009 +0200
+++ b/src/extents.h	Sat Sep 19 22:53:13 2009 +0100
@@ -147,6 +147,8 @@
 extern int inside_undo;
 extern int in_modeline_generation;
 
+extern Fixnum mouse_highlight_priority;
+
 EXFUN (Fextent_at, 5);
 EXFUN (Fextent_property, 3);
 EXFUN (Fput_text_property, 5);
@@ -164,6 +166,9 @@
 EXFUN (Fset_extent_endpoints, 4);
 EXFUN (Fset_extent_parent, 2);
 EXFUN (Fset_extent_property, 3);
+EXFUN (Fset_extent_priority, 2);
+EXFUN (Fset_extent_face, 2);
+EXFUN (Fmap_extents, 8);
 
 enum extent_at_flag
 {
--- a/src/file-coding.c	Sat Sep 19 17:56:23 2009 +0200
+++ b/src/file-coding.c	Sat Sep 19 22:53:13 2009 +0100
@@ -78,6 +78,9 @@
 #include "lstream.h"
 #include "opaque.h"
 #include "file-coding.h"
+#include "extents.h"
+#include "rangetab.h"
+#include "chartab.h"
 
 #ifdef HAVE_ZLIB
 #include "zlib.h"
@@ -89,10 +92,17 @@
 Lisp_Object Vcoding_system_for_write;
 Lisp_Object Vfile_name_coding_system;
 
+Lisp_Object Qaliases, Qcharset_skip_chars_string;
+
 #ifdef DEBUG_XEMACS
 Lisp_Object Vdebug_coding_detection;
 #endif
 
+#ifdef MULE
+extern Lisp_Object Vcharset_ascii, Vcharset_control_1,
+  Vcharset_latin_iso8859_1;
+#endif
+
 typedef struct coding_system_type_entry
 {
   struct coding_system_methods *meths;
@@ -417,6 +427,155 @@
   return decode_coding_system_type (type, ERROR_ME_NOT) != 0;
 }
 
+#ifdef MULE
+static Lisp_Object Vdefault_query_coding_region_chartab_cache;
+
+/* Non-static because it's used in INITIALIZE_CODING_SYSTEM_TYPE_WITH_DATA. */
+Lisp_Object
+default_query_method (Lisp_Object codesys, struct buffer *buf,
+                      Charbpos end, int flags)
+{
+  Charbpos pos = BUF_PT (buf), fail_range_start, fail_range_end;
+  Charbpos pos_byte = BYTE_BUF_PT (buf);
+  Lisp_Object safe_charsets = XCODING_SYSTEM_SAFE_CHARSETS (codesys);
+  Lisp_Object safe_chars = XCODING_SYSTEM_SAFE_CHARS (codesys),
+    result = Qnil;
+  enum query_coding_failure_reasons failed_reason,
+    previous_failed_reason = query_coding_succeeded;
+
+  /* safe-charsets of t means the coding system can encode everything. */
+  if (EQ (Qnil, safe_chars))
+    {
+      if (EQ (Qt, safe_charsets))
+        {
+          return Qnil;
+        }
+
+      /* If we've no information on what characters the coding system can
+         encode, give up. */
+      if (EQ (Qnil, safe_charsets) && EQ (Qnil, safe_chars))
+        {
+          return Qunbound;
+        }
+
+      safe_chars = Fgethash (safe_charsets,
+                             Vdefault_query_coding_region_chartab_cache, 
+                             Qnil);
+      if (NILP (safe_chars))
+        {
+          safe_chars = Fmake_char_table (Qgeneric);
+          {
+            EXTERNAL_LIST_LOOP_2 (safe_charset, safe_charsets)
+              Fput_char_table (safe_charset, Qt, safe_chars);
+          }
+
+          Fputhash (safe_charsets, safe_chars,
+                    Vdefault_query_coding_region_chartab_cache);
+        }
+    }
+
+  if (flags & QUERY_METHOD_HIGHLIGHT && 
+      /* If we're being called really early, live without highlights getting
+         cleared properly: */
+      !(UNBOUNDP (XSYMBOL (Qquery_coding_clear_highlights)->function)))
+    {
+      /* It's okay to call Lisp here, the only non-stack object we may have
+         allocated up to this point is safe_chars, and that's
+         reachable from its entry in
+         Vdefault_query_coding_region_chartab_cache */
+      call3 (Qquery_coding_clear_highlights, make_int (pos), make_int (end),
+             wrap_buffer (buf));
+    }
+
+  while (pos < end)
+    {
+      Ichar ch = BYTE_BUF_FETCH_CHAR (buf, pos_byte);
+      if (!EQ (Qnil, get_char_table (ch, safe_chars)))
+        {
+          pos++;
+          INC_BYTEBPOS (buf, pos_byte);
+        }
+      else
+        {
+          fail_range_start = pos;
+          while ((pos < end) &&  
+                 (EQ (Qnil, get_char_table (ch, safe_chars))
+                  && (failed_reason = query_coding_unencodable))
+                 && (previous_failed_reason == query_coding_succeeded
+                     || previous_failed_reason == failed_reason))
+            {
+              pos++;
+              INC_BYTEBPOS (buf, pos_byte);
+              ch = BYTE_BUF_FETCH_CHAR (buf, pos_byte);
+              previous_failed_reason = failed_reason;
+            }
+
+          if (fail_range_start == pos)
+            {
+              /* The character can actually be encoded; move on. */
+              pos++;
+              INC_BYTEBPOS (buf, pos_byte);
+            }
+          else
+            {
+              assert (previous_failed_reason == query_coding_unencodable);
+
+              if (flags & QUERY_METHOD_ERRORP)
+                {
+                  DECLARE_EISTRING (error_details);
+
+                  eicpy_ascii (error_details, "Cannot encode ");
+                  eicat_lstr (error_details,
+                              make_string_from_buffer (buf, fail_range_start,
+                                                       pos -
+                                                       fail_range_start));
+                  eicat_ascii (error_details, " using coding system");
+
+                  signal_error (Qtext_conversion_error, 
+                                (const CIbyte *)(eidata (error_details)),
+                                XCODING_SYSTEM_NAME (codesys));
+                }
+
+              if (NILP (result))
+                {
+                  result = Fmake_range_table (Qstart_closed_end_open);
+                }
+
+              fail_range_end = pos;
+
+              Fput_range_table (make_int (fail_range_start), 
+                                make_int (fail_range_end),
+                                Qunencodable,
+                                result);
+              previous_failed_reason = query_coding_succeeded;
+
+              if (flags & QUERY_METHOD_HIGHLIGHT) 
+                {
+                  Lisp_Object extent
+                    = Fmake_extent (make_int (fail_range_start),
+                                    make_int (fail_range_end), 
+                                    wrap_buffer (buf));
+                  
+                  Fset_extent_priority
+                    (extent, make_int (2 + mouse_highlight_priority));
+                  Fset_extent_face (extent, Qquery_coding_warning_face);
+                }
+            }
+        }
+    }
+
+  return result;
+}
+#else
+Lisp_Object
+default_query_method (Lisp_Object UNUSED (codesys),
+                      struct buffer * UNUSED (buf),
+                      Charbpos UNUSED (end), int UNUSED (flags))
+{
+  return Qnil;
+}
+#endif /* defined MULE */
+
 DEFUN ("valid-coding-system-type-p", Fvalid_coding_system_type_p, 1, 1, 0, /*
 Given a CODING-SYSTEM-TYPE, return non-nil if it is valid.
 Valid types depend on how XEmacs was compiled but may include
@@ -982,6 +1141,16 @@
     }
 }
 
+DEFUN ("coding-system-canonical-name-p", Fcoding_system_canonical_name_p,
+       1, 1, 0, /*
+Return t if OBJECT names a coding system, and is not a coding system alias.
+*/
+       (object))
+{
+  return CODING_SYSTEMP (Fgethash (object, Vcoding_system_hash_table, Qnil))
+    ? Qt : Qnil;
+}
+
 /* Basic function to create new coding systems.  For `make-coding-system',
    NAME-OR-EXISTING is the NAME argument, PREFIX is null, and TYPE,
    DESCRIPTION, and PROPS are the same.  All created coding systems are put
@@ -1030,7 +1199,7 @@
   enum eol_type eol_wrapper = EOL_AUTODETECT;
   struct coding_system_methods *meths;
   Lisp_Object csobj;
-  Lisp_Object defmnem = Qnil;
+  Lisp_Object defmnem = Qnil, aliases = Qnil;
 
   if (NILP (type))
     type = Qundecided;
@@ -1119,15 +1288,55 @@
 	  CODING_SYSTEM_POST_READ_CONVERSION (cs) = value;
 	else if (EQ (key, Qpre_write_conversion))
 	  CODING_SYSTEM_PRE_WRITE_CONVERSION (cs) = value;
+        else if (EQ (key, Qaliases))
+          {
+            EXTERNAL_LIST_LOOP_2 (alias, value)
+              {
+                CHECK_SYMBOL (alias);
+
+                if (!NILP (Fcoding_system_canonical_name_p (alias)))
+                  {
+                    invalid_change ("Symbol is the canonical name of a "
+                                    "coding system and cannot be redefined",
+                                    alias);
+                  }
+              }
+            aliases = value;
+          }
 	/* FSF compatibility */
 	else if (EQ (key, Qtranslation_table_for_decode))
 	  ;
 	else if (EQ (key, Qtranslation_table_for_encode))
 	  ;
 	else if (EQ (key, Qsafe_chars))
-	  CODING_SYSTEM_SAFE_CHARS (cs) = value;
+          {
+            CHECK_CHAR_TABLE (value);
+            CODING_SYSTEM_SAFE_CHARS (cs) = value;
+          }
 	else if (EQ (key, Qsafe_charsets))
-	  CODING_SYSTEM_SAFE_CHARSETS (cs) = value;
+          {
+            if (!EQ (Qt, value) 
+                /* Would be nice to actually do this check, but there are
+                   some order conflicts with japanese.el and
+                   mule-coding.el  */
+                && 0)
+              {
+#ifdef MULE
+                EXTERNAL_LIST_LOOP_2 (safe_charset, value) 
+                  CHECK_CHARSET (Ffind_charset (safe_charset));
+#endif
+              }
+
+            CODING_SYSTEM_SAFE_CHARSETS (cs) = value;
+          }
+	else if (EQ (key, Qcategory))
+          {
+            Fput (name_or_existing, intern ("coding-system-property"),
+                  Fplist_put (Fget (name_or_existing, 
+                                    intern ("coding-system-property"),
+                                    Qnil), 
+                              Qcategory, value));
+          }
 	else if (EQ (key, Qmime_charset))
 	  ;
 	else if (EQ (key, Qvalid_codes))
@@ -1186,6 +1395,11 @@
 		    csobj));
       }
     XCODING_SYSTEM_EOL_TYPE (csobj) = eol_wrapper;
+
+    {
+      EXTERNAL_LIST_LOOP_2 (alias, aliases)
+        Fdefine_coding_system_alias (alias, csobj);
+    }
   }
 
   return csobj;
@@ -1199,339 +1413,16 @@
   return make_coding_system_1 (existing, prefix, type, description, props);
 }
 
-DEFUN ("make-coding-system", Fmake_coding_system, 2, 4, 0, /*
-Register symbol NAME as a coding system.
-
-TYPE describes the conversion method used and should be one of
-
-nil or `undecided'
-     Automatic conversion.  XEmacs attempts to detect the coding system
-     used in the file.
-`chain'
-     Chain two or more coding systems together to make a combination coding
-     system.
-`no-conversion'
-     No conversion.  Use this for binary files and such.  On output,
-     graphic characters that are not in ASCII or Latin-1 will be
-     replaced by a ?. (For a no-conversion-encoded buffer, these
-     characters will only be present if you explicitly insert them.)
-`convert-eol'
-     Convert CRLF sequences or CR to LF.
-`shift-jis'
-     Shift-JIS (a Japanese encoding commonly used in PC operating systems).
-`unicode'
-     Any Unicode encoding (UCS-4, UTF-8, UTF-16, etc.).
-`mswindows-unicode-to-multibyte'
-     (MS Windows only) Converts from Windows Unicode to Windows Multibyte
-     (any code page encoding) upon encoding, and the other way upon decoding.
-`mswindows-multibyte'
-     Converts to or from Windows Multibyte (any code page encoding).
-     This is resolved into a chain of `mswindows-unicode' and
-     `mswindows-unicode-to-multibyte'.
-`iso2022'
-     Any ISO2022-compliant encoding.  Among other things, this includes
-     JIS (the Japanese encoding commonly used for e-mail), EUC (the
-     standard Unix encoding for Japanese and other languages), and
-     Compound Text (the encoding used in X11).  You can specify more
-     specific information about the conversion with the PROPS argument.
-`big5'
-     Big5 (the encoding commonly used for Mandarin Chinese in Taiwan).
-`ccl'
-     The conversion is performed using a user-written pseudo-code
-     program.  CCL (Code Conversion Language) is the name of this
-     pseudo-code.
-`gzip'
-     GZIP compression format.
-`internal'
-     Write out or read in the raw contents of the memory representing
-     the buffer's text.  This is primarily useful for debugging
-     purposes, and is only enabled when XEmacs has been compiled with
-     DEBUG_XEMACS defined (via the --debug configure option).
-     WARNING: Reading in a file using `internal' conversion can result
-     in an internal inconsistency in the memory representing a
-     buffer's text, which will produce unpredictable results and may
-     cause XEmacs to crash.  Under normal circumstances you should
-     never use `internal' conversion.
-
-DESCRIPTION is a short English phrase describing the coding system,
-suitable for use as a menu item. (See also the `documentation' property
-below.)
-
-PROPS is a property list, describing the specific nature of the
-character set.  Recognized properties are:
-
-`mnemonic'
-     String to be displayed in the modeline when this coding system is
-     active.
-
-`documentation'
-     Detailed documentation on the coding system.
-
-`eol-type'
-     End-of-line conversion to be used.  It should be one of
-
-	nil
-		Automatically detect the end-of-line type (LF, CRLF,
-		or CR).  Also generate subsidiary coding systems named
-		`NAME-unix', `NAME-dos', and `NAME-mac', that are
-		identical to this coding system but have an EOL-TYPE
-		value of `lf', `crlf', and `cr', respectively.
-	`lf'
-		The end of a line is marked externally using ASCII LF.
-		Since this is also the way that XEmacs represents an
-		end-of-line internally, specifying this option results
-		in no end-of-line conversion.  This is the standard
-		format for Unix text files.
-	`crlf'
-		The end of a line is marked externally using ASCII
-		CRLF.  This is the standard format for MS-DOS text
-		files.
-	`cr'
-		The end of a line is marked externally using ASCII CR.
-		This is the standard format for Macintosh text files.
-	t
-		Automatically detect the end-of-line type but do not
-		generate subsidiary coding systems.  (This value is
-		converted to nil when stored internally, and
-		`coding-system-property' will return nil.)
-
-`post-read-conversion'
-     The value is a function to call after some text is inserted and
-     decoded by the coding system itself and before any functions in
-     `after-change-functions' are called. (#### Not actually true in
-     XEmacs. `after-change-functions' will be called twice if
-     `post-read-conversion' changes something.) The argument of this
-     function is the same as for a function in
-     `after-insert-file-functions', i.e. LENGTH of the text inserted,
-     with point at the head of the text to be decoded.
-
-`pre-write-conversion'
-     The value is a function to call after all functions in
-     `write-region-annotate-functions' and `buffer-file-format' are
-     called, and before the text is encoded by the coding system itself.
-     The arguments to this function are the same as those of a function
-     in `write-region-annotate-functions', i.e. FROM and TO, specifying
-     a region of text.
-
-
-
-The following properties are allowed for FSF compatibility but currently
-ignored:
-
-`translation-table-for-decode'
-     The value is a translation table to be applied on decoding.  See
-     the function `make-translation-table' for the format of translation
-     table.  This is not applicable to CCL-based coding systems.
-    
-`translation-table-for-encode'
-     The value is a translation table to be applied on encoding.  This is
-     not applicable to CCL-based coding systems.
-     
-`mime-charset'
-     The value is a symbol of which name is `MIME-charset' parameter of
-     the coding system.
-    
-`valid-codes' (meaningful only for a coding system based on CCL)
-     The value is a list to indicate valid byte ranges of the encoded
-     file.  Each element of the list is an integer or a cons of integer.
-     In the former case, the integer value is a valid byte code.  In the
-     latter case, the integers specifies the range of valid byte codes.
-
-The following properties are used by `default-query-coding-region',
-the default implementation of `query-coding-region'. This
-implementation and these properties are not used by the Unicode coding
-systems, nor by those CCL coding systems created with
-`make-8-bit-coding-system'. 
-
-`safe-chars'
-     The value is a char table.  If a character has non-nil value in it,
-     the character is safely supported by the coding system.  
-     Under XEmacs, for the moment, this is used in addition to the
-     `safe-charsets' property. It does not override it as it does
-     under GNU Emacs. #### We need to consider if we should keep this
-     behaviour.
-   
-`safe-charsets'
-     The value is a list of charsets safely supported by the coding
-     system.  For coding systems based on ISO 2022, XEmacs may try to
-     encode characters outside these character sets, but outside of
-     East Asia and East Asian coding systems, it is unlikely that
-     consumers of the data will understand XEmacs' encoding.
-     The value t means that all XEmacs character sets handles are supported.  
-
-The following additional property is recognized if TYPE is `convert-eol':
-
-`subtype'
-     One of `lf', `crlf', `cr' or nil (for autodetection).  When decoding,
-     the corresponding sequence will be converted to LF.  When encoding,
-     the opposite happens.  This coding system converts characters to
-     characters.
-
-
-
-The following additional properties are recognized if TYPE is `iso2022':
-
-`charset-g0'
-`charset-g1'
-`charset-g2'
-`charset-g3'
-     The character set initially designated to the G0 - G3 registers.
-     The value should be one of
-
-          -- A charset object (designate that character set)
-	  -- nil (do not ever use this register)
-	  -- t (no character set is initially designated to
-		the register, but may be later on; this automatically
-		sets the corresponding `force-g*-on-output' property)
-
-`force-g0-on-output'
-`force-g1-on-output'
-`force-g2-on-output'
-`force-g2-on-output'
-     If non-nil, send an explicit designation sequence on output before
-     using the specified register.
-
-`short'
-     If non-nil, use the short forms "ESC $ @", "ESC $ A", and
-     "ESC $ B" on output in place of the full designation sequences
-     "ESC $ ( @", "ESC $ ( A", and "ESC $ ( B".
-
-`no-ascii-eol'
-     If non-nil, don't designate ASCII to G0 at each end of line on output.
-     Setting this to non-nil also suppresses other state-resetting that
-     normally happens at the end of a line.
-
-`no-ascii-cntl'
-     If non-nil, don't designate ASCII to G0 before control chars on output.
-
-`seven'
-     If non-nil, use 7-bit environment on output.  Otherwise, use 8-bit
-     environment.
-
-`lock-shift'
-     If non-nil, use locking-shift (SO/SI) instead of single-shift
-     or designation by escape sequence.
-
-`no-iso6429'
-     If non-nil, don't use ISO6429's direction specification.
-
-`escape-quoted'
-     If non-nil, literal control characters that are the same as
-     the beginning of a recognized ISO2022 or ISO6429 escape sequence
-     (in particular, ESC (0x1B), SO (0x0E), SI (0x0F), SS2 (0x8E),
-     SS3 (0x8F), and CSI (0x9B)) are "quoted" with an escape character
-     so that they can be properly distinguished from an escape sequence.
-     (Note that doing this results in a non-portable encoding.) This
-     encoding flag is used for byte-compiled files.  Note that ESC
-     is a good choice for a quoting character because there are no
-     escape sequences whose second byte is a character from the Control-0
-     or Control-1 character sets; this is explicitly disallowed by the
-     ISO2022 standard.
-
-`input-charset-conversion'
-     A list of conversion specifications, specifying conversion of
-     characters in one charset to another when decoding is performed.
-     Each specification is a list of two elements: the source charset,
-     and the destination charset.
-
-`output-charset-conversion'
-     A list of conversion specifications, specifying conversion of
-     characters in one charset to another when encoding is performed.
-     The form of each specification is the same as for
-     `input-charset-conversion'.
-
-
-
-The following additional properties are recognized (and required)
-if TYPE is `ccl':
-
-`decode'
-     CCL program used for decoding (converting to internal format).
-
-`encode'
-     CCL program used for encoding (converting to external format).
-
-
-The following additional properties are recognized if TYPE is `chain':
-
-`chain'
-     List of coding systems to be chained together, in decoding order.
-
-`canonicalize-after-coding'
-     Coding system to be returned by the detector routines in place of
-     this coding system.
-
-
-
-The following additional properties are recognized if TYPE is `unicode':
-
-`unicode-type'
-     One of `utf-16', `utf-8', `ucs-4', or `utf-7' (the latter is not
-     yet implemented).  `utf-16' is the basic two-byte encoding;
-     `ucs-4' is the four-byte encoding; `utf-8' is an ASCII-compatible
-     variable-width 8-bit encoding; `utf-7' is a 7-bit encoding using
-     only characters that will safely pass through all mail gateways.
-     [[ This should be \"transformation format\".  There should also be
-     `ucs-2' (or `bmp' -- no surrogates) and `utf-32' (range checked). ]]
-
-`little-endian'
-     If non-nil, `utf-16' and `ucs-4' will write out the groups of two
-     or four bytes little-endian instead of big-endian.  This is required,
-     for example, under Windows.
-
-`need-bom'
-     If non-nil, a byte order mark (BOM, or Unicode FFFE) should be
-     written out at the beginning of the data.  This serves both to
-     identify the endianness of the following data and to mark the
-     data as Unicode (at least, this is how Windows uses it).
-     [[ The correct term is \"signature\", since this technique may also
-     be used with UTF-8.  That is the term used in the standard. ]]
-
-
-The following additional properties are recognized if TYPE is
-`mswindows-multibyte':
-
-`code-page'
-     Either a number (specifying a particular code page) or one of the
-     symbols `ansi', `oem', `mac', or `ebcdic', specifying the ANSI,
-     OEM, Macintosh, or EBCDIC code page associated with a particular
-     locale (given by the `locale' property).  NOTE: EBCDIC code pages
-     only exist in Windows 2000 and later.
-
-`locale'
-     If `code-page' is a symbol, this specifies the locale whose code
-     page of the corresponding type should be used.  This should be
-     one of the following: A cons of two strings, (LANGUAGE
-     . SUBLANGUAGE) (see `mswindows-set-current-locale'); a string (a
-     language; SUBLANG_DEFAULT, i.e. the default sublanguage, is
-     used); or one of the symbols `current', `user-default', or
-     `system-default', corresponding to the values of
-     `mswindows-current-locale', `mswindows-user-default-locale', or
-     `mswindows-system-default-locale', respectively.
-
-
-
-The following additional properties are recognized if TYPE is `undecided':
-\[[ Doesn't GNU use \"detect-*\" for the following two? ]]
-
-`do-eol'
-     Do EOL detection.
-
-`do-coding'
-     Do encoding detection.
-
-`coding-system'
-     If encoding detection is not done, use the specified coding system
-     to do decoding.  This is used internally when implementing coding
-     systems with an EOL type that specifies autodetection (the default),
-     so that the detector routines return the proper subsidiary.
-
-
-
-The following additional property is recognized if TYPE is `gzip':
-
-`level'
-     Compression level: 0 through 9, or `default' (currently 6).
+DEFUN ("make-coding-system-internal", Fmake_coding_system_internal, 2, 4, 0, /*
+See `make-coding-system'.  This does much of the work of that function.
+
+Without Mule support, it does all the work of that function, and an alias
+exists, mapping `make-coding-system' to
+`make-coding-system-internal'. You'll need a non-Mule XEmacs to read the
+complete docstring. Or you can just read it in make-coding-system.el;
+something like the following should work:
+
+ \\[find-function-other-window] find-file RET \\[find-file] mule/make-coding-system.el RET
 
 */
        (name, type, description, props))
@@ -1577,16 +1468,6 @@
   return new_coding_system;
 }
 
-DEFUN ("coding-system-canonical-name-p", Fcoding_system_canonical_name_p,
-       1, 1, 0, /*
-Return t if OBJECT names a coding system, and is not a coding system alias.
-*/
-       (object))
-{
-  return CODING_SYSTEMP (Fgethash (object, Vcoding_system_hash_table, Qnil))
-    ? Qt : Qnil;
-}
-
 /* #### Shouldn't this really be a find/get pair? */
 
 DEFUN ("coding-system-alias-p", Fcoding_system_alias_p, 1, 1, 0, /*
@@ -2475,6 +2356,100 @@
 				      CODING_ENCODE);
 }
 
+DEFUN ("query-coding-region", Fquery_coding_region, 3, 7, 0, /*
+Work out whether CODING-SYSTEM can losslessly encode a region.
+
+START and END are the beginning and end of the region to check.
+CODING-SYSTEM is the coding system to try.
+
+Optional argument BUFFER is the buffer to check, and defaults to the current
+buffer.
+
+IGNORE-INVALID-SEQUENCESP, also an optional argument, says to treat XEmacs
+characters which have an unambiguous encoded representation, despite being
+undefined in what they represent, as encodable.  These chiefly arise with
+variable-length encodings like UTF-8 and UTF-16, where an invalid sequence
+is passed through to XEmacs as a sequence of characters with a defined
+correspondence to the octets on disk, but no non-error semantics; see the
+`invalid-sequence-coding-system' argument to `set-language-info'.
+
+They can also arise with fixed-length encodings like ISO 8859-7, where
+certain octets on disk have undefined values, and treating them as
+corresponding to the ISO 8859-1 characters with the same numerical values
+may lead to data that is not understood by other applications.
+
+Optional argument ERRORP says to signal a `text-conversion-error' if some
+character in the region cannot be encoded, and defaults to nil.
+
+Optional argument HIGHLIGHT says to display unencodable characters in the
+region using `query-coding-warning-face'. It defaults to nil.
+
+This function can return multiple values; the intention is that callers use
+`multiple-value-bind' or the related CL multiple value functions to deal
+with it.  The first result is `t' if the region can be encoded using
+CODING-SYSTEM, or `nil' if not.  If the region cannot be encoded using
+CODING-SYSTEM, the second result is a range table describing the positions
+of the unencodable characters.
+
+Ranges that describe characters that would be ignored were
+IGNORE-INVALID-SEQUENCESP non-nil map to the symbol `invalid-sequence';
+other ranges map to the symbol `unencodable'.  If IGNORE-INVALID-SEQUENCESP
+is non-nil, all ranges will map to the symbol `unencodable'.  See
+`make-range-table' for more details of range tables.
+*/
+       (start, end, coding_system, buffer, ignore_invalid_sequencesp,
+        errorp, highlight))
+{
+  Charbpos b, e;
+  struct buffer *buf = decode_buffer (buffer, 1);
+  Lisp_Object result;
+  int flags = 0, speccount = specpdl_depth (); 
+
+  coding_system = Fget_coding_system (coding_system);
+
+  get_buffer_range_char (buf, start, end, &b, &e, 0);
+
+  if (buf != current_buffer)
+    {
+      record_unwind_protect (save_current_buffer_restore, Fcurrent_buffer ());
+      set_buffer_internal (buf);
+    }
+
+  record_unwind_protect (save_excursion_restore, save_excursion_save ());
+
+  BUF_SET_PT (buf, b);
+
+  if (!NILP (ignore_invalid_sequencesp))
+    {
+      flags |= QUERY_METHOD_IGNORE_INVALID_SEQUENCES;
+    }
+
+  if (!NILP (errorp))
+    {
+      flags |= QUERY_METHOD_ERRORP;
+    }
+
+  if (!NILP (highlight))
+    {
+      flags |= QUERY_METHOD_HIGHLIGHT;
+    }
+
+  result = XCODESYSMETH_OR_GIVEN (coding_system, query,
+                                  (coding_system, buf, e, flags), Qunbound);
+
+  if (UNBOUNDP (result))
+    {
+      signal_error (Qtext_conversion_error,
+                    "Coding system doesn't say what it can encode", 
+                    XCODING_SYSTEM_NAME (coding_system));
+    }
+
+  result = (NILP (result)) ? Qt : values2 (Qnil, result); 
+
+  return unbind_to_1 (speccount, result);
+}
+
+
 
 /************************************************************************/
 /*                             Chain methods                            */
@@ -4550,7 +4525,7 @@
   DEFSUBR (Fget_coding_system);
   DEFSUBR (Fcoding_system_list);
   DEFSUBR (Fcoding_system_name);
-  DEFSUBR (Fmake_coding_system);
+  DEFSUBR (Fmake_coding_system_internal);
   DEFSUBR (Fcopy_coding_system);
   DEFSUBR (Fcoding_system_canonical_name_p);
   DEFSUBR (Fcoding_system_alias_p);
@@ -4573,6 +4548,7 @@
   DEFSUBR (Fdetect_coding_region);
   DEFSUBR (Fdecode_coding_region);
   DEFSUBR (Fencode_coding_region);
+  DEFSUBR (Fquery_coding_region);
   DEFSYMBOL_MULTIWORD_PREDICATE (Qcoding_systemp);
   DEFSYMBOL (Qno_conversion);
   DEFSYMBOL (Qconvert_eol);
@@ -4621,6 +4597,10 @@
 
   DEFSYMBOL (Qescape_quoted);
 
+  DEFSYMBOL (Qquery_coding_warning_face);
+  DEFSYMBOL (Qaliases);
+  DEFSYMBOL (Qcharset_skip_chars_string);
+
 #ifdef HAVE_ZLIB
   DEFSYMBOL (Qgzip);
 #endif
@@ -4844,6 +4824,12 @@
 */ );
   Vdebug_coding_detection = Qnil;
 #endif
+
+#ifdef MULE
+  Vdefault_query_coding_region_chartab_cache
+    = make_lisp_hash_table (25, HASH_TABLE_NON_WEAK, HASH_TABLE_EQUAL);
+  staticpro (&Vdefault_query_coding_region_chartab_cache);
+#endif
 }
 
 /* #### reformat this for consistent appearance? */
@@ -4851,7 +4837,7 @@
 void
 complex_vars_of_file_coding (void)
 {
-  Fmake_coding_system
+  Fmake_coding_system_internal
     (Qconvert_eol_cr, Qconvert_eol,
      build_msg_string ("Convert CR to LF"),
      nconc2 (list6 (Qdocumentation,
@@ -4863,9 +4849,10 @@
 	     /* VERY IMPORTANT!  Tell make-coding-system not to generate
 		subsidiaries -- it needs the coding systems we're creating
 		to do so! */
-	     list2 (Qeol_type, Qlf)));
-
-  Fmake_coding_system
+	     list4 (Qeol_type, Qlf,
+                    Qsafe_charsets, Qt)));
+
+  Fmake_coding_system_internal
     (Qconvert_eol_lf, Qconvert_eol,
      build_msg_string ("Convert LF to LF (do nothing)"),
      nconc2 (list6 (Qdocumentation,
@@ -4876,9 +4863,10 @@
 	     /* VERY IMPORTANT!  Tell make-coding-system not to generate
 		subsidiaries -- it needs the coding systems we're creating
 		to do so! */
-	     list2 (Qeol_type, Qlf)));
-
-  Fmake_coding_system
+	     list4 (Qeol_type, Qlf,
+                    Qsafe_charsets, Qt)));
+
+  Fmake_coding_system_internal
     (Qconvert_eol_crlf, Qconvert_eol,
      build_msg_string ("Convert CRLF to LF"),
      nconc2 (list6 (Qdocumentation,
@@ -4887,12 +4875,14 @@
 "(used internally and under Unix to mark the end of a line)."),
 		    Qmnemonic, build_string ("CRLF->LF"),
 		    Qsubtype, Qcrlf),
+
 	     /* VERY IMPORTANT!  Tell make-coding-system not to generate
 		subsidiaries -- it needs the coding systems we're creating
 		to do so! */
-	     list2 (Qeol_type, Qlf)));
-
-  Fmake_coding_system
+	     list4 (Qeol_type, Qlf,
+                    Qsafe_charsets, Qt)));
+
+  Fmake_coding_system_internal
     (Qconvert_eol_autodetect, Qconvert_eol,
      build_msg_string ("Autodetect EOL type"),
      nconc2 (list6 (Qdocumentation,
@@ -4903,9 +4893,10 @@
 	     /* VERY IMPORTANT!  Tell make-coding-system not to generate
 		subsidiaries -- it needs the coding systems we're creating
 		to do so! */
-	     list2 (Qeol_type, Qlf)));
-
-  Fmake_coding_system
+	     list4 (Qeol_type, Qlf,
+                    Qsafe_charsets, Qt)));
+
+  Fmake_coding_system_internal
     (Qundecided, Qundecided,
      build_msg_string ("Undecided (auto-detect)"),
      nconc2 (list4 (Qdocumentation,
@@ -4918,7 +4909,7 @@
 		       though, I don't think.) */
 		    Qeol_type, Qlf)));
 
-  Fmake_coding_system
+  Fmake_coding_system_internal
     (intern ("undecided-dos"), Qundecided,
      build_msg_string ("Undecided (auto-detect) (CRLF)"),
      nconc2 (list4 (Qdocumentation,
@@ -4928,7 +4919,7 @@
 	     list4 (Qdo_coding, Qt,
 		    Qeol_type, Qcrlf)));
 
-  Fmake_coding_system
+  Fmake_coding_system_internal
     (intern ("undecided-unix"), Qundecided,
      build_msg_string ("Undecided (auto-detect) (LF)"),
      nconc2 (list4 (Qdocumentation,
@@ -4938,7 +4929,7 @@
 	     list4 (Qdo_coding, Qt,
 		    Qeol_type, Qlf)));
 
-  Fmake_coding_system
+  Fmake_coding_system_internal
     (intern ("undecided-mac"), Qundecided,
      build_msg_string ("Undecided (auto-detect) (CR)"),
      nconc2 (list4 (Qdocumentation,
@@ -4949,26 +4940,42 @@
 		    Qeol_type, Qcr)));
 
   /* Need to create this here or we're really screwed. */
-  Fmake_coding_system
+  Fmake_coding_system_internal
     (Qraw_text, Qno_conversion,
      build_msg_string ("Raw Text"),
-     list4 (Qdocumentation,
-	    build_msg_string ("Raw text converts only line-break codes, and acts otherwise like `binary'."),
-	    Qmnemonic, build_string ("Raw")));
-
-  Fmake_coding_system
+     nconc2 (list4 (Qdocumentation,
+                    build_msg_string ("Raw text converts only line-break "
+                                      "codes, and acts otherwise like "
+                                      "`binary'."),
+                    Qmnemonic, build_string ("Raw")),
+#ifdef MULE
+             list2 (Qsafe_charsets, list3 (Vcharset_ascii, Vcharset_control_1,
+                                           Vcharset_latin_iso8859_1))));
+
+#else
+             Qnil));
+#endif
+
+  Fmake_coding_system_internal
     (Qbinary, Qno_conversion,
      build_msg_string ("Binary"),
-     list6 (Qdocumentation,
-	    build_msg_string (
+     nconc2 (list6 (Qdocumentation,
+                    build_msg_string (
 "This coding system is as close as it comes to doing no conversion.\n"
 "On input, each byte is converted directly into the character\n"
 "with the corresponding code -- i.e. from the `ascii', `control-1',\n"
 "or `latin-1' character sets.  On output, these characters are\n"
 "converted back to the corresponding bytes, and other characters\n"
 "are converted to the default character, i.e. `~'."),
-	    Qeol_type, Qlf,
-	    Qmnemonic, build_string ("Binary")));
+                    Qeol_type, Qlf,
+                    Qmnemonic, build_string ("Binary")),
+#ifdef MULE
+             list2 (Qsafe_charsets, list3 (Vcharset_ascii, Vcharset_control_1,
+                                           Vcharset_latin_iso8859_1))));
+
+#else
+             Qnil));
+#endif
 
   /* Formerly aliased to raw-text!  Completely bogus and not even the same
      as FSF Emacs. */
--- a/src/file-coding.h	Sat Sep 19 17:56:23 2009 +0200
+++ b/src/file-coding.h	Sat Sep 19 22:53:13 2009 +0100
@@ -230,7 +230,8 @@
   ccl_coding_system,
   shift_jis_coding_system,
   big5_coding_system,
-  unicode_coding_system
+  unicode_coding_system,
+  fixed_width_coding_system
 };
 
 struct coding_system_methods
@@ -318,6 +319,28 @@
 				  const unsigned char *src,
 				  unsigned_char_dynarr *dst, Bytecount n);
 
+  /* Query method: Check whether the buffer text between point and END
+     can be encoded by this coding system. Returns
+     either nil (meaning the text can be encoded by the coding system) or a
+     range table object describing the stretches that the coding system
+     cannot encode.
+     
+     Possible values for flags are below, search for
+     QUERY_METHOD_IGNORE_INVALID_SEQUENCES.
+
+     Coding systems are expected to be able to behave sensibly with all
+     possible octets on decoding, which is why this method is only available
+     for encoding. */
+  Lisp_Object (*query_method) (Lisp_Object coding_system, struct buffer *buf,
+                               Charbpos end, int flags);
+
+  /* Same as the previous method, but this works in the context of
+     lstreams. (Where the data do need to be copied, unfortunately.)  The
+     intention is to implement the query method for the mswindows-multibyte
+     coding systems in terms of a query_lstream method. */
+  Lisp_Object (*query_lstream_method) (struct coding_stream *str,
+                                       const Ibyte *start, Bytecount n);
+
   /* Coding mark method: Mark any Lisp objects in the type-specific data
      attached to `struct coding_stream'.  Optional. */
   void (*mark_coding_stream_method) (struct coding_stream *str);
@@ -387,6 +410,24 @@
   int coding_data_size;
 };
 
+/* Values for flags, as passed to query_method. */
+
+#define QUERY_METHOD_IGNORE_INVALID_SEQUENCES 0x0001
+#define QUERY_METHOD_ERRORP                   0x0002
+#define QUERY_METHOD_HIGHLIGHT                0x0004
+
+enum query_coding_failure_reasons
+  {
+    query_coding_succeeded = 0,
+    query_coding_unencodable = 1, 
+    query_coding_invalid_sequence = 2
+  }; 
+
+extern Lisp_Object Qquery_coding_warning_face;
+
+Lisp_Object default_query_method (Lisp_Object, struct buffer *, Charbpos,
+                                  int);
+
 /***** Calling a coding-system method *****/
 
 #define RAW_CODESYSMETH(cs, m) ((cs)->methods->m##_method)
@@ -413,7 +454,6 @@
 #define XCODESYSMETH_OR_GIVEN(cs, m, args, given) \
   CODESYSMETH_OR_GIVEN (XCODING_SYSTEM (cs), m, args, given)
 
-
 /***** Defining new coding-system types *****/
 
 extern const struct sized_memory_description coding_system_empty_extra_description;
@@ -477,6 +517,7 @@
   ty##_coding_system_methods->extra_description =			\
     &coding_system_empty_extra_description;				\
   ty##_coding_system_methods->enumtype = ty##_coding_system;		\
+  ty##_coding_system_methods->query_method = default_query_method;      \
   defsymbol_nodump (&ty##_coding_system_methods->predicate_symbol,	\
                     pred_sym);						\
   add_entry_to_coding_system_type_list (ty##_coding_system_methods);	\
@@ -1029,6 +1070,7 @@
 #ifdef MULE
 DECLARE_CODING_SYSTEM_TYPE (iso2022);
 DECLARE_CODING_SYSTEM_TYPE (ccl);
+DECLARE_CODING_SYSTEM_TYPE (fixed_width);
 DECLARE_CODING_SYSTEM_TYPE (shift_jis);
 DECLARE_CODING_SYSTEM_TYPE (big5);
 #endif
--- a/src/general-slots.h	Sat Sep 19 17:56:23 2009 +0200
+++ b/src/general-slots.h	Sat Sep 19 22:53:13 2009 +0100
@@ -235,6 +235,8 @@
 SYMBOL (Qprocess);
 SYMBOL_KEYWORD (Q_properties);
 SYMBOL (Qprovide);
+SYMBOL (Qquery_coding_clear_highlights);
+SYMBOL (Qquery_coding_warning_face);
 SYMBOL (Qquestion);
 SYMBOL_KEYWORD (Q_question);
 SYMBOL (Qradio);
@@ -267,6 +269,7 @@
 SYMBOL_KEYWORD (Q_style);
 SYMBOL_KEYWORD (Q_suffix);
 SYMBOL (Qsubtype);
+SYMBOL (Qsucceeded);
 SYMBOL (Qsymbol);
 SYMBOL (Qsyntax);
 SYMBOL (Qsystem_default);
@@ -287,6 +290,8 @@
 SYMBOL (Qtype);
 SYMBOL (Qundecided);
 SYMBOL (Qundefined);
+SYMBOL (Qunencodable);
+SYMBOL (Qinvalid_sequence);
 SYMBOL (Qunimplemented);
 SYMBOL (Qunicode_registries);
 SYMBOL (Qunicode_type);
--- a/src/intl-win32.c	Sat Sep 19 17:56:23 2009 +0200
+++ b/src/intl-win32.c	Sat Sep 19 22:53:13 2009 +0100
@@ -2349,7 +2349,7 @@
 void
 complex_vars_of_intl_win32 (void)
 {
-  Fmake_coding_system
+  Fmake_coding_system_internal
     (Qmswindows_unicode, Qunicode,
      build_msg_string ("MS Windows Unicode"),
      nconc2 (list4 (Qdocumentation,
--- a/src/lisp.h	Sat Sep 19 17:56:23 2009 +0200
+++ b/src/lisp.h	Sat Sep 19 22:53:13 2009 +0100
@@ -4633,7 +4633,7 @@
 EXFUN (Fencode_shift_jis_char, 1);
 EXFUN (Ffind_coding_system, 1);
 EXFUN (Fget_coding_system, 1);
-EXFUN (Fmake_coding_system, 4);
+EXFUN (Fmake_coding_system_internal, 4);
 EXFUN (Fset_coding_category_system, 2);
 EXFUN (Fset_coding_priority_list, 1);
 EXFUN (Fsubsidiary_coding_system, 2);
@@ -5009,6 +5009,7 @@
 EXFUN (Fget_range_table, 3);
 EXFUN (Fmake_range_table, 1);
 EXFUN (Fput_range_table, 4);
+EXFUN (Fcopy_range_table, 1);
 
 extern Lisp_Object Qstart_closed_end_open;
 extern Lisp_Object Qstart_open_end_open;
--- a/src/mule-coding.c	Sat Sep 19 17:56:23 2009 +0200
+++ b/src/mule-coding.c	Sat Sep 19 22:53:13 2009 +0100
@@ -36,6 +36,10 @@
 #include "charset.h"
 #include "mule-ccl.h"
 #include "file-coding.h"
+#include "elhash.h"
+#include "rangetab.h"
+#include "buffer.h"
+#include "extents.h"
 
 Lisp_Object Qshift_jis, Qiso2022, Qbig5, Qccl;
 
@@ -48,6 +52,9 @@
 
 Lisp_Object Qiso_7, Qiso_8_designate, Qiso_8_1, Qiso_8_2, Qiso_lock_shift;
 
+Lisp_Object Qfrom_unicode, Qquery_skip_chars, Qinvalid_sequences_skip_chars;
+Lisp_Object Qfixed_width;
+
 
 /************************************************************************/
 /*                          Shift-JIS methods                           */
@@ -3388,6 +3395,503 @@
   else
     return Qunbound;
 }
+
+/************************************************************************/
+/*                   FIXED_WIDTH methods                            */
+/************************************************************************/
+
+struct fixed_width_coding_system
+{
+  /* For a fixed_width coding system, these specify the CCL programs
+     used for decoding (input) and encoding (output). */
+  Lisp_Object decode;
+  Lisp_Object encode;
+  Lisp_Object from_unicode;
+  Lisp_Object invalid_sequences_skip_chars;
+  Lisp_Object query_skip_chars;
+
+  /* This is not directly accessible from Lisp; it is a concatenation of the
+     previous two strings, used for simplicity of implementation. */
+  Lisp_Object invalid_and_query_skip_chars;
+};
+
+#define CODING_SYSTEM_FIXED_WIDTH_DECODE(codesys) \
+  (CODING_SYSTEM_TYPE_DATA (codesys, fixed_width)->decode)
+#define CODING_SYSTEM_FIXED_WIDTH_ENCODE(codesys) \
+  (CODING_SYSTEM_TYPE_DATA (codesys, fixed_width)->encode)
+#define CODING_SYSTEM_FIXED_WIDTH_FROM_UNICODE(codesys) \
+  (CODING_SYSTEM_TYPE_DATA (codesys, fixed_width)->from_unicode)
+#define CODING_SYSTEM_FIXED_WIDTH_INVALID_SEQUENCES_SKIP_CHARS(codesys) \
+  (CODING_SYSTEM_TYPE_DATA (codesys, \
+                            fixed_width)->invalid_sequences_skip_chars)
+#define CODING_SYSTEM_FIXED_WIDTH_QUERY_SKIP_CHARS(codesys) \
+  (CODING_SYSTEM_TYPE_DATA (codesys, fixed_width)->query_skip_chars)
+#define CODING_SYSTEM_FIXED_WIDTH_INVALID_AND_QUERY_SKIP_CHARS(codesys) \
+  (CODING_SYSTEM_TYPE_DATA (codesys, \
+                            fixed_width)->invalid_and_query_skip_chars)
+
+#define XCODING_SYSTEM_FIXED_WIDTH_DECODE(codesys) \
+  CODING_SYSTEM_FIXED_WIDTH_DECODE (XCODING_SYSTEM (codesys))
+#define XCODING_SYSTEM_FIXED_WIDTH_ENCODE(codesys) \
+  CODING_SYSTEM_FIXED_WIDTH_ENCODE (XCODING_SYSTEM (codesys))
+#define XCODING_SYSTEM_FIXED_WIDTH_FROM_UNICODE(codesys) \
+  (CODING_SYSTEM_FIXED_WIDTH_FROM_UNICODE (XCODING_SYSTEM (codesys)))
+#define XCODING_SYSTEM_FIXED_WIDTH_INVALID_SEQUENCES_SKIP_CHARS(codesys) \
+  (CODING_SYSTEM_FIXED_WIDTH_INVALID_SEQUENCES_SKIP_CHARS \
+   (XCODING_SYSTEM (codesys)))
+#define XCODING_SYSTEM_FIXED_WIDTH_QUERY_SKIP_CHARS(codesys) \
+  (CODING_SYSTEM_FIXED_WIDTH_QUERY_SKIP_CHARS (XCODING_SYSTEM (codesys)))
+#define XCODING_SYSTEM_FIXED_WIDTH_INVALID_AND_QUERY_SKIP_CHARS(codesys) \
+  (CODING_SYSTEM_FIXED_WIDTH_INVALID_AND_QUERY_SKIP_CHARS \
+   (XCODING_SYSTEM(codesys)))
+
+struct fixed_width_coding_stream
+{
+  /* state of the running CCL program */
+  struct ccl_program ccl;
+};
+
+static const struct memory_description
+fixed_width_coding_system_description[] = {
+  { XD_LISP_OBJECT, offsetof (struct fixed_width_coding_system, decode) },
+  { XD_LISP_OBJECT, offsetof (struct fixed_width_coding_system, encode) },
+  { XD_LISP_OBJECT, offsetof (struct fixed_width_coding_system,
+                              from_unicode) },
+  { XD_LISP_OBJECT, offsetof (struct fixed_width_coding_system,
+                              invalid_sequences_skip_chars) },
+  { XD_LISP_OBJECT, offsetof (struct fixed_width_coding_system,
+                              query_skip_chars) },
+  { XD_LISP_OBJECT, offsetof (struct fixed_width_coding_system,
+                              invalid_and_query_skip_chars) },
+  { XD_END }
+};
+
+DEFINE_CODING_SYSTEM_TYPE_WITH_DATA (fixed_width);
+
+static void
+fixed_width_mark (Lisp_Object codesys)
+{
+  mark_object (XCODING_SYSTEM_FIXED_WIDTH_DECODE (codesys));
+  mark_object (XCODING_SYSTEM_FIXED_WIDTH_ENCODE (codesys));
+  mark_object (XCODING_SYSTEM_FIXED_WIDTH_FROM_UNICODE (codesys));
+  mark_object
+    (XCODING_SYSTEM_FIXED_WIDTH_INVALID_SEQUENCES_SKIP_CHARS (codesys));
+  mark_object (XCODING_SYSTEM_FIXED_WIDTH_QUERY_SKIP_CHARS (codesys) );
+  mark_object
+    (XCODING_SYSTEM_FIXED_WIDTH_INVALID_AND_QUERY_SKIP_CHARS(codesys));
+}
+
+static Bytecount
+fixed_width_convert (struct coding_stream *str, const UExtbyte *src,
+                     unsigned_char_dynarr *dst, Bytecount n)
+{
+  struct fixed_width_coding_stream *data =
+    CODING_STREAM_TYPE_DATA (str, fixed_width);
+  Bytecount orign = n;
+
+  data->ccl.last_block = str->eof;
+  /* When applying a CCL program to a stream, SRC must not be NULL -- this
+     is a special signal to the driver that read and write operations are
+     not allowed.  The code does not actually look at what SRC points to if
+     N == 0. */
+  ccl_driver (&data->ccl, src ? src : (const unsigned char *) "",
+	      dst, n, 0,
+	      str->direction == CODING_DECODE ? CCL_MODE_DECODING :
+	      CCL_MODE_ENCODING);
+  return orign;
+}
+
+static void
+fixed_width_init_coding_stream (struct coding_stream *str)
+{
+  struct fixed_width_coding_stream *data =
+    CODING_STREAM_TYPE_DATA (str, fixed_width);
+
+  setup_ccl_program (&data->ccl,
+		     str->direction == CODING_DECODE ?
+		     XCODING_SYSTEM_FIXED_WIDTH_DECODE (str->codesys) :
+		     XCODING_SYSTEM_FIXED_WIDTH_ENCODE (str->codesys));
+}
+
+static void
+fixed_width_rewind_coding_stream (struct coding_stream *str)
+{
+  fixed_width_init_coding_stream (str);
+}
+
+static void
+fixed_width_init (Lisp_Object codesys)
+{
+  XCODING_SYSTEM_FIXED_WIDTH_DECODE (codesys) = Qnil;
+  XCODING_SYSTEM_FIXED_WIDTH_ENCODE (codesys) = Qnil;
+  XCODING_SYSTEM_FIXED_WIDTH_FROM_UNICODE (codesys) = Qnil;
+  XCODING_SYSTEM_FIXED_WIDTH_INVALID_SEQUENCES_SKIP_CHARS (codesys) = Qnil;
+  XCODING_SYSTEM_FIXED_WIDTH_QUERY_SKIP_CHARS (codesys)  = Qnil;
+  XCODING_SYSTEM_FIXED_WIDTH_INVALID_AND_QUERY_SKIP_CHARS(codesys) = Qnil;
+}
+
+static int
+fixed_width_putprop (Lisp_Object codesys, Lisp_Object key,
+                     Lisp_Object value)
+{
+  struct ccl_program test_ccl;
+
+  if (EQ (key, Qdecode) || EQ (key, Qencode))
+    {
+      /* Check if the CCL infrastructure thinks this is a sane CCL
+         program: */
+      if (setup_ccl_program (&test_ccl, value) < 0)
+        {
+          invalid_argument ("Invalid CCL program", value);
+        }
+
+      if (EQ (key, Qdecode))
+        {
+          XCODING_SYSTEM_FIXED_WIDTH_DECODE (codesys) = value;
+        }
+      else 
+        {
+          XCODING_SYSTEM_FIXED_WIDTH_ENCODE (codesys) = value;
+        }
+    }
+  else if (EQ (key, Qfrom_unicode))
+    {
+      CHECK_HASH_TABLE (value);
+      XCODING_SYSTEM_FIXED_WIDTH_FROM_UNICODE (codesys) = value; 
+    }
+  else if (EQ (key, Qinvalid_sequences_skip_chars))
+    {
+      CHECK_STRING (value);
+
+      /* Make sure Lisp can't make our data inconsistent: */
+      value = Fcopy_sequence (value);
+
+      XCODING_SYSTEM_FIXED_WIDTH_INVALID_SEQUENCES_SKIP_CHARS (codesys)
+        = value;
+
+      XCODING_SYSTEM_FIXED_WIDTH_INVALID_AND_QUERY_SKIP_CHARS (codesys)
+        = concat2 (value,
+                   XCODING_SYSTEM_FIXED_WIDTH_QUERY_SKIP_CHARS (codesys));
+    }
+  else if (EQ (key, Qquery_skip_chars))
+    {
+      CHECK_STRING (value);
+
+      /* Make sure Lisp can't make our data inconsistent: */
+      value = Fcopy_sequence (value);
+
+      XCODING_SYSTEM_FIXED_WIDTH_QUERY_SKIP_CHARS (codesys) = value; 
+
+      XCODING_SYSTEM_FIXED_WIDTH_INVALID_AND_QUERY_SKIP_CHARS (codesys)
+        = concat2 (value,
+                   XCODING_SYSTEM_FIXED_WIDTH_INVALID_SEQUENCES_SKIP_CHARS
+                   (codesys));
+    }
+  else
+    {
+      return 0;
+    }
+
+  return 1;
+}
+
+static Lisp_Object
+fixed_width_getprop (Lisp_Object codesys, Lisp_Object prop)
+{
+  if (EQ (prop, Qdecode))
+    {
+      return XCODING_SYSTEM_FIXED_WIDTH_DECODE (codesys);
+    }
+  else if (EQ (prop, Qencode))
+    {
+      return XCODING_SYSTEM_FIXED_WIDTH_ENCODE (codesys);
+    }
+  else if (EQ (prop, Qfrom_unicode))
+    {
+      return XCODING_SYSTEM_FIXED_WIDTH_FROM_UNICODE (codesys); 
+    }
+  else if (EQ (prop, Qinvalid_sequences_skip_chars))
+    {
+      /* Make sure Lisp can't make our data inconsistent: */
+      return
+        Fcopy_sequence
+          (XCODING_SYSTEM_FIXED_WIDTH_INVALID_SEQUENCES_SKIP_CHARS (codesys));
+    }
+  else if (EQ (prop, Qquery_skip_chars))
+    {
+      return
+        Fcopy_sequence (XCODING_SYSTEM_FIXED_WIDTH_QUERY_SKIP_CHARS (codesys)); 
+    }
+
+  return Qunbound;
+}
+
+static Lisp_Object Vfixed_width_query_ranges_cache;
+
+static Lisp_Object
+fixed_width_skip_chars_data_given_strings (Lisp_Object string,
+                                           Lisp_Object query_skip_chars,
+                                           Lisp_Object
+                                           invalid_sequences_skip_chars,
+                                           Binbyte *fastmap,
+                                           int fastmap_len)
+{
+  Lisp_Object result = Fgethash (string,
+                                 Vfixed_width_query_ranges_cache, 
+                                 Qnil);
+  REGISTER Ibyte *p, *pend;
+  REGISTER Ichar c;
+
+  memset (fastmap, query_coding_unencodable, fastmap_len);
+
+  if (!NILP (result))
+    {
+      int i; 
+      Lisp_Object ranged;
+      assert (RANGE_TABLEP (result));
+      for (i = 0; i < fastmap_len; ++i)
+        {
+          ranged = Fget_range_table (make_int (i), result, Qnil);
+
+          if (EQ (ranged, Qsucceeded))
+            {
+              fastmap [i] = query_coding_succeeded;
+            }
+          else if (EQ (ranged, Qinvalid_sequence))
+            {
+              fastmap [i] = query_coding_invalid_sequence;
+            }
+        }
+      return result; 
+    }
+
+  result = Fmake_range_table (Qstart_closed_end_closed);
+
+  p = XSTRING_DATA (query_skip_chars);
+  pend = p + XSTRING_LENGTH (query_skip_chars);
+
+  while (p != pend)
+    {
+      c = itext_ichar (p);
+
+      INC_IBYTEPTR (p);
+
+      if (c == '\\')
+        {
+          if (p == pend) break;
+          c = itext_ichar (p);
+          INC_IBYTEPTR (p);
+        }
+
+      if (p != pend && *p == '-')
+        {
+          Ichar cend;
+
+          /* Skip over the dash.  */
+          p++;
+          if (p == pend) break;
+          cend = itext_ichar (p);
+
+          Fput_range_table (make_int (c), make_int (cend), Qsucceeded,
+                            result);
+
+          while (c <= cend && c < fastmap_len)
+            {
+              fastmap[c] = query_coding_succeeded;
+              c++;
+            }
+
+          INC_IBYTEPTR (p);
+        }
+      else
+        {
+          if (c < fastmap_len)
+            fastmap[c] = query_coding_succeeded;
+
+          Fput_range_table (make_int (c), make_int (c), Qsucceeded, result);
+        }
+    }
+
+
+  p = XSTRING_DATA (invalid_sequences_skip_chars);
+  pend = p + XSTRING_LENGTH (invalid_sequences_skip_chars);
+
+  while (p != pend)
+    {
+      c = itext_ichar (p);
+
+      INC_IBYTEPTR (p);
+
+      if (c == '\\')
+        {
+          if (p == pend) break;
+          c = itext_ichar (p);
+          INC_IBYTEPTR (p);
+        }
+
+      if (p != pend && *p == '-')
+        {
+          Ichar cend;
+
+          /* Skip over the dash.  */
+          p++;
+          if (p == pend) break;
+          cend = itext_ichar (p);
+
+          Fput_range_table (make_int (c), make_int (cend), Qinvalid_sequence,
+                            result);
+
+          while (c <= cend && c < fastmap_len)
+            {
+              fastmap[c] = query_coding_invalid_sequence;
+              c++;
+            }
+
+          INC_IBYTEPTR (p);
+        }
+      else
+        {
+          if (c < fastmap_len)
+            fastmap[c] = query_coding_invalid_sequence;
+
+          Fput_range_table (make_int (c), make_int (c), Qinvalid_sequence,
+                            result);
+        }
+    }
+
+  Fputhash (string, result, Vfixed_width_query_ranges_cache);
+
+  return result;
+}
+
+static  Lisp_Object
+fixed_width_query (Lisp_Object codesys, struct buffer *buf, 
+                   Charbpos end, int flags)
+{
+  Charbpos pos = BUF_PT (buf), fail_range_start, fail_range_end;
+  Charbpos pos_byte = BYTE_BUF_PT (buf);
+  Lisp_Object skip_chars_range_table, from_unicode, checked_unicode,
+    result = Qnil;
+  enum query_coding_failure_reasons failed_reason,
+    previous_failed_reason = query_coding_succeeded;
+  Binbyte fastmap[0xff];
+
+  from_unicode = XCODING_SYSTEM_FIXED_WIDTH_FROM_UNICODE (codesys);
+
+  skip_chars_range_table =
+    fixed_width_skip_chars_data_given_strings
+        ((flags & QUERY_METHOD_IGNORE_INVALID_SEQUENCES ?
+          XCODING_SYSTEM_FIXED_WIDTH_INVALID_AND_QUERY_SKIP_CHARS
+          (codesys) : 
+          XCODING_SYSTEM_FIXED_WIDTH_QUERY_SKIP_CHARS(codesys)), 
+         XCODING_SYSTEM_FIXED_WIDTH_QUERY_SKIP_CHARS(codesys), 
+         (flags & QUERY_METHOD_IGNORE_INVALID_SEQUENCES ?
+          build_string("") :
+          XCODING_SYSTEM_FIXED_WIDTH_INVALID_SEQUENCES_SKIP_CHARS (codesys)),
+         fastmap, (int)(sizeof (fastmap)));
+
+  if (flags & QUERY_METHOD_HIGHLIGHT && 
+      /* If we're being called really early, live without highlights getting
+         cleared properly: */
+      !(UNBOUNDP (XSYMBOL (Qquery_coding_clear_highlights)->function)))
+    {
+      /* It's okay to call Lisp here, the only non-stack object we may have
+         allocated up to this point is skip_chars_range_table, and that's
+         reachable from its entry in Vfixed_width_query_ranges_cache. */
+      call3 (Qquery_coding_clear_highlights, make_int (pos), make_int (end),
+             wrap_buffer (buf));
+    }
+
+  while (pos < end)
+    {
+      Ichar ch = BYTE_BUF_FETCH_CHAR (buf, pos_byte);
+      if ((ch < (int) (sizeof(fastmap))) ?
+          (fastmap[ch] == query_coding_succeeded) :
+          (EQ (Qsucceeded, Fget_range_table (make_int (ch),
+                                             skip_chars_range_table, Qnil))))
+        {
+          pos++;
+          INC_BYTEBPOS (buf, pos_byte);
+        }
+      else
+        {
+          fail_range_start = pos;
+          while ((pos < end) &&  
+                 ((!(flags & QUERY_METHOD_IGNORE_INVALID_SEQUENCES) &&
+                   EQ (Qinvalid_sequence, Fget_range_table
+                       (make_int (ch), skip_chars_range_table, Qnil))
+                   && (failed_reason = query_coding_invalid_sequence))
+                  || ((NILP ((checked_unicode = 
+                              Fgethash (Fchar_to_unicode (make_char (ch)),
+                                        from_unicode, Qnil))))
+                      && (failed_reason = query_coding_unencodable)))
+                 && (previous_failed_reason == query_coding_succeeded
+                     || previous_failed_reason == failed_reason))
+            {
+              pos++;
+              INC_BYTEBPOS (buf, pos_byte);
+              ch = BYTE_BUF_FETCH_CHAR (buf, pos_byte);
+              previous_failed_reason = failed_reason;
+            }
+
+          if (fail_range_start == pos)
+            {
+              /* The character can actually be encoded; move on. */
+              pos++;
+              INC_BYTEBPOS (buf, pos_byte);
+            }
+          else
+            {
+              assert (previous_failed_reason == query_coding_invalid_sequence
+                      || previous_failed_reason == query_coding_unencodable);
+
+              if (flags & QUERY_METHOD_ERRORP)
+                {
+                  DECLARE_EISTRING (error_details);
+
+                  eicpy_ascii (error_details, "Cannot encode ");
+                  eicat_lstr (error_details,
+                              make_string_from_buffer (buf, fail_range_start, 
+                                                       pos - fail_range_start));
+                  eicat_ascii (error_details, " using coding system");
+
+                  signal_error (Qtext_conversion_error, 
+                                (const CIbyte *)(eidata (error_details)),
+                                XCODING_SYSTEM_NAME (codesys));
+                }
+
+              if (NILP (result))
+                {
+                  result = Fmake_range_table (Qstart_closed_end_open);
+                }
+
+              fail_range_end = pos;
+
+              Fput_range_table (make_int (fail_range_start), 
+                                make_int (fail_range_end),
+                                (previous_failed_reason
+                                 == query_coding_unencodable ?
+                                 Qunencodable : Qinvalid_sequence), 
+                                result);
+              previous_failed_reason = query_coding_succeeded;
+
+              if (flags & QUERY_METHOD_HIGHLIGHT) 
+                {
+                  Lisp_Object extent
+                    = Fmake_extent (make_int (fail_range_start),
+                                    make_int (fail_range_end), 
+                                    wrap_buffer (buf));
+                  
+                  Fset_extent_priority
+                    (extent, make_int (2 + mouse_highlight_priority));
+                  Fset_extent_face (extent, Qquery_coding_warning_face);
+                }
+            }
+        }
+    }
+
+  return result;
+}
 
 
 /************************************************************************/
@@ -3430,6 +3934,11 @@
   DEFSYMBOL (Qiso_8_1);
   DEFSYMBOL (Qiso_8_2);
   DEFSYMBOL (Qiso_lock_shift);
+
+  DEFSYMBOL (Qfrom_unicode);
+  DEFSYMBOL (Qinvalid_sequences_skip_chars);
+  DEFSYMBOL (Qquery_skip_chars);
+  DEFSYMBOL (Qfixed_width);
 }
 
 void
@@ -3465,6 +3974,17 @@
   CODING_SYSTEM_HAS_METHOD (ccl, putprop);
   CODING_SYSTEM_HAS_METHOD (ccl, getprop);
 
+  INITIALIZE_CODING_SYSTEM_TYPE_WITH_DATA (fixed_width,
+                                           "fixed-width-coding-system-p");
+  CODING_SYSTEM_HAS_METHOD (fixed_width, mark);
+  CODING_SYSTEM_HAS_METHOD (fixed_width, convert);
+  CODING_SYSTEM_HAS_METHOD (fixed_width, query);
+  CODING_SYSTEM_HAS_METHOD (fixed_width, init);
+  CODING_SYSTEM_HAS_METHOD (fixed_width, init_coding_stream);
+  CODING_SYSTEM_HAS_METHOD (fixed_width, rewind_coding_stream);
+  CODING_SYSTEM_HAS_METHOD (fixed_width, putprop);
+  CODING_SYSTEM_HAS_METHOD (fixed_width, getprop);
+
   INITIALIZE_CODING_SYSTEM_TYPE (shift_jis, "shift-jis-coding-system-p");
   CODING_SYSTEM_HAS_METHOD (shift_jis, convert);
 
@@ -3485,6 +4005,7 @@
 {
   REINITIALIZE_CODING_SYSTEM_TYPE (iso2022);
   REINITIALIZE_CODING_SYSTEM_TYPE (ccl);
+  REINITIALIZE_CODING_SYSTEM_TYPE (fixed_width);
   REINITIALIZE_CODING_SYSTEM_TYPE (shift_jis);
   REINITIALIZE_CODING_SYSTEM_TYPE (big5);
 }
@@ -3497,4 +4018,9 @@
 void
 vars_of_mule_coding (void)
 {
+  /* This needs to be HASH_TABLE_EQ, there's a corner case where
+     HASH_TABLE_EQUAL won't work. */
+  Vfixed_width_query_ranges_cache
+   = make_lisp_hash_table (32, HASH_TABLE_KEY_WEAK, HASH_TABLE_EQ);
+  staticpro (&Vfixed_width_query_ranges_cache);
 }
--- a/src/rangetab.c	Sat Sep 19 17:56:23 2009 +0200
+++ b/src/rangetab.c	Sat Sep 19 22:53:13 2009 +0100
@@ -92,6 +92,7 @@
 
   for (i = 0; i < Dynarr_length (rt->entries); i++)
     mark_object (Dynarr_at (rt->entries, i).val);
+  
   return Qnil;
 }
 
--- a/src/unicode.c	Sat Sep 19 17:56:23 2009 +0200
+++ b/src/unicode.c	Sat Sep 19 22:53:13 2009 +0100
@@ -41,6 +41,10 @@
 #include "file-coding.h"
 #include "opaque.h"
 
+#include "buffer.h"
+#include "rangetab.h"
+#include "extents.h"
+
 #include "sysfile.h"
 
 /* For more info about how Unicode works under Windows, see intl-win32.c. */
@@ -193,6 +197,16 @@
 
 Lisp_Object Qutf_8_bom;
 
+#ifdef MULE
+/* These range tables are not directly accessible from Lisp: */
+static Lisp_Object Vunicode_invalid_and_query_skip_chars;
+static Lisp_Object Vutf_8_invalid_and_query_skip_chars;
+static Lisp_Object Vunicode_query_skip_chars;
+
+static Lisp_Object Vunicode_query_string, Vunicode_invalid_string,
+  Vutf_8_invalid_string;
+#endif /* MULE */
+
 /* See the Unicode FAQ, http://www.unicode.org/faq/utf_bom.html#35 for this
    algorithm. 
  
@@ -2818,6 +2832,275 @@
   write_c_string (printcharfun, ")");
 }
 
+#ifdef MULE
+DEFUN ("set-unicode-query-skip-chars-args", Fset_unicode_query_skip_chars_args,
+       3, 3, 0, /*
+Specify strings as matching characters known to Unicode coding systems.
+
+QUERY-STRING is a string matching characters that can unequivocally be
+encoded by the Unicode coding systems.
+
+INVALID-STRING is a string to match XEmacs characters that represent known
+octets on disk, but that are invalid sequences according to Unicode. 
+
+UTF-8-INVALID-STRING is a more restrictive string to match XEmacs characters
+that are invalid UTF-8 octets.
+
+All three strings are in the format accepted by `skip-chars-forward'. 
+*/
+       (query_string, invalid_string, utf_8_invalid_string))
+{
+  CHECK_STRING (query_string);
+  CHECK_STRING (invalid_string);
+  CHECK_STRING (utf_8_invalid_string);
+
+  Vunicode_query_string = query_string;
+  Vunicode_invalid_string = invalid_string;
+  Vutf_8_invalid_string = utf_8_invalid_string;
+
+  return Qnil;
+}
+
+static void
+add_lisp_string_to_skip_chars_range (Lisp_Object string, Lisp_Object rtab,
+                                     Lisp_Object value)
+{
+  Ibyte *p, *pend;
+  Ichar c;
+
+  p = XSTRING_DATA (string);
+  pend = p + XSTRING_LENGTH (string);
+
+  while (p != pend)
+    {
+      c = itext_ichar (p);
+
+      INC_IBYTEPTR (p);
+
+      if (c == '\\')
+        {
+          if (p == pend) break;
+          c = itext_ichar (p);
+          INC_IBYTEPTR (p);
+        }
+
+      if (p != pend && *p == '-')
+        {
+          Ichar cend;
+
+          /* Skip over the dash.  */
+          p++;
+          if (p == pend) break;
+          cend = itext_ichar (p);
+
+          Fput_range_table (make_int (c), make_int (cend), value,
+                            rtab);
+
+          INC_IBYTEPTR (p);
+        }
+      else
+        {
+          Fput_range_table (make_int (c), make_int (c), value, rtab);
+        }
+    }
+}
+
+/* This function wouldn't be necessary if initialised range tables were
+   dumped properly; see
+   http://mid.gmane.org/18179.49815.622843.336527@parhasard.net . */
+static void
+initialize_unicode_query_range_tables_from_strings (void)
+{
+  CHECK_STRING (Vunicode_query_string);
+  CHECK_STRING (Vunicode_invalid_string);
+  CHECK_STRING (Vutf_8_invalid_string);
+
+  Vunicode_query_skip_chars = Fmake_range_table (Qstart_closed_end_closed);
+
+  add_lisp_string_to_skip_chars_range (Vunicode_query_string,
+                                       Vunicode_query_skip_chars,
+                                       Qsucceeded);
+
+  Vunicode_invalid_and_query_skip_chars
+    = Fcopy_range_table (Vunicode_query_skip_chars);
+
+  add_lisp_string_to_skip_chars_range (Vunicode_invalid_string,
+                                       Vunicode_invalid_and_query_skip_chars,
+                                       Qinvalid_sequence);
+
+  Vutf_8_invalid_and_query_skip_chars
+    = Fcopy_range_table (Vunicode_query_skip_chars);
+
+  add_lisp_string_to_skip_chars_range (Vutf_8_invalid_string,
+                                       Vutf_8_invalid_and_query_skip_chars, 
+                                       Qinvalid_sequence);
+}
+
+static Lisp_Object
+unicode_query (Lisp_Object codesys, struct buffer *buf, Charbpos end,
+               int flags)
+{
+  Charbpos pos = BUF_PT (buf), fail_range_start, fail_range_end;
+  Charbpos pos_byte = BYTE_BUF_PT (buf);
+  Lisp_Object skip_chars_range_table, result = Qnil;
+  enum query_coding_failure_reasons failed_reason,
+    previous_failed_reason = query_coding_succeeded;
+  int checked_unicode, invalid_lower_limit = UNICODE_ERROR_OCTET_RANGE_START,
+    invalid_upper_limit, unicode_type = XCODING_SYSTEM_UNICODE_TYPE (codesys);
+
+  if (flags & QUERY_METHOD_HIGHLIGHT && 
+      /* If we're being called really early, live without highlights getting
+         cleared properly: */
+      !(UNBOUNDP (XSYMBOL (Qquery_coding_clear_highlights)->function)))
+    {
+      /* It's okay to call Lisp here, the only non-stack object we may have
+         allocated up to this point is skip_chars_range_table, and that's
+         reachable from its entry in Vfixed_width_query_ranges_cache. */
+      call3 (Qquery_coding_clear_highlights, make_int (pos), make_int (end),
+             wrap_buffer (buf));
+    }
+
+  if (NILP (Vunicode_query_skip_chars))
+    {
+      initialize_unicode_query_range_tables_from_strings();
+    }
+
+  if (flags & QUERY_METHOD_IGNORE_INVALID_SEQUENCES)
+    {
+      switch (unicode_type)
+        {
+        case UNICODE_UTF_8:
+          skip_chars_range_table = Vutf_8_invalid_and_query_skip_chars;
+          break;
+        case UNICODE_UTF_7:
+          /* #### See above. */
+          return Qunbound;
+          break;
+        default:
+          skip_chars_range_table = Vunicode_invalid_and_query_skip_chars;
+          break;
+        }
+    }
+  else
+    {
+      switch (unicode_type)
+        {
+        case UNICODE_UTF_8:
+          invalid_lower_limit = UNICODE_ERROR_OCTET_RANGE_START + 0x80;
+          invalid_upper_limit = UNICODE_ERROR_OCTET_RANGE_START + 0xFF;
+          break;
+        case UNICODE_UTF_7:
+          /* #### Work out what to do here in reality, read the spec and decide
+             which octets are invalid. */
+          return Qunbound;
+          break;
+        default:
+          invalid_lower_limit = UNICODE_ERROR_OCTET_RANGE_START;
+          invalid_upper_limit = UNICODE_ERROR_OCTET_RANGE_START + 0xFF;
+          break;
+        }
+
+      skip_chars_range_table = Vunicode_query_skip_chars;
+    }
+
+  while (pos < end)
+    {
+      Ichar ch = BYTE_BUF_FETCH_CHAR (buf, pos_byte);
+      if ((ch < 0x100 ? 1 : 
+           (!EQ (Qnil, Fget_range_table (make_int (ch), skip_chars_range_table,
+                                         Qnil)))))
+        {
+          pos++;
+          INC_BYTEBPOS (buf, pos_byte);
+        }
+      else
+        {
+          fail_range_start = pos;
+          while ((pos < end) &&  
+                 ((checked_unicode = ichar_to_unicode (ch),
+                   -1 == checked_unicode
+                   && (failed_reason = query_coding_unencodable))
+                  || (!(flags & QUERY_METHOD_IGNORE_INVALID_SEQUENCES) &&
+                      (invalid_lower_limit <= checked_unicode) &&
+                      (checked_unicode <= invalid_upper_limit)
+                      && (failed_reason = query_coding_invalid_sequence)))
+                 && (previous_failed_reason == query_coding_succeeded
+                     || previous_failed_reason == failed_reason))
+            {
+              pos++;
+              INC_BYTEBPOS (buf, pos_byte);
+              ch = BYTE_BUF_FETCH_CHAR (buf, pos_byte);
+              previous_failed_reason = failed_reason;
+            }
+
+          if (fail_range_start == pos)
+            {
+              /* The character can actually be encoded; move on. */
+              pos++;
+              INC_BYTEBPOS (buf, pos_byte);
+            }
+          else
+            {
+              assert (previous_failed_reason == query_coding_invalid_sequence
+                      || previous_failed_reason == query_coding_unencodable);
+
+              if (flags & QUERY_METHOD_ERRORP)
+                {
+                  DECLARE_EISTRING (error_details);
+
+                  eicpy_ascii (error_details, "Cannot encode ");
+                  eicat_lstr (error_details,
+                              make_string_from_buffer (buf, fail_range_start, 
+                                                       pos -
+                                                       fail_range_start));
+                  eicat_ascii (error_details, " using coding system");
+
+                  signal_error (Qtext_conversion_error, 
+                                (const CIbyte *)(eidata (error_details)),
+                                XCODING_SYSTEM_NAME (codesys));
+                }
+
+              if (NILP (result))
+                {
+                  result = Fmake_range_table (Qstart_closed_end_open);
+                }
+
+              fail_range_end = pos;
+
+              Fput_range_table (make_int (fail_range_start), 
+                                make_int (fail_range_end),
+                                (previous_failed_reason
+                                 == query_coding_unencodable ?
+                                 Qunencodable : Qinvalid_sequence), 
+                                result);
+              previous_failed_reason = query_coding_succeeded;
+
+              if (flags & QUERY_METHOD_HIGHLIGHT) 
+                {
+                  Lisp_Object extent
+                    = Fmake_extent (make_int (fail_range_start),
+                                    make_int (fail_range_end), 
+                                    wrap_buffer (buf));
+                  
+                  Fset_extent_priority
+                    (extent, make_int (2 + mouse_highlight_priority));
+                  Fset_extent_face (extent, Qquery_coding_warning_face);
+                }
+            }
+        }
+    }
+
+  return result;
+}
+#else /* !MULE */
+unicode_query (Lisp_Object UNUSED (codesys),
+               struct buffer * UNUSED (buf),
+               Charbpos UNUSED (end), int UNUSED (flags))
+{
+  return Qnil;
+}
+#endif
+
 int
 dfc_coding_system_is_unicode (
 #ifdef WIN32_ANY
@@ -2856,6 +3139,8 @@
 
   DEFSUBR (Fload_unicode_mapping_table);
 
+  DEFSUBR (Fset_unicode_query_skip_chars_args);
+
   DEFSYMBOL (Qccl_encode_to_ucs_2);
   DEFSYMBOL (Qlast_allocated_character);
   DEFSYMBOL (Qignore_first_column);
@@ -2890,6 +3175,7 @@
   INITIALIZE_CODING_SYSTEM_TYPE_WITH_DATA (unicode, "unicode-coding-system-p");
   CODING_SYSTEM_HAS_METHOD (unicode, print);
   CODING_SYSTEM_HAS_METHOD (unicode, convert);
+  CODING_SYSTEM_HAS_METHOD (unicode, query);
   CODING_SYSTEM_HAS_METHOD (unicode, init_coding_stream);
   CODING_SYSTEM_HAS_METHOD (unicode, rewind_coding_stream);
   CODING_SYSTEM_HAS_METHOD (unicode, putprop);
@@ -2980,5 +3266,24 @@
 IPA.)
 */ );
   Qunicode_registries = vector1(build_string("iso10646-1"));
+
+  /* Initialised in lisp/mule/general-late.el, by a call to
+     #'set-unicode-query-skip-chars-args. Or at least they would be, but we
+     can't do this at dump time right now, initialised range tables aren't
+     dumped properly. */
+  staticpro (&Vunicode_invalid_and_query_skip_chars);
+  Vunicode_invalid_and_query_skip_chars = Qnil;
+  staticpro (&Vutf_8_invalid_and_query_skip_chars);
+  Vutf_8_invalid_and_query_skip_chars = Qnil;
+  staticpro (&Vunicode_query_skip_chars);
+  Vunicode_query_skip_chars = Qnil;
+
+  /* If we could dump the range table above these wouldn't be necessary: */
+  staticpro (&Vunicode_query_string);
+  Vunicode_query_string = Qnil;
+  staticpro (&Vunicode_invalid_string);
+  Vunicode_invalid_string = Qnil;
+  staticpro (&Vutf_8_invalid_string);
+  Vutf_8_invalid_string = Qnil;
 #endif /* MULE */
 }
--- a/tests/ChangeLog	Sat Sep 19 17:56:23 2009 +0200
+++ b/tests/ChangeLog	Sat Sep 19 22:53:13 2009 +0100
@@ -1,3 +1,13 @@
+2009-09-19  Aidan Kehoe  <kehoea@parhasard.net>
+
+	* automated/mule-tests.el: 
+	Check a coding system's type, not an 8-bit-fixed property, for
+	whether that coding system should be treated as a fixed-width
+	coding system.
+	* automated/query-coding-tests.el:
+	Don't test the query coding functionality for mswindows-multibyte
+	coding systems, it's not yet implemented.
+
 2009-09-11  Aidan Kehoe  <kehoea@parhasard.net>
 
 	* automated/mule-tests.el (featurep): 
--- a/tests/automated/mule-tests.el	Sat Sep 19 17:56:23 2009 +0200
+++ b/tests/automated/mule-tests.el	Sat Sep 19 22:53:13 2009 +0100
@@ -530,7 +530,7 @@
 				      (loop for i from ?\x00 to ?\xFF
 					collect i))
     do
-    (when (and (coding-system-get coding-system '8-bit-fixed)
+    (when (and (eq 'fixed-width (coding-system-type coding-system))
 	       ;; Don't check the coding systems with autodetect, they are
 	       ;; not round-trip compatible for the possible line-ending
 	       ;; characters.
--- a/tests/automated/query-coding-tests.el	Sat Sep 19 17:56:23 2009 +0200
+++ b/tests/automated/query-coding-tests.el	Sat Sep 19 22:53:13 2009 +0100
@@ -61,7 +61,10 @@
                                      (not 
                                       (memq (coding-system-type
                                              unix-coding-system)
-                                            '(undecided chain))))
+                                            '(undecided chain
+					      ;; #### We should be
+					      ;; testing these too.
+					      mswindows-multibyte))))
                                 unix-coding-system)))
                         (coding-system-list nil))
                 :test #'eq))