Changeset 4048


Ignore:
Timestamp:
09/25/03 13:18:18 (19 years ago)
Author:
piso
Message:

PROBE-DIRECTORY, FILE-DIRECTORY-P

Location:
trunk/j/src/org/armedbear/lisp
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/j/src/org/armedbear/lisp/Autoload.java

    r4046 r4048  
    33 *
    44 * Copyright (C) 2003 Peter Graves
    5  * $Id: Autoload.java,v 1.74 2003-09-25 01:07:49 piso Exp $
     5 * $Id: Autoload.java,v 1.75 2003-09-25 13:18:18 piso Exp $
    66 *
    77 * This program is free software; you can redistribute it and/or
     
    232232        autoload("unuse-package", "PackageFunctions");
    233233        autoload("user-homedir-pathname", "Pathname");
     234        autoload(PACKAGE_EXT, "file-directory-p", "probe_file");
     235        autoload(PACKAGE_EXT, "probe-directory", "probe_file");
    234236        autoload(PACKAGE_SYS, "%define-condition", "define_condition");
    235237        autoload(PACKAGE_SYS, "%defpackage", "PackageFunctions");
  • trunk/j/src/org/armedbear/lisp/probe_file.java

    r3894 r4048  
    33 *
    44 * Copyright (C) 2003 Peter Graves
    5  * $Id: probe_file.java,v 1.5 2003-09-19 14:44:10 piso Exp $
     5 * $Id: probe_file.java,v 1.6 2003-09-25 13:17:54 piso Exp $
    66 *
    77 * This program is free software; you can redistribute it and/or
     
    2828{
    2929    // ### probe-file
     30    // probe-file pathspec => truename
    3031    private static final Primitive1 PROBE_FILE = new Primitive1("probe-file") {
    3132        public LispObject execute(LispObject arg) throws ConditionThrowable
    3233        {
    33             String namestring;
    34             if (arg instanceof LispString)
    35                 namestring = ((LispString)arg).getValue();
    36             else if (arg instanceof Pathname)
    37                 namestring = ((Pathname)arg).getNamestring();
    38             else
    39                 throw new ConditionThrowable(new TypeError(arg, "pathname designator"));
    40             boolean absolute = false;
    41             if (System.getProperty("os.name").startsWith("Windows")) {
    42                 if (namestring.length() >= 3) {
    43                     if (namestring.charAt(1) == ':')
    44                         if (namestring.charAt(2) == '\\')
    45                             absolute = true;
    46                 }
    47             } else if (namestring.length() > 0) {
    48                 if (namestring.charAt(0) == '/')
    49                     absolute = true;
    50             }
    51             final File file;
    52             if (absolute)
    53                 file = new File(namestring);
    54             else {
    55                 String dirname =
    56                     LispString.getValue(_DEFAULT_PATHNAME_DEFAULTS_.symbolValue());
    57                 file = new File(dirname, namestring);
    58             }
     34            File file = getFile(arg);
    5935            if (!file.exists())
    6036                return NIL;
     
    6743        }
    6844    };
     45
     46    // ### probe-directory
     47    // probe-directory pathspec => truename
     48    private static final Primitive1 PROBE_DIRECTORY =
     49        new Primitive1("probe-directory", PACKAGE_EXT, true)
     50    {
     51        public LispObject execute(LispObject arg) throws ConditionThrowable
     52        {
     53            File file = getFile(arg);
     54            if (!file.isDirectory())
     55                return NIL;
     56            try {
     57                return new LispString(file.getCanonicalPath());
     58            }
     59            catch (IOException e) {
     60                throw new ConditionThrowable(new LispError(e.getMessage()));
     61            }
     62        }
     63    };
     64
     65    // ### file-directory-p
     66    // file-directory-p pathspec => generalized-boolean
     67    private static final Primitive1 FILE_DIRECTORY_P =
     68        new Primitive1("file-directory-p", PACKAGE_EXT, true)
     69    {
     70        public LispObject execute(LispObject arg) throws ConditionThrowable
     71        {
     72            File file = getFile(arg);
     73            return file.isDirectory() ? T : NIL;
     74        }
     75    };
     76
     77    private static File getFile(LispObject pathspec) throws ConditionThrowable
     78    {
     79        String namestring;
     80        if (pathspec instanceof LispString)
     81            namestring = ((LispString)pathspec).getValue();
     82        else if (pathspec instanceof Pathname)
     83            namestring = ((Pathname)pathspec).getNamestring();
     84        else
     85            throw new ConditionThrowable(new TypeError(pathspec,
     86                                                       "pathname designator"));
     87        if (isNamestringAbsolute(namestring))
     88            return new File(namestring);
     89        return new File(
     90            LispString.getValue(_DEFAULT_PATHNAME_DEFAULTS_.symbolValue()),
     91            namestring);
     92    }
     93
     94    private static boolean isNamestringAbsolute(String namestring)
     95    {
     96        if (System.getProperty("os.name").startsWith("Windows")) {
     97            if (namestring.length() >= 3) {
     98                if (namestring.charAt(1) == ':')
     99                    if (namestring.charAt(2) == '\\')
     100                        return true;
     101            }
     102        } else if (namestring.length() > 0) {
     103            if (namestring.charAt(0) == '/')
     104                return true;
     105        }
     106        return false;
     107    }
    69108}
Note: See TracChangeset for help on using the changeset viewer.