2 //-----------------------------------------------------------------------------
4 #include "gdcmHeaderEntry.h"
6 #include "gdcmGlobal.h"
9 #ifdef GDCM_NO_ANSI_STRING_STREAM
11 # define ostringstream ostrstream
15 #include <iomanip> // for std::ios::left, ...
18 #define MAX_SIZE_PRINT_ELEMENT_VALUE 64
20 //-----------------------------------------------------------------------------
21 // Constructor / Destructor
23 * \ingroup gdcmHeaderEntry
24 * \brief Constructor from a given gdcmDictEntry
25 * @param in Pointer to existing dictionary entry
27 gdcmHeaderEntry::gdcmHeaderEntry(gdcmDictEntry* in) {
29 voidArea = NULL; // unsecure memory area to hold 'non string' values
33 //-----------------------------------------------------------------------------
36 * \ingroup gdcmHeaderEntry
37 * \brief canonical Printer
39 void gdcmHeaderEntry::Print(std::ostream & os) {
41 unsigned short int g, e;
45 gdcmTS * ts = gdcmGlobal::GetTS();
48 char greltag[10]; //group element tag
55 sprintf(greltag,"%04x|%04x ",g,e);
58 d2 = CreateCleanString(v); // replace non printable characters by '.'
61 lgth = GetReadLength(); // ReadLength, as opposed to UsableLength
62 if (lgth == 0xffffffff) {
63 sprintf(st,"x(ffff)"); // I said : "x(ffff)" !
64 s.setf(std::ios::left);
65 s << std::setw(10-strlen(st)) << " ";
67 s.setf(std::ios::left);
68 s << std::setw(8) << "-1";
70 sprintf(st,"x(%x)",lgth);
71 s.setf(std::ios::left);
72 s << std::setw(10-strlen(st)) << " ";
74 s.setf(std::ios::left);
75 s << std::setw(8) << lgth;
78 sprintf(st,"x(%x)",o);
79 s << std::setw(10-strlen(st)) << " ";
81 s << std::setw(8) << o;
84 s << "[" << vr << "] ";
87 s.setf(std::ios::left);
88 s << std::setw(66-GetName().length()) << " ";
91 s << "[" << GetName()<< "]";
93 if (voidArea != NULL) {
94 s << " [gdcm::Non String Data Loaded in Unsecure Area ("
95 << GetLength() << ") ]";
99 if( (GetLength()<MAX_SIZE_PRINT_ELEMENT_VALUE) ||
101 (d2.find("gdcm::NotLoaded.") < d2.length()) )
102 s << " [" << d2 << "]";
104 s << " [gdcm::too long for print (" << GetLength() << ") ]";
107 // Display the UID value (instead of displaying the rough code)
108 if (g == 0x0002) { // Any more to be displayed ?
109 if ( (e == 0x0010) || (e == 0x0002) )
110 s << " ==>\t[" << ts->GetValue(v) << "]";
113 if ( (e == 0x0016) || (e == 0x1150) )
114 s << " ==>\t[" << ts->GetValue(v) << "]";
117 if ( (e == 0x1510) || (e == 0x1512) )
118 s << " ==>\t[" << ts->GetValue(v) << "]";
122 //if (e == 0x0000) { // elem 0x0000 --> group length
123 if ( (vr == "UL") || (vr == "US") || (vr == "SL") || (vr == "SS") ) {
124 if (v == "4294967295") // to avoid troubles in convertion
125 sprintf (st," x(ffffffff)");
127 sprintf(st," x(%x)",(unsigned long)atof(v.c_str()));
134 //-----------------------------------------------------------------------------
137 //-----------------------------------------------------------------------------
140 //-----------------------------------------------------------------------------
143 //-----------------------------------------------------------------------------