/**
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
invoke(
Interpreter env,
CallStack callstack )
{
String dir = ".";
invoke(
env,
callstack,
dir );
}
/**
Implement dir( String directory ) command.
*/
public static void
invoke(
Interpreter env,
CallStack callstack,
String dir )
{
File file;
String path;
try {
path =
env.
pathToFile(
dir ).
getAbsolutePath();
file =
env.
pathToFile(
dir );
} 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);
for( int
i=0;
i<
files.length;
i++ ) {
File f = new
File(
path +
File.
separator +
files[
i] );
StringBuffer sb = new
StringBuffer();
sb.
append(
f.
canRead() ? "r": "-" );
sb.
append(
f.
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.
append(
months[
c.
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 != -1 ) {
String pad =
len.
toString().
substring(
si);
len.
setLength(
si);
len.
insert(0,
pad);
}
sb.
append(
len.
toString() );
sb.
append( " " +
f.
getName() );
if (
f.
isDirectory() )
sb.
append("/");
env.
println(
sb.
toString() );
}
}
}