Added u64 to double cast for all compiler
[xboard.git] / backend.c
index 901a35e..673811c 100644 (file)
--- a/backend.c
+++ b/backend.c
@@ -212,10 +212,12 @@ void ParseFeatures P((char* args, ChessProgramState *cps));
 void InitBackEnd3 P((void));
 void FeatureDone P((ChessProgramState* cps, int val));
 void InitChessProgram P((ChessProgramState *cps));
-\r
-#ifdef WIN32\r
-       extern void ConsoleCreate();\r
-#endif\r
+double u64ToDouble P((u64 value));
+
+#ifdef WIN32
+       extern void ConsoleCreate();
+#endif
+
 extern int tinyLayout, smallLayout;
 static ChessProgramStats programStats;
 
@@ -258,6 +260,26 @@ static ChessProgramStats programStats;
 #define TN_SGA  0003
 #define TN_PORT 23
 
+/* Some compiler can't cast u64 to double
+ * This function do the job for us:
+
+ * We use the highest bit for cast, this only
+ * works if the highest bit is not
+ * in use (This should not happen)
+ *
+ * We used this for all compiler
+ */
+double
+u64ToDouble(u64 value)
+{
+  double r;
+  u64 tmp = value & 0x7fffffffffffffff;
+  r = (double)(s64)tmp;
+  if (value & 0x8000000000000000)
+       r +=  9.2233720368547758080e18; /* 2^63 */
+ return r;
+}
+
 /* Fake up flags for now, as we aren't keeping track of castling
    availability yet */
 int
@@ -305,7 +327,7 @@ Boolean alarmSounded;
 /* end premove variables */
 
 char *ics_prefix = "$";
-ics_type = ICS_GENERIC;\r
+int ics_type = ICS_GENERIC;
 
 int currentMove = 0, forwardMostMove = 0, backwardMostMove = 0;
 int pauseExamForwardMostMove = 0;
@@ -692,12 +714,12 @@ InitBackEnd3 P((void))
     char buf[MSG_SIZ];
     int err;
 
-    InitChessProgram(&first);\r
-\r
-    #ifdef WIN32\r
-               /* Make a console window if needed */\r
-               if (appData.icsActive) ConsoleCreate();\r
-       #endif\r
+    InitChessProgram(&first);
+
+    #ifdef WIN32
+               /* Make a console window if needed */
+               if (appData.icsActive) ConsoleCreate();
+       #endif
 
     if (appData.icsActive) {
        err = establish();
@@ -1466,11 +1488,11 @@ read_from_ics(isr, closure, data, count, error)
     int i, oldi;
     int buf_len;
     int next_out;
-    int tkind;\r
-#ifdef WIN32\r
-       /* For zippy color lines of winboard\r
-        * cleanup for gcc compiler */\r
-       int backup;\r
+    int tkind;
+#ifdef WIN32
+       /* For zippy color lines of winboard
+        * cleanup for gcc compiler */
+       int backup;
 #endif
     char *p;
 
@@ -1728,20 +1750,20 @@ read_from_ics(isr, closure, data, count, error)
 
            oldi = i;
            if (appData.zippyTalk || appData.zippyPlay) {
-#if ZIPPY\r
-       #ifdef WIN32\r
-               /* Backup address for color zippy lines */\r
-               backup = i;\r
-               if (loggedOn == TRUE)\r
-                       if (ZippyControl(buf, &backup) || ZippyConverse(buf, &backup) ||\r
-                               (appData.zippyPlay && ZippyMatch(buf, &backup)));\r
+#if ZIPPY
+       #ifdef WIN32
+               /* Backup address for color zippy lines */
+               backup = i;
+               if (loggedOn == TRUE)
+                       if (ZippyControl(buf, &backup) || ZippyConverse(buf, &backup) ||
+                               (appData.zippyPlay && ZippyMatch(buf, &backup)));
                #else
                if (ZippyControl(buf, &i) ||
                    ZippyConverse(buf, &i) ||
                    (appData.zippyPlay && ZippyMatch(buf, &i))) {
                    loggedOn = TRUE;
                    continue;
-               }\r
+               }
        #endif
 #endif
            }
