changeset 59144:8d9ea622c741

* term/mac-win.el: Sync with x-win.el. Rearrange the contents. Call mac-clear-font-name-table if invoked on Mac OS 8/9. Call x-open-connection on Mac OS X.
author Steven Tamm <steventamm@mac.com>
date Mon, 27 Dec 2004 17:23:02 +0000
parents 9c2cefd15efd
children c331d9c412f2
files lisp/ChangeLog lisp/term/mac-win.el
diffstat 2 files changed, 916 insertions(+), 616 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Mon Dec 27 17:22:01 2004 +0000
+++ b/lisp/ChangeLog	Mon Dec 27 17:23:02 2004 +0000
@@ -1,3 +1,9 @@
+2004-12-27  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
+
+	* term/mac-win.el: Sync with x-win.el.  Rearrange the contents.
+	Call mac-clear-font-name-table if invoked on Mac OS 8/9.  Call
+	x-open-connection on Mac OS X.
+
 2004-12-27  Richard M. Stallman  <rms@gnu.org>
 
 	* bookmark.el (bookmark-jump): Nice error if BOOKMARK is nil.
--- a/lisp/term/mac-win.el	Mon Dec 27 17:22:01 2004 +0000
+++ b/lisp/term/mac-win.el	Mon Dec 27 17:23:02 2004 +0000
@@ -1,8 +1,9 @@
-;;; mac-win.el --- support for "Macintosh windows"
+;;; mac-win.el --- parse switches controlling interface with Mac window system
 
-;; Copyright (C) 1999, 2000, 2002, 2003  Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2000, 2002, 2003, 2004  Free Software Foundation, Inc.
 
 ;; Author: Andrew Choi <akochoi@mac.com>
+;; Keywords: terminals
 
 ;; This file is part of GNU Emacs.
 
@@ -23,634 +24,212 @@
 
 ;;; Commentary:
 
