Warn if the new custom library is not found at the compile time.
[elisp/apel.git] / poe-18.el
index 4280be9..2ca24e6 100644 (file)
--- a/poe-18.el
+++ b/poe-18.el
 ;;; Commentary:
 
 ;; Note to developers:
-;; 
+;;
 ;; If old (v18) compiler is used, top-level macros are expanded at
 ;; *load-time*, not compile-time.  So, you cannot use macros defined
-;; in this file using `defmacro-maybe'.  Especially, you cannot use
-;; `eval-when-compile' and `eval-and-compile' in this file.
+;; in this file using `defmacro-maybe'.  In addition, due to this
+;; limitation, `eval-when-compile' and `eval-and-compile' provided by
+;; this file do not do compile-time evaluation at all.
 
 ;;; Code:
 
@@ -62,15 +63,16 @@ it is simply using a different list.
 Therefore, write `(setq foo (delete element foo))'
 to be sure of changing the value of `foo'.
 \[poe-18.el; EMACS 19 emulating function]"
-  (if (equal elt (car list))
-      (cdr list)
-    (let ((rest list)
-         (rrest (cdr list)))
-      (while (and rrest (not (equal elt (car rrest))))
-       (setq rest rrest
-             rrest (cdr rrest)))
-      (setcdr rest (cdr rrest))
-      list)))
+  (if list
+      (if (equal elt (car list))
+         (cdr list)
+       (let ((rest list)
+             (rrest (cdr list)))
+         (while (and rrest (not (equal elt (car rrest))))
+           (setq rest rrest
+                 rrest (cdr rrest)))
+         (setcdr rest (cdr rrest))
+         list))))
 
 (defun member (elt list)
   "Return non-nil if ELT is an element of LIST.  Comparison done with EQUAL.
@@ -102,7 +104,7 @@ for this variable.
 (autoload 'setenv "env"
   "Set the value of the environment variable named VARIABLE to VALUE.
 VARIABLE should be a string.  VALUE is optional; if not provided or is
-`nil', the environment variable VARIABLE will be removed.  
+`nil', the environment variable VARIABLE will be removed.
 This function works by modifying `process-environment'."
   t)
 
@@ -140,7 +142,13 @@ Associates the function with the current load file, if any."
 ;;;  macros; they are "nuked" by rms in FSF version.)
 
 (put 'inline 'lisp-indent-hook 0)
-(defalias-maybe 'inline 'progn)
+(defmacro inline (&rest body)
+  "Eval BODY forms sequentially and return value of last one.
+
+This emulating macro does not support function inlining because old \(v18\)
+compiler does not support inlining feature.
+\[poe-18.el; EMACS 19 emulating macro]"
+  (` (progn (,@ body))))
 
 (put 'defsubst 'lisp-indent-hook 'defun)
 (put 'defsubst 'edebug-form-spec 'defun)
@@ -185,24 +193,18 @@ If you think you need this, you're probably making a mistake somewhere.
 (defmacro-maybe eval-when-compile (&rest body)
   "Like progn, but evaluates the body at compile-time.
 
-This emulating macro does not work if used at top-level.
-Top-level macros are expanded at load-time.
+This emulating macro does not do compile-time evaluation at all because
+of the limitation of old \(v18\) compiler.
 \[poe-18.el; EMACS 19 emulating macro]"
-  (list 'quote (eval (cons 'progn body))))
+  (cons 'progn body))
 
 (put 'eval-and-compile 'lisp-indent-hook 0)
 (defmacro-maybe eval-and-compile (&rest body)
   "Like progn, but evaluates the body at compile-time as well as at load-time.
 
-This emulating macro does not work if used at top-level.
-Top-level macros are expanded at load-time.
+This emulating macro does not do compile-time evaluation at all because
+of the limitation of old \(v18\) compiler.
 \[poe-18.el; EMACS 19 emulating macro]"
-  ;; `form' is a parameter of `byte-compile-form'. kludge! kludge! kludge!
-  ;; this kludge prevents from evaluating `body' twice when this macro is
-  ;; expanded at load-time.
-  (if (and (boundp 'form)
-           (eq (car-safe form) 'eval-and-compile))
-      (eval (cons 'progn body)))
   (cons 'progn body))
 
 
@@ -213,6 +215,15 @@ Top-level macros are expanded at load-time.
 
 (defun remove-text-properties (start end properties &optional object))
 
+(defun get-text-property (position prop &optional object))
+
+(defun add-text-properties (start end properties &optional object))
+
+(defun put-text-property (start end property value &optional object))
+
+(defun next-property-change (position &optional object limit))
+
+(defun text-properties-at (position &optional object))
 
 ;;; @ file
 ;;;
@@ -289,7 +300,16 @@ If NOSORT is dummy for compatibility.
 \[poe-18.el; EMACS 19 emulating function]"
   (si:directory-files directory full match))
 
-    
+(defun file-executable-p (filename)
+  "Return t if FILENAME can be executed by you.
+For a directory, this means you can access files in that directory.
+\[poe-18.el; EMACS 19 emulating function]"
+  (if (file-exists-p filename)
+      (let ((process (start-process "test" nil "test" "-x" filename)))
+       (while (eq 'run (process-status process)))
+       (zerop (process-exit-status process)))))
+
+
 ;;; @ Display Features
 ;;;
 
@@ -352,7 +372,7 @@ With optional non-nil ALL, force redisplay of all mode-lines.
               (set-marker (nth posto attr-value) to))
             (setcdr (nthcdr posfrom attr-value)
                     (nthcdr posto attr-value)))))
-       
+
        (defalias 'make-overlay 'cons)
 
        (defun overlay-put (overlay prop value)