@@ -4375,7 +4397,7 @@ HandleMachineMove(message, cps)
 
        if (!ignore) {
            buf1[0] = NULLCHAR;
-           if (sscanf(message, "%d%c %d %d %I64u %[^\n]\n",
+           if (sscanf(message, "%d%c %d %d" u64Display "%[^\n]\n",
                       &plylev, &plyext, &curscore, &time, &nodes, buf1) >= 5) {
 
                if (plyext != ' ' && plyext != '\t') {
@@ -4455,7 +4477,7 @@ HandleMachineMove(message, cps)
                    DisplayAnalysis();
                }
                return;
-           } else if (sscanf(message,"stat01: %d %lu %d %d %d %s",
+           } else if (sscanf(message,"stat01: %d" u64Display "%d %d %d %s",
                              &time, &nodes, &plylev, &mvleft,
                              &mvtot, mvname) >= 5) {
                /* The stat01: line is from Crafty (9.29+) in response
@@ -6975,7 +6997,7 @@ MailMoveEvent()
        || (nCmailMovesRegistered + nCmailResults == nCmailGames)) {
        sprintf(string, partCommandString,
                appData.debugMode ? " -v" : "", appData.cmailGameName);
-       commandOutput = popen(string, "rb");
+       commandOutput = popen(string, "r");
 
        if (commandOutput == NULL) {
            DisplayError(_("Failed to invoke cmail"), 0);
@@ -9251,8 +9273,8 @@ DisplayAnalysis()
     if (programStats.got_only_move) {
        strcpy(buf, programStats.movelist);
     } else {
-       nps = (((u64)programStats.nodes) /
-              (((double)programStats.time)/100.0));
+       nps = (u64ToDouble(programStats.nodes) /
+             ((double)programStats.time /100.0));
 
        cs = programStats.time % 100;
        s = programStats.time / 100;
@@ -9263,7 +9285,7 @@ DisplayAnalysis()
 
        if (programStats.moves_left > 0 && appData.periodicUpdates) {
          if (programStats.move_name[0] != NULLCHAR) {
-           sprintf(buf, "depth=%d %d/%d(%s) %+.2f %s%s\nNodes: %I64u NPS: %d\nTime: %02d:%02d:%02d.%02d",
+           sprintf(buf, "depth=%d %d/%d(%s) %+.2f %s%s\nNodes: "u64Display" NPS: %d\nTime: %02d:%02d:%02d.%02d",
                    programStats.depth,
                    programStats.nr_moves-programStats.moves_left,
                    programStats.nr_moves, programStats.move_name,
@@ -9272,7 +9294,7 @@ DisplayAnalysis()
                    xtra[programStats.got_fail] : "",
                    (u64)programStats.nodes, (int)nps, h, m, s, cs);
          } else {
-           sprintf(buf, "depth=%d %d/%d %+.2f %s%s\nNodes: %I64u NPS: %d\nTime: %02d:%02d:%02d.%02d",
+           sprintf(buf, "depth=%d %d/%d %+.2f %s%s\nNodes: "u64Display" NPS: %d\nTime: %02d:%02d:%02d.%02d",
                    programStats.depth,
                    programStats.nr_moves-programStats.moves_left,
                    programStats.nr_moves, ((float)programStats.score)/100.0,
@@ -9282,7 +9304,7 @@ DisplayAnalysis()
                    (u64)programStats.nodes, (int)nps, h, m, s, cs);
          }
        } else {
-           sprintf(buf, "depth=%d %+.2f %s%s\nNodes: %I64u NPS: %d\nTime: %02d:%02d:%02d.%02d",
+           sprintf(buf, "depth=%d %+.2f %s%s\nNodes: "u64Display" NPS: %d\nTime: %02d:%02d:%02d.%02d",
                    programStats.depth,
                    ((float)programStats.score)/100.0,
                    programStats.movelist,