r7944: add saving of wisdom for ctsimtext
authorKevin M. Rosenberg <kevin@rosenberg.net>
Sun, 5 Oct 2003 07:09:40 +0000 (07:09 +0000)
committerKevin M. Rosenberg <kevin@rosenberg.net>
Sun, 5 Oct 2003 07:09:40 +0000 (07:09 +0000)
ChangeLog
tools/ctsimtext.cpp

index a8d2ba43c3213dbdd0f671f6824b465a46b13abe..cff130eb4cf976cb7b83376b112700c5a2c7aebb 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,7 @@
 Oct 5, 2003  Version 4.3.0
 
        * Ported to incompatible FFTW3 library. CTSim will no longer compile or run with FFTW2. 
+       * Save FFTW3 in $HOME/.fftw3-wisdom on platforms where getenv function is available
        
 Oct 3, 2003  Version 4.2.7
 
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;
 }