Open Source Repository

Home /beanshell/bsh-2.0b4 | Repository Home


bsh/commands/dir.java
/**
  Display the contents of the current working directory.  
  The format is similar to the Unix ls -l
  <em>This is an example of a bsh command written in Java for speed.</em>
  
  @method void dir( [ String dirname ] )
*/
package bsh.commands;

import java.io.*;
import bsh.*;
import java.util.Date;
import java.util.Vector;
import java.util.GregorianCalendar;
import java.util.Calendar;

public class dir 
{
  static final String [] months = "Jan""Feb""Mar""Apr"
    "May""Jun""Jul""Aug""Sep""Oct""Nov""Dec" };

  public static String usage() {
    return "usage: dir( String dir )\n       dir()";
  }

  /**
    Implement dir() command.
  */
  public static void invokeInterpreter env, CallStack callstack 
  {
    String dir = ".";
    invokeenv, callstack, dir );
  }

  /**
    Implement dir( String directory ) command.
  */
  public static void invoke
    Interpreter env, CallStack callstack, String dir 
  {
    File file;
    String path;
    try {
      path = env.pathToFiledir ).getAbsolutePath();
      file =  env.pathToFiledir );
    catch (IOException e ) {
      env.println("error reading path: "+e);
      return;
    }

    if !file.exists() || !file.canRead() ) {
      env.println"Can't read " + file );
      return;
    }
    if !file.isDirectory() )  {
      env.println("'"+dir+"' is not a directory");
    }

    String [] files = file.list();
    files = StringUtil.bubbleSort(files);

    forint i=0; i< files.length; i++ ) {
      File f = new Filepath + File.separator + files[i] );
      StringBuffer sb = new StringBuffer();
      sb.appendf.canRead() "r""-" );
      sb.appendf.canWrite() "w""-" );
      sb.append"_" );
      sb.append" ");

      Date d = new Date(f.lastModified());
      GregorianCalendar c = new GregorianCalendar();
      c.setTime(d);
      int day  = c.get(Calendar.DAY_OF_MONTH);
      sb.appendmonthsc.get(Calendar.MONTH) ] " " + day );
      if day < 10 
        sb.append(" ");

      sb.append(" ");

      // hack to get fixed length 'length' field
      int fieldlen = 8;
      StringBuffer len = new StringBuffer();
      for(int j=0; j<fieldlen; j++)
        len.append(" ");
      len.insert(0, f.length());
      len.setLength(fieldlen);
      // hack to move the spaces to the front
      int si = len.toString().indexOf(" ");
      if si != -) {
        String pad = len.toString().substring(si);
        len.setLength(si);
        len.insert(0, pad);
      }
      
      sb.appendlen.toString() );

      sb.append" " + f.getName() );
      if f.isDirectory() ) 
        sb.append("/");

      env.printlnsb.toString() );
    }
  }
}