--- Write.c 2007-12-03 18:14:03.000000000 -0600 +++ Write_improved.c 2007-12-03 18:12:55.000000000 -0600 @@ -308,8 +308,8 @@ /*@@ @routine WriteData - @date Thu 18 April 2002 - @author Thomas Radke + @date Mon 3 December 2007 + @author Thomas Radke, Ole Weidner @desc Writes the given hyperslab into a Jpeg output file. @enddesc @@ -322,7 +322,7 @@ unsigned char *dataout; const ioJpegGH *myGH; ioAdvertisedFileDesc advertised_file; - char *filename, *tmpfilename, *fullname; + char *filename_remove_mode, *filename_standard_mode, *tmpfilename, *fullname; char slicename[30]; const char *extensions[] = {"xy", "xz", "yz"}; DECLARE_CCTK_PARAMETERS @@ -347,21 +347,17 @@ sprintf (slicename, "%s_[%d]", extensions[dir], myGH->sp2xyz[dim-1][dir]); } - filename = malloc (strlen (myGH->out_dir) + strlen (alias) + - sizeof (slicename) + 20); - - if (CCTK_Equals (mode, "remove")) - { - sprintf (filename, "%s%s_%s.jpeg", myGH->out_dir, alias, slicename); - tmpfilename = malloc (strlen (filename) + 5); - sprintf (tmpfilename, "%s.tmp", filename); - } - else - { - sprintf (filename, "%s%s_%s.it_%d.jpeg", myGH->out_dir, alias, slicename, - GH->cctk_iteration); - tmpfilename = NULL; - } + filename_remove_mode = malloc (strlen (myGH->out_dir) + strlen (alias) + + sizeof (slicename) + 20); + + filename_standard_mode = malloc (strlen (myGH->out_dir) + strlen (alias) + + sizeof (slicename) + 20); + + sprintf (filename_remove_mode, "%s%s_%s.jpeg", myGH->out_dir, alias, + slicename); + + tmpfilename = malloc (strlen (filename_remove_mode) + 5); + sprintf (tmpfilename, "%s.tmp", filename_remove_mode); /* Write a JPEG file to be advertised to a temporary file first and rename it later. @@ -370,7 +366,7 @@ being written to (in the main simulation thread). Now the JPEG is written to a temporary file first and then (atomically) renamed. */ - file = fopen (tmpfilename ? tmpfilename : filename, "w"); + file = fopen (tmpfilename, "w"); if (file) { /* write the data */ @@ -379,40 +375,57 @@ /* close the file */ fclose (file); - /* in "remove" mode: rename and advertise the file for downloading */ - if (tmpfilename) + if (rename (tmpfilename, filename_remove_mode)) + { + CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING, + "Cannot rename temporary output file '%s' into '%s'", + tmpfilename, filename_remove_mode); + } + else if (myGH->out_last[vindex] < 0) { - if (rename (tmpfilename, filename)) - { - CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING, - "Cannot rename temporary output file '%s' into '%s'", - tmpfilename, filename); - } - else if (myGH->out_last[vindex] < 0) - { - fullname = CCTK_FullName (vindex); - advertised_file.slice = slicename; - advertised_file.thorn = CCTK_THORNSTRING; - advertised_file.varname = fullname; - advertised_file.description = "Jpegs of slices"; - advertised_file.mimetype = "image/jpeg"; + fullname = CCTK_FullName (vindex); + advertised_file.slice = slicename; + advertised_file.thorn = CCTK_THORNSTRING; + advertised_file.varname = fullname; + advertised_file.description = "Jpegs of slices"; + advertised_file.mimetype = "image/jpeg"; - IOUtil_AdvertiseFile (GH, filename, &advertised_file); + IOUtil_AdvertiseFile (GH, filename_remove_mode, &advertised_file); - free (fullname); - } + free (fullname); } } else { CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING, - "Cannot open IOJpeg %s output file '%s'", - tmpfilename ? "temporary" : "", - tmpfilename ? tmpfilename : filename); + "Cannot open IOJpeg temporary output file '%s'", + tmpfilename); } + if (CCTK_Equals (mode, "standard")) + { + sprintf (filename_standard_mode, "%s%s_%s.it_%08d.jpeg", myGH->out_dir, + alias, slicename, GH->cctk_iteration); + + file = fopen (filename_standard_mode, "w"); + if (file) + { + WriteJPEGToFileRGB (hsize[0], hsize[1], dataout, colormap_quality, file); + + /* close the file */ + fclose (file); + } + } + else + { + CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING, + "Cannot open IOJpeg output file '%s'", + filename_standard_mode); + } + /* clean up */ free (dataout); free (tmpfilename); - free (filename); + free (filename_remove_mode); + free (filename_standard_mode); }