Revision: 5684
          http://jnode.svn.sourceforge.net/jnode/?rev=5684&view=rev
Author:   lsantha
Date:     2009-10-20 21:23:04 +0000 (Tue, 20 Oct 2009)

Log Message:
-----------
Applied patch by Mark Kokish.

Modified Paths:
--------------
    trunk/cli/descriptors/org.jnode.command.file.xml
    trunk/cli/src/commands/org/jnode/command/file/DirCommand.java

Modified: trunk/cli/descriptors/org.jnode.command.file.xml
===================================================================
--- trunk/cli/descriptors/org.jnode.command.file.xml    2009-10-15 14:50:26 UTC 
(rev 5683)
+++ trunk/cli/descriptors/org.jnode.command.file.xml    2009-10-20 21:23:04 UTC 
(rev 5684)
@@ -262,7 +262,8 @@
       <option argLabel="url" shortName="u" longName="url" description="print a 
hex dump of a URL"/>
     </syntax>
     <syntax alias="ls">
-      <empty description="list the current directory"/>
+      <empty description="with -l, print sizes in human readable format (e.g., 
1K 234M 2G)"/>
+      <option argLabel="humanReadable" shortName="h" 
longName="human-readable"/>
       <repeat>
         <argument argLabel="path" description="list files or directories"/>
       </repeat>

Modified: trunk/cli/src/commands/org/jnode/command/file/DirCommand.java
===================================================================
--- trunk/cli/src/commands/org/jnode/command/file/DirCommand.java       
2009-10-15 14:50:26 UTC (rev 5683)
+++ trunk/cli/src/commands/org/jnode/command/file/DirCommand.java       
2009-10-20 21:23:04 UTC (rev 5684)
@@ -23,6 +23,7 @@
 import java.io.File;
 import java.io.IOException;
 import java.io.PrintWriter;
+import java.text.DecimalFormat;
 import java.text.SimpleDateFormat;
 import java.util.Arrays;
 import java.util.Comparator;
@@ -31,6 +32,7 @@
 import org.jnode.shell.AbstractCommand;
 import org.jnode.shell.syntax.Argument;
 import org.jnode.shell.syntax.FileArgument;
+import org.jnode.shell.syntax.FlagArgument;
 
 /**
  * @author epr
@@ -44,15 +46,18 @@
     private static final SimpleDateFormat df = new 
SimpleDateFormat("yyyy.MM.dd HH:mm");
 
     private static final String help_path = "the file or directory to list";
+    private static final String help_humanReadable = "with -l, print sizes in 
human readable format (e.g., 1K 234M 2G)";
     private static final String help_super = "List files or directories";
     private static final String fmt_no_path = "No such path: %s%n";
-    
+
     private final FileArgument argPath;
-    
+    private final FlagArgument humanReadableArg;
+
     public DirCommand() {
         super(help_super);
+        humanReadableArg = new FlagArgument("humanReadable", 
Argument.OPTIONAL, help_humanReadable);
         argPath = new FileArgument("path", Argument.OPTIONAL | 
Argument.MULTIPLE | Argument.EXISTING, help_path);
-        registerArguments(argPath);
+        registerArguments(argPath, humanReadableArg);
     }
 
     public static void main(String[] args) throws Exception {
@@ -102,10 +107,9 @@
                     sb.setLength(0);
                     lastModified.setTime(f.lastModified());
                     if (f.isFile()) {
-                        String ln = String.valueOf(f.length()).concat("B");
+                        String ln = formatSize(f.length());
                         int cnt = LEFT_MARGIN - ln.length();
-                        for (int j = 0; j < cnt; j++, sb.append(' '))
-                            ;
+                        for (int j = 0; j < cnt; j++) sb.append(' ');
                         sb.append(ln);
                         sb.append("   ");
                         sb.append(df.format(lastModified));
@@ -125,4 +129,16 @@
             out.println();
         }
     }
+
+    private static final String[] units = {"B", "K", "M", "G", "T", "P", "E", 
"Z", "Y"};
+
+    protected String formatSize(double bytes) {
+        if (humanReadableArg.isSet()) {
+            int index;
+            for (index = 0; bytes >= 1024; index++) bytes = bytes / 1024;
+            DecimalFormat df = new DecimalFormat("###0.0");
+            return df.format(bytes) + units[index];
+        } else
+            return bytes + "B";
+    }
 }


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

------------------------------------------------------------------------------
Come build with us! The BlackBerry(R) Developer Conference in SF, CA
is the only developer event you need to attend this year. Jumpstart your
developing skills, take BlackBerry mobile applications to market and stay 
ahead of the curve. Join us from November 9 - 12, 2009. Register now!
http://p.sf.net/sfu/devconference
_______________________________________________
Jnode-svn-commits mailing list
Jnode-svn-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jnode-svn-commits

Reply via email to