]> Creatis software - gdcm.git/blob - src/gdcmHeaderEntry.cxx
* Bug fix on field having a VR = 'UI'. Assume that is a string field
[gdcm.git] / src / gdcmHeaderEntry.cxx
1 // gdcmHeaderEntry.cxx
2 //-----------------------------------------------------------------------------
3 //
4 #include "gdcmHeaderEntry.h"
5 #include "gdcmTS.h"
6 #include "gdcmUtil.h"
7
8 #ifdef GDCM_NO_ANSI_STRING_STREAM
9 #  include <strstream>
10 #  define  ostringstream ostrstream
11 # else
12 #  include <sstream>
13 #endif
14 #include <iomanip> // for std::ios::left, ...
15
16 //-----------------------------------------------------------------------------
17 // Constructor / Destructor
18 /**
19  * \ingroup gdcmHeaderEntry
20  * \brief   Constructor from a given gdcmDictEntry
21  * @param   in Pointer to existing dictionary entry
22  */
23 gdcmHeaderEntry::gdcmHeaderEntry(gdcmDictEntry* in) {
24         ImplicitVR = false;
25         entry = in;
26 }
27
28 //-----------------------------------------------------------------------------
29 // Print
30 void gdcmHeaderEntry::Print(std::ostream & os) {
31    size_t o;
32    unsigned short int g, e;
33    char st[20];
34    TSKey v;
35    std::string d2;
36    gdcmTS * ts = gdcmGlobal::GetTS();
37    std::ostringstream s;
38    guint32 lgth;
39    char greltag[10];  //group element tag
40       
41    g = GetGroup();
42    e = GetElement();
43    v = GetValue();
44    o = GetOffset();
45    sprintf(greltag,"%04x|%04x ",g,e);           
46    s << greltag ;
47        
48    d2 = _CreateCleanString(v);  // replace non printable characters by '.'
49    if (printLevel>=2) { 
50       s << "lg : ";
51       lgth = GetReadLength();
52       if (lgth == 0xffffffff) {
53          sprintf(st,"x(ffff)");  // I said : "x(ffff)" !
54          s.setf(std::ios::left);
55          s << std::setw(10-strlen(st)) << " ";  
56          s << st << " ";
57          s.setf(std::ios::left);
58          s << std::setw(8) << "-1";      
59       } else {
60          sprintf(st,"x(%x)",lgth);
61          s.setf(std::ios::left);
62          s << std::setw(10-strlen(st)) << " ";  
63          s << st << " ";
64          s.setf(std::ios::left);
65          s << std::setw(8) << lgth; 
66       }
67       s << " Off.: ";
68       sprintf(st,"x(%x)",o); 
69       s << std::setw(10-strlen(st)) << " ";
70       s << st << " ";
71       s << std::setw(8) << o; 
72    }
73
74    s << "[" << GetVR()  << "] ";
75
76    if (printLevel>=1) {      
77       s.setf(std::ios::left);
78       s << std::setw(66-GetName().length()) << " ";              
79    } 
80      
81    s << "[" << GetName()<< "]";       
82    s << " [" << d2 << "]";
83
84    // Display the UID value (instead of displaying the rough code)  
85    if (g == 0x0002) {  // Any more to be displayed ?
86       if ( (e == 0x0010) || (e == 0x0002) )
87          s << "  ==>\t[" << ts->GetValue(v) << "]";
88    } else {
89       if (g == 0x0008) {
90          if ( (e == 0x0016) || (e == 0x1150)  )
91             s << "  ==>\t[" << ts->GetValue(v) << "]";
92       }
93    }
94    if (e == 0x0000) {        // elem 0x0000 --> group length 
95       if (v == "4294967295") // to avoid troubles in convertion 
96          sprintf (st," x(ffffffff)");
97       else      
98          sprintf(st," x(%08x)",atoi(v.c_str()));
99       s << st;
100    }
101    s << std::endl;
102    os << s.str();
103 }
104
105 //-----------------------------------------------------------------------------
106 // Public
107
108 //-----------------------------------------------------------------------------
109 // Protected
110
111 //-----------------------------------------------------------------------------
112 // Private
113
114 //-----------------------------------------------------------------------------