2 //-----------------------------------------------------------------------------
4 #include "gdcmHeaderEntry.h"
8 #ifdef GDCM_NO_ANSI_STRING_STREAM
10 # define ostringstream ostrstream
14 #include <iomanip> // for std::ios::left, ...
17 #define MAX_SIZE_PRINT_ELEMENT_VALUE 64
19 //-----------------------------------------------------------------------------
20 // Constructor / Destructor
22 * \ingroup gdcmHeaderEntry
23 * \brief Constructor from a given gdcmDictEntry
24 * @param in Pointer to existing dictionary entry
26 gdcmHeaderEntry::gdcmHeaderEntry(gdcmDictEntry* in) {
28 voidArea = NULL; // unsecure memory area to hold 'non string' values
32 //-----------------------------------------------------------------------------
35 * \ingroup gdcmHeaderEntry
36 * \brief canonical Printer
38 void gdcmHeaderEntry::Print(std::ostream & os) {
40 unsigned short int g, e;
44 gdcmTS * ts = gdcmGlobal::GetTS();
47 char greltag[10]; //group element tag
54 sprintf(greltag,"%04x|%04x ",g,e);
57 d2 = _CreateCleanString(v); // replace non printable characters by '.'
60 lgth = GetReadLength(); // ReadLength, as opposed to UsableLength
61 if (lgth == 0xffffffff) {
62 sprintf(st,"x(ffff)"); // I said : "x(ffff)" !
63 s.setf(std::ios::left);
64 s << std::setw(10-strlen(st)) << " ";
66 s.setf(std::ios::left);
67 s << std::setw(8) << "-1";
69 sprintf(st,"x(%x)",lgth);
70 s.setf(std::ios::left);
71 s << std::setw(10-strlen(st)) << " ";
73 s.setf(std::ios::left);
74 s << std::setw(8) << lgth;
77 sprintf(st,"x(%x)",o);
78 s << std::setw(10-strlen(st)) << " ";
80 s << std::setw(8) << o;
83 s << "[" << vr << "] ";
86 s.setf(std::ios::left);
87 s << std::setw(66-GetName().length()) << " ";
90 s << "[" << GetName()<< "]";
92 if (voidArea != NULL) {
93 s << " [gdcm::Non String Data Loaded in Unsecure Area ("
94 << GetLength() << ") ]";
98 if( (GetLength()<MAX_SIZE_PRINT_ELEMENT_VALUE) ||
100 (d2.find("gdcm::NotLoaded.") < d2.length()) )
101 s << " [" << d2 << "]";
103 s << " [gdcm::too long for print (" << GetLength() << ") ]";
106 // Display the UID value (instead of displaying the rough code)
107 if (g == 0x0002) { // Any more to be displayed ?
108 if ( (e == 0x0010) || (e == 0x0002) )
109 s << " ==>\t[" << ts->GetValue(v) << "]";
112 if ( (e == 0x0016) || (e == 0x1150) )
113 s << " ==>\t[" << ts->GetValue(v) << "]";
116 if ( (e == 0x1510) || (e == 0x1512) )
117 s << " ==>\t[" << ts->GetValue(v) << "]";
121 //if (e == 0x0000) { // elem 0x0000 --> group length
122 if ( (vr == "UL") || (vr == "US") || (vr == "SL") || (vr == "SS") ) {
123 if (v == "4294967295") // to avoid troubles in convertion
124 sprintf (st," x(ffffffff)");
126 sprintf(st," x(%x)",(unsigned long)atof(v.c_str()));
133 //-----------------------------------------------------------------------------
136 //-----------------------------------------------------------------------------
139 //-----------------------------------------------------------------------------
142 //-----------------------------------------------------------------------------