]> Creatis software - gdcm.git/blobdiff - src/gdcmDicomDir.cxx
2004-04-28 Jean-Pierre Roux
[gdcm.git] / src / gdcmDicomDir.cxx
index db6f357fadb67a9e1e560cf8cc3bac36660b70e6..5b1b6e4904841fd0e34e5634e8649239c93cd62a 100644 (file)
@@ -74,10 +74,10 @@ gdcmDicomDir::gdcmDicomDir(const char *FileName, bool parseDir,
 
       if(strlen(FileName)==1 && FileName[0]=='.') { // user passed '.' as Name
                                             // we get current directory name
-         char*dummy=(char*) malloc(1000);
-         getcwd(dummy,(size_t)1000);
+         char* dummy= new char[1000];
+         getcwd(dummy, (size_t)1000);
          SetFileName(dummy); // will be converted into a string
-         free(dummy);        // no longer needed   
+         delete[] dummy;        // no longer needed   
       }
 
       if(parseDir)
@@ -307,26 +307,23 @@ bool gdcmDicomDir::Write(std::string fileName)
       return(false);
    }
 
-   char * filePreamble;
-   filePreamble=(char*)calloc(128,1);
+   char * filePreamble = new char[128];
    fwrite(filePreamble,128,1,fp1);
    fwrite("DICM",4,1,fp1);
-   free(filePreamble);        
+   delete[] filePreamble;
    UpdateDirectoryRecordSequenceLength();
-   WriteDicomDirEntries(fp1);
+   WriteEntries(fp1);
 
    fclose(fp1);
    return true;
 }
 
 /**
- * \ingroup gdcmParser
- * \brief   writes on disc according to the DICOMDIR format
- *          using the tree-like structure
+ * \brief   Writes in a file using the tree-like structure.
  * @param   _fp already open file pointer
  */
 
-void gdcmDicomDir::WriteDicomDirEntries(FILE *_fp)
+void gdcmDicomDir::WriteEntries(FILE *_fp)
 {   
    // TODO (?) tester les echecs en ecriture 
    //          (apres chaque fwrite, dans le WriteEntry)
@@ -340,28 +337,28 @@ void gdcmDicomDir::WriteDicomDirEntries(FILE *_fp)
    
    ptrMeta= GetDicomDirMeta();
    for(i=ptrMeta->debut();i!=ptrMeta->fin();++i) {
-      WriteEntry(*i,_fp,DICOMDIR);
+      WriteEntry(*i,_fp, ExplicitVR);
    }   
     
    itPatient = GetDicomDirPatients().begin(); 
    while ( itPatient != GetDicomDirPatients().end() ) {
       for(i=(*itPatient)->debut();i!=(*itPatient)->fin();++i) {
-         WriteEntry(*i,_fp,DICOMDIR);
+         WriteEntry(*i,_fp, ExplicitVR);
       }
       itStudy = ((*itPatient)->GetDicomDirStudies()).begin();        
       while (itStudy != (*itPatient)->GetDicomDirStudies().end() ) {   
          for(i=(*itStudy)->debut();i!=(*itStudy)->fin();++i) {
-            WriteEntry(*i,_fp,DICOMDIR);
+            WriteEntry(*i,_fp, ExplicitVR);
          } 
          itSerie = ((*itStudy)->GetDicomDirSeries()).begin();
          while (itSerie != (*itStudy)->GetDicomDirSeries().end() ) {
             for(i=(*itSerie)->debut();i!=(*itSerie)->fin();++i) {
-               WriteEntry(*i,_fp,DICOMDIR);
+               WriteEntry(*i,_fp, ExplicitVR);
             }
             itImage = ((*itSerie)->GetDicomDirImages()).begin();
             while (itImage != (*itSerie)->GetDicomDirImages().end() ) {
                for(i=(*itImage)->debut();i!=(*itImage)->fin();++i) {
-                  WriteEntry(*i,_fp,DICOMDIR);
+                  WriteEntry(*i,_fp, ExplicitVR);
                }
                ++itImage;                  
            }
@@ -448,13 +445,13 @@ void gdcmDicomDir::CheckBoundaries()
             itImage = ((*itSerie)->GetDicomDirImages()).begin();
             while (itImage != (*itSerie)->GetDicomDirImages().end() ) {
                (*itImage)->ResetBoundaries(1);
-               ++itImage;
-       }
-       ++itSerie;
-         }
-      ++itStudy;
-      
-      ++itPatient;     
+              ++itImage;
+            }
+            ++itSerie;
+        }
+        ++itStudy;
+     } 
+     ++itPatient;     
    }
 } 
 
@@ -644,6 +641,9 @@ void gdcmDicomDir::AddObjectToEnd(gdcmDicomDirType type,ListTag::iterator begin,
       case gdcmDicomDir::GDCM_DICOMDIR_IMAGE:
          AddDicomDirImageToEnd(begin,end);
          break;
+                       case gdcmDicomDir::GDCM_DICOMDIR_NONE:
+                                AddDicomDirImageToEnd(begin,end);      //FIXME
+                                break;
    }
 }
 
@@ -931,7 +931,8 @@ void gdcmDicomDir::UpdateDirectoryRecordSequenceLength() {
          offset +=  4; // delimiters don't have a value.     
       }            
    }   
-   bool res=SetEntryLengthByNumber(offset, 0x0004, 0x1220); // Hope there is no dupps.
+   //bool res=SetEntryLengthByNumber(offset, 0x0004, 0x1220); // Hope there is no dupps.
+        SetEntryLengthByNumber(offset, 0x0004, 0x1220); // Hope there is no dupps.
    return;
 }