+;;; emu-mule.el --- emu module for Mule 1.* and Mule 2.*
+
+;; Copyright (C) 1995,1996,1997,1998 MORIOKA Tomohiko
+
+;; Author: MORIOKA Tomohiko <morioka@jaist.ac.jp>
+;; Katsumi Yamaoka <yamaoka@jpl.org>
+;; Keywords: emulation, compatibility, Mule
+
+;; This file is part of emu.
+
+;; This program 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.
+
+;; This program 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 GNU Emacs; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;;; Code:
+
+(require 'poem)
+
+
+;;; @ binary access
;;;
-;;; emu-mule: Mule 2.* emulation module for Mule
+
+(defalias 'insert-binary-file-contents 'insert-file-contents-as-binary)
+(make-obsolete 'insert-binary-file-contents 'insert-file-contents-as-binary)
+
+(defun insert-binary-file-contents-literally (filename
+ &optional visit beg end replace)
+ "Like `insert-file-contents-literally', q.v., but don't code conversion.
+A buffer may be modified in several ways after reading into the buffer due
+to advanced Emacs features, such as file-name-handlers, format decoding,
+find-file-hooks, etc.
+ This function ensures that none of these modifications will take place."
+ (as-binary-input-file
+ ;; Returns list absolute file name and length of data inserted.
+ (insert-file-contents-literally filename visit beg end replace)))
+
+
+;;; @ regulation
;;;
-;;; $Id: emu-mule.el,v 6.1 1995/08/26 18:07:55 morioka Exp $
+
+(defun regulate-latin-char (chr)
+ (cond ((and (<= ?\e$B#A\e(B chr)(<= chr ?\e$B#Z\e(B))
+ (+ (- chr ?\e$B#A\e(B) ?A))
+ ((and (<= ?\e$B#a\e(B chr)(<= chr ?\e$B#z\e(B))
+ (+ (- chr ?\e$B#a\e(B) ?a))
+ ((eq chr ?\e$B!%\e(B) ?.)
+ ((eq chr ?\e$B!$\e(B) ?,)
+ (t chr)))
+
+(defun regulate-latin-string (str)
+ (let ((len (length str))
+ (i 0)
+ chr (dest ""))
+ (while (< i len)
+ (setq chr (sref str i))
+ (setq dest (concat dest
+ (char-to-string (regulate-latin-char chr))))
+ (setq i (+ i (char-bytes chr))))
+ dest))
+
+
+;;; @ CCL
;;;
+(eval-when-compile (require 'ccl))
+
+(defconst ccl-use-symbol-as-program nil
+ "t if CCL related builtins accept symbol as CCL program.
+(20.2 with ExCCL, 20.3 or later)
+Otherwise nil (20.2 without ExCCL or former).
-(defun some-element (pred seq)
- "Return the first element of sequence SEQ
-whose return value applied function PRED is not nil.
-[emu-mule; tl-list function]"
- (let ((i 0)(len (length seq)) element)
- (catch 'tag
- (while (< i len)
- (if (funcall pred (setq element (elt seq i)))
- (throw 'tag element)
- )
- (setq i (+ i 1))
- ))
- ))
-
-(defun get-lc (chr)
- "Return leading character of CHAR or LEADING-CHARACTER."
- (if (< chr 128)
- lc-ascii
- chr))
-
-
-(if (not (boundp 'emacs-major-version))
- (defconst emacs-major-version (string-to-int emacs-version))
+Because emu provides functions accepting symbol as CCL program,
+user programs should not refer this variable.")
+
+(defun make-ccl-coding-system
+ (coding-system mnemonic doc-string decoder encoder)
+ "Define a new CODING-SYSTEM (symbol) by CCL programs
+DECODER (symbol) and ENCODER (symbol)."
+ (setq decoder (symbol-value decoder)
+ encoder (symbol-value encoder))
+ (make-coding-system coding-system 4 mnemonic doc-string
+ nil ; Mule takes one more optional argument: EOL-TYPE.
+ (cons decoder encoder)))
+
+(eval-when-compile
+ (define-ccl-program test-ccl-eof-block
+ '(1
+ (read r0)
+ (write "[EOF]")))
+
+ (make-ccl-coding-system
+ 'test-ccl-eof-block-cs ?T "CCL_EOF_BLOCK tester"
+ 'test-ccl-eof-block 'test-ccl-eof-block)
)
-(cond ((>= emacs-major-version 19)
- (defun fontset-pixel-size (fontset)
- (elt
- (get-font-info
- (some-element
- (function
- (lambda (n)
- (not (= n -1))
- ))
- (cdr (get-fontset-info fontset))
- )) 5))
- )
- (t (require 'emu-18)))
+(defconst ccl-encoder-eof-block-is-broken
+ (eval-when-compile
+ (not (equal (encode-coding-string "" 'test-ccl-eof-block-cs)
+ "[EOF]")))
+ "t if CCL_EOF_BLOCK is not executed when coding system encounts EOF on
+encoding.")
+
+(defconst ccl-decoder-eof-block-is-broken
+ (eval-when-compile
+ (not (equal (decode-coding-string "" 'test-ccl-eof-block-cs)
+ "[EOF]")))
+ "t if CCL_EOF_BLOCK is not executed when coding system encounts EOF on
+decoding.")
+
+(defconst ccl-eof-block-is-broken
+ (or ccl-encoder-eof-block-is-broken
+ ccl-decoder-eof-block-is-broken))
+
+(defun ccl-execute (ccl-prog reg)
+ "Execute CCL-PROG with registers initialized by REGISTERS.
+If CCL-PROG is symbol, it is dereferenced.
+\[Emacs 20.3 emulating function]"
+ (exec-ccl
+ (if (symbolp ccl-prog) (symbol-value ccl-prog) ccl-prog)
+ reg))
+
+(defun ccl-execute-on-string (ccl-prog status string &optional contin)
+ "Execute CCL-PROG with initial STATUS on STRING.
+If CCL-PROG is symbol, it is dereferenced.
+\[Emacs 20.3 emulating function]"
+ (exec-ccl-string
+ (if (symbolp ccl-prog) (symbol-value ccl-prog) ccl-prog)
+ status string))
+
+
+;;; @ end
+;;;
(provide 'emu-mule)
+
+;;; emu-mule.el ends here