r7944: add saving of wisdom for ctsimtext
[ctsim.git] / tools / ctsimtext.cpp
index ae89495cc2fe5232bbaffe30125609416cb812c5..be55b6ac8bcb36401cf29cb34d94935eb78c91ea 100644 (file)
@@ -117,7 +117,7 @@ int
 ctsimtext_main (int argc, char * argv[])
 {
   int iReturn = 0;  
-  
+
   if (argc > 1 && (strcmp(s_szProgramName, fileBasename (argv[0])) == 0 || strcmp(s_szProgramName2, fileBasename (argv[0])) == 0 || strcmp(s_szProgramName3, fileBasename (argv[0])) == 0)) {
     argv++;
     argc--;
@@ -291,9 +291,41 @@ processCommand (int argc, char* const argv[])
 int 
 main (int argc, char* argv[])
 {
-  int retval = 1;
+#if defined(HAVE_FFTW) && defined(HAVE_GETENV) 
+  const char* const pszHome = getenv("HOME");
+  char* pszWisdom = NULL;
+
+  if (pszHome) {
+    const char szFileBase[] = ".fftw3-wisdom";
+    int nHome = strlen(pszHome);
+    int nBase = strlen(szFileBase);
+    int len = nHome + nBase + 1;
+    pszWisdom = new char [ len + 1 ];
+    strcpy (pszWisdom, pszHome);
+    pszWisdom[nHome] = '/';
+    strcpy(pszWisdom+nHome+1,szFileBase);
+    pszWisdom[nHome+nBase+2] = 0;
+    
+    FILE *wisdom = fopen(pszWisdom,"r");
+    if (wisdom) { 
+      fftw_import_wisdom_from_file(wisdom);
+      fclose(wisdom);
+    }
+  }
+#endif
+
+  int retval = ctsimtext_main(argc, argv);
   
-  retval = ctsimtext_main(argc, argv);
+#if defined(HAVE_FFTW) && defined(HAVE_GETENV) 
+  if (pszWisdom) {
+    FILE* wisdom = fopen(pszWisdom,"w+");
+    if (wisdom) {
+      fftw_export_wisdom_to_file(wisdom);
+      fclose(wisdom);
+      delete [] pszWisdom;
+    }
+  }
+#endif
   
   return retval;
 }