Fix size of time in Engine Output window
[xboard.git] / engineoutput.c
index 75e1f8d..11229b9 100644 (file)
@@ -434,6 +434,7 @@ InsertionPoint (int len, EngineOutputData *ed)
       return offs + strlen(header[ed->which]);
 }
 
+#define MATE_SCORE 100000
 static char spaces[] = "            "; // [HGM] align: spaces for padding
 
 static void
@@ -445,7 +446,9 @@ Format(char *buf, int val)
             snprintf( buf, 24, "%d%s\t", val, spaces + 2*i);
         }
         else {
-            snprintf( buf, 24, "%.1fM%s\t", val/1000000.0, spaces + 8 + 2*(val > 1e7));
+            char unit = 'M';
+            if(val >= 1e9) val /= 1e3, unit = 'G';
+            snprintf( buf, 24, "%.*f%c%s\t", 1 + (val < 1e7), val/1e6, unit, spaces + 10 + 2*(val >= 1e8));
         }
 }
 
@@ -567,8 +570,11 @@ UpdateControls (EngineOutputData *ed)
             snprintf( s_nodes, sizeof(s_nodes)/sizeof(s_nodes[0]), u64Display "%s\t", ed->nodes, spaces + 2*i);
         }
         else {
-            snprintf( s_nodes, sizeof(s_nodes)/sizeof(s_nodes[0]), "%.1fM%s\t", u64ToDouble(ed->nodes) / 1000000.0,
-                      spaces + 8 + 2*(ed->nodes > 1e7));
+            double x = u64ToDouble(ed->nodes);
+            char unit = 'M';
+            if(x >= 1e9) x /= 1e3, unit = 'G';
+            snprintf( s_nodes, sizeof(s_nodes)/sizeof(s_nodes[0]), "%.*f%c%s\t", 1 + (x < 1e7), x / 1e6,
+                      unit, spaces + 10 + 2*(ed->nodes >= 1e8));
         }
 
         /* TB Hits etc. */
@@ -590,6 +596,8 @@ UpdateControls (EngineOutputData *ed)
         if( h == 0 ) {
          snprintf( s_score, sizeof(s_score)/sizeof(s_score[0]), "  0.00%c\t", fail );
         } else
+       if( h >= MATE_SCORE) snprintf(s_score, 16, "  %s#%d%c\t", ( h > MATE_SCORE+9 ? "" : "  "),  h - MATE_SCORE, fail ); else
+       if(-h >= MATE_SCORE) snprintf(s_score, 16, " %s#-%d%c\t", (-h > MATE_SCORE+9 ? "" : "  "), -h - MATE_SCORE, fail ); else
         if( h > 0 ) {
          snprintf( s_score, sizeof(s_score)/sizeof(s_score[0]), "+%.2f%c\t", h / 100.0, fail );
         }
@@ -598,6 +606,9 @@ UpdateControls (EngineOutputData *ed)
         }
 
         /* Time */
+        if(time_secs >= 3600)
+            snprintf( s_time, sizeof(s_time)/sizeof(s_time[0]), "%d:%02d:%02d\t", time_secs / 3600, (time_secs / 60) % 60, time_secs % 60 );
+        else
         snprintf( s_time, sizeof(s_time)/sizeof(s_time[0]), "%d:%02d.%02d\t", time_secs / 60, time_secs % 60, time_cent );
 
         if(columnMask & 2) s_score[0] = NULLCHAR; // [HGM] hide: erase columns the user has hidden