; .Entete "Le-Lisp (c) version 15.2" " " "Les manipulations de fichiers" ; .EnPied "files.ll" "B-%" " " ; .Annexe B "Les Manipulations de Fichiers" ; .nr % 1 ; ; .Centre "*****************************************************************" ; .Centre " Ce fichier est en lecture seule hors du projet ALE de l'INRIA. " ; .Centre " Il est maintenu par ILOG SA, 2 Avenue Gallie'ni, 94250 Gentilly " ; .Centre " (c) Le-Lisp est une marque de'pose'e de l'INRIA " ; .Centre "*****************************************************************" ; .Centre "$Header: files.ll,v 4.7 88/11/22 22:18:06 nuyens Exp $" (unless (>= (version) 15.2) (error 'load 'erricf 'files)) (defvar #:sys-package:colon 'system) ; .Section "Gestion des FEATURES" (unless (boundp '#:system:features-list) (defvar #:system:features-list ())) (de featurep (feature) (if (memq feature #:system:features-list) feature ())) (de add-feature (feature) (unless (featurep feature) (newl #:system:features-list feature))) (de rem-feature (feature) (setq #:system:features-list (delq feature #:system:features-list))) (de list-features () (copy #:system:features-list)) ; .Section "Load et Autoload" (defvar :previous-def-flag ()) ; .SSection "Test sur les fichiers" (de probepathf (file) ; cherche si le fichier {PATH}file[.ll] existe. (setq file (coerce-namestring file)) (or (search-in-path :path (suffixe file :lelisp-extension)) (search-in-path :path file))) (de probepathm (file) ; cherche si le fichier {PATH}file[.lm] existe. (search-in-path :path (suffixe file :mod-extension))) (de probepatho (file) ; cherche si le fichier {PATH}file[.lo] existe. (search-in-path :path (suffixe file :obj-extension))) (de suffixe (file suff) (if (eq (index suff file) (sub (slength file) (slength suff))) file (catenate file suff) )) (de search-in-path (path file) ; cherche si le fichier {PATH}file existe. (when path (let ((real-file (catenate (if (consp path) (car path) path) file))) (if (probefile real-file) real-file (when (consp path) (search-in-path (cdr path) file)))))) ; .SSection "des fichiers simples" (df load (file . redef?) (loadfile file (car redef?)) ) (de loadfile (file redef?) (ifn (probefile file) (error 'loadfile 'errfile file) (let ((:loaded-from-file file) (:redef-flag redef?) (#:sys-package:colon #:sys-package:colon) (:in-read-flag ()) (inchan (inchan)) ) (inchan (openi file)) (protect (untilexit eof (eval (read))) (let ((in (inchan))) (when in (close in))) (inchan inchan) )) file )) ; .SSection "des fichiers des bibliothe`ques" (df libload (file . redef?) (libloadfile file redef?) ) (de libloadfile (file redef?) (let ((real-file (probepathf file))) (ifn real-file (error 'libloadfile 'errfile file) (loadfile real-file redef?) ))) ; .SSection "des fichiers compile's" (de loadobjectfile (file) (let ((file-obj? (probepatho file))) (ifn file-obj? (error 'loadobjectfile 'errfile file) (let ((save #:system:read-case-flag)) (setq #:system:read-case-flag 'loadobjectfile) (loadfile file-obj? t) (when (eq #:system:read-case-flag 'loadobjectfile) ; Personne n'y a touche: on remet l'ancienne (setq #:system:read-case-flag save)) file-obj?)))) ; .SSection "des fichiers autoload" (df autoload (file . lfnt) ; de'finition de fonctions autoload (autoload mod at1 ... atN) (mapc (lambda (fnt) (setfn fnt 'fexpr `(:b (:std-autoload ',fnt :b 'loadfile))) (putprop fnt file 'autoload)) lfnt)) (df libautoload (file . lfnt) ; de'finition de fonctions autoload (libautoload mod at1 ... atN) (mapc (lambda (fnt) (setfn fnt 'fexpr `(:b (:std-autoload ',fnt :b 'libloadfile))) (putprop fnt file 'autoload)) lfnt)) (de :std-autoload (:f :b :load-fct) (let ((:of (valfn :f)) (:ot (typefn :f)) (:autoload-file (getprop :f 'autoload))) (cond ((null :autoload-file) (error 'autoload 'ERRFILE :f)) ((and (catcherror t (funcall :load-fct :autoload-file t)) (neq :of (valfn :f))) (remprop :f 'autoload) (eval (cons :f :b))) (t (setfn :f :ot :of) (error 'autoload 'errudf :f)))))