X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=ChangeLog;h=eb732c6c24418c923226f41d25093475735ccb63;hb=00b6e0ddcbdbd41252e03732783f65efe5f52526;hp=b514df3f0e6b95c1ae4b745b8a5d57c0b5fa28da;hpb=31bb4e18ba6804c0d83fc34f11e89adc67271ea9;p=gdcm.git diff --git a/ChangeLog b/ChangeLog index b514df3f..eb732c6c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,15 +1,444 @@ +2004-06-23 Eric Boix + * Test/PrintAllDocument.cxx: looping on files is now effective. It used to + loop on the same image until memory went out. + Note: this means we still have gobs of memory loss in PrintDocument + * src/gdcmDocument.cxx: fixes problem on parsing on file + gdcmData/16BitsJpegLosslessGrayScale.dcm. +2004-06-24 Jean-Pierre Roux +FIX : Write - All the Sequences and Sequence Item are now written + as 'no length' stuff, and a Sequence Delimitor aor an Item Delimitor + is added a the end, when necessary. + - A lot of brain-damaged images, that were read correctly are + now written correctly + - length compatible BinEntry are now loaded correctly + (even for odd groups) + Note : only Explicit Value Representation was checked. + (question : is implicit VR really necessary for gdcm ?) + +2004-06-23 Eric Boix + * DEVELOPPER: added a proposition of coding style. + * src/gdcmDocEntry.h: removed every inline declaration (for test of + coding style). + +2004-06-23 Eric Boix + * gdcmDocEntry::PrintCommonPart() and ::WriteCommonPart() removed. + Use the gdcmDocEntry::Print() and Write() instead. + * src/gdcmDocument.cxx: bug fix. + +2004-06-22 Jean-Pierre Roux + FIX : gdcmDocument.cxx + - Now we do recognize the JpegLossLess format (there was a misstyping in + code 'beautyfication' :-( + - Now we automaticaticaly load the Luts, if any + +2004-06-22 Jean-Pierre Roux + In order : to write Sequences, whatever their imbrication level, + : to allow user to create his own Sequences + a lot of modif where necessary (adding, moving, or virtualising methods) + +WARNING : save your own sources *before* cvs up ! + + - gdcmBinEntry + ADD virtual void Write(FILE *fp, FileType filetype); + + - gdcmDocEntry + ADD virtual void Write(FILE *fp, FileType filetype); + ADD void gdcmDocEntry::WriteCommonPart(FILE *fp, FileType filetype); + + - gdcmDocEntrySet + ADD virtual void Write (FILE *fp, FileType filetype)=0; + ADD virtual gdcmDocEntry *GetDocEntryByNumber(guint16 group,guint16 element) = 0; + ADD gdcmDocEntry *GetDocEntryByName(std::string name); + ADD virtual std::string GetEntryByNumber(guint16 group,guint16 element) = 0; + ADD std::string GetEntryByName(TagName name); + ADD gdcmDictEntry *NewVirtualDictEntry(guint16 group, + guint16 element, + std::string vr = "unkn", + std::string fourth = "unkn", + std::string name = "unkn"); + ADD gdcmValEntry *NewValEntryByNumber(guint16 group, guint16 element); + ADD gdcmBinEntry *NewBinEntryByNumber(guint16 group, guint16 element); + ADD gdcmDocEntry *NewDocEntryByNumber(guint16 group, guint16 element); + ADD gdcmDocEntry *NewDocEntryByName (std::string Name); + ADD gdcmDictEntry *GetDictEntryByName (std::string Name); + ADD gdcmDictEntry *GetDictEntryByNumber(guint16, guint16); + REM virtual gdcmDocEntry *NewDocEntryByNumber(guint16 group, guint16 element)=0; + REM virtual gdcmDocEntry *NewDocEntryByName (std::string Name)=0; + + - gdcmDocument + ADD virtual bool WriteF(FileType type); // New stuff, with recursive exploration + ADD virtual std::string GetEntryByName (TagName tagName); + ADD virtual std::string GetEntryVRByName (TagName tagName); + REM virtual bool Write(FILE *, FileType); + REM virtual void WriteEntryTagVRLength(gdcmDocEntry *tag, + FILE *_fp, FileType type); + REM virtual void WriteEntryValue(gdcmDocEntry *tag,FILE *_fp,FileType type); + REM virtual bool WriteEntry(gdcmDocEntry *tag,FILE *_fp,FileType type); + REM virtual bool WriteEntries(FILE *_fp,FileType type); + REM virtual std::string GetEntryByName (std::string tagName); + REM virtual std::string GetEntryVRByName (std::string tagName); + REM gdcmDictEntry *GetDictEntryByName (std::string Name); + REM gdcmDictEntry *GetDictEntryByNumber(guint16, guint16); + REM gdcmDictEntry *NewVirtualDictEntry(guint16 group, + guint16 element, + std::string vr = "unkn", + std::string fourth = "unkn", + std::string name = "unkn"); + REM gdcmDocEntry *NewDocEntryByNumber(guint16 group, guint16 element); + REM gdcmDocEntry *NewDocEntryByName (std::string Name); + REM gdcmValEntry *NewValEntryByNumber(guint16 group, guint16 element); + REM gdcmBinEntry *NewBinEntryByNumber(guint16 group, guint16 element); + + - gdcmElementSet + ADD virtual void Write(FILE *fp, FileType filetype); + + - gdcmSeqEntry + ADD virtual void Write(FILE *fp,FileType filetype); + + - gdcmSQItem + ADD virtual void Write(FILE *fp, FileType filetype); + ADD virtual std::string GetEntryByNumber(guint16 group, guint16 element); + REM std::string GetEntryByNumber(guint16 group, guint16 element); + REM std::string GetEntryByName(TagName name); + + - gdcmValEntry + ADD virtual void gdcmValEntry::Write(FILE *fp, FileType filetype); + +2004-06-21 Eric Boix + * Test/TestWriteSimple.cxx: fix to gdcmHeader-gdcmHeaderHelper revamping. + The default constructor invoked by the line + gdcmHeader *f1 = new gdcmHeader( header ); + was gdcmHeader::gdcmHeader(bool) instead of the expected + gdcmHeader::gdcmHeader(std::string const &, bool = false, bool, bool). + Hence the parsing wasn't executed... See also below. + * src/gdcmHeader.h: the declaration of gdcmHeader::gdcmHeader(bool) + as explicit constructor didn't do the trick to fix the above problem. + Could anyone explain why ? + * src/gdcmBinEntry.cxx, gdcmValEntry.cxx: gdcmBinEntry::Print() now + properly calls gdcmValEntry::Print() (that was weed out from + code related to gdcmBinEntry). + +2004-06-20 Eric Boix + * In order to fix memory leaks: + - Test/TestWriteSimple.cxx: added cleaning of free store through + some delete calls. + - src/gdcmBinEntry.cxx: fix to avoid SegFault. + - src/gdcmDicomDir.[cxx|h]: fixed initialisation in constructor + gdcmDicomDir::gdcmDicomDir(bool) [either the constructor itself + (through the call to ::AddDicomDirMeta()) or the destructor + would crash when deleting uninitialized ::metaElems]. + - src/gdcmDictEntry.cxx: annotation of ununderstood memory leak. + - src/gdcmDocument.cxx: + -- ::~gdcmDocument() destructor now cleans up all dictionary entries + from dynamic stores. + -- ::ParseDES() misplaced deletion of temporary NewDocEntry + was causing memory leaks. + - src/gdcmSQItem.cxx: + -- ::~gdcmSQItem() dummy code cleaned (learned that deletion is + cleanly handled with polymophism: sorry but my milage is low). + -- ::SetEntryByNumber(string, guint16, guint16) now cleanly allocates + a gdcmValENtry, and makes no assumption on type (gdcmDocEntry, + gdcmSeqEntry vs gdcmValEntry) of existing entry (when present). + This avoids SegFaulting. + - src/gdcmSQItem.h: coding style. + * Conclusion: + - Test/TestWriteSimple still severely sucks. The output image content + (when $(GDCMDATA_HOME)/012345.002.050.dcm in input) is brain + damaged when displayed with vtkgdcmViewer. + - on memory leaks: TestWriteSimple leaks really less (see entry + of 2004-06-18 in Changelog file for the call to valgrind). + - on segfaults: ctest now passes all the tests but one (no more + segfaults). + * Erroneous leading white fix: + - src/gdcmDict.cxx: getline(from,xxx) doesn't remove the leading + white[s] (as opposed to from >> xxx, that removes it [them]. + - src/gdcmTS.cxx: ditto. + - gdcmPython/testSuite.py: dirty related kludge removed. + * src/*: remaining references to gdcmParser removed. + * src/*[cxx|h]: added copy[way]left header. + + +2004-06-18 Eric Boix + * In order to fix writing of dicom files: + - Test/TestWriteSimple.cxx: a simpler example of writing. + - Test/CMakeLists.txt changed accordingly. + - src/gdcmDocument.cxx: + -- The destructor now recursilvely removes potential sequences. + -- Bug fix in ::IsJPEG2000() + -- ::ReplaceOrCreateByNumber(std::string, guint16, guint16) + now handles promotion of gdcmDocEntry to gdcmValEntry in a cleaner + manner. + -- ::GetValEntryByNumber(guint16, guint16) now defined (as opposed + to only declared) and build on top of + ::GetDocEntryByNumber(guint16, guint16). + -- ::SetEntryByNumber() now uses GetValEntryByNumber(group, element) + - src/gdcmElementSet.[h|cxx]: added ::RemoveEntry(gdcmDocEntry *) + for usage in destructor and treatement of promotion in + ::ReplaceOrCreateByNumber(). + - src/gdcmSQItem.cxx: destructor should better handle his job. + Test/TestWriteSimple now runs (or at least it DOES something). + * We can now start hutting memory links. A good starting point is: + valgrind -q --skin=memcheck --leak-check=yes --leak-resolution=high + --num-callers=100 --show-reachable=yes gdcmTests TestWriteSimple + $(GDCMDATA_HOME)/012345.002.050.dcm foo.dcm + +2004-06-18 Eric Boix + * Valgrind note: after Mathieu Malaterre teached me how to read + the valgrind FAQ ;-] (see http://valgrind.kde.org/faq.html), I + learned that: + Using gcc, you can force the STL to use malloc and to free memory as + soon as possible by globally disabling memory caching. + With 3.2.2 and later, you should export the environment variable + GLIBCPP_FORCE_NEW before running your program. + By setting GLIBCPP_FORCE_NEW, STL related memory leak messages of gdcm + simply vanish (it is still not clear to me, whether this means that + STL std::string leaks or if valgrind believes it leaks...). + * Fixing of SegFault of Test/makeDicomDir (as shown by ctest or by + running bin/gdcmTests makeDicomDir): + - src/gdcmDicomDir.cxx: dynamic casting used + clean up. + - Test/makeDicomDir.cxx now properly traps empty lists and returns + with 1. + NOW, makeDicomDir cleanly fails (in ctest terminology) instead of + SegFaulting (I drowned in DicomDir related code when trying to + understand why the list is empty...). + * src/gdcmDocument.h: first BSD license header try. + * Doc/License.txt added. + +2004-06-15 Eric Boix + * src/gdcmDocument.[h|cxx]: + - Clean up of the Transfer related predicates. They are now all based + on new method isGivenTransferSyntax, that (should) handle properly + the padding problem. + - general clean up, simplification, and coding style. + - Specific clean up of Parse7FE0() (umproperly named actually). + * gdcmPython/testSuite.py: an odd temporary kludge introduced. + +2004-06-14 Jean-Pierre Roux + * gdcmSeqEntry.cxx + - fix the display of Sequence Delimitor (SQDepthLevel pb) + - fix the display of SQItem ordinal number + - add the GetSQItemByOrdinalNumber method + - remove some useless never written private methods + +2004-06-14 Jean-Pierre Roux + * gdcmBinEntry.cxx + - adding a constructor taking a gdcmDocEntry as an input param + - ReplaceOrCreateByNumber now returns : + a gdcmBinEntry * if a Binary (void *) value is passed as a param + a gdcmValEntry * if a string value is passed as a param + * dcmDocument.cxx + - SetEntryByNumber now allows setting gdcmValEntry or gdcmBinEntry, + according to the param type (no longer sets a gdcmDocEntry) + - GetValEntryByNumber, GetBinEntryByNumber added + - NewValEntryByNumber and NewBinEntryByNumber added + * gdcmFile.cxx + - Pixel Data are now linked to the (7fe0,0010) elements, after reading + * gdcmSQItem.h + - GetSQItemNumber and SetSQItemNumber added, to provide + a (relative) Item identier inside a given Sequence + \warning : some pb remaining around this number + will be solved asap + - AddEntry now takes the Item Number as a param + * gdcmValEntry.cxx + - adding a constructor taking a gdcmDocEntry as an input param + +2004-06-14 Eric Boix + * Memory leak hunt with the following command: + valgrind --leak-check=yes --leak-resolution=high --num-callers=40 + --show-reachable=yes gdcmTests PrintDocument + It looks like many (all?) leaks are due to the STL (or a bad usage + of the STL. The lines producing the leaks now have a comment with + a "MEMORY LEAK" tag: you can retrieve them with + grep "MEMORY LEAK" src/* + Here are two typical examples which I can't help fixing: + ----- + #include + int main() { + std::string name; + char * test = "babo"; + name = test; //// <--- valgrind detects 960 bytes lost in + //// call to std::string::operator=(char const*) + name.clear(); //// Doesn't help ! + return 0; + } + ----- + #include + #include + int main() { + std::string line; + std::cout << "Type a bunch of characters followed by RETURN: "; + getline(std::cin, line); //// <--- valgrind dectects a loss + //// of 1320 bytes in call to + /// std::basic_istream<>& std::getline<> + return 0; + } + ----- + + +2004-06-10 Eric Boix + * src/gdcmHeader.[cxx|h]: + - Predicates on the Transfer syntax (of the form Is[JPEG|RLE]*) + and related, moved away to gdcmDocument. + - Accessors (on the form [Get|Set]Entry*) set up to expose publicly + the corresponding protected accessors of inherited class + gdcmDocument, removed ! As a consequence gdcmFile had to be + declared friend of class gdcmDocument (see below). + - operator< moved to gdcmDocument (in fact it belongs to gdcmDicomDir). + - Clean up of undefined or unused methods. + * src/gdcmFile.[cxx|h]: added SetEntryByNumber (in order to take into + account the changes to gdcmHeader.h). + * src/gdcmDocument.h: + - gdcmFile is now a friend class (in order to take into account the + changes to gdcmHeader.h). + - Predicates on the Transfer syntax (of the form Is[JPEG|RLE]*) added + (see changes to gdcmHeader.h). + - Accessors (reading on the form GetEntry*) are now public. + - Clean up of undefined or unused methods. + * src/gdcmDocument.cxx: + - adaptation to changes to gdcmDocument.h + - ::OpenFile now writes a verbose message when file cannot be opened. + - some std::string properly set to VRKey + * src/gdcmDicomDir.h: historical references to gdcmHeader changed to + references to gdcmDocument. + * Test/TestFindTags.cxx: changed accordingly to above changes. + * gdcmPython/testSuite.py: adapted to renaming of acr files in + cvs repository gdcmData. + +2004-06-09 Eric Boix + * src/gdcmValEntry.h: member voidArea type changed from char* to void*. + * src/gdcmBinEntry.h: member voidArea commented out, since it potentially + conflicts with gdcmValEntry::voidArea. + * src/gdcmValEntry.cxx: unmatching comment wiped out. + * src/gdcmVR.[h|cxx]: added two predicates that partition the possible + Value representation between StringRepresentable and BinaryRepresentable. + * src/gdcmDocument.cxx: + - method ParseDES: proper indentation restored and usage of + gdcmVR::IsVROfGdcmStringRepresentable wired in. + - method LoadDocEntry: the fingerprint left in the SetValue() of + unloaded entries (length > MaxSizeLoadEntry) had curiously been + removed. Reverting to previous code segment with the proper + dynamic_cast< gdcmValEntry* >. + Note: this was (partially) breaking the python test suite + (gdcmPython/testSuite.py) that made usage of the above + fingerprint to check presence of "Pixel Data". + * src/gdcmDocEntry.h: coding style. + * gdcmPython/__init__.py: environement variable GDCM_DATA_PATH is + now taken into account. + * gdcmPython/gdcm.i: adaptation to the new internal representation + of gdcm (exit gdcmParser, hello gdcmDocument). + * gdcmPython/testSuite.py: quick and dirty fix for loading vtkgdcmPython + on posix. + * gdcmPython/demo/PrintHeader.py: doesn't use the gdcmDocument::Print() + anymore, but instead prints the loaded Python dictionary. + * .... alas, the python testSuite is still broken. + +2004-05-18 Benoit Regrain + * gdcmPython/gdcm.i : remove useless lines concerning the gdcmGlobal + gdcmGlob + * gdcmPython/setup.py : replace the use of cvar.gdcmGlob to gdcmGlobal + * src/gdcmUtil.h : export methods + +2004-05-16 Mathieu Malaterre + * Some more cleanup/enhancement in gdcmPython/CMakeLists.txt getting close + to right behavior + * Initial addition of automatic python testing + * Initial addition of automatic image comparison + +2004-05-04 Benoit Regrain + * src/gdcmCommon.h, gdcmDicomDir.cxx, gdcmFile.cxx, gdcmHeaderHelper.h, + gdcmParser.cxx, gdcmParser.h : bug fix for the Microsoft .Net compilation + +2004-05-04 Benoit Regrain + * src/gdcmFile.cxx, gdcmHeader.cxx : bug fix for the msvc compilation + * Test/ShowDicom.cxx : bug fix for msvc compilation + * vtk/vtkgdcmViewer.cxx : bug fix for msvc compilation + +2004-05-04 Jean-Pierre Roux + * ADD Taking into account the 'Dicom Sequences' leads up to introduce + new concepts (and new classes) : + a 'gdcmDocument' is composed of a set of Doc Entries, that are + - elementary gdcmDocEntries (former gdcmHeaderEntries) + - Sequence Doc Entries (gdcmSeqEntries) + a Sequence is composed of Items. + Each item is a set of Doc Entries (this is recursive) + The non uniqueness of the 'Dicom tag' is due to this recursivity + (never taken into account) + Our unability to add a new 'entry' in the header + at the proper location (neither in the H-Table (map or multimap), + nor in the Chained List is also due to this recursivity. + Don't try, right now, to use/modify/compile these new sources : + nothing is finished. + We just commit all the stuff, 'as is', in order not to loose it. + +2004-05-04 Benoit Regrain + * vtk/vtkGdcmReader.cxx : bug fix in the setting of file name + +2004-05-03 Benoit Regrain + * vtk/vtkGdcmReader.cxx : bug fix when loading a list of files using the + file prefix (SetFilePrefix) + +2004-05-02 Mathieu Malaterre + * Add a new test: ShowDicom, for now this is just the c++ version of + checkRead.sh, later it will be able to compare the image read against a + baseline. + * Replace the DEBUG on the stack with a global entry in cmake interface: + GDCM_DEBUG, so you can turn verbosity ON/OFF for debug statement. + +2004-04-30 Mathieu Malaterre + * Add an example subdir, with a real example on how to read + write a + dicom image + +2004-04-30 Eric Boix + * Doc/gdcmUML.xmi added raw UML class view (umbrello format) + * Doc/CMakeLists.txt: the main page is now properly differentiated + between the developper and user version. + * Doc/doxygen.config.in: dropped search related obsolete flags + * src/gdcmParser.h, gdcmHeader.h: doxygenation + +2004-04-29 Eric Boix + * DEVELOPPER: added some helpfull comments for compile/test/install + when using cmake. + +2004-04-29 Mathieu Malaterre + * ENH: 1. Remove remp solution of gdcmTests.cxx+ gdcmMain directly in + src directory, now generated in the build dir. + 2. Tests as mentionned smarter + 3. Some clean up + 4. Add a new method in gdcmDict that return the PubDict by name + this is interesting for 3rd party lib like ITK, + where we could set the institution name / patient name... + + * ENH: 1. Now the test suite is working for real + 2. All binaries are now output in the gdcm-bin directory + (this was not true before) + +2004-04-28 Jean-Pierre Roux + * ENH add the provisional gdcmHeader::SQDepthLevel to allow + SeQuence indented printing of Dicom Header. + * ENH merge methods gdcmParser::Parse and gdcmParser::LoadHeaderEntries + into the single gdcmParser::LoadHeaderEntries for efficiency purpose. + Computation of SQDepthLevel is now part of gdcmHeader constructor + * ENH add self defined param 'new' to PrintHeader to 'show' the SeQuence + tree-like structure of a Dicom Header. + * FIX Test code cleaning + 2004-04-25 Mathieu Malaterre * ENH: Adding automatic testing 1. Need a DartConfig.cmake to submit to public 2. Add a test driver gdcmTest.cxx 3. gdcmTestMain, an helper for the main test driver gdcmTest - 4. Files in Test don't have a main anymore, this becomes intersting when we add more and more tests, thus dsw don't have to load too many projects + 4. Files in Test don't have a main anymore, this becomes interesting + when we add more and more tests, thus dsw don't have to load + too many projects + * ENH: Adding a GDCM_DATA_ROOT for testing + * ENH: Remove redundancie about GDCM_DICT stuff, now we only need to modify + one file instead of seven + some small cleanup 2004-04-22 Jean-Pierre Roux - * ENH Minor changes to the Print() methods + * ENH Minor changes to the Print() methods. * ADD gdcmParser::PrintEntryNiceSQ() to allow SQ-indented Header printing. Example given with : - PrintHeader fileName 2 new + > PrintHeader fileName 2 new (SQ based tree-like structure still to be done for the Header ...) 2004-04-22 Mathieu Malaterre @@ -351,7 +780,7 @@ * Update Windows projects and .cvsignore files 2003-11-12 Jean-Pierre Roux - * ENH gdcmHeader constructor has one more parameter (default value : false) + * ENH gdcmHeader constructor has one more parameter (default value : false) that allows the user to 'go inside' the SeQuences only if he wants to. gdcmElValSet:Print takes it into account @@ -470,16 +899,16 @@ 2003-10-24 Mathieu Malaterre * ENH: vtkGdcmReader.cxx can now read multiframe dicom * FIX: remove a call to ->Modified ... see comments - * FIX: vtkgdcmViewer.cxx was writting ASCII file...this is so slooooooow ! + * FIX: vtkgdcmViewer.cxx was writting ASCII file...this is so slooooow ! 2003-10-23 Mathieu Malaterre * FIX: Problem with path for libvtkgdcmPython * ENH: Try adding a search script for python site-package * RMV: Remove some file from medcon lib that are not necessary * FIX: gdcm/Makefile.am fix for generating ljpg medcon - * ENH: CMakeLists.txt now generate 'pygdcm.so' instead of 'libpygdcm.so' + * ENH: CMakeLists.txt now generate 'pygdcm.so' instead of 'libpygdcm.so' * FIX: More pragma disable fro VC++, - I don't think I break something as it is also disable in VTK/ITK. + I don't think I break something as it is also disable in VTK/ITK. But it fasten debug compilation time. 2003-10-23 Jean-Pierre Roux @@ -545,7 +974,8 @@ no longer seg faults when file is not found 2003-10-14 Jean-Pierre Roux - * Emprovement of reading for Dicom encapsulated Jpeg LossLess MultiFrame images + * Emprovement of reading for Dicom encapsulated Jpeg LossLess + MultiFrame images 2003-10-14 Mathieu Malaterre * TODO: *.in file to genereate a UseGDCM later @@ -642,7 +1072,8 @@ - deals with MultiFrames MultiFragments Run Length Encoded files - deals with YcBcR (YBR_FULL) files - deals with YBR_YBR_FULL_422 files (they work as RBG files ?!?) - WARNING : nothing was checked for YBR_PARTIAL_422, YBR_ICT, YBR_RCT files. + WARNING : nothing was checked for YBR_PARTIAL_422, YBR_ICT, + YBR_RCT files. (no sample found :-( 2003-10-02 Mathieu Malaterre @@ -716,11 +1147,13 @@ * vtk/win32/vtkgdcm.dsp : added /nodefaultlib "mscvrt" for debug mode 2003-08-29 Mathieu Malaterre - * Corrected a leak in vtkGdcmREader.cxx, the pSource was find thanks to valgrind. + * Corrected a leak in vtkGdcmREader.cxx, the pSource was find thanks + to valgrind. 2003-07-29 Mathieu Malaterre * src/win32/libgdcmjpeg12.dsp was not dos format - * src/win32/libgdcmjpeg12.dsp : libgdcmijpeg12_EXPORTS -> LIBGDCMIJPEG12_EXPORTS + * src/win32/libgdcmjpeg12.dsp : + libgdcmijpeg12_EXPORTS -> LIBGDCMIJPEG12_EXPORTS * src/win32/gdcmdll.dsp: + /I "..\jpeg\libijg12" 2003-07-29 Benoit Regrain