(byte-code-function-p): Check if the CDR of OBJECT is a cons cell.
[elisp/apel.git] / pccl.el
diff --git a/pccl.el b/pccl.el
index eca8323..c696f75 100644 (file)
--- a/pccl.el
+++ b/pccl.el
@@ -1,4 +1,4 @@
-;;; pccl.el --- Portable CCL utility for Mule 1.* and Mule 2.*
+;;; pccl.el --- Portable CCL utility for Mule 2.*
 
 ;; Copyright (C) 1998 Free Software Foundation, Inc.
 
 
 ;;; Code:
 
-(if (featurep 'mule)
-    (if (>= emacs-major-version 20)
-       ;; for Emacs 20 and XEmacs-mule
-       (require 'pccl-20)
-      ;; for MULE 1.* and 2.*
-      (require 'pccl-om)
-      ))
+(require 'broken)
+
+(broken-facility ccl-usable
+  "Emacs has not CCL."
+  (and (featurep 'mule)
+       (if (featurep 'xemacs)
+           (>= emacs-major-version 21)
+         (>= emacs-major-version 19))))
+
+(unless-broken ccl-usable
+  (require 'ccl)
+  (require 'advice)
+
+  (if (featurep 'mule)
+      (if (featurep 'xemacs)
+          (if (>= emacs-major-version 21)
+              ;; for XEmacs 21 with mule
+              (require 'pccl-20))
+        (if (>= emacs-major-version 20)
+            ;; for Emacs 20
+            (require 'pccl-20)
+          ;; for Mule 2.*
+          (require 'pccl-om))))
+
+  (defadvice define-ccl-program
+    (before accept-long-ccl-program activate)
+    "When CCL-PROGRAM is too long, internal buffer is extended automaticaly."
+    (let ((try-ccl-compile t)
+          (prog (eval (ad-get-arg 1))))
+      (ad-set-arg 1 (` '(, prog)))
+      (while try-ccl-compile
+        (setq try-ccl-compile nil)
+        (condition-case sig
+            (ccl-compile prog)
+          (args-out-of-range
+           (if (and (eq (car (cdr sig)) ccl-program-vector)
+                    (= (car (cdr (cdr sig))) (length ccl-program-vector)))
+               (setq ccl-program-vector
+                     (make-vector (* 2 (length ccl-program-vector)) 0)
+                     try-ccl-compile t)
+             (signal (car sig) (cdr sig))))))))
+  )
 
 
 ;;; @ end
 ;;;
 
-(provide 'pccl)
+(require 'product)
+(product-provide (provide 'pccl) (require 'apel-ver))
 
 ;;; pccl.el ends here