Program: gdcm
Module: $RCSfile: gdcmDicomDir.cxx,v $
Language: C++
- Date: $Date: 2005/10/25 14:52:33 $
- Version: $Revision: 1.167 $
+ Date: $Date: 2005/11/07 10:14:44 $
+ Version: $Revision: 1.172 $
Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
l'Image). All rights reserved. See Doc/License.txt or
{
// user passed '.' as Name
// we get current directory name
- char dummy[1000];
- getcwd(dummy, (size_t)1000);
- SetFileName( dummy ); // will be converted into a string
+ char buf[2048];
+ const char *cwd = getcwd(buf, 2048);
+ if( cwd )
+ {
+ SetFileName( buf ); // will be converted into a string
+ }
+ else
+ {
+ gdcmErrorMacro( "Path was too long to fit on 2048 bytes" );
+ }
}
NewMeta();
- gdcmWarningMacro( "Parse directory and create the DicomDir : "
+ gdcmDebugMacro( "Parse directory and create the DicomDir : "
<< GetFileName() );
ParseDirectory();
}
{
if ( Filetype == Unknown )
{
- gdcmWarningMacro( "Wrong filetype");
+ gdcmErrorMacro( "Wrong filetype for " << GetFileName());
return false;
}
if ( !MetaElems )
bool DicomDir::Write(std::string const &fileName)
{
int i;
- uint16_t sq[4] = { 0x0004, 0x1220, 0xffff, 0xffff };
+ uint16_t sq[6] = { 0x0004, 0x1220, 0x5153, 0x0000, 0xffff, 0xffff };
uint16_t sqt[4]= { 0xfffe, 0xe0dd, 0xffff, 0xffff };
std::ofstream *fp = new std::ofstream(fileName.c_str(),
ptrMeta->WriteContent(fp, ExplicitVR);
// force writing 0004|1220 [SQ ], that CANNOT exist within DicomDirMeta
- for(i=0;i<4;++i)
+ for(i=0;i<6;++i)
{
binary_write(*fp, sq[i]);
}
}
f = File::New( );
- f->SetLoadMode(LoadMode); // we allow user not to load Sequences, or Shadow
- // groups, or ......
+ f->SetLoadMode(LoadMode); // we allow user not to load Sequences,
+ // or Shadow groups, or ......
f->SetFileName( it->c_str() );
f->Load( );
{
// Add the file to the chained list:
list.push_back(f);
- gdcmWarningMacro( "Readable " << it->c_str() );
+ gdcmDebugMacro( "Readable " << it->c_str() );
}
else
{
{
// It was neither a 'PATIENT', nor a 'STUDY', nor a 'SERIE',
// nor an 'IMAGE' SQItem. Skip to next item.
- gdcmWarningMacro( " -------------------------------------------"
+ gdcmDebugMacro( " -------------------------------------------"
<< "a non PATIENT/STUDY/SERIE/IMAGE SQItem was found : "
<< v);
default:
return;
}
+
+ // FIXME : troubles found when it's a SeqEntry
+
// removed all the seems-to-be-useless stuff about Referenced Image Sequence
// to avoid further troubles
// imageElem 0008 1140 "" // Referenced Image Sequence
// imageElem 0008 1155 "" // Referenced SOP Instance UID : to be set/forged later
// imageElem fffe e00d "" // Item delimitation : length to be set to ZERO later
- // FIXME : troubles found when it's a SeqEntry
-
+ std::string referencedVal;
// for all the relevant elements found in their own spot of the DicomDir.dic
for( it = elemList.begin(); it != elemList.end(); ++it)
{
{
// NULL when we Build Up (ex nihilo) a DICOMDIR
// or when we add the META elems
- val = header->GetEntryString(tmpGr, tmpEl);
+
+ val = header->GetEntryString(tmpGr, tmpEl);
}
else
{
}
if ( val == GDCM_UNFOUND)
- {
- if ( tmpGr == 0x0004 && tmpEl == 0x1130 ) // File-set ID
- {
- // force to the *end* File Name
- val = Util::GetName( path );
- }
- else if ( tmpGr == 0x0004 && tmpEl == 0x1500 ) // Only used for image
+ {
+ if ( tmpGr == 0x0004 ) // never present in File !
{
- if ( header->GetFileName().substr(0, path.length()) != path )
- {
- gdcmWarningMacro( "The base path of file name is incorrect");
- val = header->GetFileName();
- }
- else
- {
- val = &(header->GetFileName().c_str()[path.length()]);
- }
- }
- else
- {
- val = it->Value;
+ switch (tmpEl)
+ {
+ case 0x1130: // File-set ID
+ // force to the *end* File Name
+ val = Util::GetName( path );
+ break;
+
+ case 0x1500: // Only used for image
+ if ( header->GetFileName().substr(0, path.length()) != path )
+ {
+ gdcmWarningMacro( "The base path of file name is incorrect");
+ val = header->GetFileName();
+ }
+ else
+ {
+ val = &(header->GetFileName().c_str()[path.length()+1]);
+ }
+ break;
+
+ case 0x1510: // Referenced SOP Class UID in File
+ referencedVal = header->GetEntryString(0x0008, 0x0016);
+ // FIXME : probabely something to check
+ val = referencedVal;
+ break;
+
+ case 0x1511: // Referenced SOP Instance UID in File
+ referencedVal = header->GetEntryString(0x0008, 0x0018);
+ // FIXME : probabely something to check
+ val = referencedVal;
+ break;
+
+ case 0x1512: // Referenced Transfer Syntax UID in File
+ referencedVal = header->GetEntryString(0x0002, 0x0010);
+ // FIXME : probabely something to check
+ val = referencedVal;
+ break;
+
+ default :
+ val = it->Value;
+ }
}
}
else
val = it->Value;
}
+/* FIX later the pb of creating the 'Implementation Version Name'!
+
+ if (val == GDCM_UNFOUND)
+ val = "";
+
+ if ( tmpGr == 0x0002 && tmpEl == 0x0013)
+ {
+ // 'Implementation Version Name'
+ std::string val = "GDCM ";
+ val += Util::GetVersion();
+ }
+*/
entry->SetString( val ); // troubles expected when vr=SQ ...
if ( type == GDCM_DICOMDIR_META ) // fusible : should never print !
{
- gdcmWarningMacro("GDCM_DICOMDIR_META ?!? should never print that");
+ gdcmDebugMacro("GDCM_DICOMDIR_META ?!? should never print that");
}
si->AddEntry(entry);
entry->Delete();