]> Creatis software - gdcm.git/blobdiff - src/gdcmHeaderEntry.cxx
upgrade GdcmHeaderEntry Print Method for DICOMDIR
[gdcm.git] / src / gdcmHeaderEntry.cxx
index f2e78cb82f5763196731f62d5f659b3c5ded7779..e53120744a3385ac0f75921753cd04a5ca6439f3 100644 (file)
  * @param   in Pointer to existing dictionary entry
  */
 gdcmHeaderEntry::gdcmHeaderEntry(gdcmDictEntry* in) {
-       ImplicitVr = false;
+       ImplicitVR = false;
        entry = in;
 }
 
 //-----------------------------------------------------------------------------
 // Print
-
 void gdcmHeaderEntry::Print(std::ostream & os) {
    size_t o;
    unsigned short int g, e;
    char st[20];
    TSKey v;
-   std::string d2;
+   std::string d2, vr;
    gdcmTS * ts = gdcmGlobal::GetTS();
    std::ostringstream s;
    guint32 lgth;
    char greltag[10];  //group element tag
-      
-      g = GetGroup();
-      e = GetElement();
-      v = GetValue();
-      o = GetOffset();
-      sprintf(greltag,"%04x|%04x ",g,e);           
-      d2 = _CreateCleanString(v);  // replace non printable characters by '.'
-      s << greltag ;
-          
-      if (printLevel>=2) { 
-         s << "lg : ";
-         lgth = GetReadLength();
-         if (lgth == 0xffffffff) {
-            sprintf(st,"x(%ff)");
-            s.setf(std::ios::left);
-            s << std::setw(10-strlen(st)) << " ";  
-            s << st << " ";
-            s.setf(std::ios::left);
-            s << std::setw(8) << "-1";      
-         } else {
-            sprintf(st,"x(%x)",lgth);
-            s.setf(std::ios::left);
-            s << std::setw(10-strlen(st)) << " ";  
-            s << st << " ";
-            s.setf(std::ios::left);
-            s << std::setw(8) << lgth; 
-         }
-         s << " Off.: ";
-         sprintf(st,"x(%x)",o); 
-         s << std::setw(10-strlen(st)) << " ";       
+   g  = GetGroup();
+   e  = GetElement();
+   v  = GetValue();
+   o  = GetOffset();
+   vr = GetVR();
+   sprintf(greltag,"%04x|%04x ",g,e);           
+   s << greltag ;
+       
+   d2 = _CreateCleanString(v);  // replace non printable characters by '.'
+   if (printLevel>=2) { 
+      s << "lg : ";
+      lgth = GetReadLength();
+      if (lgth == 0xffffffff) {
+         sprintf(st,"x(ffff)");  // I said : "x(ffff)" !
+         s.setf(std::ios::left);
+         s << std::setw(10-strlen(st)) << " ";  
+         s << st << " ";
+         s.setf(std::ios::left);
+         s << std::setw(8) << "-1";      
+      } else {
+         sprintf(st,"x(%x)",lgth);
+         s.setf(std::ios::left);
+         s << std::setw(10-strlen(st)) << " ";  
          s << st << " ";
-         s << std::setw(8) << o; 
-      }
-      if (printLevel>=1) {      
-         s << "[" << GetVR()  << "] ";
          s.setf(std::ios::left);
-         s << std::setw(66-GetName().length()) << " ";          
-      } 
-        
-      s << "[" << GetName()<< "]";       
+         s << std::setw(8) << lgth; 
+      }
+      s << " Off.: ";
+      sprintf(st,"x(%x)",o); 
+      s << std::setw(10-strlen(st)) << " ";
+      s << st << " ";
+      s << std::setw(8) << o; 
+   }
+
+   s << "[" << vr  << "] ";
+
+   if (printLevel>=1) {      
+      s.setf(std::ios::left);
+      s << std::setw(66-GetName().length()) << " ";             
+   } 
+     
+   s << "[" << GetName()<< "]";       
+   if( (GetLength()<64) || (printLevel>=3) )
       s << " [" << d2 << "]";
-       // Display the UID value (instead of displaying the rough code)  
-      if (g == 0x0002) {  // Any more to be displayed ?
-         if ( (e == 0x0010) || (e == 0x0002) )            
-            s << "  ==>\t[" << ts->GetValue(v) << "]";   
+   else
+      s << " [ gdcm::too long for print (" << GetLength() << ") ]";
+
+   // Display the UID value (instead of displaying the rough code)  
+   if (g == 0x0002) {  // Any more to be displayed ?
+      if ( (e == 0x0010) || (e == 0x0002) )
+         s << "  ==>\t[" << ts->GetValue(v) << "]";
+   } else {
+      if (g == 0x0008) {
+         if ( (e == 0x0016) || (e == 0x1150)  )
+            s << "  ==>\t[" << ts->GetValue(v) << "]";
       } else {
-         if (g == 0x0008) {
-            if ( (e == 0x0016) || (e == 0x1150)  )        
-               s << "  ==>\t[" << ts->GetValue(v) << "]"; 
-         }
-      } 
-      if (e == 0x0000) {        // elem 0x0000 --> group length 
-        if (v == "4294967295") // to avoid troubles in convertion 
-           sprintf (st," x(ffffffff)");
-        else   
-            sprintf(st," x(%08x)",atoi(v.c_str()));
-         s << st;
-      }                     
-      s << std::endl;
-      os << s.str();
+         if (g == 0x0004) {
+           if ( (e == 0x1510) || (e == 0x1512)  )
+              s << "  ==>\t[" << ts->GetValue(v) << "]";
+        }     
+      }
+   }
+   //if (e == 0x0000) {        // elem 0x0000 --> group length 
+   if ( (vr == "UL") || (vr == "US") || (vr == "SL") || (vr == "SS") ) {
+      if (v == "4294967295") // to avoid troubles in convertion 
+         sprintf (st," x(ffffffff)");
+      else     
+         sprintf(st," x(%x)",(unsigned long)atof(v.c_str()));
+      s << st;
+   }
+   s << std::endl;
+   os << s.str();
 }
 
 //-----------------------------------------------------------------------------