Clean up how the usage messages are printed

This also fixes an OOM issue when trying to print the usage message
on a terminal that doesn't report its width.
diff --git a/baksmali/src/main/java/org/jf/baksmali/main.java b/baksmali/src/main/java/org/jf/baksmali/main.java
index 7eef7a5..7d38d6a 100644
--- a/baksmali/src/main/java/org/jf/baksmali/main.java
+++ b/baksmali/src/main/java/org/jf/baksmali/main.java
@@ -32,7 +32,7 @@
 import org.jf.dexlib.Code.Opcode;
 import org.jf.dexlib.DexFile;
 import org.jf.util.ConsoleUtil;
-import org.jf.util.smaliHelpFormatter;
+import org.jf.util.SmaliHelpFormatter;
 
 import java.io.File;
 import java.io.IOException;
@@ -320,20 +320,16 @@
      * Prints the usage message.
      */
     private static void usage(boolean printDebugOptions) {
-        smaliHelpFormatter formatter = new smaliHelpFormatter();
-        formatter.setWidth(ConsoleUtil.getConsoleWidth());
+        SmaliHelpFormatter formatter = new SmaliHelpFormatter();
+        int consoleWidth = ConsoleUtil.getConsoleWidth();
+        if (consoleWidth <= 0) {
+            consoleWidth = 80;
+        }
+
+        formatter.setWidth(consoleWidth);
 
         formatter.printHelp("java -jar baksmali.jar [options] <dex-file>",
-                "disassembles and/or dumps a dex file", basicOptions, "");
-
-        if (printDebugOptions) {
-            System.out.println();
-            System.out.println("Debug Options:");
-
-            StringBuffer sb = new StringBuffer();
-            formatter.renderOptions(sb, debugOptions);
-            System.out.println(sb.toString());
-        }
+                "disassembles and/or dumps a dex file", basicOptions, printDebugOptions?debugOptions:null);
     }
 
     private static void usage() {
diff --git a/smali/src/main/java/org/jf/smali/main.java b/smali/src/main/java/org/jf/smali/main.java
index 39a48f3..0700c79 100644
--- a/smali/src/main/java/org/jf/smali/main.java
+++ b/smali/src/main/java/org/jf/smali/main.java
@@ -37,14 +37,9 @@
 import org.jf.dexlib.DexFile;
 import org.jf.dexlib.Util.ByteArrayAnnotatedOutput;
 import org.jf.util.ConsoleUtil;
-import org.jf.util.smaliHelpFormatter;
+import org.jf.util.SmaliHelpFormatter;
 
 import java.io.*;
-import java.nio.CharBuffer;
-import java.nio.MappedByteBuffer;
-import java.nio.channels.FileChannel;
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
 import java.util.LinkedHashSet;
 import java.util.Properties;
 import java.util.Set;
@@ -347,20 +342,17 @@
      * Prints the usage message.
      */
     private static void usage(boolean printDebugOptions) {
-        smaliHelpFormatter formatter = new smaliHelpFormatter();
-        formatter.setWidth(ConsoleUtil.getConsoleWidth());
+        SmaliHelpFormatter formatter = new SmaliHelpFormatter();
+
+        int consoleWidth = ConsoleUtil.getConsoleWidth();
+        if (consoleWidth <= 0) {
+            consoleWidth = 80;
+        }
+
+        formatter.setWidth(consoleWidth);
 
         formatter.printHelp("java -jar smali.jar [options] [--] [<smali-file>|folder]*",
-                "assembles a set of smali files into a dex file", basicOptions, "");
-
-        if (printDebugOptions) {
-            System.out.println();
-            System.out.println("Debug Options:");
-
-            StringBuffer sb = new StringBuffer();
-            formatter.renderOptions(sb, debugOptions);
-            System.out.println(sb.toString());
-        }
+                "assembles a set of smali files into a dex file", basicOptions, printDebugOptions?debugOptions:null);
     }
 
     private static void usage() {
diff --git a/util/src/main/java/org/jf/util/smaliHelpFormatter.java b/util/src/main/java/org/jf/util/SmaliHelpFormatter.java
similarity index 74%
rename from util/src/main/java/org/jf/util/smaliHelpFormatter.java
rename to util/src/main/java/org/jf/util/SmaliHelpFormatter.java
index 5783ec8..3d0137e 100644
--- a/util/src/main/java/org/jf/util/smaliHelpFormatter.java
+++ b/util/src/main/java/org/jf/util/SmaliHelpFormatter.java
@@ -31,12 +31,17 @@
 import org.apache.commons.cli.HelpFormatter;
 import org.apache.commons.cli.Options;
 
-public class smaliHelpFormatter extends HelpFormatter {
+import java.io.PrintWriter;
 
-    public void smaliHelpFormatter() {
-    }
-
-    public void renderOptions(StringBuffer sb, Options options) {
-        super.renderOptions(sb, getWidth(), options, getLeftPadding(), this.getDescPadding());
+public class SmaliHelpFormatter extends HelpFormatter {
+    public void printHelp(String cmdLineSyntax, String header, Options options, Options debugOptions) {
+        super.printHelp(cmdLineSyntax, header, options, "");
+        if (debugOptions != null) {
+            System.out.println();
+            System.out.println("Debug Options:");
+            PrintWriter pw = new PrintWriter(System.out);
+            super.printOptions(pw, getWidth(), debugOptions, getLeftPadding(), getDescPadding());
+            pw.flush();
+        }
     }
 }