bd333d3c5d719d36f58a69728b3131a7aefb12eb
max
  Mon Oct 7 10:34:32 2013 -0700
rm #11884: change to calc, the most important tool of all
diff --git src/utils/calc/calc.c src/utils/calc/calc.c
index 7cf0a31..3df97d3 100644
--- src/utils/calc/calc.c
+++ src/utils/calc/calc.c
@@ -4,31 +4,31 @@
 #include "hash.h"
 #include "cheapcgi.h"
 #include "dystring.h"
 #include "options.h"
 
 bool humanReadable = FALSE;
 
 void usage()
 /* Explain usage and exit. */
 {
 errAbort(
   "calc - Little command line calculator\n"
   "usage:\n"
   "   calc this + that * theOther / (a + b)\n"
   "Options:\n"
-  "  -h - output as human-readable numbers, with m=millions, g=billions, etc\n"
+  "  -h - output as human-readable numbers, with k=kilos, m=millions, g=billions, etc\n"
   );
 }
 
 static struct optionSpec options[] = {
    {"h", OPTION_BOOLEAN},
    {NULL, 0},
 };
 
 void calc(int wordCount, char *words[])
 /* calc - Little command line calculator. */
 {
 struct dyString *dy = newDyString(128);
 int i;
 
 for (i=0; i<wordCount; ++i)
@@ -37,44 +37,49 @@
         dyStringAppend(dy, " ");
     dyStringAppend(dy, words[i]);
     }
 
 double result = doubleExp(dy->string);
 
 if (!humanReadable)
     {
     printf("%s = %f\n", dy->string, result);
     return;
     }
 
 // make human readable 
 char* resQual = "";
 int intRes = 0;
-if (result>1E12)
+if (result>=1E12)
     {
     intRes = round(result/1E12);
     resQual = "t";
     }
-else if (result>1E9)
+else if (result>=1E9)
     {
     intRes = round(result/1E9);
     resQual = "g";
     }
-else if (result>1E6)
+else if (result>=1E6)
     {
     intRes = round(result/1E6);
     resQual = "m";
     }
+else if (result>=1E3)
+    {
+    intRes = round(result/1E3);
+    resQual = "k";
+    }
 printf("%s = %d%s\n", dy->string, intRes, resQual);
 }
 
 
 int main(int argc, char *argv[])
 /* Process command line. */
 {
 optionInit(&argc, argv, options);
 if (argc < 2)
     usage();
 humanReadable = optionExists("h");
 calc(argc-1, argv+1);
 return 0;
 }