X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src%2FgdcmDocument.cxx;h=c784c14d8b4d0d287cb3093c74e00f02a85060cc;hb=97945d8b11b86924800fe1d78dcbf8a54be75927;hp=1af57e734cef5178d6c3dcfae17b12e726c81a82;hpb=798798c424a52ea234a92110a550f6dd4fa80ef4;p=gdcm.git diff --git a/src/gdcmDocument.cxx b/src/gdcmDocument.cxx index 1af57e73..c784c14d 100644 --- a/src/gdcmDocument.cxx +++ b/src/gdcmDocument.cxx @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: gdcmDocument.cxx,v $ Language: C++ - Date: $Date: 2005/09/22 14:41:24 $ - Version: $Revision: 1.284 $ + Date: $Date: 2005/10/11 14:38:05 $ + Version: $Revision: 1.287 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -966,7 +966,9 @@ void Document::ParseDES(DocEntrySet *set, long offset, bool used; // will be set to false when something wrong happens to an Entry. // (Entry will then be deleted) bool delim_mode_intern = delim_mode; - bool first = true; + bool first = true; + gdcmWarningMacro( "Enter in ParseDES, delim-mode " << delim_mode + << " at offset " << std::hex << offset ); while (true) { if ( !delim_mode && ((long)(Fp->tellg())-offset) >= l_max) @@ -1200,9 +1202,17 @@ void Document::ParseDES(DocEntrySet *set, long offset, if ( l != 0 ) { // Don't try to parse zero-length sequences + + gdcmWarningMacro( "Entry in ParseSQ, delim " << delim_mode_intern + << " at offset " << std::hex + << newDocEntry->GetOffset() ); + ParseSQ( newSeqEntry, newDocEntry->GetOffset(), l, delim_mode_intern); + + gdcmWarningMacro( "Exit from ParseSQ, delim " << delim_mode_intern); + } if ( !set->AddEntry( newSeqEntry ) ) { @@ -1227,6 +1237,7 @@ void Document::ParseDES(DocEntrySet *set, long offset, } first = false; } // end While + gdcmWarningMacro( "Exit from ParseDES, delim-mode " << delim_mode ); } /** @@ -1344,6 +1355,7 @@ return newEntry; * \brief Loads (or not) the element content depending if its length exceeds * or not the value specified with Document::SetMaxSizeLoadEntry() * @param entry Header Entry (Dicom Element) to be dealt with + * @param forceLoad whether you want to force loading of 'long' elements */ void Document::LoadDocEntry(DocEntry *entry, bool forceLoad) { @@ -1503,15 +1515,19 @@ void Document::LoadDocEntry(DocEntry *entry, bool forceLoad) return; } - if ( vr == "UI" ) - { - // Because of correspondance with the VR dic - valEntry->SetValue(newValue); - } - else - { - valEntry->SetValue(newValue); - } +// if ( vr == "UI" ) +// { +// // Because of correspondance with the VR dic +// valEntry->SetValue(newValue); +// } +// else +// { +// valEntry->SetValue(newValue); +// } + +// Anybody remembers the genesis of strange previous (commented out) code? + valEntry->SetValue(newValue); + } else { @@ -2360,6 +2376,22 @@ void Document::HandleBrokenEndian(uint16_t &group, uint16_t &elem) reversedEndian--; SwitchByteSwapCode(); } + else if (group == 0xfeff && elem == 0xdde0) + { + // reversed Sequence Terminator found + // probabely a bug in the header ! + // Do what you want, it breaks ! + //reversedEndian--; + //SwitchByteSwapCode(); + gdcmWarningMacro( "Should never get here! reversed Sequence Terminator!" ); + // fix the tag + group = 0xfffe; + elem = 0xe0dd; + } + else if (group == 0xfffe && elem == 0xe0dd) + { + gdcmWarningMacro( "Straight Sequence Terminator." ); + } } /**