From 47a2f450489300b3658e5d4ac66eeb2649ae132d Mon Sep 17 00:00:00 2001
From: Christophe Geuzaine <cgeuzaine@ulg.ac.be>
Date: Sat, 29 Sep 2012 11:45:46 +0000
Subject: [PATCH] allow to Printf lists directly (if no % format is given)

---
 Parser/Gmsh.tab.cpp | 25 ++++++++++++++++++++-----
 Parser/Gmsh.y       | 25 ++++++++++++++++++++-----
 2 files changed, 40 insertions(+), 10 deletions(-)

diff --git a/Parser/Gmsh.tab.cpp b/Parser/Gmsh.tab.cpp
index 014da01652..ed81f9fecf 100644
--- a/Parser/Gmsh.tab.cpp
+++ b/Parser/Gmsh.tab.cpp
@@ -10383,15 +10383,30 @@ yyreturn:
 
 int PrintListOfDouble(char *format, List_T *list, char *buffer)
 {
-  int j, k;
-  char tmp1[256], tmp2[256];
+  // if format does not contain formatting characters, simply append values to
+  // format using %g formatting; useful for quick debugging of lists
+  int numFormats = 0;
+  for(int i = 0; i < strlen(format); i++)
+    if(format[i] == '%') numFormats++;
+  if(!numFormats){
+    strcpy(buffer, format);
+    for(int i = 0; i < List_Nbr(list); i++){
+      double d;
+      List_Read(list, i, &d);
+      char tmp[256];
+      sprintf(tmp, " %g", d);
+      strcat(buffer, tmp);
+    }
+    return 0;
+  }
 
-  j = 0;
+  char tmp1[256], tmp2[256];
+  int j = 0, k = 0;
   buffer[j] = '\0';
 
   while(j < (int)strlen(format) && format[j] != '%') j++;
   strncpy(buffer, format, j);
-  buffer[j]='\0';
+  buffer[j] = '\0';
   for(int i = 0; i < List_Nbr(list); i++){
     k = j;
     j++;
@@ -10409,7 +10424,7 @@ int PrintListOfDouble(char *format, List_T *list, char *buffer)
       }
     }
     else
-      return List_Nbr(list)-i;
+      return List_Nbr(list) - i;
   }
   if(j != (int)strlen(format))
     return -1;
diff --git a/Parser/Gmsh.y b/Parser/Gmsh.y
index a08c87b7ec..6cf6896d2d 100644
--- a/Parser/Gmsh.y
+++ b/Parser/Gmsh.y
@@ -4502,15 +4502,30 @@ StringExpr :
 
 int PrintListOfDouble(char *format, List_T *list, char *buffer)
 {
-  int j, k;
-  char tmp1[256], tmp2[256];
+  // if format does not contain formatting characters, simply append values to
+  // format using %g formatting; useful for quick debugging of lists
+  int numFormats = 0;
+  for(int i = 0; i < strlen(format); i++)
+    if(format[i] == '%') numFormats++;
+  if(!numFormats){
+    strcpy(buffer, format);
+    for(int i = 0; i < List_Nbr(list); i++){
+      double d;
+      List_Read(list, i, &d);
+      char tmp[256];
+      sprintf(tmp, " %g", d);
+      strcat(buffer, tmp);
+    }
+    return 0;
+  }
 
-  j = 0;
+  char tmp1[256], tmp2[256];
+  int j = 0, k = 0;
   buffer[j] = '\0';
 
   while(j < (int)strlen(format) && format[j] != '%') j++;
   strncpy(buffer, format, j);
-  buffer[j]='\0';
+  buffer[j] = '\0';
   for(int i = 0; i < List_Nbr(list); i++){
     k = j;
     j++;
@@ -4528,7 +4543,7 @@ int PrintListOfDouble(char *format, List_T *list, char *buffer)
       }
     }
     else
-      return List_Nbr(list)-i;
+      return List_Nbr(list) - i;
   }
   if(j != (int)strlen(format))
     return -1;
-- 
GitLab