Enhance highlighting of semi-large and large numbers
diff --git a/Process.c b/Process.c
index 7a04c0f..343a736 100644
--- a/Process.c
+++ b/Process.c
@@ -61,46 +61,64 @@
 
    int largeNumberColor = CRT_colors[LARGE_NUMBER];
    int processMegabytesColor = CRT_colors[PROCESS_MEGABYTES];
+   int processGigabytesColor = CRT_colors[PROCESS_GIGABYTES];
    int processColor = CRT_colors[PROCESS];
    if (!coloring) {
       largeNumberColor = CRT_colors[PROCESS];
       processMegabytesColor = CRT_colors[PROCESS];
+      processGigabytesColor = CRT_colors[PROCESS];
    }
 
-   if(number >= (10 * ONE_DECIMAL_M)) {
-      #ifdef __LP64__
-      if(number >= (100 * ONE_DECIMAL_G)) {
-         len = snprintf(buffer, 10, "%4luT ", number / ONE_G);
-         RichString_appendn(str, largeNumberColor, buffer, len);
-         return;
-      } else if (number >= (1000 * ONE_DECIMAL_M)) {
-         len = snprintf(buffer, 10, "%4.1lfT ", (double)number / ONE_G);
-         RichString_appendn(str, largeNumberColor, buffer, len);
-         return;
-      }
-      #endif
-      if(number >= (100 * ONE_DECIMAL_M)) {
-         len = snprintf(buffer, 10, "%4luG ", number / ONE_M);
-         RichString_appendn(str, largeNumberColor, buffer, len);
-         return;
-      }
-      len = snprintf(buffer, 10, "%4.1lfG ", (double)number / ONE_M);
-      RichString_appendn(str, largeNumberColor, buffer, len);
-      return;
-   } else if (number >= 100000) {
-      len = snprintf(buffer, 10, "%4luM ", number / ONE_K);
-      RichString_appendn(str, processMegabytesColor, buffer, len);
-      return;
-   } else if (number >= 1000) {
+   if (number < 1000) {
+      //Plain number, no markings
+      len = snprintf(buffer, 10, "%5lu ", number);
+      RichString_appendn(str, processColor, buffer, len);
+   } else if (number < 100000) {
+      //2 digit MB, 3 digit KB
       len = snprintf(buffer, 10, "%2lu", number/1000);
       RichString_appendn(str, processMegabytesColor, buffer, len);
       number %= 1000;
       len = snprintf(buffer, 10, "%03lu ", number);
       RichString_appendn(str, processColor, buffer, len);
-      return;
+   } else if (number < 1000 * ONE_K) {
+      //3 digit MB
+      number /= ONE_K;
+      len = snprintf(buffer, 10, "%4luM ", number);
+      RichString_appendn(str, processMegabytesColor, buffer, len);
+   } else if (number < 10000 * ONE_K) {
+      //1 digit GB, 3 digit MB
+      number /= ONE_K;
+      len = snprintf(buffer, 10, "%1lu", number/1000);
+      RichString_appendn(str, processGigabytesColor, buffer, len);
+      number %= 1000;
+      len = snprintf(buffer, 10, "%03luM ", number);
+      RichString_appendn(str, processMegabytesColor, buffer, len);
+   } else if (number < 100 * ONE_M) {
+      //2 digit GB, 1 digit MB
+      number /= 100 * ONE_K;
+      len = snprintf(buffer, 10, "%2lu", number/10);
+      RichString_appendn(str, processGigabytesColor, buffer, len);
+      number %= 10;
+      len = snprintf(buffer, 10, ".%1luG ", number);
+      RichString_appendn(str, processMegabytesColor, buffer, len);
+   } else if (number < 1000 * ONE_M) {
+      //3 digit GB
+      number /= ONE_M;
+      len = snprintf(buffer, 10, "%4luG ", number);
+      RichString_appendn(str, processGigabytesColor, buffer, len);
+   } else if (number < 10000 * ONE_M) {
+      //1 digit TB, 3 digit GB
+      number /= ONE_M;
+      len = snprintf(buffer, 10, "%1lu", number/1000);
+      RichString_appendn(str, largeNumberColor, buffer, len);
+      number %= 1000;
+      len = snprintf(buffer, 10, "%03luG ", number);
+      RichString_appendn(str, processGigabytesColor, buffer, len);
+   } else {
+      //2 digit TB and above
+      len = snprintf(buffer, 10, "%4.1lfT ", (double)number/ONE_G);
+      RichString_appendn(str, largeNumberColor, buffer, len);
    }
-   len = snprintf(buffer, 10, "%5lu ", number);
-   RichString_appendn(str, processColor, buffer, len);
 }
 
 void Process_colorNumber(RichString* str, unsigned long long number, bool coloring) {