axiom-developer
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Axiom-developer] Re: [Axiom-mail] Re: `)read' and large inputs


From: Waldek Hebisch
Subject: Re: [Axiom-developer] Re: [Axiom-mail] Re: `)read' and large inputs
Date: Fri, 17 Nov 2006 14:08:05 +0100 (CET)

Vanuxem Grégory wrote:
> I encountered the same issue with the history of Axiom in a file which
> is buggy (see
> http://wiki.axiom-developer.org/323HandlingOfTheHistoryInAFile)
> 
> I reported the Library file problem too on IssueTracker.
> 

I applied the patch below to wh-sandbox -- so library and history
handling should now work in wh-sandbox.  The last part (adding slash)
is not needed for the testcase, but my show up in other situations.
ATM Axiom code handles slashes in ad hoc manner: sometimes directory
names end in slashes sometimes names without slashes are used and
slash is added later.  We should use uniform convention here --
probably store directory names without slases and add slases when
forming files nemes (that would agree with Lisp namestring and with
user expectation about filenames).

diff -ru wh-sandbox.bb/src/algebra/files.spad.pamphlet 
wh-sandbox/src/algebra/files.spad.pamphlet
--- wh-sandbox.bb/src/algebra/files.spad.pamphlet       2006-11-15 
23:00:59.000000000 +0100
+++ wh-sandbox/src/algebra/files.spad.pamphlet  2006-11-17 01:54:38.000000000 
+0100
@@ -389,10 +389,8 @@
  
         defstream(fn: Name, mode: IOMode): FileState ==
             mode = "input"  =>
-              not readable? fn => error ["File is not readable", fn]
               RDEFINSTREAM(fn::String)$Lisp
             mode = "output" =>
-              not writable? fn => error ["File is not writable", fn]
               RDEFOUTSTREAM(fn::String)$Lisp
             error ["IO mode must be input or output", mode]
  
@@ -409,9 +407,7 @@
             mode = "either" =>
                 exists? fname =>
                     open(fname, "input")
-                writable? fname =>
-                    reopen_!(open(fname, "output"), "input")
-                error "File does not exist and cannot be created"
+                reopen_!(open(fname, "output"), "input")
             [fname, defstream(fname, mode), mode]
         reopen_!(f, mode) ==
             close_! f
@@ -506,6 +502,10 @@
              ++ \spad{lib.k := v} saves the value \spad{v} in the library
              ++ \spad{lib}.  It can later be extracted using the key \spad{k}.
 
+         close_!: % -> %
+          ++ close!(f) returns the library f closed to input and output.
+
+
     == KeyedAccessFile(Any) add
          Rep := KeyedAccessFile(Any)
          library f == open f
diff -ru wh-sandbox.bb/src/interp/fname.lisp.pamphlet 
wh-sandbox/src/interp/fname.lisp.pamphlet
--- wh-sandbox.bb/src/interp/fname.lisp.pamphlet        2006-11-15 
23:01:44.000000000 +0100
+++ wh-sandbox/src/interp/fname.lisp.pamphlet   2006-11-17 01:33:03.000000000 
+0100
@@ -94,7 +94,7 @@
     (if s s "") ))
  
 (defun |fnameExists?| (f)
-  (if (probe-file f) 't nil))
+  (if (vmlisp::axiom-probe-file (namestring f)) 't nil))
 
 (defun |fnameReadable?| (f)
 #+:CCL (file-readablep f)
@@ -112,7 +112,8 @@
     (do ((fn))
         (nil)
         (setq fn (|fnameMake| d (string (gensym n)) e))
-        (if (not (probe-file fn)) (return-from |fnameNew| fn)) )))
+        (if (not (vmlisp::axiom-probe-file (namestring fn)))
+           (return-from |fnameNew| fn)) )))
 @
 \eject
 \begin{thebibliography}{99}
diff -ru wh-sandbox.bb/src/interp/nlib.lisp.pamphlet 
wh-sandbox/src/interp/nlib.lisp.pamphlet
--- wh-sandbox.bb/src/interp/nlib.lisp.pamphlet 2006-11-15 23:01:45.000000000 
+0100
+++ wh-sandbox/src/interp/nlib.lisp.pamphlet    2006-11-16 22:32:36.000000000 
+0100
@@ -435,9 +435,6 @@
 (defun make-full-namestring (filearg &optional (filetype nil))
   (namestring (merge-pathnames (make-filename filearg filetype))))
 
-(defun probe-name (file)
-  (if (probe-file file) (namestring file) nil))
-
 (defun get-directory-list (ft &aux (cd (namestring $current-directory)))
   (cond ((member ft '("NRLIB" "DAASE" "EXPOSED") :test #'string=)
           (if (eq BOOT::|$UserLevel| 'BOOT::|development|)
@@ -451,8 +448,10 @@
 (defun axiom-probe-file (file)
     (if (equal (|directoryp| file) -1)
          nil
-         (truename file))
-)
+         (truename file)))
+
+(defun probe-name (file)
+  (if (axiom-probe-file file) (namestring file) nil))
 
 (defun make-input-filename (filearg &optional (filetype nil))
    (let*
@@ -465,7 +464,7 @@
        (dolist (dir dirs (probe-name filename))
                (when 
                 (axiom-probe-file 
-                 (setq newfn (concatenate 'string dir filename)))
+                 (setq newfn (concatenate 'string dir "/" filename)))
                 (return newfn)))
         (probe-name filename))))
 


-- 
                              Waldek Hebisch
address@hidden 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]