Changeset 5315


Ignore:
Timestamp:
01/01/04 20:34:38 (18 years ago)
Author:
piso
Message:

Work in progress.

File:
1 edited

Legend:

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

    r5310 r5315  
    33 *
    44 * Copyright (C) 2003 Peter Graves
    5  * $Id: Pathname.java,v 1.25 2004-01-01 18:55:00 piso Exp $
     5 * $Id: Pathname.java,v 1.26 2004-01-01 20:34:38 piso Exp $
    66 *
    77 * This program is free software; you can redistribute it and/or
     
    2323
    2424import java.io.File;
     25import java.util.StringTokenizer;
    2526
    2627public final class Pathname extends LispObject
     
    3435    private LispObject type = NIL;
    3536
    36     // A positive integer, or NIL, :wild, :unspecific, or :newest.
     37    // A positive integer, or NIL, :WILD, :UNSPECIFIC, or :NEWEST.
    3738    private LispObject version = NIL;
    3839
     
    4344    }
    4445
    45     private Pathname(String s)
     46    private Pathname(String s) throws ConditionThrowable
    4647    {
    4748        if (s != null) {
    4849            this.namestring = s;
     50            String d = null;
    4951            // Find last file separator char.
    5052            for (int i = s.length(); i-- > 0;) {
    5153                char c = s.charAt(i);
    5254                if (c == '/' || c == '\\') {
    53                     directory = new LispString(s.substring(0, i + 1));
     55                    d = s.substring(0, i + 1);
    5456                    s = s.substring(i + 1);
    5557                    break;
    5658                }
    5759            }
     60            if (d != null)
     61                directory = parseDirectory(d);
    5862            int index = s.lastIndexOf('.');
     63            String n = null;
     64            String t = null;
    5965            if (index > 0) {
    60                 name = new LispString(s.substring(0, index));
    61                 type = new LispString(s.substring(index + 1));
    62             } else
    63                 name = new LispString(s);
    64         }
    65     }
    66 
    67     private Pathname(String directory, String name)
    68     {
    69         StringBuffer sb = new StringBuffer();
    70         if (directory != null && directory.length() > 0) {
    71             sb.append(directory);
    72             if (!directory.endsWith(File.separator))
    73                 sb.append(File.separator);
    74         }
    75         if (name != null && name.length() > 0) {
    76             sb.append(name);
    77         }
    78         namestring = sb.toString();
     66                n = s.substring(0, index);
     67                t = s.substring(index + 1);
     68            } else if (s.length() > 0)
     69                n = s;
     70            if (n != null) {
     71                if (n.equals("*"))
     72                    name = Keyword.WILD;
     73                else
     74                    name = new LispString(n);
     75            }
     76            if (t != null) {
     77                if (t.equals("*"))
     78                    type = Keyword.WILD;
     79                else
     80                    type = new LispString(t);
     81            }
     82        }
     83    }
     84
     85    private static final LispObject parseDirectory(String d)
     86        throws ConditionThrowable
     87    {
     88        if (d.equals("/"))
     89            return list1(Keyword.ABSOLUTE);
     90        LispObject result = new Cons(Keyword.ABSOLUTE);
     91        StringTokenizer st = new StringTokenizer(d, "/\\");
     92        while (st.hasMoreTokens())
     93            result = new Cons(new LispString(st.nextToken()), result);
     94        return result.nreverse();
    7995    }
    8096
     
    109125        if (name instanceof LispString)
    110126            sb.append(((LispString)name).getValue());
     127        else if (name == Keyword.WILD)
     128            sb.append('*');
    111129        if (type instanceof LispString) {
    112130            sb.append('.');
     
    164182
    165183    public static Pathname parseNamestring(String namestring)
     184        throws ConditionThrowable
    166185    {
    167186        return new Pathname(namestring);
     
    319338            p.host = args[0];
    320339            p.device = args[1];
    321             p.directory = args[2];
     340            if (args[2] instanceof LispString)
     341                p.directory = list2(Keyword.ABSOLUTE, args[2]);
     342            else if (args[2] == Keyword.WILD)
     343                p.directory = list2(Keyword.ABSOLUTE, Keyword.WILD);
     344            else
     345                p.directory = args[2];
    322346            p.name = args[3];
    323347            p.type = args[4];
Note: See TracChangeset for help on using the changeset viewer.