-;;; Code:
-
-;; ---------------------------------------------------------------------------
-;; We want to delay setting frame parameters until the faces are setup
-
-;; Mac can't handle ~ prefix in file names
-;(setq auto-save-list-file-prefix ".saves-")
-
-(setq frame-creation-function 'x-create-frame-with-faces)
+;; Mac-win.el:  this file is loaded from ../lisp/startup.el when it recognizes
+;; that Mac windows are to be used.  Command line switches are parsed and those
+;; pertaining to Mac are processed and removed from the command line.  The
+;; Mac display is opened and hooks are set for popping up the initial window.
 
-;; for debugging
-;; (defun mac-handle-scroll-bar-event (event) (interactive "e") (princ event))
-
-;;(global-set-key [vertical-scroll-bar mouse-1] 'mac-handle-scroll-bar-event)
+;; startup.el will then examine startup files, and eventually call the hooks
+;; which create the first window(s).
 
-(global-set-key
- [vertical-scroll-bar down-mouse-1]
- 'mac-handle-scroll-bar-event)
+;;; Code:
+
+;; These are the standard X switches from the Xt Initialize.c file of
+;; Release 4.
 
-(global-unset-key [vertical-scroll-bar drag-mouse-1])
-(global-unset-key [vertical-scroll-bar mouse-1])
-
-(require 'scroll-bar)
+;; Command line		Resource Manager string
 
-(defun mac-handle-scroll-bar-event (event)
-  "Handle scroll bar EVENT to emulate Mac Toolbox style scrolling."
-  (interactive "e")
-  (let* ((position (event-start event))
-	 (window (nth 0 position))
-	 (bar-part (nth 4 position)))
-    (select-window window)
-    (cond
-     ((eq bar-part 'up)
-      (goto-char (window-start window))
-      (mac-scroll-down-line))
-     ((eq bar-part 'above-handle)
-      (mac-scroll-down))
-     ((eq bar-part 'handle)
-      (scroll-bar-drag event))
-     ((eq bar-part 'below-handle)
-      (mac-scroll-up))
-     ((eq bar-part 'down)
-      (goto-char (window-start window))
-      (mac-scroll-up-line)))))
-
-(defun mac-scroll-ignore-events ()
-  ;; Ignore confusing non-mouse events
-  (while (not (memq (car-safe (read-event))
-		    '(mouse-1 double-mouse-1 triple-mouse-1))) nil))
-
-(defun mac-scroll-down ()
-  (track-mouse
-    (mac-scroll-ignore-events)
-    (scroll-down)))
+;; +rv			*reverseVideo
+;; +synchronous		*synchronous
+;; -background		*background
+;; -bd			*borderColor
+;; -bg			*background
+;; -bordercolor		*borderColor
+;; -borderwidth		.borderWidth
+;; -bw			.borderWidth
+;; -display		.display
+;; -fg			*foreground
+;; -fn			*font
+;; -font		*font
+;; -foreground		*foreground
+;; -geometry		.geometry
+;; -i			.iconType
+;; -itype		.iconType
+;; -iconic		.iconic
+;; -name		.name
+;; -reverse		*reverseVideo
+;; -rv			*reverseVideo
+;; -selectionTimeout    .selectionTimeout
+;; -synchronous		*synchronous
+;; -xrm
 
-(defun mac-scroll-down-line ()
-  (track-mouse
-    (mac-scroll-ignore-events)
-    (scroll-down 1)))
-
-(defun mac-scroll-up ()
-  (track-mouse
-    (mac-scroll-ignore-events)
-    (scroll-up)))
-
-(defun mac-scroll-up-line ()
-  (track-mouse
-    (mac-scroll-ignore-events)
-    (scroll-up 1)))
+;; An alist of X options and the function which handles them.  See
+;; ../startup.el.
 
-(defun xw-defined-colors (&optional frame)
-  "Internal function called by `defined-colors', which see."
-  (or frame (setq frame (selected-frame)))
-  (let ((all-colors x-colors)
-	(this-color nil)
-	(defined-colors nil))
-    (while all-colors
-      (setq this-color (car all-colors)
-	    all-colors (cdr all-colors))
-      (and (color-supported-p this-color frame t)
-	   (setq defined-colors (cons this-color defined-colors))))
-    defined-colors))
-
-;; Don't have this yet.
-(fset 'x-get-resource 'ignore)
+(if (not (eq window-system 'mac))
+    (error "%s: Loading mac-win.el but not compiled for Mac" (invocation-name)))
 
-(unless (eq system-type 'darwin)
-  ;; This variable specifies the Unix program to call (as a process) to
-  ;; deteremine the amount of free space on a file system (defaults to
-  ;; df).  If it is not set to nil, ls-lisp will not work correctly
-  ;; unless an external application df is implemented on the Mac.
-  (setq directory-free-space-program nil)
-
-  ;; Set this so that Emacs calls subprocesses with "sh" as shell to
-  ;; expand filenames Note no subprocess for the shell is actually
-  ;; started (see run_mac_command in sysdep.c).
-  (setq shell-file-name "sh"))
-
-;; X Window emulation in macterm.c is not complete enough to start a
-;; frame without a minibuffer properly.  Call this to tell ediff
-;; library to use a single frame.
-; (ediff-toggle-multiframe)
+(require 'frame)
+(require 'mouse)
+(require 'scroll-bar)
+(require 'faces)
+;;(require 'select)
+(require 'menu-bar)
+(require 'fontset)
+;;(require 'x-dnd)
 
-;; Setup to use the Mac clipboard.  The functions mac-cut-function and
-;; mac-paste-function are defined in mac.c.
-(set-selection-coding-system 'compound-text-mac)
-
-(setq interprogram-cut-function
-      '(lambda (str push)
-	 (mac-cut-function
-	  (encode-coding-string str selection-coding-system t) push)))
+(defvar x-invocation-args)
 
-(setq interprogram-paste-function
-      '(lambda ()
-	 (let ((clipboard (mac-paste-function)))
-	   (if clipboard
-	       (decode-coding-string clipboard selection-coding-system t)))))
-
-;; Don't show the frame name; that's redundant.
-(setq-default mode-line-frame-identification "  ")
+(defvar x-command-line-resources nil)
 
-(defun mac-drag-n-drop (event)
-  "Edit the files listed in the drag-n-drop event.\n\
-Switch to a buffer editing the last file dropped."
-  (interactive "e")
-  (save-excursion
-    ;; Make sure the drop target has positive co-ords
-    ;; before setting the selected frame - otherwise it
-    ;; won't work.  <skx@tardis.ed.ac.uk>
-    (let* ((window (posn-window (event-start event)))
-	   (coords (posn-x-y (event-start event)))
-	   (x (car coords))
-	   (y (cdr coords)))
-      (if (and (> x 0) (> y 0))
-	  (set-frame-selected-window nil window))
-      (mapcar
-       '(lambda (file)
-	  (find-file
-	   (decode-coding-string
-	    file
-	    (or file-name-coding-system
-		default-file-name-coding-system))))
-       (car (cdr (cdr event)))))
-  (raise-frame)
-  (recenter)))
+;; Handler for switches of the form "-switch value" or "-switch".
+(defun x-handle-switch (switch)
+  (let ((aelt (assoc switch command-line-x-option-alist)))
+    (if aelt
+	(let ((param (nth 3 aelt))
+	      (value (nth 4 aelt)))
+	  (if value
+	      (setq default-frame-alist
+		    (cons (cons param value)
+			  default-frame-alist))
+	    (setq default-frame-alist
+		  (cons (cons param
+			      (car x-invocation-args))
+			default-frame-alist)
+		  x-invocation-args (cdr x-invocation-args)))))))
 
-(global-set-key [drag-n-drop] 'mac-drag-n-drop)
-
-;; By checking whether the variable mac-ready-for-drag-n-drop has been
-;; defined, the event loop in macterm.c can be informed that it can
-;; now receive Finder drag and drop events.  Files dropped onto the
-;; Emacs application icon can only be processed when the initial frame
-;; has been created: this is where the files should be opened.
-(add-hook 'after-init-hook
-	  '(lambda ()
-	     (defvar mac-ready-for-drag-n-drop t)))
+;; Handler for switches of the form "-switch n"
+(defun x-handle-numeric-switch (switch)
+  (let ((aelt (assoc switch command-line-x-option-alist)))
+    (if aelt
+	(let ((param (nth 3 aelt)))
+	  (setq default-frame-alist
+		(cons (cons param
+			    (string-to-int (car x-invocation-args)))
+		      default-frame-alist)
+		x-invocation-args
+		(cdr x-invocation-args))))))
 
-; Define constant values to be set to mac-keyboard-text-encoding
-(defconst kTextEncodingMacRoman 0)
-(defconst kTextEncodingISOLatin1 513 "0x201")
-(defconst kTextEncodingISOLatin2 514 "0x202")
-
-
-(define-ccl-program ccl-encode-mac-roman-font
-  `(0
-    (if (r0 != ,(charset-id 'ascii))
-	(if (r0 <= ?\x8f)
-	    (translate-character mac-roman-encoder r0 r1)
-	  ((r1 <<= 7)
-	   (r1 |= r2)
-	   (translate-character mac-roman-encoder r0 r1)))))
-  "CCL program for Mac Roman font")
+;; Handle options that apply to initial frame only
+(defun x-handle-initial-switch (switch)
+  (let ((aelt (assoc switch command-line-x-option-alist)))
+    (if aelt
+	(let ((param (nth 3 aelt))
+	      (value (nth 4 aelt)))
+	  (if value
+	      (setq initial-frame-alist
+		    (cons (cons param value)
+			  initial-frame-alist))
+	    (setq initial-frame-alist
+		  (cons (cons param
+			      (car x-invocation-args))
+			initial-frame-alist)
+		  x-invocation-args (cdr x-invocation-args)))))))
 
-(let
-    ((encoding-vector (make-vector 256 nil))
-     (i 0)
-     (vec	;; mac-centraleurroman (128..255) -> UCS mapping
-      [	#x00C4	;; 128:LATIN CAPITAL LETTER A WITH DIAERESIS
-	#x0100	;; 129:LATIN CAPITAL LETTER A WITH MACRON
-	#x0101	;; 130:LATIN SMALL LETTER A WITH MACRON
-	#x00C9	;; 131:LATIN CAPITAL LETTER E WITH ACUTE
-	#x0104	;; 132:LATIN CAPITAL LETTER A WITH OGONEK
-	#x00D6	;; 133:LATIN CAPITAL LETTER O WITH DIAERESIS
-	#x00DC	;; 134:LATIN CAPITAL LETTER U WITH DIAERESIS
-	#x00E1	;; 135:LATIN SMALL LETTER A WITH ACUTE
-	#x0105	;; 136:LATIN SMALL LETTER A WITH OGONEK
-	#x010C	;; 137:LATIN CAPITAL LETTER C WITH CARON
-	#x00E4	;; 138:LATIN SMALL LETTER A WITH DIAERESIS
-	#x010D	;; 139:LATIN SMALL LETTER C WITH CARON
-	#x0106	;; 140:LATIN CAPITAL LETTER C WITH ACUTE
-	#x0107	;; 141:LATIN SMALL LETTER C WITH ACUTE
-	#x00E9	;; 142:LATIN SMALL LETTER E WITH ACUTE
-	#x0179	;; 143:LATIN CAPITAL LETTER Z WITH ACUTE
-	#x017A	;; 144:LATIN SMALL LETTER Z WITH ACUTE
-	#x010E	;; 145:LATIN CAPITAL LETTER D WITH CARON
-	#x00ED	;; 146:LATIN SMALL LETTER I WITH ACUTE
-	#x010F	;; 147:LATIN SMALL LETTER D WITH CARON
-	#x0112	;; 148:LATIN CAPITAL LETTER E WITH MACRON
-	#x0113	;; 149:LATIN SMALL LETTER E WITH MACRON
-	#x0116	;; 150:LATIN CAPITAL LETTER E WITH DOT ABOVE
-	#x00F3	;; 151:LATIN SMALL LETTER O WITH ACUTE
-	#x0117	;; 152:LATIN SMALL LETTER E WITH DOT ABOVE
-	#x00F4	;; 153:LATIN SMALL LETTER O WITH CIRCUMFLEX
-	#x00F6	;; 154:LATIN SMALL LETTER O WITH DIAERESIS
-	#x00F5	;; 155:LATIN SMALL LETTER O WITH TILDE
-	#x00FA	;; 156:LATIN SMALL LETTER U WITH ACUTE
-	#x011A	;; 157:LATIN CAPITAL LETTER E WITH CARON
-	#x011B	;; 158:LATIN SMALL LETTER E WITH CARON
-	#x00FC	;; 159:LATIN SMALL LETTER U WITH DIAERESIS
-	#x2020	;; 160:DAGGER
-	#x00B0	;; 161:DEGREE SIGN
-	#x0118	;; 162:LATIN CAPITAL LETTER E WITH OGONEK
-	#x00A3	;; 163:POUND SIGN
-	#x00A7	;; 164:SECTION SIGN
-	#x2022	;; 165:BULLET
-	#x00B6	;; 166:PILCROW SIGN
-	#x00DF	;; 167:LATIN SMALL LETTER SHARP S
-	#x00AE	;; 168:REGISTERED SIGN
-	#x00A9	;; 169:COPYRIGHT SIGN
-	#x2122	;; 170:TRADE MARK SIGN
-	#x0119	;; 171:LATIN SMALL LETTER E WITH OGONEK
-	#x00A8	;; 172:DIAERESIS
-	#x2260	;; 173:NOT EQUAL TO
-	#x0123	;; 174:LATIN SMALL LETTER G WITH CEDILLA
-	#x012E	;; 175:LATIN CAPITAL LETTER I WITH OGONEK
-	#x012F	;; 176:LATIN SMALL LETTER I WITH OGONEK
-	#x012A	;; 177:LATIN CAPITAL LETTER I WITH MACRON
-	#x2264	;; 178:LESS-THAN OR EQUAL TO
-	#x2265	;; 179:GREATER-THAN OR EQUAL TO
-	#x012B	;; 180:LATIN SMALL LETTER I WITH MACRON
-	#x0136	;; 181:LATIN CAPITAL LETTER K WITH CEDILLA
-	#x2202	;; 182:PARTIAL DIFFERENTIAL
-	#x2211	;; 183:N-ARY SUMMATION
-	#x0142	;; 184:LATIN SMALL LETTER L WITH STROKE
-	#x013B	;; 185:LATIN CAPITAL LETTER L WITH CEDILLA
-	#x013C	;; 186:LATIN SMALL LETTER L WITH CEDILLA
-	#x013D	;; 187:LATIN CAPITAL LETTER L WITH CARON
-	#x013E	;; 188:LATIN SMALL LETTER L WITH CARON
-	#x0139	;; 189:LATIN CAPITAL LETTER L WITH ACUTE
-	#x013A	;; 190:LATIN SMALL LETTER L WITH ACUTE
-	#x0145	;; 191:LATIN CAPITAL LETTER N WITH CEDILLA
-	#x0146	;; 192:LATIN SMALL LETTER N WITH CEDILLA
-	#x0143	;; 193:LATIN CAPITAL LETTER N WITH ACUTE
-	#x00AC	;; 194:NOT SIGN
-	#x221A	;; 195:SQUARE ROOT
-	#x0144	;; 196:LATIN SMALL LETTER N WITH ACUTE
-	#x0147	;; 197:LATIN CAPITAL LETTER N WITH CARON
-	#x2206	;; 198:INCREMENT
-	#x00AB	;; 199:LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-	#x00BB	;; 200:RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-	#x2026	;; 201:HORIZONTAL ELLIPSIS
-	#x00A0	;; 202:NO-BREAK SPACE
-	#x0148	;; 203:LATIN SMALL LETTER N WITH CARON
-	#x0150	;; 204:LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
-	#x00D5	;; 205:LATIN CAPITAL LETTER O WITH TILDE
-	#x0151	;; 206:LATIN SMALL LETTER O WITH DOUBLE ACUTE
-	#x014C	;; 207:LATIN CAPITAL LETTER O WITH MACRON
-	#x2013	;; 208:EN DASH
-	#x2014	;; 209:EM DASH
-	#x201C	;; 210:LEFT DOUBLE QUOTATION MARK
-	#x201D	;; 211:RIGHT DOUBLE QUOTATION MARK
-	#x2018	;; 212:LEFT SINGLE QUOTATION MARK
-	#x2019	;; 213:RIGHT SINGLE QUOTATION MARK
-	#x00F7	;; 214:DIVISION SIGN
-	#x25CA	;; 215:LOZENGE
-	#x014D	;; 216:LATIN SMALL LETTER O WITH MACRON
-	#x0154	;; 217:LATIN CAPITAL LETTER R WITH ACUTE
-	#x0155	;; 218:LATIN SMALL LETTER R WITH ACUTE
-	#x0158	;; 219:LATIN CAPITAL LETTER R WITH CARON
-	#x2039	;; 220:SINGLE LEFT-POINTING ANGLE QUOTATION MARK
-	#x203A	;; 221:SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-	#x0159	;; 222:LATIN SMALL LETTER R WITH CARON
-	#x0156	;; 223:LATIN CAPITAL LETTER R WITH CEDILLA
-	#x0157	;; 224:LATIN SMALL LETTER R WITH CEDILLA
-	#x0160	;; 225:LATIN CAPITAL LETTER S WITH CARON
-	#x201A	;; 226:SINGLE LOW-9 QUOTATION MARK
-	#x201E	;; 227:DOUBLE LOW-9 QUOTATION MARK
-	#x0161	;; 228:LATIN SMALL LETTER S WITH CARON
-	#x015A	;; 229:LATIN CAPITAL LETTER S WITH ACUTE
-	#x015B	;; 230:LATIN SMALL LETTER S WITH ACUTE
-	#x00C1	;; 231:LATIN CAPITAL LETTER A WITH ACUTE
-	#x0164	;; 232:LATIN CAPITAL LETTER T WITH CARON
-	#x0165	;; 233:LATIN SMALL LETTER T WITH CARON
-	#x00CD	;; 234:LATIN CAPITAL LETTER I WITH ACUTE
-	#x017D	;; 235:LATIN CAPITAL LETTER Z WITH CARON
-	#x017E	;; 236:LATIN SMALL LETTER Z WITH CARON
-	#x016A	;; 237:LATIN CAPITAL LETTER U WITH MACRON
-	#x00D3	;; 238:LATIN CAPITAL LETTER O WITH ACUTE
-	#x00D4	;; 239:LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-	#x016B	;; 240:LATIN SMALL LETTER U WITH MACRON
-	#x016E	;; 241:LATIN CAPITAL LETTER U WITH RING ABOVE
-	#x00DA	;; 242:LATIN CAPITAL LETTER U WITH ACUTE
-	#x016F	;; 243:LATIN SMALL LETTER U WITH RING ABOVE
-	#x0170	;; 244:LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
-	#x0171	;; 245:LATIN SMALL LETTER U WITH DOUBLE ACUTE
-	#x0172	;; 246:LATIN CAPITAL LETTER U WITH OGONEK
-	#x0173	;; 247:LATIN SMALL LETTER U WITH OGONEK
-	#x00DD	;; 248:LATIN CAPITAL LETTER Y WITH ACUTE
-	#x00FD	;; 249:LATIN SMALL LETTER Y WITH ACUTE
-	#x0137	;; 250:LATIN SMALL LETTER K WITH CEDILLA
-	#x017B	;; 251:LATIN CAPITAL LETTER Z WITH DOT ABOVE
-	#x0141	;; 252:LATIN CAPITAL LETTER L WITH STROKE
-	#x017C	;; 253:LATIN SMALL LETTER Z WITH DOT ABOVE
-	#x0122	;; 254:LATIN CAPITAL LETTER G WITH CEDILLA
-	#x02C7	;; 255:CARON
-	])
-     translation-table)
-  (while (< i 128)
-    (aset encoding-vector i i)
-    (setq i (1+ i)))
-  (while (< i 256)
-    (aset encoding-vector i
-	  (decode-char 'ucs (aref vec (- i 128))))
-    (setq i (1+ i)))
-  (setq translation-table
-	(make-translation-table-from-vector encoding-vector))
-;;  (define-translation-table 'mac-centraleurroman-decoder translation-table)
-  (define-translation-table 'mac-centraleurroman-encoder
-    (char-table-extra-slot translation-table 0)))
+;; Make -iconic apply only to the initial frame!
+(defun x-handle-iconic (switch)
+  (setq initial-frame-alist
+	(cons '(visibility . icon) initial-frame-alist)))
+
+;; Handle the -xrm option.
+(defun x-handle-xrm-switch (switch)
+  (unless (consp x-invocation-args)
+    (error "%s: missing argument to `%s' option" (invocation-name) switch))
+  (setq x-command-line-resources
+	(if (null x-command-line-resources)
+	    (car x-invocation-args)
+	  (concat x-command-line-resources "\n" (car x-invocation-args))))
+  (setq x-invocation-args (cdr x-invocation-args)))
+
+;; Handle the geometry option
+(defun x-handle-geometry (switch)
+  (let* ((geo (x-parse-geometry (car x-invocation-args)))
+	 (left (assq 'left geo))
+	 (top (assq 'top geo))
+	 (height (assq 'height geo))
+	 (width (assq 'width geo)))
+    (if (or height width)
+	(setq default-frame-alist
+	      (append default-frame-alist
+		      '((user-size . t))
+		      (if height (list height))
+		      (if width (list width)))
+	      initial-frame-alist
+	      (append initial-frame-alist
+		      '((user-size . t))
+		      (if height (list height))
+		      (if width (list width)))))
+    (if (or left top)
+	(setq initial-frame-alist
+	      (append initial-frame-alist
+		      '((user-position . t))
+		      (if left (list left))
+		      (if top (list top)))))
+    (setq x-invocation-args (cdr x-invocation-args))))
+
+;; Handle the -name option.  Set the variable x-resource-name
+;; to the option's operand; set the name of
+;; the initial frame, too.
+(defun x-handle-name-switch (switch)
+  (or (consp x-invocation-args)
+      (error "%s: missing argument to `%s' option" (invocation-name) switch))
+  (setq x-resource-name (car x-invocation-args)
+	x-invocation-args (cdr x-invocation-args))
+  (setq initial-frame-alist (cons (cons 'name x-resource-name)
+				  initial-frame-alist)))
 
-(let
-    ((encoding-vector (make-vector 256 nil))
-     (i 0)
-     (vec	;; mac-cyrillic (128..255) -> UCS mapping
-      [	#x0410	;; 128:CYRILLIC CAPITAL LETTER A
-	#x0411	;; 129:CYRILLIC CAPITAL LETTER BE
-	#x0412	;; 130:CYRILLIC CAPITAL LETTER VE
-	#x0413	;; 131:CYRILLIC CAPITAL LETTER GHE
-	#x0414	;; 132:CYRILLIC CAPITAL LETTER DE
-	#x0415	;; 133:CYRILLIC CAPITAL LETTER IE
-	#x0416	;; 134:CYRILLIC CAPITAL LETTER ZHE
-	#x0417	;; 135:CYRILLIC CAPITAL LETTER ZE
-	#x0418	;; 136:CYRILLIC CAPITAL LETTER I
-	#x0419	;; 137:CYRILLIC CAPITAL LETTER SHORT I
-	#x041A	;; 138:CYRILLIC CAPITAL LETTER KA
-	#x041B	;; 139:CYRILLIC CAPITAL LETTER EL
-	#x041C	;; 140:CYRILLIC CAPITAL LETTER EM
-	#x041D	;; 141:CYRILLIC CAPITAL LETTER EN
-	#x041E	;; 142:CYRILLIC CAPITAL LETTER O
-	#x041F	;; 143:CYRILLIC CAPITAL LETTER PE
-	#x0420	;; 144:CYRILLIC CAPITAL LETTER ER
-	#x0421	;; 145:CYRILLIC CAPITAL LETTER ES
-	#x0422	;; 146:CYRILLIC CAPITAL LETTER TE
-	#x0423	;; 147:CYRILLIC CAPITAL LETTER U
-	#x0424	;; 148:CYRILLIC CAPITAL LETTER EF
-	#x0425	;; 149:CYRILLIC CAPITAL LETTER HA
-	#x0426	;; 150:CYRILLIC CAPITAL LETTER TSE
-	#x0427	;; 151:CYRILLIC CAPITAL LETTER CHE
-	#x0428	;; 152:CYRILLIC CAPITAL LETTER SHA
-	#x0429	;; 153:CYRILLIC CAPITAL LETTER SHCHA
-	#x042A	;; 154:CYRILLIC CAPITAL LETTER HARD SIGN
-	#x042B	;; 155:CYRILLIC CAPITAL LETTER YERU
-	#x042C	;; 156:CYRILLIC CAPITAL LETTER SOFT SIGN
-	#x042D	;; 157:CYRILLIC CAPITAL LETTER E
-	#x042E	;; 158:CYRILLIC CAPITAL LETTER YU
-	#x042F	;; 159:CYRILLIC CAPITAL LETTER YA
-	#x2020	;; 160:DAGGER
-	#x00B0	;; 161:DEGREE SIGN
-	#x0490	;; 162:CYRILLIC CAPITAL LETTER GHE WITH UPTURN
-	#x00A3	;; 163:POUND SIGN
-	#x00A7	;; 164:SECTION SIGN
-	#x2022	;; 165:BULLET
-	#x00B6	;; 166:PILCROW SIGN
-	#x0406	;; 167:CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
-	#x00AE	;; 168:REGISTERED SIGN
-	#x00A9	;; 169:COPYRIGHT SIGN
-	#x2122	;; 170:TRADE MARK SIGN
-	#x0402	;; 171:CYRILLIC CAPITAL LETTER DJE
-	#x0452	;; 172:CYRILLIC SMALL LETTER DJE
-	#x2260	;; 173:NOT EQUAL TO
-	#x0403	;; 174:CYRILLIC CAPITAL LETTER GJE
-	#x0453	;; 175:CYRILLIC SMALL LETTER GJE
-	#x221E	;; 176:INFINITY
-	#x00B1	;; 177:PLUS-MINUS SIGN
-	#x2264	;; 178:LESS-THAN OR EQUAL TO
-	#x2265	;; 179:GREATER-THAN OR EQUAL TO
-	#x0456	;; 180:CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
-	#x00B5	;; 181:MICRO SIGN
-	#x0491	;; 182:CYRILLIC SMALL LETTER GHE WITH UPTURN
-	#x0408	;; 183:CYRILLIC CAPITAL LETTER JE
-	#x0404	;; 184:CYRILLIC CAPITAL LETTER UKRAINIAN IE
-	#x0454	;; 185:CYRILLIC SMALL LETTER UKRAINIAN IE
-	#x0407	;; 186:CYRILLIC CAPITAL LETTER YI
-	#x0457	;; 187:CYRILLIC SMALL LETTER YI
-	#x0409	;; 188:CYRILLIC CAPITAL LETTER LJE
-	#x0459	;; 189:CYRILLIC SMALL LETTER LJE
-	#x040A	;; 190:CYRILLIC CAPITAL LETTER NJE
-	#x045A	;; 191:CYRILLIC SMALL LETTER NJE
-	#x0458	;; 192:CYRILLIC SMALL LETTER JE
-	#x0405	;; 193:CYRILLIC CAPITAL LETTER DZE
-	#x00AC	;; 194:NOT SIGN
-	#x221A	;; 195:SQUARE ROOT
-	#x0192	;; 196:LATIN SMALL LETTER F WITH HOOK
-	#x2248	;; 197:ALMOST EQUAL TO
-	#x2206	;; 198:INCREMENT
-	#x00AB	;; 199:LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-	#x00BB	;; 200:RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-	#x2026	;; 201:HORIZONTAL ELLIPSIS
-	#x00A0	;; 202:NO-BREAK SPACE
-	#x040B	;; 203:CYRILLIC CAPITAL LETTER TSHE
-	#x045B	;; 204:CYRILLIC SMALL LETTER TSHE
-	#x040C	;; 205:CYRILLIC CAPITAL LETTER KJE
-	#x045C	;; 206:CYRILLIC SMALL LETTER KJE
-	#x0455	;; 207:CYRILLIC SMALL LETTER DZE
-	#x2013	;; 208:EN DASH
-	#x2014	;; 209:EM DASH
-	#x201C	;; 210:LEFT DOUBLE QUOTATION MARK
-	#x201D	;; 211:RIGHT DOUBLE QUOTATION MARK
-	#x2018	;; 212:LEFT SINGLE QUOTATION MARK
-	#x2019	;; 213:RIGHT SINGLE QUOTATION MARK
-	#x00F7	;; 214:DIVISION SIGN
-	#x201E	;; 215:DOUBLE LOW-9 QUOTATION MARK
-	#x040E	;; 216:CYRILLIC CAPITAL LETTER SHORT U
-	#x045E	;; 217:CYRILLIC SMALL LETTER SHORT U
-	#x040F	;; 218:CYRILLIC CAPITAL LETTER DZHE
-	#x045F	;; 219:CYRILLIC SMALL LETTER DZHE
-	#x2116	;; 220:NUMERO SIGN
-	#x0401	;; 221:CYRILLIC CAPITAL LETTER IO
-	#x0451	;; 222:CYRILLIC SMALL LETTER IO
-	#x044F	;; 223:CYRILLIC SMALL LETTER YA
-	#x0430	;; 224:CYRILLIC SMALL LETTER A
-	#x0431	;; 225:CYRILLIC SMALL LETTER BE
-	#x0432	;; 226:CYRILLIC SMALL LETTER VE
-	#x0433	;; 227:CYRILLIC SMALL LETTER GHE
-	#x0434	;; 228:CYRILLIC SMALL LETTER DE
-	#x0435	;; 229:CYRILLIC SMALL LETTER IE
-	#x0436	;; 230:CYRILLIC SMALL LETTER ZHE
-	#x0437	;; 231:CYRILLIC SMALL LETTER ZE
-	#x0438	;; 232:CYRILLIC SMALL LETTER I
-	#x0439	;; 233:CYRILLIC SMALL LETTER SHORT I
-	#x043A	;; 234:CYRILLIC SMALL LETTER KA
-	#x043B	;; 235:CYRILLIC SMALL LETTER EL
-	#x043C	;; 236:CYRILLIC SMALL LETTER EM
-	#x043D	;; 237:CYRILLIC SMALL LETTER EN
-	#x043E	;; 238:CYRILLIC SMALL LETTER O
-	#x043F	;; 239:CYRILLIC SMALL LETTER PE
-	#x0440	;; 240:CYRILLIC SMALL LETTER ER
-	#x0441	;; 241:CYRILLIC SMALL LETTER ES
-	#x0442	;; 242:CYRILLIC SMALL LETTER TE
-	#x0443	;; 243:CYRILLIC SMALL LETTER U
-	#x0444	;; 244:CYRILLIC SMALL LETTER EF
-	#x0445	;; 245:CYRILLIC SMALL LETTER HA
-	#x0446	;; 246:CYRILLIC SMALL LETTER TSE
-	#x0447	;; 247:CYRILLIC SMALL LETTER CHE
-	#x0448	;; 248:CYRILLIC SMALL LETTER SHA
-	#x0449	;; 249:CYRILLIC SMALL LETTER SHCHA
-	#x044A	;; 250:CYRILLIC SMALL LETTER HARD SIGN
-	#x044B	;; 251:CYRILLIC SMALL LETTER YERU
-	#x044C	;; 252:CYRILLIC SMALL LETTER SOFT SIGN
-	#x044D	;; 253:CYRILLIC SMALL LETTER E
-	#x044E	;; 254:CYRILLIC SMALL LETTER YU
-	#x20AC	;; 255:EURO SIGN
-	])
-     translation-table)
-  (while (< i 128)
-    (aset encoding-vector i i)
-    (setq i (1+ i)))
-  (while (< i 256)
-    (aset encoding-vector i
-	  (decode-char 'ucs (aref vec (- i 128))))
-    (setq i (1+ i)))
-  (setq translation-table
-	(make-translation-table-from-vector encoding-vector))
-;;  (define-translation-table 'mac-cyrillic-decoder translation-table)
-  (define-translation-table 'mac-cyrillic-encoder
-    (char-table-extra-slot translation-table 0)))
+(defvar x-display-name nil
+  "The display name specifying server and frame.")
+
+(defun x-handle-display (switch)
+  (setq x-display-name (car x-invocation-args)
+	x-invocation-args (cdr x-invocation-args)))
 
-(defvar mac-font-encoder-list
-  '(("mac-roman" mac-roman-encoder
-     ccl-encode-mac-roman-font "%s")
-    ("mac-centraleurroman" mac-centraleurroman-encoder
-     ccl-encode-mac-centraleurroman-font "%s ce")
-    ("mac-cyrillic" mac-cyrillic-encoder
-     ccl-encode-mac-cyrillic-font "%s cy")))
-
-(let ((encoder-list
-       (mapcar (lambda (lst) (nth 1 lst)) mac-font-encoder-list))
-      (charset-list
-       '(latin-iso8859-2
-	 latin-iso8859-3 latin-iso8859-4
-	 cyrillic-iso8859-5 greek-iso8859-7 hebrew-iso8859-8
-	 latin-iso8859-9 latin-iso8859-14 latin-iso8859-15)))
-  (dolist (encoder encoder-list)
-    (let ((table (get encoder 'translation-table)))
-      (dolist (charset charset-list)
-	(dotimes (i 96)
-	  (let* ((c (make-char charset (+ i 32)))
-		 (mu (aref ucs-mule-to-mule-unicode c))
-		 (mac-encoded (and mu (aref table mu))))
-	    (if mac-encoded
-		(aset table c mac-encoded))))))))
-
-(define-ccl-program ccl-encode-mac-centraleurroman-font
-  `(0
-    (if (r0 != ,(charset-id 'ascii))
-	(if (r0 <= ?\x8f)
-	    (translate-character mac-centraleurroman-encoder r0 r1)
-	  ((r1 <<= 7)
-	   (r1 |= r2)
-	   (translate-character mac-centraleurroman-encoder r0 r1)))))
-  "CCL program for Mac Central European Roman font")
-
-(define-ccl-program ccl-encode-mac-cyrillic-font
-  `(0
-    (if (r0 != ,(charset-id 'ascii))
-	(if (r0 <= ?\x8f)
-	    (translate-character mac-cyrillic-encoder r0 r1)
-	  ((r1 <<= 7)
-	   (r1 |= r2)
-	   (translate-character mac-cyrillic-encoder r0 r1)))))
-  "CCL program for Mac Cyrillic font")
-
-
-(setq font-ccl-encoder-alist
-      (nconc
-       (mapcar (lambda (lst) (cons (nth 0 lst) (nth 2 lst)))
-	       mac-font-encoder-list)
-       font-ccl-encoder-alist))
-
-(defun fontset-add-mac-fonts (fontset &optional base-family)
-  (if base-family
-      (setq base-family (downcase base-family))
-    (let ((ascii-font
-	   (downcase (x-resolve-font-name
-		      (fontset-font fontset (charset-id 'ascii))))))
-      (setq base-family (aref (x-decompose-font-name ascii-font)
-			      xlfd-regexp-family-subnum))))
-;;  (if (not (string-match "^fontset-" fontset))
-;;      (setq fontset
-;;	    (concat "fontset-" (aref (x-decompose-font-name fontset)
-;;				     xlfd-regexp-encoding-subnum))))
-  (dolist
-      (font-encoder
-       (nreverse
-	(mapcar (lambda (lst)
-		  (cons (cons (format (nth 3 lst) base-family) (nth 0 lst))
-			(nth 1 lst)))
-		mac-font-encoder-list)))
-    (let ((font (car font-encoder))
-	  (encoder (cdr font-encoder)))
-      (map-char-table
-       (lambda (key val)
-	 (or (null val)
-	     (generic-char-p key)
-	     (memq (char-charset key)
-		   '(ascii eight-bit-control eight-bit-graphic))
-	     (set-fontset-font fontset key font)))
-       (get encoder 'translation-table)))))
- 
-(defun create-fontset-from-mac-roman-font (font &optional resolved-font
-						fontset-name)
-  "Create a fontset from a Mac roman font FONT.
-
-Optional 1st arg RESOLVED-FONT is a resolved name of FONT.  If
-omitted, `x-resolve-font-name' is called to get the resolved name.  At
-this time, if FONT is not available, error is signaled.
-
-Optional 2nd arg FONTSET-NAME is a string to be used in
-`<CHARSET_ENCODING>' fields of a new fontset name.  If it is omitted,
-an appropriate name is generated automatically.
-
-It returns a name of the created fontset."
-  (let ((fontset
-	 (create-fontset-from-ascii-font font resolved-font fontset-name)))
-    (fontset-add-mac-fonts fontset)
-    fontset))
-
-;; Create a fontset that uses mac-roman font.  With this fontset,
-;; characters decoded from mac-roman encoding (ascii, latin-iso8859-1,
-;; and mule-unicode-xxxx-yyyy) are displayed by a mac-roman font.
-
-(if (fboundp 'new-fontset)
-    (progn
-      (require 'fontset)
-      (setup-default-fontset)
-      (create-fontset-from-fontset-spec
-       "-etl-fixed-medium-r-normal-*-16-*-*-*-*-*-fontset-mac,
-ascii:-*-Monaco-*-*-*-*-12-*-*-*-*-*-mac-roman")
-      (fontset-add-mac-fonts "fontset-mac")))
-
-(if (eq system-type 'darwin)
-    ;; On Darwin filenames are encoded in UTF-8
-    (setq file-name-coding-system 'utf-8)
-  ;; To display filenames in Chinese or Japanese, replace mac-roman with
-  ;; big5 or sjis
-  (setq file-name-coding-system 'mac-roman))
-
-;; If Emacs is started from the Finder, change the default directory
-;; to the user's home directory.
-(if (string= default-directory "/")
-    (cd "~"))
-
-;; Tell Emacs to use pipes instead of pty's for processes because the
-;; latter sometimes lose characters.  Pty support is compiled in since
-;; ange-ftp will not work without it.
-(setq process-connection-type nil)
-
-;; Assume that fonts are always scalable on the Mac.  This sometimes
-;; results in characters with jagged edges.  However, without it,
-;; fonts with both truetype and bitmap representations but no italic
-;; or bold bitmap versions will not display these variants correctly.
-(setq scalable-fonts-allowed t)
-
-;; Make suspend-emacs [C-z] collapse the current frame
-(substitute-key-definition 'suspend-emacs 'iconify-frame
-			   global-map)
-
-;; Support mouse-wheel scrolling
-(mouse-wheel-mode 1)
-
-;; (prefer-coding-system 'mac-roman)
-
-;; Map certain keypad keys into ASCII characters that people usually expect
-(define-key function-key-map [return] [?\C-m])
-(define-key function-key-map [M-return] [?\M-\C-m])
-(define-key function-key-map [tab] [?\t])
-(define-key function-key-map [M-tab] [?\M-\t])
-(define-key function-key-map [backspace] [127])
-(define-key function-key-map [M-backspace] [?\M-\d])
-(define-key function-key-map [escape] [?\e])
-(define-key function-key-map [M-escape] [?\M-\e])
-
-;; Tell read-char how to convert special chars to ASCII
-(put 'return 'ascii-character 13)
-(put 'tab 'ascii-character ?\t)
-(put 'backspace 'ascii-character 127)
-(put 'escape 'ascii-character ?\e)
-
+(defun x-handle-args (args)
+  "Process the X-related command line options in ARGS.
+This is done before the user's startup file is loaded.  They are copied to
+`x-invocation-args', from which the X-related things are extracted, first
+the switch (e.g., \"-fg\") in the following code, and possible values
+\(e.g., \"black\") in the option handler code (e.g., x-handle-switch).
+This function returns ARGS minus the arguments that have been processed."
+  ;; We use ARGS to accumulate the args that we don't handle here, to return.
+  (setq x-invocation-args args
+	args nil)
+  (while (and x-invocation-args
+	      (not (equal (car x-invocation-args) "--")))
+    (let* ((this-switch (car x-invocation-args))
+	   (orig-this-switch this-switch)
+	   completion argval aelt handler)
+      (setq x-invocation-args (cdr x-invocation-args))
+      ;; Check for long options with attached arguments
+      ;; and separate out the attached option argument into argval.
+      (if (string-match "^--[^=]*=" this-switch)
+	  (setq argval (substring this-switch (match-end 0))
+		this-switch (substring this-switch 0 (1- (match-end 0)))))
+      ;; Complete names of long options.
+      (if (string-match "^--" this-switch)
+	  (progn
+	    (setq completion (try-completion this-switch command-line-x-option-alist))
+	    (if (eq completion t)
+		;; Exact match for long option.
+		nil
+	      (if (stringp completion)
+		  (let ((elt (assoc completion command-line-x-option-alist)))
+		    ;; Check for abbreviated long option.
+		    (or elt
+			(error "Option `%s' is ambiguous" this-switch))
+		    (setq this-switch completion))))))
+      (setq aelt (assoc this-switch command-line-x-option-alist))
+      (if aelt (setq handler (nth 2 aelt)))
+      (if handler
+	  (if argval
+	      (let ((x-invocation-args
+		     (cons argval x-invocation-args)))
+		(funcall handler this-switch))
+	    (funcall handler this-switch))
+	(setq args (cons orig-this-switch args)))))
+  (nconc (nreverse args) x-invocation-args))
+
 ;;
 ;; Available colors
 ;;
@@ -1407,8 +986,723 @@
 		   "GhostWhite"
 		   "ghost white"
 		   "snow")
- "The list of X colors from the `rgb.txt' file.
+  "The list of X colors from the `rgb.txt' file.
 XConsortium: rgb.txt,v 10.41 94/02/20 18:39:36 rws Exp")
 
+(defun xw-defined-colors (&optional frame)
+  "Internal function called by `defined-colors', which see."
+  (or frame (setq frame (selected-frame)))
+  (let ((all-colors x-colors)
+	(this-color nil)
+	(defined-colors nil))
+    (while all-colors
+      (setq this-color (car all-colors)
+	    all-colors (cdr all-colors))
+      (and (color-supported-p this-color frame t)
+	   (setq defined-colors (cons this-color defined-colors))))
+    defined-colors))
+
+;;;; Function keys
+
+(substitute-key-definition 'suspend-emacs 'iconify-or-deiconify-frame
+			   global-map)
+
+;; Map certain keypad keys into ASCII characters
+;; that people usually expect.
+(define-key function-key-map [return] [?\C-m])
+(define-key function-key-map [M-return] [?\M-\C-m])
+(define-key function-key-map [tab] [?\t])
+(define-key function-key-map [M-tab] [?\M-\t])
+(define-key function-key-map [backspace] [127])
+(define-key function-key-map [M-backspace] [?\M-\d])
+(define-key function-key-map [escape] [?\e])
+(define-key function-key-map [M-escape] [?\M-\e])
+
+;; These tell read-char how to convert
+;; these special chars to ASCII.
+(put 'return 'ascii-character 13)
+(put 'tab 'ascii-character ?\t)
+(put 'backspace 'ascii-character 127)
+(put 'escape 'ascii-character ?\e)
+
+
+;;;; Keysyms
+
+;; Define constant values to be set to mac-keyboard-text-encoding
+(defconst kTextEncodingMacRoman 0)
+(defconst kTextEncodingISOLatin1 513 "0x201")
+(defconst kTextEncodingISOLatin2 514 "0x202")
+
+
+;;;; Selections and cut buffers
+
+;; Setup to use the Mac clipboard.  The functions mac-cut-function and
+;; mac-paste-function are defined in mac.c.
+(set-selection-coding-system 'compound-text-mac)
+
+(setq interprogram-cut-function
+      '(lambda (str push)
+	 (mac-cut-function
+	  (encode-coding-string str selection-coding-system t) push)))
+
+(setq interprogram-paste-function
+      '(lambda ()
+	 (let ((clipboard (mac-paste-function)))
+	   (if clipboard
+	       (decode-coding-string clipboard selection-coding-system t)))))
+
+
+;;; Do the actual Windows setup here; the above code just defines
+;;; functions and variables that we use now.
+
+(setq command-line-args (x-handle-args command-line-args))
+
+;;; Make sure we have a valid resource name.
+(or (stringp x-resource-name)
+    (let (i)
+      (setq x-resource-name (invocation-name))
+
+      ;; Change any . or * characters in x-resource-name to hyphens,
+      ;; so as not to choke when we use it in X resource queries.
+      (while (setq i (string-match "[.*]" x-resource-name))
+	(aset x-resource-name i ?-))))
+
+(if (x-display-list)
+    ;; On Mac OS 8/9, Most coding systems used in code conversion for
+    ;; font names are not ready at the time when the terminal frame is
+    ;; created.  So we reconstruct font name table for the initial
+    ;; frame.
+    (mac-clear-font-name-table)
+  (x-open-connection "Mac"
+		     x-command-line-resources
+		     ;; Exit Emacs with fatal error if this fails.
+		     t))
+
+(setq frame-creation-function 'x-create-frame-with-faces)
+
+(define-ccl-program ccl-encode-mac-roman-font
+  `(0
+    (if (r0 != ,(charset-id 'ascii))
+	(if (r0 <= ?\x8f)
+	    (translate-character mac-roman-encoder r0 r1)
+	  ((r1 <<= 7)
+	   (r1 |= r2)
+	   (translate-character mac-roman-encoder r0 r1)))))
+  "CCL program for Mac Roman font")
+
+(let
+    ((encoding-vector (make-vector 256 nil))
+     (i 0)
+     (vec	;; mac-centraleurroman (128..255) -> UCS mapping
+      [	#x00C4	;; 128:LATIN CAPITAL LETTER A WITH DIAERESIS
+	#x0100	;; 129:LATIN CAPITAL LETTER A WITH MACRON
+	#x0101	;; 130:LATIN SMALL LETTER A WITH MACRON
+	#x00C9	;; 131:LATIN CAPITAL LETTER E WITH ACUTE
+	#x0104	;; 132:LATIN CAPITAL LETTER A WITH OGONEK
+	#x00D6	;; 133:LATIN CAPITAL LETTER O WITH DIAERESIS
+	#x00DC	;; 134:LATIN CAPITAL LETTER U WITH DIAERESIS
+	#x00E1	;; 135:LATIN SMALL LETTER A WITH ACUTE
+	#x0105	;; 136:LATIN SMALL LETTER A WITH OGONEK
+	#x010C	;; 137:LATIN CAPITAL LETTER C WITH CARON
+	#x00E4	;; 138:LATIN SMALL LETTER A WITH DIAERESIS
+	#x010D	;; 139:LATIN SMALL LETTER C WITH CARON
+	#x0106	;; 140:LATIN CAPITAL LETTER C WITH ACUTE
+	#x0107	;; 141:LATIN SMALL LETTER C WITH ACUTE
+	#x00E9	;; 142:LATIN SMALL LETTER E WITH ACUTE
+	#x0179	;; 143:LATIN CAPITAL LETTER Z WITH ACUTE
+	#x017A	;; 144:LATIN SMALL LETTER Z WITH ACUTE
+	#x010E	;; 145:LATIN CAPITAL LETTER D WITH CARON
+	#x00ED	;; 146:LATIN SMALL LETTER I WITH ACUTE
+	#x010F	;; 147:LATIN SMALL LETTER D WITH CARON
+	#x0112	;; 148:LATIN CAPITAL LETTER E WITH MACRON
+	#x0113	;; 149:LATIN SMALL LETTER E WITH MACRON
+	#x0116	;; 150:LATIN CAPITAL LETTER E WITH DOT ABOVE
+	#x00F3	;; 151:LATIN SMALL LETTER O WITH ACUTE
+	#x0117	;; 152:LATIN SMALL LETTER E WITH DOT ABOVE
+	#x00F4	;; 153:LATIN SMALL LETTER O WITH CIRCUMFLEX
+	#x00F6	;; 154:LATIN SMALL LETTER O WITH DIAERESIS
+	#x00F5	;; 155:LATIN SMALL LETTER O WITH TILDE
+	#x00FA	;; 156:LATIN SMALL LETTER U WITH ACUTE
+	#x011A	;; 157:LATIN CAPITAL LETTER E WITH CARON
+	#x011B	;; 158:LATIN SMALL LETTER E WITH CARON
+	#x00FC	;; 159:LATIN SMALL LETTER U WITH DIAERESIS
+	#x2020	;; 160:DAGGER
+	#x00B0	;; 161:DEGREE SIGN
+	#x0118	;; 162:LATIN CAPITAL LETTER E WITH OGONEK
+	#x00A3	;; 163:POUND SIGN
+	#x00A7	;; 164:SECTION SIGN
+	#x2022	;; 165:BULLET
+	#x00B6	;; 166:PILCROW SIGN
+	#x00DF	;; 167:LATIN SMALL LETTER SHARP S
+	#x00AE	;; 168:REGISTERED SIGN
+	#x00A9	;; 169:COPYRIGHT SIGN
+	#x2122	;; 170:TRADE MARK SIGN
+	#x0119	;; 171:LATIN SMALL LETTER E WITH OGONEK
+	#x00A8	;; 172:DIAERESIS
+	#x2260	;; 173:NOT EQUAL TO
+	#x0123	;; 174:LATIN SMALL LETTER G WITH CEDILLA
+	#x012E	;; 175:LATIN CAPITAL LETTER I WITH OGONEK
+	#x012F	;; 176:LATIN SMALL LETTER I WITH OGONEK
+	#x012A	;; 177:LATIN CAPITAL LETTER I WITH MACRON
+	#x2264	;; 178:LESS-THAN OR EQUAL TO
+	#x2265	;; 179:GREATER-THAN OR EQUAL TO
+	#x012B	;; 180:LATIN SMALL LETTER I WITH MACRON
+	#x0136	;; 181:LATIN CAPITAL LETTER K WITH CEDILLA
+	#x2202	;; 182:PARTIAL DIFFERENTIAL
+	#x2211	;; 183:N-ARY SUMMATION
+	#x0142	;; 184:LATIN SMALL LETTER L WITH STROKE
+	#x013B	;; 185:LATIN CAPITAL LETTER L WITH CEDILLA
+	#x013C	;; 186:LATIN SMALL LETTER L WITH CEDILLA
+	#x013D	;; 187:LATIN CAPITAL LETTER L WITH CARON
+	#x013E	;; 188:LATIN SMALL LETTER L WITH CARON
+	#x0139	;; 189:LATIN CAPITAL LETTER L WITH ACUTE
+	#x013A	;; 190:LATIN SMALL LETTER L WITH ACUTE
+	#x0145	;; 191:LATIN CAPITAL LETTER N WITH CEDILLA
+	#x0146	;; 192:LATIN SMALL LETTER N WITH CEDILLA
+	#x0143	;; 193:LATIN CAPITAL LETTER N WITH ACUTE
+	#x00AC	;; 194:NOT SIGN
+	#x221A	;; 195:SQUARE ROOT
+	#x0144	;; 196:LATIN SMALL LETTER N WITH ACUTE
+	#x0147	;; 197:LATIN CAPITAL LETTER N WITH CARON
+	#x2206	;; 198:INCREMENT
+	#x00AB	;; 199:LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+	#x00BB	;; 200:RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+	#x2026	;; 201:HORIZONTAL ELLIPSIS
+	#x00A0	;; 202:NO-BREAK SPACE
+	#x0148	;; 203:LATIN SMALL LETTER N WITH CARON
+	#x0150	;; 204:LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+	#x00D5	;; 205:LATIN CAPITAL LETTER O WITH TILDE
+	#x0151	;; 206:LATIN SMALL LETTER O WITH DOUBLE ACUTE
+	#x014C	;; 207:LATIN CAPITAL LETTER O WITH MACRON
+	#x2013	;; 208:EN DASH
+	#x2014	;; 209:EM DASH
+	#x201C	;; 210:LEFT DOUBLE QUOTATION MARK
+	#x201D	;; 211:RIGHT DOUBLE QUOTATION MARK
+	#x2018	;; 212:LEFT SINGLE QUOTATION MARK
+	#x2019	;; 213:RIGHT SINGLE QUOTATION MARK
+	#x00F7	;; 214:DIVISION SIGN
+	#x25CA	;; 215:LOZENGE
+	#x014D	;; 216:LATIN SMALL LETTER O WITH MACRON
+	#x0154	;; 217:LATIN CAPITAL LETTER R WITH ACUTE
+	#x0155	;; 218:LATIN SMALL LETTER R WITH ACUTE
+	#x0158	;; 219:LATIN CAPITAL LETTER R WITH CARON
+	#x2039	;; 220:SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+	#x203A	;; 221:SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+	#x0159	;; 222:LATIN SMALL LETTER R WITH CARON
+	#x0156	;; 223:LATIN CAPITAL LETTER R WITH CEDILLA
+	#x0157	;; 224:LATIN SMALL LETTER R WITH CEDILLA
+	#x0160	;; 225:LATIN CAPITAL LETTER S WITH CARON
+	#x201A	;; 226:SINGLE LOW-9 QUOTATION MARK
+	#x201E	;; 227:DOUBLE LOW-9 QUOTATION MARK
+	#x0161	;; 228:LATIN SMALL LETTER S WITH CARON
+	#x015A	;; 229:LATIN CAPITAL LETTER S WITH ACUTE
+	#x015B	;; 230:LATIN SMALL LETTER S WITH ACUTE
+	#x00C1	;; 231:LATIN CAPITAL LETTER A WITH ACUTE
+	#x0164	;; 232:LATIN CAPITAL LETTER T WITH CARON
+	#x0165	;; 233:LATIN SMALL LETTER T WITH CARON
+	#x00CD	;; 234:LATIN CAPITAL LETTER I WITH ACUTE
+	#x017D	;; 235:LATIN CAPITAL LETTER Z WITH CARON
+	#x017E	;; 236:LATIN SMALL LETTER Z WITH CARON
+	#x016A	;; 237:LATIN CAPITAL LETTER U WITH MACRON
+	#x00D3	;; 238:LATIN CAPITAL LETTER O WITH ACUTE
+	#x00D4	;; 239:LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+	#x016B	;; 240:LATIN SMALL LETTER U WITH MACRON
+	#x016E	;; 241:LATIN CAPITAL LETTER U WITH RING ABOVE
+	#x00DA	;; 242:LATIN CAPITAL LETTER U WITH ACUTE
+	#x016F	;; 243:LATIN SMALL LETTER U WITH RING ABOVE
+	#x0170	;; 244:LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+	#x0171	;; 245:LATIN SMALL LETTER U WITH DOUBLE ACUTE
+	#x0172	;; 246:LATIN CAPITAL LETTER U WITH OGONEK
+	#x0173	;; 247:LATIN SMALL LETTER U WITH OGONEK
+	#x00DD	;; 248:LATIN CAPITAL LETTER Y WITH ACUTE
+	#x00FD	;; 249:LATIN SMALL LETTER Y WITH ACUTE
+	#x0137	;; 250:LATIN SMALL LETTER K WITH CEDILLA
+	#x017B	;; 251:LATIN CAPITAL LETTER Z WITH DOT ABOVE
+	#x0141	;; 252:LATIN CAPITAL LETTER L WITH STROKE
+	#x017C	;; 253:LATIN SMALL LETTER Z WITH DOT ABOVE
+	#x0122	;; 254:LATIN CAPITAL LETTER G WITH CEDILLA
+	#x02C7	;; 255:CARON
+	])
+     translation-table)
+  (while (< i 128)
+    (aset encoding-vector i i)
+    (setq i (1+ i)))
+  (while (< i 256)
+    (aset encoding-vector i
+	  (decode-char 'ucs (aref vec (- i 128))))
+    (setq i (1+ i)))
+  (setq translation-table
+	(make-translation-table-from-vector encoding-vector))
+;;  (define-translation-table 'mac-centraleurroman-decoder translation-table)
+  (define-translation-table 'mac-centraleurroman-encoder
+    (char-table-extra-slot translation-table 0)))
+
+(let
+    ((encoding-vector (make-vector 256 nil))
+     (i 0)
+     (vec	;; mac-cyrillic (128..255) -> UCS mapping
+      [	#x0410	;; 128:CYRILLIC CAPITAL LETTER A
+	#x0411	;; 129:CYRILLIC CAPITAL LETTER BE
+	#x0412	;; 130:CYRILLIC CAPITAL LETTER VE
+	#x0413	;; 131:CYRILLIC CAPITAL LETTER GHE
+	#x0414	;; 132:CYRILLIC CAPITAL LETTER DE
+	#x0415	;; 133:CYRILLIC CAPITAL LETTER IE
+	#x0416	;; 134:CYRILLIC CAPITAL LETTER ZHE
+	#x0417	;; 135:CYRILLIC CAPITAL LETTER ZE
+	#x0418	;; 136:CYRILLIC CAPITAL LETTER I
+	#x0419	;; 137:CYRILLIC CAPITAL LETTER SHORT I
+	#x041A	;; 138:CYRILLIC CAPITAL LETTER KA
+	#x041B	;; 139:CYRILLIC CAPITAL LETTER EL
+	#x041C	;; 140:CYRILLIC CAPITAL LETTER EM
+	#x041D	;; 141:CYRILLIC CAPITAL LETTER EN
+	#x041E	;; 142:CYRILLIC CAPITAL LETTER O
+	#x041F	;; 143:CYRILLIC CAPITAL LETTER PE
+	#x0420	;; 144:CYRILLIC CAPITAL LETTER ER
+	#x0421	;; 145:CYRILLIC CAPITAL LETTER ES
+	#x0422	;; 146:CYRILLIC CAPITAL LETTER TE
+	#x0423	;; 147:CYRILLIC CAPITAL LETTER U
+	#x0424	;; 148:CYRILLIC CAPITAL LETTER EF
+	#x0425	;; 149:CYRILLIC CAPITAL LETTER HA
+	#x0426	;; 150:CYRILLIC CAPITAL LETTER TSE
+	#x0427	;; 151:CYRILLIC CAPITAL LETTER CHE
+	#x0428	;; 152:CYRILLIC CAPITAL LETTER SHA
+	#x0429	;; 153:CYRILLIC CAPITAL LETTER SHCHA
+	#x042A	;; 154:CYRILLIC CAPITAL LETTER HARD SIGN
+	#x042B	;; 155:CYRILLIC CAPITAL LETTER YERU
+	#x042C	;; 156:CYRILLIC CAPITAL LETTER SOFT SIGN
+	#x042D	;; 157:CYRILLIC CAPITAL LETTER E
+	#x042E	;; 158:CYRILLIC CAPITAL LETTER YU
+	#x042F	;; 159:CYRILLIC CAPITAL LETTER YA
+	#x2020	;; 160:DAGGER
+	#x00B0	;; 161:DEGREE SIGN
+	#x0490	;; 162:CYRILLIC CAPITAL LETTER GHE WITH UPTURN
+	#x00A3	;; 163:POUND SIGN
+	#x00A7	;; 164:SECTION SIGN
+	#x2022	;; 165:BULLET
+	#x00B6	;; 166:PILCROW SIGN
+	#x0406	;; 167:CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+	#x00AE	;; 168:REGISTERED SIGN
+	#x00A9	;; 169:COPYRIGHT SIGN
+	#x2122	;; 170:TRADE MARK SIGN
+	#x0402	;; 171:CYRILLIC CAPITAL LETTER DJE
+	#x0452	;; 172:CYRILLIC SMALL LETTER DJE
+	#x2260	;; 173:NOT EQUAL TO
+	#x0403	;; 174:CYRILLIC CAPITAL LETTER GJE
+	#x0453	;; 175:CYRILLIC SMALL LETTER GJE
+	#x221E	;; 176:INFINITY
+	#x00B1	;; 177:PLUS-MINUS SIGN
+	#x2264	;; 178:LESS-THAN OR EQUAL TO
+	#x2265	;; 179:GREATER-THAN OR EQUAL TO
+	#x0456	;; 180:CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+	#x00B5	;; 181:MICRO SIGN
+	#x0491	;; 182:CYRILLIC SMALL LETTER GHE WITH UPTURN
+	#x0408	;; 183:CYRILLIC CAPITAL LETTER JE
+	#x0404	;; 184:CYRILLIC CAPITAL LETTER UKRAINIAN IE
+	#x0454	;; 185:CYRILLIC SMALL LETTER UKRAINIAN IE
+	#x0407	;; 186:CYRILLIC CAPITAL LETTER YI
+	#x0457	;; 187:CYRILLIC SMALL LETTER YI
+	#x0409	;; 188:CYRILLIC CAPITAL LETTER LJE
+	#x0459	;; 189:CYRILLIC SMALL LETTER LJE
+	#x040A	;; 190:CYRILLIC CAPITAL LETTER NJE
+	#x045A	;; 191:CYRILLIC SMALL LETTER NJE
+	#x0458	;; 192:CYRILLIC SMALL LETTER JE
+	#x0405	;; 193:CYRILLIC CAPITAL LETTER DZE
+	#x00AC	;; 194:NOT SIGN
+	#x221A	;; 195:SQUARE ROOT
+	#x0192	;; 196:LATIN SMALL LETTER F WITH HOOK
+	#x2248	;; 197:ALMOST EQUAL TO
+	#x2206	;; 198:INCREMENT
+	#x00AB	;; 199:LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+	#x00BB	;; 200:RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+	#x2026	;; 201:HORIZONTAL ELLIPSIS
+	#x00A0	;; 202:NO-BREAK SPACE
+	#x040B	;; 203:CYRILLIC CAPITAL LETTER TSHE
+	#x045B	;; 204:CYRILLIC SMALL LETTER TSHE
+	#x040C	;; 205:CYRILLIC CAPITAL LETTER KJE
+	#x045C	;; 206:CYRILLIC SMALL LETTER KJE
+	#x0455	;; 207:CYRILLIC SMALL LETTER DZE
+	#x2013	;; 208:EN DASH
+	#x2014	;; 209:EM DASH
+	#x201C	;; 210:LEFT DOUBLE QUOTATION MARK
+	#x201D	;; 211:RIGHT DOUBLE QUOTATION MARK
+	#x2018	;; 212:LEFT SINGLE QUOTATION MARK
+	#x2019	;; 213:RIGHT SINGLE QUOTATION MARK
+	#x00F7	;; 214:DIVISION SIGN
+	#x201E	;; 215:DOUBLE LOW-9 QUOTATION MARK
+	#x040E	;; 216:CYRILLIC CAPITAL LETTER SHORT U
+	#x045E	;; 217:CYRILLIC SMALL LETTER SHORT U
+	#x040F	;; 218:CYRILLIC CAPITAL LETTER DZHE
+	#x045F	;; 219:CYRILLIC SMALL LETTER DZHE
+	#x2116	;; 220:NUMERO SIGN
+	#x0401	;; 221:CYRILLIC CAPITAL LETTER IO
+	#x0451	;; 222:CYRILLIC SMALL LETTER IO
+	#x044F	;; 223:CYRILLIC SMALL LETTER YA
+	#x0430	;; 224:CYRILLIC SMALL LETTER A
+	#x0431	;; 225:CYRILLIC SMALL LETTER BE
+	#x0432	;; 226:CYRILLIC SMALL LETTER VE
+	#x0433	;; 227:CYRILLIC SMALL LETTER GHE
+	#x0434	;; 228:CYRILLIC SMALL LETTER DE
+	#x0435	;; 229:CYRILLIC SMALL LETTER IE
+	#x0436	;; 230:CYRILLIC SMALL LETTER ZHE
+	#x0437	;; 231:CYRILLIC SMALL LETTER ZE
+	#x0438	;; 232:CYRILLIC SMALL LETTER I
+	#x0439	;; 233:CYRILLIC SMALL LETTER SHORT I
+	#x043A	;; 234:CYRILLIC SMALL LETTER KA
+	#x043B	;; 235:CYRILLIC SMALL LETTER EL
+	#x043C	;; 236:CYRILLIC SMALL LETTER EM
+	#x043D	;; 237:CYRILLIC SMALL LETTER EN
+	#x043E	;; 238:CYRILLIC SMALL LETTER O
+	#x043F	;; 239:CYRILLIC SMALL LETTER PE
+	#x0440	;; 240:CYRILLIC SMALL LETTER ER
+	#x0441	;; 241:CYRILLIC SMALL LETTER ES
+	#x0442	;; 242:CYRILLIC SMALL LETTER TE
+	#x0443	;; 243:CYRILLIC SMALL LETTER U
+	#x0444	;; 244:CYRILLIC SMALL LETTER EF
+	#x0445	;; 245:CYRILLIC SMALL LETTER HA
+	#x0446	;; 246:CYRILLIC SMALL LETTER TSE
+	#x0447	;; 247:CYRILLIC SMALL LETTER CHE
+	#x0448	;; 248:CYRILLIC SMALL LETTER SHA
+	#x0449	;; 249:CYRILLIC SMALL LETTER SHCHA
+	#x044A	;; 250:CYRILLIC SMALL LETTER HARD SIGN
+	#x044B	;; 251:CYRILLIC SMALL LETTER YERU
+	#x044C	;; 252:CYRILLIC SMALL LETTER SOFT SIGN
+	#x044D	;; 253:CYRILLIC SMALL LETTER E
+	#x044E	;; 254:CYRILLIC SMALL LETTER YU
+	#x20AC	;; 255:EURO SIGN
+	])
+     translation-table)
+  (while (< i 128)
+    (aset encoding-vector i i)
+    (setq i (1+ i)))
+  (while (< i 256)
+    (aset encoding-vector i
+	  (decode-char 'ucs (aref vec (- i 128))))
+    (setq i (1+ i)))
+  (setq translation-table
+	(make-translation-table-from-vector encoding-vector))
+;;  (define-translation-table 'mac-cyrillic-decoder translation-table)
+  (define-translation-table 'mac-cyrillic-encoder
+    (char-table-extra-slot translation-table 0)))
+
+(defvar mac-font-encoder-list
+  '(("mac-roman" mac-roman-encoder
+     ccl-encode-mac-roman-font "%s")
+    ("mac-centraleurroman" mac-centraleurroman-encoder
+     ccl-encode-mac-centraleurroman-font "%s ce")
+    ("mac-cyrillic" mac-cyrillic-encoder
+     ccl-encode-mac-cyrillic-font "%s cy")))
+
+(let ((encoder-list
+       (mapcar (lambda (lst) (nth 1 lst)) mac-font-encoder-list))
+      (charset-list
+       '(latin-iso8859-2
+	 latin-iso8859-3 latin-iso8859-4
+	 cyrillic-iso8859-5 greek-iso8859-7 hebrew-iso8859-8
+	 latin-iso8859-9 latin-iso8859-14 latin-iso8859-15)))
+  (dolist (encoder encoder-list)
+    (let ((table (get encoder 'translation-table)))
+      (dolist (charset charset-list)
+	(dotimes (i 96)
+	  (let* ((c (make-char charset (+ i 32)))
+		 (mu (aref ucs-mule-to-mule-unicode c))
+		 (mac-encoded (and mu (aref table mu))))
+	    (if mac-encoded
+		(aset table c mac-encoded))))))))
+
+(define-ccl-program ccl-encode-mac-centraleurroman-font
+  `(0
+    (if (r0 != ,(charset-id 'ascii))
+	(if (r0 <= ?\x8f)
+	    (translate-character mac-centraleurroman-encoder r0 r1)
+	  ((r1 <<= 7)
+	   (r1 |= r2)
+	   (translate-character mac-centraleurroman-encoder r0 r1)))))
+  "CCL program for Mac Central European Roman font")
+
+(define-ccl-program ccl-encode-mac-cyrillic-font
+  `(0
+    (if (r0 != ,(charset-id 'ascii))
+	(if (r0 <= ?\x8f)
+	    (translate-character mac-cyrillic-encoder r0 r1)
+	  ((r1 <<= 7)
+	   (r1 |= r2)
+	   (translate-character mac-cyrillic-encoder r0 r1)))))
+  "CCL program for Mac Cyrillic font")
+
+
+(setq font-ccl-encoder-alist
+      (nconc
+       (mapcar (lambda (lst) (cons (nth 0 lst) (nth 2 lst)))
+	       mac-font-encoder-list)
+       font-ccl-encoder-alist))
+
+(defun fontset-add-mac-fonts (fontset &optional base-family)
+  (if base-family
+      (setq base-family (downcase base-family))
+    (let ((ascii-font
+	   (downcase (x-resolve-font-name
+		      (fontset-font fontset (charset-id 'ascii))))))
+      (setq base-family (aref (x-decompose-font-name ascii-font)
+			      xlfd-regexp-family-subnum))))
+;;  (if (not (string-match "^fontset-" fontset))
+;;      (setq fontset
+;;	    (concat "fontset-" (aref (x-decompose-font-name fontset)
+;;				     xlfd-regexp-encoding-subnum))))
+  (dolist
+      (font-encoder
+       (nreverse
+	(mapcar (lambda (lst)
+		  (cons (cons (format (nth 3 lst) base-family) (nth 0 lst))
+			(nth 1 lst)))
+		mac-font-encoder-list)))
+    (let ((font (car font-encoder))
+	  (encoder (cdr font-encoder)))
+      (map-char-table
+       (lambda (key val)
+	 (or (null val)
+	     (generic-char-p key)
+	     (memq (char-charset key)
+		   '(ascii eight-bit-control eight-bit-graphic))
+	     (set-fontset-font fontset key font)))
+       (get encoder 'translation-table)))))
+ 
+(defun create-fontset-from-mac-roman-font (font &optional resolved-font
+						fontset-name)
+  "Create a fontset from a Mac roman font FONT.
+
+Optional 1st arg RESOLVED-FONT is a resolved name of FONT.  If
+omitted, `x-resolve-font-name' is called to get the resolved name.  At
+this time, if FONT is not available, error is signaled.
+
+Optional 2nd arg FONTSET-NAME is a string to be used in
+`<CHARSET_ENCODING>' fields of a new fontset name.  If it is omitted,
+an appropriate name is generated automatically.
+
+It returns a name of the created fontset."
+  (let ((fontset
+	 (create-fontset-from-ascii-font font resolved-font fontset-name)))
+    (fontset-add-mac-fonts fontset)
+    fontset))
+
+;; Setup the default fontset.
+(setup-default-fontset)
+
+;; Create a fontset that uses mac-roman font.  With this fontset,
+;; characters decoded from mac-roman encoding (ascii, latin-iso8859-1,
+;; and mule-unicode-xxxx-yyyy) are displayed by a mac-roman font.
+(create-fontset-from-fontset-spec
+ "-etl-fixed-medium-r-normal-*-16-*-*-*-*-*-fontset-mac,
+ascii:-*-Monaco-*-*-*-*-12-*-*-*-*-*-mac-roman")
+(fontset-add-mac-fonts "fontset-mac")
+
+;; Create fontset specified in X resources "Fontset-N" (N is 0, 1, ...).
+(create-fontset-from-x-resource)
+
+;; Try to create a fontset from a font specification which comes
+;; from initial-frame-alist, default-frame-alist, or X resource.
+;; A font specification in command line argument (i.e. -fn XXXX)
+;; should be already in default-frame-alist as a `font'
+;; parameter.  However, any font specifications in site-start
+;; library, user's init file (.emacs), and default.el are not
+;; yet handled here.
+
+(let ((font (or (cdr (assq 'font initial-frame-alist))
+		(cdr (assq 'font default-frame-alist))
+		(x-get-resource "font" "Font")))
+      xlfd-fields resolved-name)
+  (if (and font
+	   (not (query-fontset font))
+	   (setq resolved-name (x-resolve-font-name font))
+	   (setq xlfd-fields (x-decompose-font-name font)))
+      (if (string= "fontset" (aref xlfd-fields xlfd-regexp-registry-subnum))
+	  (new-fontset font (x-complement-fontset-spec xlfd-fields nil))
+	;; Create a fontset from FONT.  The fontset name is
+	;; generated from FONT.
+	(create-fontset-from-ascii-font font resolved-name "startup"))))
+
+;; Apply a geometry resource to the initial frame.  Put it at the end
+;; of the alist, so that anything specified on the command line takes
+;; precedence.
+(let* ((res-geometry (x-get-resource "geometry" "Geometry"))
+       parsed)
+  (if res-geometry
+      (progn
+	(setq parsed (x-parse-geometry res-geometry))
+	;; If the resource specifies a position,
+	;; call the position and size "user-specified".
+	(if (or (assq 'top parsed) (assq 'left parsed))
+	    (setq parsed (cons '(user-position . t)
+			       (cons '(user-size . t) parsed))))
+	;; All geometry parms apply to the initial frame.
+	(setq initial-frame-alist (append initial-frame-alist parsed))
+	;; The size parms apply to all frames.
+	(if (assq 'height parsed)
+	    (setq default-frame-alist
+		  (cons (cons 'height (cdr (assq 'height parsed)))
+			default-frame-alist)))
+	(if (assq 'width parsed)
+	    (setq default-frame-alist
+		  (cons (cons 'width (cdr (assq 'width parsed)))
+			default-frame-alist))))))
+
+;; Check the reverseVideo resource.
+(let ((case-fold-search t))
+  (let ((rv (x-get-resource "reverseVideo" "ReverseVideo")))
+    (if (and rv
+	     (string-match "^\\(true\\|yes\\|on\\)$" rv))
+	(setq default-frame-alist
+	      (cons '(reverse . t) default-frame-alist)))))
+
+(defun x-win-suspend-error ()
+  (error "Suspending an Emacs running under Mac makes no sense"))
+(add-hook 'suspend-hook 'x-win-suspend-error)
+
+;; Don't show the frame name; that's redundant.
+(setq-default mode-line-frame-identification "  ")
+
+;; Turn on support for mouse wheels.
+(mouse-wheel-mode 1)
+
+(defun mac-drag-n-drop (event)
+  "Edit the files listed in the drag-n-drop event.\n\
+Switch to a buffer editing the last file dropped."
+  (interactive "e")
+  (save-excursion
+    ;; Make sure the drop target has positive co-ords
+    ;; before setting the selected frame - otherwise it
+    ;; won't work.  <skx@tardis.ed.ac.uk>
+    (let* ((window (posn-window (event-start event)))
+	   (coords (posn-x-y (event-start event)))
+	   (x (car coords))
+	   (y (cdr coords)))
+      (if (and (> x 0) (> y 0))
+	  (set-frame-selected-window nil window))
+      (mapcar
+       '(lambda (file)
+	  (find-file
+	   (decode-coding-string
+	    file
+	    (or file-name-coding-system
+		default-file-name-coding-system))))
+       (car (cdr (cdr event)))))
+  (raise-frame)
+  (recenter)))
+
+(global-set-key [drag-n-drop] 'mac-drag-n-drop)
+
+;; By checking whether the variable mac-ready-for-drag-n-drop has been
+;; defined, the event loop in macterm.c can be informed that it can
+;; now receive Finder drag and drop events.  Files dropped onto the
+;; Emacs application icon can only be processed when the initial frame
+;; has been created: this is where the files should be opened.
+(add-hook 'after-init-hook
+	  '(lambda ()
+	     (defvar mac-ready-for-drag-n-drop t)))
+
+;;;; Scroll bars
+
+;; for debugging
+;; (defun mac-handle-scroll-bar-event (event) (interactive "e") (princ event))
+
+;;(global-set-key [vertical-scroll-bar mouse-1] 'mac-handle-scroll-bar-event)
+
+(global-set-key
+ [vertical-scroll-bar down-mouse-1]
+ 'mac-handle-scroll-bar-event)
+
+(global-unset-key [vertical-scroll-bar drag-mouse-1])
+(global-unset-key [vertical-scroll-bar mouse-1])
+
+(defun mac-handle-scroll-bar-event (event)
+  "Handle scroll bar EVENT to emulate Mac Toolbox style scrolling."
+  (interactive "e")
+  (let* ((position (event-start event))
+	 (window (nth 0 position))
+	 (bar-part (nth 4 position)))
+    (select-window window)
+    (cond
+     ((eq bar-part 'up)
+      (goto-char (window-start window))
+      (mac-scroll-down-line))
+     ((eq bar-part 'above-handle)
+      (mac-scroll-down))
+     ((eq bar-part 'handle)
+      (scroll-bar-drag event))
+     ((eq bar-part 'below-handle)
+      (mac-scroll-up))
+     ((eq bar-part 'down)
+      (goto-char (window-start window))
+      (mac-scroll-up-line)))))
+
+(defun mac-scroll-ignore-events ()
+  ;; Ignore confusing non-mouse events
+  (while (not (memq (car-safe (read-event))
+		    '(mouse-1 double-mouse-1 triple-mouse-1))) nil))
+
+(defun mac-scroll-down ()
+  (track-mouse
+    (mac-scroll-ignore-events)
+    (scroll-down)))
+
+(defun mac-scroll-down-line ()
+  (track-mouse
+    (mac-scroll-ignore-events)
+    (scroll-down 1)))
+
+(defun mac-scroll-up ()
+  (track-mouse
+    (mac-scroll-ignore-events)
+    (scroll-up)))
+
+(defun mac-scroll-up-line ()
+  (track-mouse
+    (mac-scroll-ignore-events)
+    (scroll-up 1)))
+
+
+;;;; Others
+
+(unless (eq system-type 'darwin)
+  ;; This variable specifies the Unix program to call (as a process) to
+  ;; deteremine the amount of free space on a file system (defaults to
+  ;; df).  If it is not set to nil, ls-lisp will not work correctly
+  ;; unless an external application df is implemented on the Mac.
+  (setq directory-free-space-program nil)
+
+  ;; Set this so that Emacs calls subprocesses with "sh" as shell to
+  ;; expand filenames Note no subprocess for the shell is actually
+  ;; started (see run_mac_command in sysdep.c).
+  (setq shell-file-name "sh"))
+
+;; X Window emulation in macterm.c is not complete enough to start a
+;; frame without a minibuffer properly.  Call this to tell ediff
+;; library to use a single frame.
+; (ediff-toggle-multiframe)
+
+(if (eq system-type 'darwin)
+    ;; On Darwin filenames are encoded in UTF-8
+    (setq file-name-coding-system 'utf-8)
+  ;; To display filenames in Chinese or Japanese, replace mac-roman with
+  ;; big5 or sjis
+  (setq file-name-coding-system 'mac-roman))
+
+;; If Emacs is started from the Finder, change the default directory
+;; to the user's home directory.
+(if (string= default-directory "/")
+    (cd "~"))
+
+;; Tell Emacs to use pipes instead of pty's for processes because the
+;; latter sometimes lose characters.  Pty support is compiled in since
+;; ange-ftp will not work without it.
+(setq process-connection-type nil)
+
+;; Assume that fonts are always scalable on the Mac.  This sometimes
+;; results in characters with jagged edges.  However, without it,
+;; fonts with both truetype and bitmap representations but no italic
+;; or bold bitmap versions will not display these variants correctly.
+(setq scalable-fonts-allowed t)
+
+;; (prefer-coding-system 'mac-roman)
+
 ;;; arch-tag: 71dfcd14-cde8-4d66-b05c-85ec94fb23a6
 ;;; mac-win.el ends here