]> Creatis software - gdcm.git/blobdiff - Example/AnonymizeDicomDir.cxx
Modify TestValidate to compile with New() vs new
[gdcm.git] / Example / AnonymizeDicomDir.cxx
index f4ab3fe3dba629b8805e1892851bdec3dba31df8..747714b538ff476dd775f5c4c4d9f03e06177204 100644 (file)
@@ -3,8 +3,8 @@
   Program:   gdcm
   Module:    $RCSfile: AnonymizeDicomDir.cxx,v $
   Language:  C++
-  Date:      $Date: 2005/06/07 14:41:47 $
-  Version:   $Revision: 1.3 $
+  Date:      $Date: 2005/10/25 14:52:26 $
+  Version:   $Revision: 1.9 $
                                                                                 
   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
   l'Image). All rights reserved. See Doc/License.txt or
@@ -22,7 +22,7 @@
 
 #include "gdcmSQItem.h"
 #include "gdcmSeqEntry.h"
-#include "gdcmValEntry.h"
+#include "gdcmDataEntry.h"
 
 #include "gdcmDocument.h"
 #include "gdcmFile.h"
@@ -55,7 +55,7 @@ void AnoNoLoad(gdcm::SQItem *s, std::fstream *fp,
    if ( d == NULL)
       return;
 
-   if ( ! dynamic_cast<gdcm::ValEntry *>(d) )
+   if ( ! dynamic_cast<gdcm::DataEntry *>(d) )
       return;
 
    offset = d->GetOffset();
@@ -70,6 +70,7 @@ void AnoNoLoad(gdcm::SQItem *s, std::fstream *fp,
    fp->write( v.c_str(), lgth );
 }
 
+
 int main(int argc, char *argv[])
 { 
 
@@ -85,7 +86,7 @@ int main(int argc, char *argv[])
    // ----- Initialize Arguments Manager ------   
    gdcm::ArgMgr *am = new gdcm::ArgMgr(argc, argv);
   
-   if (am->ArgMgrDefined("usage")) 
+   if (argc == 1 || am->ArgMgrDefined("usage")) 
    {
       am->ArgMgrUsage(usage); // Display 'usage'
       delete am;
@@ -94,35 +95,43 @@ int main(int argc, char *argv[])
  
    char *fileName  = am->ArgMgrWantString("filein",usage); 
 
-   delete am;  // we don't need Argument Manager any longer
+   // if unused Param we give up
+   if ( am->ArgMgrPrintUnusedLabels() )
+   { 
+      am->ArgMgrUsage(usage);
+      delete am;
+      return 0;
+   }
+   delete am;  // --- we don't need Argument Manager any longer ---
 
-// ============================================================
-//   Read the input DICOMDIR
-// ============================================================
 
-   gdcm::File *f1 = new gdcm::File( fileName );
-   if (!f1->IsReadable()) {
+   //   Read the input DICOMDIR
+   gdcm::File *f;
+   f = gdcm::File::New( );
+   f->SetLoadMode(0);
+   f->SetFileName( fileName );
+   bool res = f->Load();  
+   if ( !res )
+   {
        std::cerr << "Sorry, " << fileName <<"  not a gdcm-readable "
                  << "file" <<std::endl;
    }
    std::cout << " ... is readable " << std::endl;
 
-   // Directory record sequence
-   gdcm::DocEntry *e = f1->GetDocEntry(0x0004, 0x1220);
+   // Look for Directory record sequence
+   gdcm::DocEntry *e = f->GetDocEntry(0x0004, 0x1220);
    if ( !e )
    {
       std::cout << "No Directory Record Sequence (0004,1220) found" <<std::endl;;
-      delete f1;
-      delete e;
-      return 0;         
+      f->Delete();
+      return 0;
    }
    
    gdcm::SeqEntry *s = dynamic_cast<gdcm::SeqEntry *>(e);
    if ( !s )
    {
       std::cout << "Element (0004,1220) is not a Sequence ?!?" <<std::endl;
-      delete f1;
-      delete e;
+      f->Delete();
       return 0;
    }
 
@@ -139,19 +148,20 @@ int main(int argc, char *argv[])
    while(tmpSI)
    {
       d = tmpSI->GetDocEntry(0x0004, 0x1430); // Directory Record Type
-      if ( gdcm::ValEntry* valEntry = dynamic_cast<gdcm::ValEntry *>(d) )
+      if ( gdcm::DataEntry *dataEntry = dynamic_cast<gdcm::DataEntry *>(d) )
       {
-         v = valEntry->GetValue();
+         v = dataEntry->GetString();
       }
       else
       {
-         std::cout << "(0004,1430) not a ValEntry ?!?" << std::endl;
+         std::cout << "(0004,1430) not a DataEntry ?!?" << std::endl;
          continue;
       }
 
-      if( v != "PATIENT " )
+      if( v != "PATIENT " )  // Work only on PATIENT
       {
-         continue;          // Work only on PATIENT
+         tmpSI=s->GetNextSQItem();
+         continue;
       }
 
       oss << patientNumber;      
@@ -167,7 +177,7 @@ int main(int argc, char *argv[])
      // Telephone
       AnoNoLoad(tmpSI, fp, 0x0010, 0x2154, oss.str()); 
 
-    // Aware use will add more Entries he wants to rubb out here
+      // Aware use will add here more Entries if he wants to rubb them out
 
       oss << "";
       patientNumber++;
@@ -179,8 +189,7 @@ int main(int argc, char *argv[])
    fp->close();
 
    delete fp;
-   delete e;   
-   delete f1;
+   f->Delete();
    return 0;
 }