You can subscribe to this list here.
2008 |
Jan
|
Feb
(2) |
Mar
|
Apr
|
May
|
Jun
(1) |
Jul
|
Aug
|
Sep
(6) |
Oct
(3) |
Nov
(1) |
Dec
(4) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2009 |
Jan
(3) |
Feb
|
Mar
(2) |
Apr
|
May
(3) |
Jun
(4) |
Jul
(3) |
Aug
(2) |
Sep
(4) |
Oct
(1) |
Nov
(12) |
Dec
(11) |
2010 |
Jan
(3) |
Feb
(6) |
Mar
(2) |
Apr
(6) |
May
|
Jun
|
Jul
|
Aug
|
Sep
(8) |
Oct
(4) |
Nov
(1) |
Dec
|
From: <jim...@us...> - 2008-12-23 20:02:11
|
Revision: 25 http://twain-samples.svn.sourceforge.net/twain-samples/?rev=25&view=rev Author: jim0watters Date: 2008-12-23 20:02:07 +0000 (Tue, 23 Dec 2008) Log Message: ----------- Add Doxygen comments to the code Fix many cases where UnlockMemory was not using handle returned by allocate memory to unlock Update memory functions to reflect handle to memory is being used. Modified Paths: -------------- trunk/TWAIN-Samples/Twain_DS_sample01/ChangeLog.txt trunk/TWAIN-Samples/Twain_DS_sample01/Doxyfile trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_Base.cpp trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_FreeImage.cpp trunk/TWAIN-Samples/Twain_DS_sample01/src/DSMInterface.cpp trunk/TWAIN-Samples/Twain_DS_sample01/src/DSMInterface.h trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerFix32.cpp trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerFrame.cpp trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerInt.cpp Modified: trunk/TWAIN-Samples/Twain_DS_sample01/ChangeLog.txt =================================================================== --- trunk/TWAIN-Samples/Twain_DS_sample01/ChangeLog.txt 2008-12-23 19:56:18 UTC (rev 24) +++ trunk/TWAIN-Samples/Twain_DS_sample01/ChangeLog.txt 2008-12-23 20:02:07 UTC (rev 25) @@ -1,3 +1,10 @@ +2008-12-23 JFL Peripheral Solutions ji...@jf... + + * Add Doxygen comments to the code + * Fix many cases where UnlockMemory was not using handle returned by allocate memory to unlock + * Update memory functions to reflect handle to memory is being used. + + 2008-11-26 JFL Peripheral Solutions ji...@jf... * Update TW_SETUPMEMXFER MSG_GET to reflect the current minimum memory requirements to do a memory transfer. @@ -2,2 +9,3 @@ + 2008-10-30 JFL Peripheral Solutions ji...@jf... @@ -7,6 +15,7 @@ * Fix bug of not indexing Enumeration values correctly for int types. Causing MSG_SET with TWON_ENUMERATION to fail * Always Enable DS without UI even when TW_USERINTERFACE.ShowUI is TRUE. + 2008-10-23 JFL Peripheral Solutions ji...@jf... @@ -18,10 +27,12 @@ * Fix bug with InternalFrame constructor using SupportedSize not generating correct size frame. * Add support for TW_UINT32 in TWAINContainerInt class. + 2008-09-29 JFL Peripheral Solutions ji...@jf... * Fix several bugs with MSG_SET and TWON_ENUMERATION containers when bad data is used. TWAINContainerInt.cpp, TWAINContainerFix32.cpp, TWAINContainerInt.cpp + 2008-09-12 JFL Peripheral Solutions ji...@jf... @@ -30,9 +41,11 @@ * Use latest DSM merge module * Increase build number + December 10, 2007 JFL Peripheral Solutions ji...@jf... * Initial Release. + February 15, 2008 JFL Peripheral Solutions ji...@jf... * Fix state transition error, reported by Mark. DS was not being updated to proper state when the App is using callback to get image after receiving XferReady. Modified: trunk/TWAIN-Samples/Twain_DS_sample01/Doxyfile =================================================================== --- trunk/TWAIN-Samples/Twain_DS_sample01/Doxyfile 2008-12-23 19:56:18 UTC (rev 24) +++ trunk/TWAIN-Samples/Twain_DS_sample01/Doxyfile 2008-12-23 20:02:07 UTC (rev 25) @@ -127,7 +127,7 @@ *.xpm \ *.dox RECURSIVE = YES -EXCLUDE = visual_studio_2005 \ +EXCLUDE = ./visual_studio \ visual_studio_2003 \ ../pub/include/twain/twain.h \ "D:/Source/SourceForge TWAIN-samples/Twain_DS_sample01/visual_studio/TWAINDS_SampleDlg.cpp" \ Modified: trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_Base.cpp =================================================================== --- trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_Base.cpp 2008-12-23 19:56:18 UTC (rev 24) +++ trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_Base.cpp 2008-12-23 20:02:07 UTC (rev 25) @@ -788,7 +788,7 @@ pCap->ItemType = TWTY_INT32; pCap->Item = _pContainer->getMSG_QUERYSUPPORT(); - _DSM_UnlockMemory((TW_MEMREF)pCap); + _DSM_UnlockMemory(_pCap->hContainer); twrc = TWRC_SUCCESS; } } @@ -925,7 +925,7 @@ { twrc = TWRC_SUCCESS; } - _DSM_UnlockMemory((TW_MEMREF)pCap); + _DSM_UnlockMemory(_pCap->hContainer); } } break; @@ -949,7 +949,7 @@ pCap->Item = frame.AsTW_FRAME(unit, Xres, Yres); twrc = TWRC_CHECKSTATUS; } - _DSM_UnlockMemory((TW_MEMREF)pCap); + _DSM_UnlockMemory(_pCap->hContainer); } } else if(TWON_ENUMERATION == _pCap->ConType) @@ -967,7 +967,7 @@ twrc = TWRC_CHECKSTATUS; } } - _DSM_UnlockMemory((TW_MEMREF)pCap); + _DSM_UnlockMemory(_pCap->hContainer); } } break; @@ -1398,7 +1398,7 @@ if(!pTifImg->WriteTIFFData(reinterpret_cast<char*>(pImage), nBPL*nHeight)) { setConditionCode(TWCC_FILEWRITEERROR); - _DSM_UnlockMemory(pImage); + _DSM_UnlockMemory(m_hImageData); delete pTifImg; return TWRC_FAILURE; } @@ -1406,7 +1406,7 @@ else // color { // we need to reverse the color from BRG to RGB - BYTE *pLineBuff = NULL; + BYTE *pLineBuff = NULL; TW_HANDLE hLineBuff = _DSM_Alloc(nBPL); if( NULL == hLineBuff ) @@ -1445,18 +1445,18 @@ if(!pTifImg->WriteTIFFData(reinterpret_cast<char*>(pLineBuff), nBPL)) { setConditionCode(TWCC_FILEWRITEERROR); - _DSM_UnlockMemory(pImage); + _DSM_UnlockMemory(m_hImageData); delete pTifImg; return TWRC_FAILURE; } } - _DSM_UnlockMemory(pLineBuff); + _DSM_UnlockMemory(hLineBuff); _DSM_Free(hLineBuff); } delete pTifImg; - _DSM_UnlockMemory(pImage); + _DSM_UnlockMemory(m_hImageData); return TWRC_XFERDONE; } @@ -1502,7 +1502,7 @@ fwrite(pDIB, 1, nDIBSize, pFile); fclose(pFile); pFile = 0; - _DSM_UnlockMemory(pDIB); + _DSM_UnlockMemory(hDIB); _DSM_Free(hDIB); return TWRC_XFERDONE; @@ -1574,7 +1574,7 @@ pDIBInfoHeader->biClrUsed = numcolors; pDIBInfoHeader->biClrImportant = numcolors; //all the colors are important - _DSM_UnlockMemory(pDIBInfoHeader); //unlock our DIB memory + _DSM_UnlockMemory(hDIB); //unlock our DIB memory // Add Pallette pDestBuff =(BYTE*)_DSM_LockMemory(hDIB); //get a pointer to the destination data @@ -1663,12 +1663,12 @@ // cleanup if(pSourceBuff) { - _DSM_UnlockMemory(pSourceBuff); + _DSM_UnlockMemory(m_hImageData); } if(pDestBuff) { - _DSM_UnlockMemory(pDestBuff); + _DSM_UnlockMemory(hDIB); } if(twrc != TWRC_SUCCESS) @@ -1805,11 +1805,11 @@ twrc = TWRC_XFERDONE; } - _DSM_UnlockMemory((TW_MEMREF)pSourceBuff); + _DSM_UnlockMemory(m_hImageData); if(TWMF_HANDLE & _ImageXfer->Memory.Flags) { - _DSM_UnlockMemory((TW_MEMREF)pDestBuff); + _DSM_UnlockMemory(_ImageXfer->Memory.TheMem); } return twrc; Modified: trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_FreeImage.cpp =================================================================== --- trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_FreeImage.cpp 2008-12-23 19:56:18 UTC (rev 24) +++ trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_FreeImage.cpp 2008-12-23 20:02:07 UTC (rev 25) @@ -813,11 +813,9 @@ TW_MEMREF pData = _DSM_LockMemory(m_hImageData); BYTE *pImageData = (BYTE*)pData; - TW_HANDLE hImageBuff = 0; + DWORD dwRead; + DWORD dwReceived; - DWORD dwRead; - DWORD dwReceived; - do { dwRead = MIN(64000, nImageSize) / nDestBytesPerRow * nDestBytesPerRow; @@ -834,11 +832,7 @@ nImageSize -= dwReceived; }while(nImageSize>0 && twrc == TWRC_SUCCESS); - _DSM_UnlockMemory(pData); - if(hImageBuff) - { - _DSM_Free(hImageBuff); - } + _DSM_UnlockMemory(m_hImageData); } else { @@ -1258,7 +1252,7 @@ pTW_ONEVALUE_FRAME pCap = (pTW_ONEVALUE_FRAME)_DSM_LockMemory(cap.hContainer); pCap->Item = _pData->Frame; pCap->ItemType = TWTY_FRAME; - _DSM_UnlockMemory((TW_MEMREF)pCap); + _DSM_UnlockMemory(hContainer); TW_INT16 Condition; if(!m_pICAP_FRAMES->Set(&cap, Condition)) Modified: trunk/TWAIN-Samples/Twain_DS_sample01/src/DSMInterface.cpp =================================================================== --- trunk/TWAIN-Samples/Twain_DS_sample01/src/DSMInterface.cpp 2008-12-23 19:56:18 UTC (rev 24) +++ trunk/TWAIN-Samples/Twain_DS_sample01/src/DSMInterface.cpp 2008-12-23 20:02:07 UTC (rev 25) @@ -31,7 +31,7 @@ /** * @file DSMInterface.cpp -* Common defines and typedefs used for accessing DSM. +* Common defines and typedefs used for accessing DSM for Twain Data Sources. * @author TWAIN Working Group * @date April 2007 */ @@ -208,45 +208,45 @@ } ////////////////////////////////////////////////////////////////////////////// -void _DSM_Free(TW_HANDLE _pPtr) +void _DSM_Free(TW_HANDLE _hMemory) { if(g_DSM_Entry.DSM_MemFree) { - return g_DSM_Entry.DSM_MemFree(_pPtr); + return g_DSM_Entry.DSM_MemFree(_hMemory); } #ifdef TWH_CMP_MSC - ::GlobalFree(_pPtr); + ::GlobalFree(_hMemory); #endif return; } ////////////////////////////////////////////////////////////////////////////// -TW_MEMREF _DSM_LockMemory(TW_HANDLE _pMemory) +TW_MEMREF _DSM_LockMemory(TW_HANDLE _hMemory) { if(g_DSM_Entry.DSM_MemLock) { - return g_DSM_Entry.DSM_MemLock(_pMemory); + return g_DSM_Entry.DSM_MemLock(_hMemory); } #ifdef TWH_CMP_MSC - return (TW_MEMREF)::GlobalLock(_pMemory); + return (TW_MEMREF)::GlobalLock(_hMemory); #endif return 0; } ////////////////////////////////////////////////////////////////////////////// -void _DSM_UnlockMemory(TW_MEMREF _pMemory) +void _DSM_UnlockMemory(TW_HANDLE _hMemory) { if(g_DSM_Entry.DSM_MemUnlock) { - return g_DSM_Entry.DSM_MemUnlock(_pMemory); + return g_DSM_Entry.DSM_MemUnlock(_hMemory); } #ifdef TWH_CMP_MSC - ::GlobalUnlock(_pMemory); + ::GlobalUnlock(_hMemory); #endif return; Modified: trunk/TWAIN-Samples/Twain_DS_sample01/src/DSMInterface.h =================================================================== --- trunk/TWAIN-Samples/Twain_DS_sample01/src/DSMInterface.h 2008-12-23 19:56:18 UTC (rev 24) +++ trunk/TWAIN-Samples/Twain_DS_sample01/src/DSMInterface.h 2008-12-23 20:02:07 UTC (rev 25) @@ -31,7 +31,7 @@ /** * @file DSMInterface.h -* Common defines and typedefs used for accessing DSM. +* Common defines and typedefs used for accessing DSM for TWAIN Data Sources. * @author TWAIN Working Group * @date April 2007 */ @@ -42,19 +42,19 @@ #include "CommonDS.h" /** -* Load the DSM. -* @param[in] the name of DSM libreary. +* Load the DSM library. +* @param[in] the name of the DSM library to open * @return true if success. */ bool LoadDSMLib(char* _pszLibName); /** -* Unload the DSM. +* Unload the DSM library. */ void unLoadDSMLib(); /** -* Initialize and registor the entry point into the DSM. +* Initialize and register the entry point into the DSM. * @param[in] _pOrigin Identifies the source module of the message. This could * identify an Application, a Source, or the Source Manager. * @@ -103,23 +103,23 @@ /** * Free previously allocated global memory -* @param[in] _pPtr TW_HANDLE to the memory needing free. +* @param[in] _hMemory TW_HANDLE to the memory needing free. */ -void _DSM_Free(TW_HANDLE _pPtr); +void _DSM_Free(TW_HANDLE _hMemory); /** * Lock global memory from being updated by others. return a pointer to the * memory so we can update it. -* @param[in] _pMemory TW_HANDLE to the memory to update. +* @param[in] _hMemory TW_HANDLE to the memory to update. * @return TW_MEMREF pointer to the memory. */ -TW_MEMREF _DSM_LockMemory(TW_HANDLE _pMemory); +TW_MEMREF _DSM_LockMemory(TW_HANDLE _hMemory); /** -* Lock global memory to allow updating by others. -* @param[in] _pMemory TW_MEMREF pointer to memory +* Unlock global memory after locking. to allow updating by others. +* @param[in] _hMemory TW_HANDLE to memory returned by _DSM_Alloc */ -void _DSM_UnlockMemory(TW_MEMREF _pMemory); +void _DSM_UnlockMemory(TW_HANDLE _hMemory); /** * Display the user interface for TWAIN. Modified: trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerFix32.cpp =================================================================== --- trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerFix32.cpp 2008-12-23 19:56:18 UTC (rev 24) +++ trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerFix32.cpp 2008-12-23 20:02:07 UTC (rev 25) @@ -71,7 +71,7 @@ const float flVal = (MSG_GETDEFAULT == _unMsg)?m_listFloatsDefault[m_nDefault]:m_listFloats[m_nCurrent]; pCap->Item = FloatToFIX32(flVal); - _DSM_UnlockMemory((TW_MEMREF)pCap); + _DSM_UnlockMemory(hContainer); } } else if(MSG_GET == _unMsg) @@ -112,7 +112,7 @@ pCap->ItemList[x] = FloatToFIX32(m_listFloats[x]); } - _DSM_UnlockMemory((TW_MEMREF)pCap); + _DSM_UnlockMemory(hContainer); } } else if(TWON_ARRAY == m_unGetType) @@ -130,7 +130,7 @@ pCap->ItemList[x] = FloatToFIX32(m_listFloats[x]); } - _DSM_UnlockMemory((TW_MEMREF)pCap); + _DSM_UnlockMemory(hContainer); } } } @@ -196,7 +196,7 @@ } } - _DSM_UnlockMemory((TW_MEMREF)pCap); + _DSM_UnlockMemory(_pCap->hContainer); } else if(TWON_ENUMERATION == _pCap->ConType) { @@ -283,7 +283,7 @@ Condition = TWCC_CAPBADOPERATION; } - _DSM_UnlockMemory((TW_MEMREF)pCap); + _DSM_UnlockMemory(_pCap->hContainer); } return twrc; Modified: trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerFrame.cpp =================================================================== --- trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerFrame.cpp 2008-12-23 19:56:18 UTC (rev 24) +++ trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerFrame.cpp 2008-12-23 20:02:07 UTC (rev 25) @@ -309,7 +309,7 @@ pCap->Item = frame.AsTW_FRAME(m_Unit, m_Xres, m_Yres); pCap->ItemType = m_unItemType; - _DSM_UnlockMemory((TW_MEMREF)pCap); + _DSM_UnlockMemory(hContainer); } } else if(MSG_GET == _unMsg) @@ -350,7 +350,7 @@ pCap->ItemList[x] = m_listFrames[x].AsTW_FRAME(m_Unit, m_Xres, m_Yres); } - _DSM_UnlockMemory((TW_MEMREF)pCap); + _DSM_UnlockMemory(hContainer); } } else if(TWON_ARRAY == m_unGetType) @@ -368,7 +368,7 @@ pCap->ItemList[x] = m_listFrames[x].AsTW_FRAME(m_Unit, m_Xres, m_Yres); } - _DSM_UnlockMemory((TW_MEMREF)pCap); + _DSM_UnlockMemory(hContainer); } } } @@ -441,7 +441,7 @@ } } - _DSM_UnlockMemory((TW_MEMREF)pCap); + _DSM_UnlockMemory(_pCap->hContainer); } else if(TWON_ENUMERATION == _pCap->ConType) { @@ -481,7 +481,7 @@ Condition = TWCC_CAPBADOPERATION; } - _DSM_UnlockMemory((TW_MEMREF)pCap); + _DSM_UnlockMemory(_pCap->hContainer); } return twrc; Modified: trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerInt.cpp =================================================================== --- trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerInt.cpp 2008-12-23 19:56:18 UTC (rev 24) +++ trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerInt.cpp 2008-12-23 20:02:07 UTC (rev 25) @@ -71,7 +71,7 @@ // If the Cap has been constrained the default may only be in the defaultlist. pCap->Item = (MSG_GETDEFAULT == _unMsg)?m_listIntsDefault[m_nDefault]:m_listInts[m_nCurrent]; - _DSM_UnlockMemory((TW_MEMREF)pCap); + _DSM_UnlockMemory(hContainer); } } else if(MSG_GET == _unMsg) @@ -111,7 +111,7 @@ fillValues(&pCap->ItemList, pCap->NumItems, m_unItemType); - _DSM_UnlockMemory((TW_MEMREF)pCap); + _DSM_UnlockMemory(hContainer); } } else if(TWON_ARRAY == m_unGetType) @@ -126,7 +126,7 @@ fillValues(&pCap->ItemList, pCap->NumItems, m_unItemType); - _DSM_UnlockMemory((TW_MEMREF)pCap); + _DSM_UnlockMemory(hContainer); } } } // else if(MSG_GET == _unMsg) @@ -278,7 +278,7 @@ twrc = TWRC_FAILURE; Condition = TWCC_CAPBADOPERATION; } - _DSM_UnlockMemory((TW_MEMREF)pCap); + _DSM_UnlockMemory(_pCap->hContainer); } else if(TWON_ENUMERATION == _pCap->ConType) { @@ -364,7 +364,7 @@ Condition = TWCC_CAPBADOPERATION; } - _DSM_UnlockMemory((TW_MEMREF)pCap); + _DSM_UnlockMemory(_pCap->hContainer); } return twrc; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jim...@us...> - 2008-12-23 19:56:23
|
Revision: 24 http://twain-samples.svn.sourceforge.net/twain-samples/?rev=24&view=rev Author: jim0watters Date: 2008-12-23 19:56:18 +0000 (Tue, 23 Dec 2008) Log Message: ----------- Add Doxygen comments to the code Fix many cases where UnlockMemory was not using handle returned by allocate memory to unlock Update memory functions to reflect handle to memory is being used. mfcDlgConfigure.cpp, & main.cpp, update scan loop to dispatch Windows messages to open DS dialog Add Extended Image Info Modified Paths: -------------- trunk/TWAIN-Samples/Twain_App_sample01/ChangeLog.txt trunk/TWAIN-Samples/Twain_App_sample01/Doxyfile trunk/TWAIN-Samples/Twain_App_sample01/Installer/App Installer 32.vdproj trunk/TWAIN-Samples/Twain_App_sample01/Installer/App Installer 64.vdproj trunk/TWAIN-Samples/Twain_App_sample01/TODO.txt trunk/TWAIN-Samples/Twain_App_sample01/src/DSMInterface.cpp trunk/TWAIN-Samples/Twain_App_sample01/src/DSMInterface.h trunk/TWAIN-Samples/Twain_App_sample01/src/TwainApp.cpp trunk/TWAIN-Samples/Twain_App_sample01/src/TwainApp.h trunk/TWAIN-Samples/Twain_App_sample01/src/TwainApp_ui.cpp trunk/TWAIN-Samples/Twain_App_sample01/src/TwainApp_ui.h trunk/TWAIN-Samples/Twain_App_sample01/src/main.cpp trunk/TWAIN-Samples/Twain_App_sample01/visual_studio_mfc/TWAIN_APP_VS2005_mfc.sln trunk/TWAIN-Samples/Twain_App_sample01/visual_studio_mfc/TWAIN_APP_VS2005_mfc.vcproj trunk/TWAIN-Samples/Twain_App_sample01/visual_studio_mfc/mfcDlgConfigure.cpp Modified: trunk/TWAIN-Samples/Twain_App_sample01/ChangeLog.txt =================================================================== --- trunk/TWAIN-Samples/Twain_App_sample01/ChangeLog.txt 2008-12-23 17:09:29 UTC (rev 23) +++ trunk/TWAIN-Samples/Twain_App_sample01/ChangeLog.txt 2008-12-23 19:56:18 UTC (rev 24) @@ -1,3 +1,12 @@ +2008-12-23 JFL Peripheral Solutions ji...@jf... + + * Add Doxygen comments to the code + * Fix many cases where UnlockMemory was not using handle returned by allocate memory to unlock + * Update memory functions to reflect handle to memory is being used. + * mfcDlgConfigure.cpp, & main.cpp, update scan loop to dispatch Windows messages to open DS dialog + * Add Extended Image Info + + 2008-09-12 JFL Peripheral Solutions ji...@jf... * mfcDlgConfigure.cpp, Fix DSM Callback, to set flag and return right away @@ -11,6 +20,7 @@ * Use latest DSM merge module * Increase build number + 2008-06-10 JFL Peripheral Solutions ji...@jf... * TwainApp.cpp List all DS, not just version 2. Modified: trunk/TWAIN-Samples/Twain_App_sample01/Doxyfile =================================================================== --- trunk/TWAIN-Samples/Twain_App_sample01/Doxyfile 2008-12-23 17:09:29 UTC (rev 23) +++ trunk/TWAIN-Samples/Twain_App_sample01/Doxyfile 2008-12-23 19:56:18 UTC (rev 24) @@ -1,4 +1,4 @@ -# Doxyfile 1.5.2 +# Doxyfile 1.5.6 #--------------------------------------------------------------------------- # Project related configuration options @@ -29,6 +29,7 @@ STRIP_FROM_INC_PATH = SHORT_NAMES = NO JAVADOC_AUTOBRIEF = YES +QT_AUTOBRIEF = NO MULTILINE_CPP_IS_BRIEF = NO DETAILS_AT_TOP = YES INHERIT_DOCS = YES @@ -37,10 +38,15 @@ ALIASES = OPTIMIZE_OUTPUT_FOR_C = NO OPTIMIZE_OUTPUT_JAVA = NO +OPTIMIZE_FOR_FORTRAN = NO +OPTIMIZE_OUTPUT_VHDL = NO BUILTIN_STL_SUPPORT = NO CPP_CLI_SUPPORT = NO +SIP_SUPPORT = NO +IDL_PROPERTY_SUPPORT = YES DISTRIBUTE_GROUP_DOC = NO SUBGROUPING = YES +TYPEDEF_HIDES_STRUCT = NO #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- @@ -49,6 +55,7 @@ EXTRACT_STATIC = YES EXTRACT_LOCAL_CLASSES = YES EXTRACT_LOCAL_METHODS = YES +EXTRACT_ANON_NSPACES = NO HIDE_UNDOC_MEMBERS = NO HIDE_UNDOC_CLASSES = NO HIDE_FRIEND_COMPOUNDS = NO @@ -60,6 +67,7 @@ INLINE_INFO = YES SORT_MEMBER_DOCS = YES SORT_BRIEF_DOCS = NO +SORT_GROUP_NAMES = NO SORT_BY_SCOPE_NAME = YES GENERATE_TODOLIST = YES GENERATE_TESTLIST = YES @@ -69,6 +77,8 @@ MAX_INITIALIZER_LINES = 30 SHOW_USED_FILES = YES SHOW_DIRECTORIES = NO +SHOW_FILES = YES +SHOW_NAMESPACES = YES FILE_VERSION_FILTER = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages @@ -84,7 +94,7 @@ # configuration options related to the input files #--------------------------------------------------------------------------- INPUT = . \ - ../pub/external/include/twain.h + src INPUT_ENCODING = UTF-8 FILE_PATTERNS = *.c \ *.cc \ @@ -117,7 +127,10 @@ *.xpm \ *.dox RECURSIVE = YES -EXCLUDE = ./visual_studio +EXCLUDE = ./visual_studio \ + ./visual_studio_mfc \ + ../pub/include/twain/twain.h \ + ./TWAIN2_Speed_Test EXCLUDE_SYMLINKS = NO EXCLUDE_PATTERNS = EXCLUDE_SYMBOLS = @@ -156,15 +169,21 @@ HTML_STYLESHEET = HTML_ALIGN_MEMBERS = YES GENERATE_HTMLHELP = NO +GENERATE_DOCSET = NO +DOCSET_FEEDNAME = "Doxygen generated docs" +DOCSET_BUNDLE_ID = org.doxygen.Project +HTML_DYNAMIC_SECTIONS = NO CHM_FILE = HHC_LOCATION = GENERATE_CHI = NO +CHM_INDEX_ENCODING = BINARY_TOC = NO TOC_EXPAND = NO DISABLE_INDEX = NO ENUM_VALUES_PER_LINE = 4 GENERATE_TREEVIEW = NO TREEVIEW_WIDTH = 250 +FORMULA_FONTSIZE = 10 #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- @@ -224,7 +243,8 @@ SEARCH_INCLUDES = YES INCLUDE_PATH = INCLUDE_FILE_PATTERNS = -PREDEFINED = _WIN32:=1 +PREDEFINED = _WIN32:=1 \ + TWH_CMP_MSC=1 EXPAND_AS_DEFINED = SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- @@ -242,6 +262,8 @@ MSCGEN_PATH = HIDE_UNDOC_RELATIONS = NO HAVE_DOT = YES +DOT_FONTNAME = FreeSans +DOT_FONTPATH = CLASS_GRAPH = YES COLLABORATION_GRAPH = YES GROUP_GRAPHS = YES @@ -257,6 +279,7 @@ DOT_PATH = "C:/Program Files/ATT/Graphviz/bin" DOTFILE_DIRS = DOT_GRAPH_MAX_NODES = 50 +MAX_DOT_GRAPH_DEPTH = 1000 DOT_TRANSPARENT = NO DOT_MULTI_TARGETS = NO GENERATE_LEGEND = YES Modified: trunk/TWAIN-Samples/Twain_App_sample01/Installer/App Installer 32.vdproj =================================================================== --- trunk/TWAIN-Samples/Twain_App_sample01/Installer/App Installer 32.vdproj 2008-12-23 17:09:29 UTC (rev 23) +++ trunk/TWAIN-Samples/Twain_App_sample01/Installer/App Installer 32.vdproj 2008-12-23 19:56:18 UTC (rev 24) @@ -57,7 +57,7 @@ "DisplayName" = "8:Release" "IsDebugOnly" = "11:FALSE" "IsReleaseOnly" = "11:TRUE" - "OutputFilename" = "8:TWAINAPP_win32_installer\\App Installer 32.msi" + "OutputFilename" = "8:TWAINAPP_win32_installer\\twainapp.win32.installer.msi" "PackageFilesAs" = "3:2" "PackageFileSize" = "3:-2147483648" "CabType" = "3:1" @@ -255,7 +255,7 @@ "Name" = "8:Microsoft Visual Studio" "ProductName" = "8:TWAIN 2.0 App 32bit Sample" "ProductCode" = "8:{8FB891DF-3D56-4115-8365-83EFD3F38B36}" - "PackageCode" = "8:{33F2AEEF-F1A8-418D-9E7A-7AFCE6DA3302}" + "PackageCode" = "8:{442412EE-8FD2-48A1-BFDF-B1ADC540767C}" "UpgradeCode" = "8:{3093BF18-1ADD-4A3C-AE32-8F818163DFAF}" "RestartWWWService" = "11:FALSE" "RemovePreviousVersions" = "11:FALSE" @@ -374,6 +374,20 @@ } "Shortcut" { + "{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_DEAD18521FDD4DC1802D0BBEE837FE5A" + { + "Name" = "8:TWAIN2 Sample App" + "Arguments" = "8:" + "Description" = "8:" + "ShowCmd" = "3:1" + "IconIndex" = "3:0" + "Transitive" = "11:FALSE" + "Target" = "8:_AC8F61B9ACC64241B00C28FB68E9A3AF" + "Folder" = "8:_499C21D1EE6243C7912F1A2B7C4C6A99" + "WorkingFolder" = "8:_96730F9B11A14CA78A60C4C3863A6FF7" + "Icon" = "8:" + "Feature" = "8:" + } } "UserInterface" { Modified: trunk/TWAIN-Samples/Twain_App_sample01/Installer/App Installer 64.vdproj =================================================================== --- trunk/TWAIN-Samples/Twain_App_sample01/Installer/App Installer 64.vdproj 2008-12-23 17:09:29 UTC (rev 23) +++ trunk/TWAIN-Samples/Twain_App_sample01/Installer/App Installer 64.vdproj 2008-12-23 19:56:18 UTC (rev 24) @@ -57,7 +57,7 @@ "DisplayName" = "8:Release" "IsDebugOnly" = "11:FALSE" "IsReleaseOnly" = "11:TRUE" - "OutputFilename" = "8:TWAINAPP_win64_installer\\App Installer 64.msi" + "OutputFilename" = "8:TWAINAPP_win64_installer\\twainapp.win64.installer.msi" "PackageFilesAs" = "3:2" "PackageFileSize" = "3:-2147483648" "CabType" = "3:1" @@ -255,7 +255,7 @@ "Name" = "8:Microsoft Visual Studio" "ProductName" = "8:TWAIN 2.0 App 64bit Sample" "ProductCode" = "8:{A3FB569C-3949-4F62-90B5-54DDAD8198B0}" - "PackageCode" = "8:{19306E41-38D0-4325-B22C-7C938331720B}" + "PackageCode" = "8:{39AC788A-F1DA-42D2-ACEB-B429AC50A8B2}" "UpgradeCode" = "8:{2638B13B-6530-4442-A0A1-EBF207319E97}" "RestartWWWService" = "11:FALSE" "RemovePreviousVersions" = "11:FALSE" @@ -374,6 +374,20 @@ } "Shortcut" { + "{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_559FC09994C9412187968AE4B0F52AC0" + { + "Name" = "8:TWAIN2 Sample App" + "Arguments" = "8:" + "Description" = "8:" + "ShowCmd" = "3:1" + "IconIndex" = "3:0" + "Transitive" = "11:FALSE" + "Target" = "8:_CB6B242DDDB34471BF3672CB5AFE183B" + "Folder" = "8:_9305675E3CCE487492E5F0F66A608AC3" + "WorkingFolder" = "8:_2C719188AD024182B3FD36859474C25E" + "Icon" = "8:" + "Feature" = "8:" + } } "UserInterface" { Modified: trunk/TWAIN-Samples/Twain_App_sample01/TODO.txt =================================================================== --- trunk/TWAIN-Samples/Twain_App_sample01/TODO.txt 2008-12-23 17:09:29 UTC (rev 23) +++ trunk/TWAIN-Samples/Twain_App_sample01/TODO.txt 2008-12-23 19:56:18 UTC (rev 24) @@ -1,4 +1,3 @@ -December 10, 2007 JFL Peripheral Solutions ji...@jf... +December 23, 2008 JFL Peripheral Solutions ji...@jf... =============================== - extend capability negotiations -- add DAT_EXTIMAGEINFO / TW_EXTIMAGEINFO support Modified: trunk/TWAIN-Samples/Twain_App_sample01/src/DSMInterface.cpp =================================================================== --- trunk/TWAIN-Samples/Twain_App_sample01/src/DSMInterface.cpp 2008-12-23 17:09:29 UTC (rev 23) +++ trunk/TWAIN-Samples/Twain_App_sample01/src/DSMInterface.cpp 2008-12-23 19:56:18 UTC (rev 24) @@ -31,8 +31,8 @@ /** * @file DSMInterface.cpp - * User interface for Twain Application - * @author JFL Peripheral Solutions Inc. +* Common defines and typedefs used for accessing DSM for Twain Applications. +* @author TWAIN Working Group * @date October 2007 */ @@ -47,6 +47,10 @@ // On Windows the official TWAINDSM.dll is signed. this function can verify the signature. #ifdef TWH_CMP_MSC +/** +* verify the embedded signature in the DSM. +* @param[in] pwszSourceFile the path to the DSM to verify. +*/ BOOL VerifyEmbeddedSignature(LPCWSTR pwszSourceFile); #endif @@ -57,13 +61,11 @@ #endif gpDSM = 0; /**< global pointer to the DSM library */ -DSMENTRYPROC gpDSM_Entry = 0; /**< global pointer to the DSM entry point */ +DSMENTRYPROC gpDSM_Entry = 0; /**< global pointer to the DSM entry point */ -TW_ENTRYPOINT g_DSM_Entry = {0}; +TW_ENTRYPOINT g_DSM_Entry = {0}; /**< global pointer to the TWAIN entry point structure */ -// windows has builtin functions to alloc/free/lock/unlock but on Unix they -// are built into the DSM so they will have to be dlsym'd. #ifdef TWH_CMP_GNU #include <dlfcn.h> #endif @@ -101,7 +103,7 @@ } #ifdef TWH_CMP_GNU char *error; -#endif //TWH_CMP_MSC +#endif //TWH_CMP_GNU if((gpDSM=LOADLIBRARY(_pszLibName)) != 0) { @@ -132,14 +134,14 @@ cerr << "App - dlsym: " << error << endl; return false; } -#endif //TWH_CMP_MSC +#endif //TWH_CMP_GNU } else { cerr << "Error - Could not load DSM: " << _pszLibName << endl; #ifdef TWH_CMP_GNU cerr << "App - dlopen: " << dlerror() << endl; -#endif //TWH_CMP_MSC +#endif //TWH_CMP_GNU return false; } @@ -179,45 +181,45 @@ } ////////////////////////////////////////////////////////////////////////////// -void _DSM_Free(TW_HANDLE _pPtr) +void _DSM_Free(TW_HANDLE _hMemory) { if(g_DSM_Entry.DSM_MemFree) { - return g_DSM_Entry.DSM_MemFree(_pPtr); + return g_DSM_Entry.DSM_MemFree(_hMemory); } #ifdef TWH_CMP_MSC - ::GlobalFree(_pPtr); + ::GlobalFree(_hMemory); #endif return; } ////////////////////////////////////////////////////////////////////////////// -TW_MEMREF _DSM_LockMemory(TW_HANDLE _pMemory) +TW_MEMREF _DSM_LockMemory(TW_HANDLE _hMemory) { if(g_DSM_Entry.DSM_MemLock) { - return g_DSM_Entry.DSM_MemLock(_pMemory); + return g_DSM_Entry.DSM_MemLock(_hMemory); } #ifdef TWH_CMP_MSC - return (TW_MEMREF)::GlobalLock(_pMemory); + return (TW_MEMREF)::GlobalLock(_hMemory); #endif return 0; } ////////////////////////////////////////////////////////////////////////////// -void _DSM_UnlockMemory(TW_MEMREF _pMemory) +void _DSM_UnlockMemory(TW_HANDLE _hMemory) { if(g_DSM_Entry.DSM_MemUnlock) { - return g_DSM_Entry.DSM_MemUnlock(_pMemory); + return g_DSM_Entry.DSM_MemUnlock(_hMemory); } #ifdef TWH_CMP_MSC - ::GlobalUnlock(_pMemory); + ::GlobalUnlock(_hMemory); #endif return; Modified: trunk/TWAIN-Samples/Twain_App_sample01/src/DSMInterface.h =================================================================== --- trunk/TWAIN-Samples/Twain_App_sample01/src/DSMInterface.h 2008-12-23 17:09:29 UTC (rev 23) +++ trunk/TWAIN-Samples/Twain_App_sample01/src/DSMInterface.h 2008-12-23 19:56:18 UTC (rev 24) @@ -31,7 +31,7 @@ /** * @file DSMInterface.h -* User interface for TWAIN Application +* Common defines and typedefs used for accessing DSM for TWAIN Applications. * @author TWAIN Working Group * @date April 2007 */ @@ -52,7 +52,8 @@ /** * Load the DSM library. -* param[in] the name of the DSM library to open +* @param[in] the name of the DSM library to open +* @return true if success. */ bool LoadDSMLib(char* _pszLibName); @@ -62,27 +63,27 @@ void unLoadDSMLib(); /** -* Initilize and registor the entry point into the DSM. +* Initialize and register the entry point into the DSM. * @param[in] _pOrigin Identifies the source module of the message. This could -* identify an Application, a Source, or the Source Manager. +* identify an Application, a Source, or the Source Manager. * * @param[in] _pDest Identifies the destination module for the message. -* This could identify an application or a data source. -* If this is NULL, the message goes to the Source Manager. +* This could identify an application or a data source. +* If this is NULL, the message goes to the Source Manager. * * @param[in] _DG The Data Group. -* Example: DG_IMAGE. +* Example: DG_IMAGE. * * @param[in] _DAT The Data Attribute Type. -* Example: DAT_IMAGEMEMXFER. +* Example: DAT_IMAGEMEMXFER. * * @param[in] _MSG The message. Messages are interpreted by the destination module -* with respect to the Data Group and the Data Attribute Type. -* Example: MSG_GET. +* with respect to the Data Group and the Data Attribute Type. +* Example: MSG_GET. * * @param[in,out] _pData A pointer to the data structure or variable identified -* by the Data Attribute Type. -* Example: (TW_MEMREF)&ImageMemXfer +* by the Data Attribute Type. +* Example: (TW_MEMREF)&ImageMemXfer * where ImageMemXfer is a TW_IMAGEMEMXFER structure. * * @return a valid TWRC_xxxx return code. @@ -104,23 +105,23 @@ /** * Free previously allocated global memory -* @param[in] _pPtr TW_HANDLE to the memory needing free. +* @param[in] _hMemory TW_HANDLE to the memory needing free. */ -void _DSM_Free(TW_HANDLE _pPtr); +void _DSM_Free(TW_HANDLE _hMemory); /** * Lock global memory from being updated by others. return a pointer to the * memory so we can update it. -* @param[in] _pMemory TW_HANDLE to the memory to update. +* @param[in] _hMemory TW_HANDLE to the memory to update. * @return TW_MEMREF pointer to the memory. */ -TW_MEMREF _DSM_LockMemory(TW_HANDLE _pMemory); +TW_MEMREF _DSM_LockMemory(TW_HANDLE _hMemory); /** -* Lock global memory to allow updating by others. -* @param[in] _pMemory TW_MEMREF pointer to memory +* Unlock global memory after locking. to allow updating by others. +* @param[in] _hMemory TW_HANDLE to memory returned by _DSM_Alloc */ -void _DSM_UnlockMemory(TW_MEMREF _pMemory); +void _DSM_UnlockMemory(TW_HANDLE _hMemory); /** * Not Used. Modified: trunk/TWAIN-Samples/Twain_App_sample01/src/TwainApp.cpp =================================================================== --- trunk/TWAIN-Samples/Twain_App_sample01/src/TwainApp.cpp 2008-12-23 17:09:29 UTC (rev 23) +++ trunk/TWAIN-Samples/Twain_App_sample01/src/TwainApp.cpp 2008-12-23 19:56:18 UTC (rev 24) @@ -145,6 +145,11 @@ return; } +TW_UINT16 TwainApp::DSM_Entry(TW_UINT32 _DG,TW_UINT16 _DAT, TW_UINT16 _MSG, TW_MEMREF _pData) +{ + return _DSM_Entry(&m_MyInfo, m_pDataSource, _DG, _DAT, _MSG, _pData); +} + ////////////////////////////////////////////////////////////////////////////// void TwainApp::exit() { @@ -163,27 +168,13 @@ { TW_PENDINGXFERS pendxfers; memset( &pendxfers, 0, sizeof(pendxfers) ); + DSM_Entry(DG_CONTROL, DAT_PENDINGXFERS, MSG_ENDXFER, (TW_MEMREF)&pendxfers); - _DSM_Entry( - &m_MyInfo, - m_pDataSource, - DG_CONTROL, - DAT_PENDINGXFERS, - MSG_ENDXFER, - (TW_MEMREF)&pendxfers); - // We need to get rid of any pending transfers if(0 != pendxfers.Count) { memset( &pendxfers, 0, sizeof(pendxfers) ); - - _DSM_Entry( - &m_MyInfo, - m_pDataSource, - DG_CONTROL, - DAT_PENDINGXFERS, - MSG_RESET, - (TW_MEMREF)&pendxfers); + DSM_Entry(DG_CONTROL, DAT_PENDINGXFERS, MSG_RESET, (TW_MEMREF)&pendxfers); } // Any pending transfers should now be cancled @@ -398,13 +389,7 @@ callback.CallBackProc = (TW_MEMREF)DSMCallback; - if(TWRC_SUCCESS != (twrc = _DSM_Entry( - &(m_MyInfo), - m_pDataSource, - DG_CONTROL, - DAT_CALLBACK, - MSG_REGISTER_CALLBACK, - (TW_MEMREF)&callback))) + if(TWRC_SUCCESS != (twrc = DSM_Entry(DG_CONTROL, DAT_CALLBACK, MSG_REGISTER_CALLBACK, (TW_MEMREF)&callback))) { cout << "DG_CONTROL / DAT_CALLBACK / MSG_REGISTER_CALLBACK Failed: " << twrc << endl; } @@ -538,7 +523,7 @@ return; } -TW_IDENTITY Source; +TW_IDENTITY Source; /**< used to store the source that is return by getDefaultDataSource */ ////////////////////////////////////////////////////////////////////////////// pTW_IDENTITY TwainApp::getDefaultDataSource() { @@ -680,20 +665,15 @@ return false; } - m_ui.ShowUI = FALSE; - m_ui.ModalUI = FALSE; + m_ui.ShowUI = TRUE; + m_ui.ModalUI = TRUE; m_ui.hParent = 0; m_DSMState = 5; - TW_UINT16 twrc = _DSM_Entry( - &m_MyInfo, - m_pDataSource, - DG_CONTROL, - DAT_USERINTERFACE, - MSG_ENABLEDS, - (TW_MEMREF)&(m_ui)); + TW_UINT16 twrc = DSM_Entry(DG_CONTROL, DAT_USERINTERFACE, MSG_ENABLEDS, (TW_MEMREF)&(m_ui)); - if(TWRC_SUCCESS != twrc) + if( TWRC_SUCCESS != twrc && + TWRC_CHECKSTATUS != twrc ) { m_DSMState = 4; printError(m_pDataSource, "Cannot enable source"); @@ -719,13 +699,7 @@ return; } - TW_UINT16 twrc = _DSM_Entry( - &m_MyInfo, - m_pDataSource, - DG_CONTROL, - DAT_USERINTERFACE, - MSG_DISABLEDS, - (TW_MEMREF)&(m_ui)); + TW_UINT16 twrc = DSM_Entry( DG_CONTROL, DAT_USERINTERFACE, MSG_DISABLEDS, (TW_MEMREF)&(m_ui) ); if(TWRC_SUCCESS == twrc) { @@ -781,13 +755,7 @@ // get the image details cout << "app: Getting the image info..." << endl; - TW_UINT16 twrc = _DSM_Entry( - &m_MyInfo, - m_pDataSource, - DG_IMAGE, - DAT_IMAGEINFO, - MSG_GET, - (TW_MEMREF)&(m_ImageInfo)); + TW_UINT16 twrc = DSM_Entry( DG_IMAGE, DAT_IMAGEINFO, MSG_GET, (TW_MEMREF)&(m_ImageInfo)); if(TWRC_SUCCESS != twrc) { @@ -818,13 +786,7 @@ TW_MEMREF hImg = 0; cout << "app: Starting the transfer..." << endl; - twrc = _DSM_Entry( - &m_MyInfo, - m_pDataSource, - DG_IMAGE, - DAT_IMAGENATIVEXFER, - MSG_GET, - (TW_MEMREF)&hImg); + twrc = DSM_Entry( DG_IMAGE, DAT_IMAGENATIVEXFER, MSG_GET, (TW_MEMREF)&hImg); if(TWRC_XFERDONE == twrc) { @@ -901,22 +863,18 @@ #endif } - _DSM_UnlockMemory((TW_MEMREF)pDIB); + _DSM_UnlockMemory(hImg); _DSM_Free(hImg); pDIB = 0; + + updateEXIMAGEINFO(); // see if there are any more transfers to do cout << "app: Checking to see if there are more images to transfer..." << endl; TW_PENDINGXFERS pendxfers; memset( &pendxfers, 0, sizeof(pendxfers) ); - twrc = _DSM_Entry( - &m_MyInfo, - m_pDataSource, - DG_CONTROL, - DAT_PENDINGXFERS, - MSG_ENDXFER, - (TW_MEMREF)&pendxfers); + twrc = DSM_Entry( DG_CONTROL, DAT_PENDINGXFERS, MSG_ENDXFER, (TW_MEMREF)&pendxfers); if(TWRC_SUCCESS == twrc) { @@ -955,26 +913,14 @@ TW_PENDINGXFERS pendxfers; memset( &pendxfers, 0, sizeof(pendxfers) ); - twrc = _DSM_Entry( - &m_MyInfo, - m_pDataSource, - DG_CONTROL, - DAT_PENDINGXFERS, - MSG_ENDXFER, - (TW_MEMREF)&pendxfers); + twrc = DSM_Entry( DG_CONTROL, DAT_PENDINGXFERS, MSG_ENDXFER, (TW_MEMREF)&pendxfers); // We need to get rid of any pending transfers if(0 != pendxfers.Count) { memset( &pendxfers, 0, sizeof(pendxfers) ); - _DSM_Entry( - &m_MyInfo, - m_pDataSource, - DG_CONTROL, - DAT_PENDINGXFERS, - MSG_RESET, - (TW_MEMREF)&pendxfers); + DSM_Entry( DG_CONTROL, DAT_PENDINGXFERS, MSG_RESET, (TW_MEMREF)&pendxfers); } } @@ -985,7 +931,474 @@ return; } +void TwainApp::updateEXIMAGEINFO() +{ + try + { + TW_EXTIMAGEINFO exImgInfo; + exImgInfo.NumInfos = 1; + exImgInfo.Info[0].InfoID = TWEI_BARCODECOUNT; + exImgInfo.Info[0].NumItems=0; + exImgInfo.Info[0].ItemType = TWTY_UINT32; + exImgInfo.Info[0].Item = 0; + exImgInfo.Info[0].CondCode = 0; + + TW_UINT16 twrc = TWRC_SUCCESS; + twrc = _DSM_Entry( + &m_MyInfo, + m_pDataSource, + DG_IMAGE, + DAT_EXTIMAGEINFO, + MSG_GET, + (TW_MEMREF)&exImgInfo); + twrc = 0; + if(twrc!= TWRC_SUCCESS) + { + return; + } +/** +* @def NUMBER_INFOS +* Number of extended image infos to retrieve. +* @def BARCODE_INFOS +* Number of extended image info for each barcode to retrieve. +*/ +#define NUMBER_INFOS 10 +#define BARCODE_INFOS 6 + int num_infos = NUMBER_INFOS; + int cur_info = 0; + if(TWRC_SUCCESS==exImgInfo.Info[0].CondCode) + { + num_infos += (BARCODE_INFOS * (TW_UINT32)exImgInfo.Info[0].Item); + } + + TW_HANDLE hexInfo = _DSM_Alloc(sizeof(TW_EXTIMAGEINFO)+sizeof(TW_INFO)*(num_infos-1)); + TW_EXTIMAGEINFO *pexImgInfo = (TW_EXTIMAGEINFO*) _DSM_LockMemory(hexInfo); + memset(pexImgInfo, 0,sizeof(TW_EXTIMAGEINFO)+sizeof(TW_INFO)*(num_infos-1)); + pexImgInfo->NumInfos = num_infos; + + if(TWRC_SUCCESS==exImgInfo.Info[0].CondCode) + { + for(UINT nCount = 0; nCount < exImgInfo.Info[0].Item; nCount++) + { + pexImgInfo->Info[cur_info].InfoID = TWEI_BARCODETYPE; + pexImgInfo->Info[cur_info].ItemType = TWTY_UINT32; + cur_info++; + pexImgInfo->Info[cur_info].InfoID = TWEI_BARCODETEXTLENGTH; + pexImgInfo->Info[cur_info].ItemType = TWTY_UINT32; + cur_info++; + pexImgInfo->Info[cur_info].InfoID = TWEI_BARCODETEXT; + pexImgInfo->Info[cur_info].ItemType = 0; + cur_info++; + pexImgInfo->Info[cur_info].InfoID = TWEI_BARCODEX; + pexImgInfo->Info[cur_info].ItemType = TWTY_UINT32; + cur_info++; + pexImgInfo->Info[cur_info].InfoID = TWEI_BARCODEY; + pexImgInfo->Info[cur_info].ItemType = TWTY_UINT32; + cur_info++; + pexImgInfo->Info[cur_info].InfoID = TWEI_BARCODEROTATION; + pexImgInfo->Info[cur_info].ItemType = TWTY_UINT32; + cur_info++; + pexImgInfo->Info[cur_info].InfoID = TWEI_BARCODECONFIDENCE; + pexImgInfo->Info[cur_info].ItemType = TWTY_UINT32; + cur_info++; + } + } + + pexImgInfo->Info[cur_info].InfoID = TWEI_BOOKNAME; + pexImgInfo->Info[cur_info].ItemType = 0; + cur_info++; + + pexImgInfo->Info[cur_info].InfoID = TWEI_CHAPTERNUMBER; + pexImgInfo->Info[cur_info].ItemType = TWTY_UINT32; + cur_info++; + + pexImgInfo->Info[cur_info].InfoID = TWEI_DOCUMENTNUMBER; + pexImgInfo->Info[cur_info].ItemType = TWTY_UINT32; + cur_info++; + + pexImgInfo->Info[cur_info].InfoID = TWEI_PAGENUMBER; + pexImgInfo->Info[cur_info].ItemType = TWTY_UINT32; + cur_info++; + + pexImgInfo->Info[cur_info].InfoID = TWEI_PAGESIDE; + pexImgInfo->Info[cur_info].ItemType = TWTY_UINT32; + cur_info++; + + pexImgInfo->Info[cur_info].InfoID = TWEI_CAMERA; + pexImgInfo->Info[cur_info].ItemType = 0; + cur_info++; + + pexImgInfo->Info[cur_info].InfoID = TWEI_FRAMENUMBER; + pexImgInfo->Info[cur_info].ItemType = TWTY_UINT32; + cur_info++; + + pexImgInfo->Info[cur_info].InfoID = TWEI_FRAME; + pexImgInfo->Info[cur_info].ItemType = 0; + cur_info++; + + pexImgInfo->Info[cur_info].InfoID = TWEI_MAGTYPE; + pexImgInfo->Info[cur_info].ItemType = TWTY_UINT16; + cur_info++; + + pexImgInfo->Info[cur_info].InfoID = TWEI_MAGDATA; + pexImgInfo->Info[cur_info].ItemType = 0; + cur_info++; + + twrc = _DSM_Entry( + &m_MyInfo, + m_pDataSource, + DG_IMAGE, + DAT_EXTIMAGEINFO, + MSG_GET, + (TW_MEMREF)pexImgInfo); + twrc = 0; + if(twrc!= TWRC_SUCCESS) + { + return; + } + m_strExImageInfo = ""; + for(int nIndex = 0; nIndex < num_infos; nIndex++) + { + m_strExImageInfo +=GetExtImageInfoName(pexImgInfo->Info[nIndex].InfoID); + m_strExImageInfo +="\t"; + if(TWRC_SUCCESS==pexImgInfo->Info[nIndex].CondCode) + { + char chTemp[1024]; + switch(pexImgInfo->Info[nIndex].ItemType) + { + case TWTY_UINT32: + case TWTY_UINT16: + sprintf_s(chTemp,1024,"%d",pexImgInfo->Info[nIndex].Item); + break; + case TWTY_STR32: + case TWTY_STR64: + case TWTY_STR128: + case TWTY_STR255: + case TWTY_STR1024: + { + char *chTest = (char *)_DSM_LockMemory((TW_HANDLE)pexImgInfo->Info[nIndex].Item); + + sprintf_s(chTemp,1024,"%s",chTest); + _DSM_UnlockMemory((TW_HANDLE)pexImgInfo->Info[nIndex].Item); + _DSM_Free((TW_HANDLE)pexImgInfo->Info[nIndex].Item); + } + break; + case TWTY_FRAME: + { + TW_FRAME *pFrame = (TW_FRAME *)_DSM_LockMemory((TW_HANDLE)pexImgInfo->Info[nIndex].Item); + + sprintf_s(chTemp,1024,"\r\n\tLeft\t%0.2f\r\n\tTop\t%.2f\r\n\tRight\t%.2f\r\n\tBottom\t%.2f", + FIX32ToFloat(pFrame->Left),FIX32ToFloat(pFrame->Top), + FIX32ToFloat(pFrame->Right),FIX32ToFloat(pFrame->Bottom)); + _DSM_UnlockMemory((TW_HANDLE)pexImgInfo->Info[nIndex].Item); + _DSM_Free((TW_HANDLE)pexImgInfo->Info[nIndex].Item); + } + break; + default: + sprintf_s(chTemp,1024,"Unsupporetd type"); + break; + } + m_strExImageInfo +=chTemp; + } + else + { + m_strExImageInfo +="Unsupported"; + } + m_strExImageInfo +="\r\n"; + } + _DSM_UnlockMemory(hexInfo); + _DSM_Free(hexInfo); + } + catch(...) + { + //Log("Failure reading extended image info: %s", LPCSTR(error->m_strDescription)); + } + return; +} + +string TwainApp::GetExtImageInfoName(int InfoID) +{ + string text; + + switch(InfoID) + { + case TWEI_BARCODEX: + text = "TWEI_BARCODEX:"; + break; + + case TWEI_BARCODEY: + text = "TWEI_BARCODEY:"; + break; + + case TWEI_BARCODETEXT: + text = "TWEI_BARCODETEXT:"; + break; + + case TWEI_BARCODETYPE: + text = "TWEI_BARCODETYPE:"; + break; + + case TWEI_DESHADETOP: + text = "TWEI_DESHADETOP:"; + break; + + case TWEI_DESHADELEFT: + text = "TWEI_DESHADELEFT:"; + break; + + case TWEI_DESHADEHEIGHT: + text = "TWEI_DESHADEHEIGHT:"; + break; + + case TWEI_DESHADEWIDTH: + text = "TWEI_DESHADEWIDTH:"; + break; + + case TWEI_DESHADESIZE: + text = "TWEI_DESHADESIZE:"; + break; + + case TWEI_SPECKLESREMOVED: + text = "TWEI_SPECKLESREMOVED:"; + break; + + case TWEI_HORZLINEXCOORD: + text = "TWEI_HORZLINEXCOORD:"; + break; + + case TWEI_HORZLINEYCOORD: + text = "TWEI_HORZLINEYCOORD:"; + break; + + case TWEI_HORZLINELENGTH: + text = "TWEI_HORZLINELENGTH:"; + break; + + case TWEI_HORZLINETHICKNESS: + text = "TWEI_HORZLINETHICKNESS:"; + break; + + case TWEI_VERTLINEXCOORD: + text = "TWEI_VERTLINEXCOORD:"; + break; + + case TWEI_VERTLINEYCOORD: + text = "TWEI_VERTLINEYCOORD:"; + break; + + case TWEI_VERTLINELENGTH: + text = "TWEI_VERTLINELENGTH:"; + break; + + case TWEI_VERTLINETHICKNESS: + text = "TWEI_VERTLINETHICKNESS:"; + break; + + case TWEI_PATCHCODE: + text = "TWEI_PATCHCODE:"; + break; + + case TWEI_ENDORSEDTEXT: + text = "TWEI_ENDORSEDTEXT:"; + break; + + case TWEI_FORMCONFIDENCE: + text = "TWEI_FORMCONFIDENCE:"; + break; + + case TWEI_FORMTEMPLATEMATCH: + text = "TWEI_FORMTEMPLATEMATCH:"; + break; + + case TWEI_FORMTEMPLATEPAGEMATCH: + text = "TWEI_FORMTEMPLATEPAGEMATCH:"; + break; + + case TWEI_FORMHORZDOCOFFSET: + text = "TWEI_FORMHORZDOCOFFSET:"; + break; + + case TWEI_FORMVERTDOCOFFSET: + text = "TWEI_FORMVERTDOCOFFSET:"; + break; + + case TWEI_BARCODECOUNT: + text = "TWEI_BARCODECOUNT:"; + break; + + case TWEI_BARCODECONFIDENCE: + text = "TWEI_BARCODECONFIDENCE:"; + break; + + case TWEI_BARCODEROTATION: + text = "TWEI_BARCODEROTATION:"; + break; + + case TWEI_BARCODETEXTLENGTH: + text = "TWEI_BARCODETEXTLENGTH:"; + break; + + case TWEI_DESHADECOUNT: + text = "TWEI_DESHADECOUNT:"; + break; + + case TWEI_DESHADEBLACKCOUNTOLD: + text = "TWEI_DESHADEBLACKCOUNTOLD:"; + break; + + case TWEI_DESHADEBLACKCOUNTNEW: + text = "TWEI_DESHADEBLACKCOUNTNEW:"; + break; + + case TWEI_DESHADEBLACKRLMIN: + text = "TWEI_DESHADEBLACKRLMIN:"; + break; + + case TWEI_DESHADEBLACKRLMAX: + text = "TWEI_DESHADEBLACKRLMAX:"; + break; + + case TWEI_DESHADEWHITECOUNTOLD: + text = "TWEI_DESHADEWHITECOUNTOLD:"; + break; + + case TWEI_DESHADEWHITECOUNTNEW: + text = "TWEI_DESHADEWHITECOUNTNEW:"; + break; + + case TWEI_DESHADEWHITERLMIN: + text = "TWEI_DESHADEWHITERLMIN:"; + break; + + case TWEI_DESHADEWHITERLAVE: + text = "TWEI_DESHADEWHITERLAVE:"; + break; + + case TWEI_DESHADEWHITERLMAX: + text = "TWEI_DESHADEWHITERLMAX:"; + break; + + case TWEI_BLACKSPECKLESREMOVED: + text = "TWEI_BLACKSPECKLESREMOVED:"; + break; + + case TWEI_WHITESPECKLESREMOVED: + text = "TWEI_WHITESPECKLESREMOVED:"; + break; + + case TWEI_HORZLINECOUNT: + text = "TWEI_HORZLINECOUNT:"; + break; + + case TWEI_VERTLINECOUNT: + text = "TWEI_VERTLINECOUNT:"; + break; + + case TWEI_DESKEWSTATUS: + text = "TWEI_DESKEWSTATUS:"; + break; + + case TWEI_SKEWORIGINALANGLE: + text = "TWEI_SKEWORIGINALANGLE:"; + break; + + case TWEI_SKEWFINALANGLE: + text = "TWEI_SKEWFINALANGLE:"; + break; + + case TWEI_SKEWCONFIDENCE: + text = "TWEI_SKEWCONFIDENCE:"; + break; + + case TWEI_SKEWWINDOWX1: + text = "TWEI_SKEWWINDOWX1:"; + break; + + case TWEI_SKEWWINDOWY1: + text = "TWEI_SKEWWINDOWY1:"; + break; + + case TWEI_SKEWWINDOWX2: + text = "TWEI_SKEWWINDOWX2:"; + break; + + case TWEI_SKEWWINDOWY2: + text = "TWEI_SKEWWINDOWY2:"; + break; + + case TWEI_SKEWWINDOWX3: + text = "TWEI_SKEWWINDOWX3:"; + break; + + case TWEI_SKEWWINDOWY3: + text = "TWEI_SKEWWINDOWY3:"; + break; + + case TWEI_SKEWWINDOWX4: + text = "TWEI_SKEWWINDOWX4:"; + break; + + case TWEI_SKEWWINDOWY4: + text = "TWEI_SKEWWINDOWY4:"; + break; + + case TWEI_BOOKNAME: + text = "TWEI_BOOKNAME:"; + break; + + case TWEI_CHAPTERNUMBER: + text = "TWEI_CHAPTERNUMBER:"; + break; + + case TWEI_DOCUMENTNUMBER: + text = "TWEI_DOCUMENTNUMBER:"; + break; + + case TWEI_PAGENUMBER: + text = "TWEI_PAGENUMBER:"; + break; + + case TWEI_CAMERA: + text = "TWEI_CAMERA:"; + break; + + case TWEI_FRAMENUMBER: + text = "TWEI_FRAMENUMBER:"; + break; + + case TWEI_FRAME: + text = "TWEI_FRAME:"; + break; + + case TWEI_PIXELFLAVOR: + text = "TWEI_PIXELFLAVOR:"; + break; + + case TWEI_PAGESIDE: + text = "TWEI_PAGESIDE:"; + break; + + case TWEI_MAGDATA: + text = "TWEI_MAGDATA:"; + break; + + case TWEI_MAGTYPE: + text = "TWEI_MAGTYPE:"; + break; + + default: + { + char chTemp[256]; + sprintf_s(chTemp,256,"ExtImageInfo ID 0x:4X",InfoID); + text = chTemp; + } + break; + } + + return text; +} + ////////////////////////////////////////////////////////////////////////////// void TwainApp::initiateTransfer_File() { @@ -1021,13 +1434,7 @@ filexfer.Format = fileformat; cout << "app: Sending file transfer details..." << endl; - twrc = _DSM_Entry( - &m_MyInfo, - m_pDataSource, - DG_CONTROL, - DAT_SETUPFILEXFER, - MSG_SET, - (TW_MEMREF)&(filexfer)); + twrc = DSM_Entry( DG_CONTROL, DAT_SETUPFILEXFER, MSG_SET, (TW_MEMREF)&(filexfer)); if(TWRC_SUCCESS != twrc) { @@ -1036,24 +1443,12 @@ } cout << "app: Starting file transfer..." << endl; - twrc = _DSM_Entry( - &m_MyInfo, - m_pDataSource, - DG_IMAGE, - DAT_IMAGEFILEXFER, - MSG_GET, - 0); + twrc = DSM_Entry( DG_IMAGE, DAT_IMAGEFILEXFER, MSG_GET, 0); if(TWRC_XFERDONE == twrc) { // Findout where the file was actualy saved - twrc = _DSM_Entry( - &m_MyInfo, - m_pDataSource, - DG_CONTROL, - DAT_SETUPFILEXFER, - MSG_GET, - (TW_MEMREF)&(filexfer)); + twrc = DSM_Entry( DG_CONTROL, DAT_SETUPFILEXFER, MSG_GET, (TW_MEMREF)&(filexfer)); #ifdef _WINDOWS ShellExecute(m_Parent, "open", filexfer.FileName, NULL, NULL, SW_SHOWNORMAL); @@ -1065,13 +1460,7 @@ TW_PENDINGXFERS pendxfers; memset(&pendxfers, 0, sizeof(pendxfers)); - twrc = _DSM_Entry( - &m_MyInfo, - m_pDataSource, - DG_CONTROL, - DAT_PENDINGXFERS, - MSG_ENDXFER, - (TW_MEMREF)&pendxfers); + twrc = DSM_Entry( DG_CONTROL, DAT_PENDINGXFERS, MSG_ENDXFER, (TW_MEMREF)&pendxfers); if(TWRC_SUCCESS == twrc) { @@ -1109,27 +1498,13 @@ cout << "app: Stop any transfer we may have started but could not finish..." << endl; TW_PENDINGXFERS pendxfers; memset( &pendxfers, 0, sizeof(pendxfers) ); + twrc = DSM_Entry( DG_CONTROL, DAT_PENDINGXFERS, MSG_ENDXFER, (TW_MEMREF)&pendxfers); - twrc = _DSM_Entry( - &m_MyInfo, - m_pDataSource, - DG_CONTROL, - DAT_PENDINGXFERS, - MSG_ENDXFER, - (TW_MEMREF)&pendxfers); - // We need to get rid of any pending transfers if(0 != pendxfers.Count) { memset( &pendxfers, 0, sizeof(pendxfers) ); - - _DSM_Entry( - &m_MyInfo, - m_pDataSource, - DG_CONTROL, - DAT_PENDINGXFERS, - MSG_RESET, - (TW_MEMREF)&pendxfers); + DSM_Entry( DG_CONTROL, DAT_PENDINGXFERS, MSG_RESET, (TW_MEMREF)&pendxfers); } } @@ -1175,13 +1550,7 @@ cout << "app: getting the buffer sizes..." << endl; memset(&SourcesBufferSizes, 0, sizeof(SourcesBufferSizes)); - twrc = _DSM_Entry( - &m_MyInfo, - m_pDataSource, - DG_CONTROL, - DAT_SETUPMEMXFER, - MSG_GET, - (TW_MEMREF)&(SourcesBufferSizes)); + twrc = DSM_Entry( DG_CONTROL, DAT_SETUPMEMXFER, MSG_GET, (TW_MEMREF)&(SourcesBufferSizes)); if(TWRC_SUCCESS != twrc) { @@ -1234,13 +1603,7 @@ memset(memXferBuf.Memory.TheMem, 0, memXferBuf.Memory.Length); // get the row data - twrc = _DSM_Entry( - &m_MyInfo, - m_pDataSource, - DG_IMAGE, - DAT_IMAGEMEMXFER, - MSG_GET, - (TW_MEMREF)&(memXferBuf)); + twrc = DSM_Entry( DG_IMAGE, DAT_IMAGEMEMXFER, MSG_GET, (TW_MEMREF)&(memXferBuf)); if(TWRC_SUCCESS == twrc || TWRC_XFERDONE == twrc) { @@ -1316,7 +1679,7 @@ pTifImg = 0; } // cleanup memory used to transfer image - _DSM_UnlockMemory((TW_MEMREF)(memXferBufTemplate.Memory.TheMem)); + _DSM_UnlockMemory(hMem); _DSM_Free(hMem); if(TWRC_XFERDONE != twrc) @@ -1330,13 +1693,7 @@ TW_PENDINGXFERS pendxfers; memset( &pendxfers, 0, sizeof(pendxfers) ); - twrc = _DSM_Entry( - &m_MyInfo, - m_pDataSource, - DG_CONTROL, - DAT_PENDINGXFERS, - MSG_ENDXFER, - (TW_MEMREF)&pendxfers); + twrc = DSM_Entry( DG_CONTROL, DAT_PENDINGXFERS, MSG_ENDXFER, (TW_MEMREF)&pendxfers); if(TWRC_SUCCESS == twrc) { @@ -1363,27 +1720,13 @@ cout << "app: Stop any transfer we may have started but could not finish..." << endl; TW_PENDINGXFERS pendxfers; memset( &pendxfers, 0, sizeof(pendxfers) ); + twrc = DSM_Entry( DG_CONTROL, DAT_PENDINGXFERS, MSG_ENDXFER, (TW_MEMREF)&pendxfers); - twrc = _DSM_Entry( - &m_MyInfo, - m_pDataSource, - DG_CONTROL, - DAT_PENDINGXFERS, - MSG_ENDXFER, - (TW_MEMREF)&pendxfers); - // We need to get rid of any pending transfers if(0 != pendxfers.Count) { memset( &pendxfers, 0, sizeof(pendxfers) ); - - _DSM_Entry( - &m_MyInfo, - m_pDataSource, - DG_CONTROL, - DAT_PENDINGXFERS, - MSG_RESET, - (TW_MEMREF)&pendxfers); + DSM_Entry( DG_CONTROL, DAT_PENDINGXFERS, MSG_RESET, (TW_MEMREF)&pendxfers); } } @@ -1501,13 +1844,7 @@ _cap.ConType = TWON_DONTCARE16; // capability structure is set, make the call to the source now - TW_UINT16 twrc = _DSM_Entry( - &m_MyInfo, - m_pDataSource, - DG_CONTROL, - DAT_CAPABILITY, - MSG_GET, - (TW_MEMREF)&_cap); + TW_UINT16 twrc = DSM_Entry( DG_CONTROL, DAT_CAPABILITY, MSG_GET, (TW_MEMREF)&_cap); switch(twrc) { @@ -1547,13 +1884,7 @@ pVal->Item = _value; // capability structure is set, make the call to the source now - TW_INT16 twrc = _DSM_Entry( - &m_MyInfo, - m_pDataSource, - DG_CONTROL, - DAT_CAPABILITY, - MSG_SET, - (TW_MEMREF)&(cap)); + TW_INT16 twrc = DSM_Entry( DG_CONTROL, DAT_CAPABILITY, MSG_SET, (TW_MEMREF)&(cap)); if(TWRC_FAILURE == twrc) { @@ -1561,7 +1892,7 @@ bResult = false; } - _DSM_UnlockMemory((TW_MEMREF)pVal); + _DSM_UnlockMemory(cap.hContainer); _DSM_Free(cap.hContainer); return bResult; } @@ -1585,13 +1916,7 @@ pVal->Item = _value; // capability structure is set, make the call to the source now - TW_INT16 twrc = _DSM_Entry( - &m_MyInfo, - m_pDataSource, - DG_CONTROL, - DAT_CAPABILITY, - MSG_SET, - (TW_MEMREF)&(cap)); + TW_INT16 twrc = DSM_Entry( DG_CONTROL, DAT_CAPABILITY, MSG_SET, (TW_MEMREF)&(cap)); if(TWRC_FAILURE == twrc) { @@ -1599,7 +1924,7 @@ bResult = false; } - _DSM_UnlockMemory((TW_MEMREF)pVal); + _DSM_UnlockMemory(cap.hContainer); _DSM_Free(cap.hContainer); return bResult; } @@ -1625,13 +1950,7 @@ pVal->Item = *_pValue; // capability structure is set, make the call to the source now - TW_UINT16 twrc = _DSM_Entry( - &m_MyInfo, - m_pDataSource, - DG_CONTROL, - DAT_CAPABILITY, - MSG_SET, - (TW_MEMREF)&(cap)); + TW_UINT16 twrc = DSM_Entry( DG_CONTROL, DAT_CAPABILITY, MSG_SET, (TW_MEMREF)&(cap)); if(TWRC_FAILURE == twrc) { @@ -1639,7 +1958,7 @@ bResult = false; } - _DSM_UnlockMemory((TW_MEMREF)pVal); + _DSM_UnlockMemory(cap.hContainer); _DSM_Free(cap.hContainer); return bResult; @@ -1685,7 +2004,7 @@ get_CAP(m_ICAP_XRESOLUTION); get_CAP(m_ICAP_YRESOLUTION); } - _DSM_UnlockMemory((TW_MEMREF)pCapPT); + _DSM_UnlockMemory(m_ICAP_UNITS.hContainer); } } @@ -1709,7 +2028,7 @@ { cout << "Capability successfully set!" << endl; } - _DSM_UnlockMemory((TW_MEMREF)pCapPT); + _DSM_UnlockMemory(m_ICAP_PIXELTYPE.hContainer); } } @@ -1798,20 +2117,14 @@ pVal->Item = *_pFrame; // capability structure is set, make the call to the source now - TW_UINT16 twrc = _DSM_Entry( - &m_MyInfo, - m_pDataSource, - DG_CONTROL, - DAT_CAPABILITY, - MSG_SET, - (TW_MEMREF)&(cap)); + TW_UINT16 twrc = DSM_Entry( DG_CONTROL, DAT_CAPABILITY, MSG_SET, (TW_MEMREF)&(cap)); if(TWRC_FAILURE == twrc) { printError(m_pDataSource, "Could not set capability"); } - _DSM_UnlockMemory((TW_MEMREF)pVal); + _DSM_UnlockMemory(cap.hContainer); _DSM_Free(cap.hContainer); // now that we have set it, re-get it to ensure it was set @@ -1831,7 +2144,7 @@ { cout << "Capability successfully set!" << endl; } - _DSM_UnlockMemory((TW_MEMREF)pCapPT); + _DSM_UnlockMemory(m_ICAP_FRAMES.hContainer); } } @@ -1925,20 +2238,14 @@ ((TW_UINT16*)(&pVal->ItemList))[0] = _nVal; // capability structure is set, make the call to the source now - TW_UINT16 twrc = _DSM_Entry( - &m_MyInfo, - m_pDataSource, - DG_CONTROL, - DAT_CAPABILITY, - MSG_SET, - (TW_MEMREF)&(cap)); + TW_UINT16 twrc = DSM_Entry( DG_CONTROL, DAT_CAPABILITY, MSG_SET, (TW_MEMREF)&(cap)); if(TWRC_FAILURE == twrc) { printError(m_pDataSource, "Could not set capability"); } - _DSM_UnlockMemory((TW_MEMREF)pVal); + _DSM_UnlockMemory(cap.hContainer); _DSM_Free(cap.hContainer); return; @@ -1960,7 +2267,7 @@ _val = ((TW_UINT16*)(&pCapPT->ItemList))[pCapPT->CurrentIndex]; bret = true; } - _DSM_UnlockMemory((TW_MEMREF)pCapPT); + _DSM_UnlockMemory(m_ICAP_UNITS.hContainer); } else if(TWON_ONEVALUE == m_ICAP_UNITS.ConType) { @@ -1971,7 +2278,7 @@ _val = (TW_UINT16)(pCapPT->Item); bret = true; } - _DSM_UnlockMemory((TW_MEMREF)pCapPT); + _DSM_UnlockMemory(m_ICAP_UNITS.hContainer); } } @@ -1993,7 +2300,7 @@ _val = pCap->Item; bret = true; } - _DSM_UnlockMemory((TW_MEMREF)pCap); + _DSM_UnlockMemory(m_CAP_XFERCOUNT.hContainer); } return bret; @@ -2015,7 +2322,7 @@ _val = ((TW_UINT16*)(&pCapPT->ItemList))[pCapPT->CurrentIndex]; bret = true; } - _DSM_UnlockMemory((TW_MEMREF)pCapPT); + _DSM_UnlockMemory(m_ICAP_XFERMECH.hContainer); } else if(TWON_ONEVALUE == m_ICAP_XFERMECH.ConType) { @@ -2026,7 +2333,7 @@ _val = (TW_UINT16)(pCapPT->Item); bret = true; } - _DSM_UnlockMemory((TW_MEMREF)pCapPT); + _DSM_UnlockMemory(m_ICAP_XFERMECH.hContainer); } } @@ -2049,7 +2356,7 @@ _val = ((TW_UINT16*)(&pCapPT->ItemList))[pCapPT->CurrentIndex]; bret = true; } - _DSM_UnlockMemory((TW_MEMREF)pCapPT); + _DSM_UnlockMemory(m_ICAP_PIXELTYPE.hContainer); } else if(TWON_ONEVALUE == m_ICAP_PIXELTYPE.ConType) { @@ -2060,7 +2367,7 @@ _val = (TW_UINT16)(pCapPT->Item); bret = true; } - _DSM_UnlockMemory((TW_MEMREF)pCapPT); + _DSM_UnlockMemory(m_ICAP_PIXELTYPE.hContainer); } } @@ -2083,7 +2390,7 @@ _val = ((TW_UINT16*)(&pCapPT->ItemList))[pCapPT->CurrentIndex]; bret = true; } - _DSM_UnlockMemory((TW_MEMREF)pCapPT); + _DSM_UnlockMemory(m_ICAP_BITDEPTH.hContainer); } else if(TWON_ONEVALUE == m_ICAP_BITDEPTH.ConType) { @@ -2094,7 +2401,7 @@ _val = (TW_UINT16)(pCapPT->Item); bret = true; } - _DSM_UnlockMemory((TW_MEMREF)pCapPT); + _DSM_UnlockMemory(m_ICAP_BITDEPTH.hContainer); } } @@ -2116,7 +2423,7 @@ _val = ((TW_UINT16*)(&pCapPT->ItemList))[pCapPT->CurrentIndex]; bret = true; } - _DSM_UnlockMemory((TW_MEMREF)pCapPT); + _DSM_UnlockMemory(m_ICAP_IMAGEFILEFORMAT.hContainer); } else if(TWON_ONEVALUE == m_ICAP_IMAGEFILEFORMAT.ConType) { @@ -2127,7 +2434,7 @@ _val = (TW_UINT16)(pCapPT->Item); bret = true; } - _DSM_UnlockMemory((TW_MEMREF)pCapPT); + _DSM_UnlockMemory(m_ICAP_IMAGEFILEFORMAT.hContainer); } } @@ -2149,7 +2456,7 @@ _val = ((TW_UINT16*)(&pCapPT->ItemList))[pCapPT->CurrentIndex]; bret = true; } - _DSM_UnlockMemory((TW_MEMREF)pCapPT); + _DSM_UnlockMemory(m_ICAP_COMPRESSION.hContainer); } else if(TWON_ONEVALUE == m_ICAP_COMPRESSION.ConType) { @@ -2160,7 +2467,7 @@ _val = (TW_UINT16)(pCapPT->Item); bret = true; } - _DSM_UnlockMemory((TW_MEMREF)pCapPT); + _DSM_UnlockMemory(m_ICAP_COMPRESSION.hContainer); } } @@ -2183,7 +2490,7 @@ _xres = pCapPT->ItemList[pCapPT->CurrentIndex]; bret = true; } - _DSM_UnlockMemory((TW_MEMREF)pCapPT); + _DSM_UnlockMemory(m_ICAP_XRESOLUTION.hContainer); } else if(TWON_ONEVALUE == m_ICAP_XRESOLUTION.ConType) { @@ -2194,7 +2501,7 @@ _xres = pCapPT->Item; bret = true; } - _DSM_UnlockMemory((TW_MEMREF)pCapPT); + _DSM_UnlockMemory(m_ICAP_XRESOLUTION.hContainer); } } @@ -2217,7 +2524,7 @@ _yres = pCapPT->ItemList[pCapPT->CurrentIndex]; bret = true; } - _DSM_UnlockMemory((TW_MEMREF)pCapPT); + _DSM_UnlockMemory(m_ICAP_YRESOLUTION.hContainer); } else if(TWON_ONEVALUE == m_ICAP_YRESOLUTION.ConType) { @@ -2228,7 +2535,7 @@ _yres = pCapPT->Item; bret = true; } - _DSM_UnlockMemory((TW_MEMREF)pCapPT); + _DSM_UnlockMemory(m_ICAP_YRESOLUTION.hContainer); } } Modified: trunk/TWAIN-Samples/Twain_App_sample01/src/TwainApp.h =================================================================== --- trunk/TWAIN-Samples/Twain_App_sample01/src/TwainApp.h 2008-12-23 17:09:29 UTC (rev 23) +++ trunk/TWAIN-Samples/Twain_App_sample01/src/TwainApp.h 2008-12-23 19:56:18 UTC (rev 24) @@ -113,6 +113,11 @@ */ ~TwainApp(); + + TW_UINT16 DSM_Entry(TW_UINT32 _DG, + TW_UINT16 _DAT, + TW_UINT16 _MSG, + TW_MEMREF _pData); /** * Print out error message and condition code from DS. Looks up the * condition code using the _pdestID and prints it after the _errorMsg. @@ -257,7 +262,7 @@ /** * Try to sets a OneValue Capability to the value passed * @param[in] Cap the capability to update to set -* @param[in] _value the value to set +* @param[in] _pValue the value to set * @return true if successful */ bool set_CapabilityOneValue(TW_UINT16 Cap, const pTW_FIX32 _pValue); @@ -414,26 +419,45 @@ pTW_IMAGEINFO getIMAGEINFO() {return &m_ImageInfo;} /** +* Gets the extended image info of the currently transfered image +* @return pointer to the extended image info +*/ + string getEXIMAGEINFO(){return m_strExImageInfo;} + +/** * retrieve the imageinfo for the current image * @return true on succes */ bool updateIMAGEINFO(); +/** +* retrieve the extended image info for the current image +* @return true on succes +*/ + void updateEXIMAGEINFO(); + +/** +* retrieve the extended image info name for a given Info ID for the current image +* @param[in] InfoID the id to retrieve the info of +* @return string of the extended image info +*/ + string GetExtImageInfoName(int InfoID); + //////////////// // CAPABILITIES - TW_CAPABILITY m_CAP_XFERCOUNT; /**< Number of images the application is willing to accept this session. */ - TW_CAPABILITY m_ICAP_XFERMECH; /**< Transfer mechanism - used to learn options and set-up for upcoming transfer. */ - TW_CAPABILITY m_ICAP_IMAGEFILEFORMAT; /**< File format saved when using File Xfer Mechanism. */ - TW_CAPABILITY m_ICAP_COMPRESSION; /**< Compression method used for upcoming transfer. */ - TW_CAPABILITY m_ICAP_UNITS; /**< Unit of measure (inches, centimeters, etc). */ - TW_CAPABILITY m_ICAP_PIXELTYPE; /**< The type of pixel data (B/W, gray, color, etc). */ - TW_CAPABILITY m_ICAP_BITDEPTH; /**< Pixel bit depth for Current value of ICAP_PIXELTYPE. */ - TW_CAPABILITY m_ICAP_XRESOLUTION; /**< Current/Available optical resolutions for x-axis. */ - TW_CAPABILITY m_ICAP_YRESOLUTION; /**< Current/Available optical resolutions for y-axis */ - TW_CAPABILITY m_ICAP_FRAMES; /**< Size and location of frames on page. */ + TW_CAPABILITY m_CAP_XFERCOUNT; /**< Number of images the application is willing to accept this session. */ + TW_CAPABILITY m_ICAP_XFERMECH; /**< Transfer mechanism - used to learn options and set-up for upcoming transfer. */ + TW_CAPABILITY m_ICAP_IMAGEFILEFORMAT; /**< File format saved when using File Xfer Mechanism. */ + TW_CAPABILITY m_ICAP_COMPRESSION; /**< Compression method used for upcoming transfer. */ + TW_CAPABILITY m_ICAP_UNITS; /**< Unit of measure (inches, centimeters, etc). */ + TW_CAPABILITY m_ICAP_PIXELTYPE; /**< The type of pixel data (B/W, gray, color, etc). */ + TW_CAPABILITY m_ICAP_BITDEPTH; /**< Pixel bit depth for Current value of ICAP_PIXELTYPE. */ + TW_CAPABILITY m_ICAP_XRESOLUTION; /**< Current/Available optical resolutions for x-axis. */ + TW_CAPABILITY m_ICAP_YRESOLUTION; /**< Current/Available optical resolutions for y-axis */ + TW_CAPABILITY m_ICAP_FRAMES; /**< Size and location of frames on page. */ - int m_DSMState; /**< The current TWAIN state of the dsm (2-7) */ + int m_DSMState; /**< The current TWAIN state of the dsm (2-7) */ protected: /** @@ -443,19 +467,17 @@ */ FIBITMAP* createDIB(); - HWND m_Parent; /**< Handle to Window to recieve window messages. */ - TW_IDENTITY m_MyInfo; /**< Identity structure with this applications identity details */ - pTW_IDENTITY m_pDataSource; /**< Pointer of Identity structure to current loaded data souce */ + HWND m_Parent; /**< Handle to Window to recieve window messages. */ + TW_IDENTITY m_MyInfo; /**< Identity structure with this applications identity details */ + pTW_IDENTITY m_pDataSource; /**< Pointer of Identity structure to current loaded data souce */ vector<TW_IDENTITY> m_DataSources; /**< Store a list of available data sources located by DSM */ -// bool m_bDSCapsNegotiated; /**< @todo NOT USED */ -// FIBITMAP *m_pDIB; /**< @todo NOT USED */ - TW_IMAGEINFO m_ImageInfo; /**< Detailed image info retrieved from the DS */ - pTW_EXTIMAGEINFO m_pExtImageInfo; /**< Detailed extended image info retrieved from the DS */ - TW_UINT16 m_nXferNum; /**< Keep track of the number of images attempted to transfer - used when saving file to disk*/ + TW_IMAGEINFO m_ImageInfo; /**< Detailed image info retrieved from the DS */ + pTW_EXTIMAGEINFO m_pExtImageInfo; /**< Detailed extended image info retrieved from the DS */ + TW_UINT16 m_nXferNum; /**< Keep track of the number of images attempted to transfer - used when saving file to disk*/ + string m_strExImageInfo; /**< Extended image info retrieved from the DS */ - - TW_USERINTERFACE m_ui; /**< Coordinates UI between application and data source. */ + TW_USERINTERFACE m_ui; /**< Coordinates UI between application and data source. */ }; #endif // __TWAINAPP_H__ Modified: trunk/TWAIN-Samples/Twain_App_sample01/src/TwainApp_ui.cpp =================================================================== --- trunk/TWAIN-Samples/Twain_App_sample01/src/TwainApp_ui.cpp 2008-12-23 17:09:29 UTC (rev 23) +++ trunk/TWAIN-Samples/Twain_App_sample01/src/TwainApp_ui.cpp 2008-12-23 19:56:18 UTC (rev 24) @@ -46,6 +46,7 @@ #include "TwainApp_ui.h" +/** the size of the temp buffer */ #define TEMPBUFSIZE 80 /** @@ -198,9 +199,9 @@ ////////////////////////////////////////////////////////////////////////////// -void print_ICAP(const TW_UINT16 _unCap, pTW_ONEVALUE_FIX32 _pVal) +void print_ICAP(const TW_UINT16 _unCap, pTW_ONEVALUE_FIX32 _pCap) { - if(0 == _pVal) + if(0 == _pCap) { return; } @@ -212,22 +213,22 @@ << "Showing supported types. * indicates current setting.\n\n" << "q - done\n"; - if(TWTY_FIX32 == _pVal->ItemType) + if(TWTY_FIX32 == _pCap->ItemType) { - cout << "1 - " << _pVal->Item.Whole << "." << _pVal->Item.Frac << "*\n" << endl; + cout << "1 - " << _pCap->Item.Whole << "." << _pCap->Item.Frac << "*\n" << endl; } - else //if(TWTY_FIX32 != _pVal->ItemType) + else //if(TWTY_FIX32 != _pCap->ItemType) { - cerr << getErrorString_UnexpectedType(TWTY_FIX32, _pVal->ItemType) << endl; + cerr << getErrorString_UnexpectedType(TWTY_FIX32, _pCap->ItemType) << endl; } return; } ////////////////////////////////////////////////////////////////////////////// -void print_ICAP(const TW_UINT16 _unCap, pTW_ENUMERATION_FIX32 _pVal) +void print_ICAP(const TW_UINT16 _unCap, pTW_ENUMERATION_FIX32 _pCap) { - if(0 == _pVal) + if(0 == _pCap) { return; } @@ -239,16 +240,16 @@ << "Showing supported types. * indicates current setting.\n\n" << "q - done\n"; - if(TWTY_FIX32 == _pVal->ItemType) + if(TWTY_FIX32 == _pCap->ItemType) { - for(TW_UINT32 x = 0; x < _pVal->NumItems; ++x) + for(TW_UINT32 x = 0; x < _pCap->NumItems; ++x) { cout << x << " - "; cout - << _pVal->ItemList[x].Whole << "." << _pVal->ItemList[x].Frac; + << _pCap->ItemList[x].Whole << "." << _pCap->ItemList[x].Frac; - if(x == _pVal->CurrentIndex) + if(x == _pCap->CurrentIndex) { cout << "*"; } @@ -257,9 +258,9 @@ } cout << endl; } - else //if(TWTY_FIX32 != _pVal->ItemType) + else //if(TWTY_FIX32 != _pCap->ItemType) { - cerr << getErrorString_UnexpectedType(TWTY_FIX32, _pVal->ItemType) << endl; + cerr << getErrorString_UnexpectedType(TWTY_FIX32, _pCap->ItemType) << endl; } return; Modified: trunk/TWAIN-Samples/Twain_App_sample01/src/TwainApp_ui.h =================================================================== --- trunk/TWAIN-Samples/Twain_App_sample01/src/TwainApp_ui.h 2008-12-23 17:09:29 UTC (rev 23) +++ trunk/TWAIN-Samples/Twain_App_sample01/src/TwainApp_ui.h 2008-12-23 19:56:18 UTC (rev 24) @@ -155,17 +155,17 @@ * @overload void print_ICAP(const TW_UINT16 _unCap, pTW_ONEVALUE_FIX32 _pCap) * prints the ICAP_xxxxx menu for type TW_ONEVALUE_FIX32 * @param[in] _unCap The cap to print -* @param[in] _pVal pointer to a TW_ONEVALUE_FIX32 structure holding the res values +* @param[in] _pCap pointer to a TW_ONEVALUE_FIX32 structure holding the res values */ -void print_ICAP(const TW_UINT16 _unCap, pTW_ONEVALUE_FIX32 _pVal); +void print_ICAP(const TW_UINT16 _unCap, pTW_ONEVALUE_FIX32 _pCap); /** * @overload void print_ICAP(const TW_UINT16 _unCap, pTW_ENUMERATION_FIX32 _pCap) * prints the ICAP_xxxxx menu for type TW_ENUMERATION_FIX32 * @param[in] _unCap The cap to print -* @param[in] _pVal pointer to a TW_ENUMERATION_FIX32 structure holding the res values +* @param[in] _pCap pointer to a TW_ENUMERATION_FIX32 structure holding the res values */ -void print_ICAP(const TW_UINT16 _unCap, pTW_ENUMERATION_FIX32 _pVal); +void print_ICAP(const TW_UINT16 _unCap, pTW_ENUMERATION_FIX32 _pCap); /** * @overload void print_ICAP(const TW_UINT16 _unCap, pTW_ENUMERATION_FRAME _pCap) Modified: trunk/TWAIN-Samples/Twain_App_sample01/src/main.cpp =================================================================== --- trunk/TWAIN-Samples/Twain_App_sample01/src/main.cpp 2008-12-23 17:09:29 UTC (rev 23) +++ trunk/TWAIN-Samples/Twain_App_sample01/src/main.cpp 2008-12-23 19:56:18 UTC (rev 24) @@ -140,7 +140,7 @@ if("q" == input) { - _DSM_UnlockMemory(pVal); + _DSM_UnlockMemory(_pCap->hContainer); break; } else @@ -201,7 +201,7 @@ } } } - _DSM_UnlockMemory(pVal); + _DSM_UnlockMemory(_pCap->hContainer); } else { @@ -309,18 +309,25 @@ // If we are using callbacks, there is nothing to do here except sleep // and wait for our callback from the DS. If we are not using them, // then we have to poll the DSM. - if(!gUSE_CALLBACKS) + MSG Msg; + + if(!GetMessage((LPMSG)&Msg, NULL, 0, 0)) { - TW_EVENT twEvent = {0}; + break;//WM_QUIT + } + TW_EVENT twEvent = {0}; + twEvent.pEvent = (TW_MEMREF)&Msg; + twEvent.TWMessage = MSG_NULL; + TW_UINT16 twRC = TWRC_NOTDSEVENT; + twRC = _DSM_Entry( gpTwainApplication->getAppIdentity(), + gpTwainApplication->getDataSource(), + DG_CONTROL, + DAT_EVENT, + MSG_PROCESSEVENT, + (TW_MEMREF)&twEvent); - twEvent.TWMessage = MSG_NULL; - _DSM_Entry( gpTwainApplication->getAppIdentity(), - gpTwainApplication->getDataSource(), - DG_CONTROL, - DAT_EVENT, - MSG_PROCESSEVENT, - (TW_MEMREF)&twEvent); - + if(!gUSE_CALLBACKS && twRC==TWRC_DSEVENT) + { // check for message from Source switch (twEvent.TWMessage) { @@ -336,12 +343,11 @@ break; } } - -#ifdef TWH_CMP_MSC - Sleep(1000); -#else - sleep(1); -#endif //TWH_CMP_MSC + if(twRC!=TWRC_DSEVENT) + { + TranslateMessage ((LPMSG)&Msg); + DispatchMessage ((LPMSG)&Msg); + } } // At this point the source has sent us a callback saying that it is ready to Mo... [truncated message content] |
From: <jim...@us...> - 2008-12-23 17:09:33
|
Revision: 23 http://twain-samples.svn.sourceforge.net/twain-samples/?rev=23&view=rev Author: jim0watters Date: 2008-12-23 17:09:29 +0000 (Tue, 23 Dec 2008) Log Message: ----------- Update to new twain.h Modified Paths: -------------- trunk/TWAIN-Samples/pub/external/include/twain.h Modified: trunk/TWAIN-Samples/pub/external/include/twain.h =================================================================== --- trunk/TWAIN-Samples/pub/external/include/twain.h 2008-12-02 21:17:20 UTC (rev 22) +++ trunk/TWAIN-Samples/pub/external/include/twain.h 2008-12-23 17:09:29 UTC (rev 23) @@ -339,7 +339,7 @@ TW_UINT16 ItemType; TW_UINT16 NumItems; TW_UINT16 CondCode; - TW_UINT32 Item; + TW_UINTPTR Item; }TW_INFO, FAR* pTW_INFO; typedef struct { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jim...@us...> - 2008-12-02 21:17:22
|
Revision: 22 http://twain-samples.svn.sourceforge.net/twain-samples/?rev=22&view=rev Author: jim0watters Date: 2008-12-02 21:17:20 +0000 (Tue, 02 Dec 2008) Log Message: ----------- Update to fix Doxygen bugs Modified Paths: -------------- trunk/TWAIN-Samples/Twain_DS_sample01/Doxyfile trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerInt.cpp trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerInt.h Modified: trunk/TWAIN-Samples/Twain_DS_sample01/Doxyfile =================================================================== --- trunk/TWAIN-Samples/Twain_DS_sample01/Doxyfile 2008-11-26 19:14:03 UTC (rev 21) +++ trunk/TWAIN-Samples/Twain_DS_sample01/Doxyfile 2008-12-02 21:17:20 UTC (rev 22) @@ -1,4 +1,4 @@ -# Doxyfile 1.5.4 +# Doxyfile 1.5.6 #--------------------------------------------------------------------------- # Project related configuration options @@ -38,9 +38,12 @@ ALIASES = OPTIMIZE_OUTPUT_FOR_C = NO OPTIMIZE_OUTPUT_JAVA = NO +OPTIMIZE_FOR_FORTRAN = NO +OPTIMIZE_OUTPUT_VHDL = NO BUILTIN_STL_SUPPORT = NO CPP_CLI_SUPPORT = NO SIP_SUPPORT = NO +IDL_PROPERTY_SUPPORT = YES DISTRIBUTE_GROUP_DOC = NO SUBGROUPING = YES TYPEDEF_HIDES_STRUCT = NO @@ -64,6 +67,7 @@ INLINE_INFO = YES SORT_MEMBER_DOCS = YES SORT_BRIEF_DOCS = NO +SORT_GROUP_NAMES = NO SORT_BY_SCOPE_NAME = YES GENERATE_TODOLIST = YES GENERATE_TESTLIST = YES @@ -73,6 +77,8 @@ MAX_INITIALIZER_LINES = 30 SHOW_USED_FILES = YES SHOW_DIRECTORIES = NO +SHOW_FILES = YES +SHOW_NAMESPACES = YES FILE_VERSION_FILTER = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages @@ -123,7 +129,9 @@ RECURSIVE = YES EXCLUDE = visual_studio_2005 \ visual_studio_2003 \ - ../pub/include/twain/twain.h + ../pub/include/twain/twain.h \ + "D:/Source/SourceForge TWAIN-samples/Twain_DS_sample01/visual_studio/TWAINDS_SampleDlg.cpp" \ + "D:/Source/SourceForge TWAIN-samples/Twain_DS_sample01/visual_studio/TWAINDS_SampleDlg.h" EXCLUDE_SYMLINKS = NO EXCLUDE_PATTERNS = EXCLUDE_SYMBOLS = @@ -162,16 +170,21 @@ HTML_STYLESHEET = HTML_ALIGN_MEMBERS = YES GENERATE_HTMLHELP = NO +GENERATE_DOCSET = NO +DOCSET_FEEDNAME = "Doxygen generated docs" +DOCSET_BUNDLE_ID = org.doxygen.Project HTML_DYNAMIC_SECTIONS = NO CHM_FILE = HHC_LOCATION = GENERATE_CHI = NO +CHM_INDEX_ENCODING = BINARY_TOC = NO TOC_EXPAND = NO DISABLE_INDEX = NO ENUM_VALUES_PER_LINE = 4 GENERATE_TREEVIEW = NO TREEVIEW_WIDTH = 250 +FORMULA_FONTSIZE = 10 #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- @@ -249,6 +262,8 @@ MSCGEN_PATH = HIDE_UNDOC_RELATIONS = NO HAVE_DOT = YES +DOT_FONTNAME = FreeSans +DOT_FONTPATH = CLASS_GRAPH = YES COLLABORATION_GRAPH = YES GROUP_GRAPHS = YES Modified: trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerInt.cpp =================================================================== --- trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerInt.cpp 2008-11-26 19:14:03 UTC (rev 21) +++ trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerInt.cpp 2008-12-02 21:17:20 UTC (rev 22) @@ -469,7 +469,7 @@ return ret; } -static int GetIndexIntValue(pTW_ENUMERATION pCap, TW_UINT32 index) +int GetIndexIntValue(pTW_ENUMERATION pCap, TW_UINT32 index) { int rtn = 0; if(pCap && pCap->NumItems > index) Modified: trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerInt.h =================================================================== --- trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerInt.h 2008-11-26 19:14:03 UTC (rev 21) +++ trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerInt.h 2008-12-02 21:17:20 UTC (rev 22) @@ -42,6 +42,12 @@ #include "TWAINContainer.h" + /** + * Return the Int Value of the index into an enumeration of Ints + * @param[in] pCap The enumeration to retreive the value + * @param[in] index the index into the enumeration to retrieve the value. + * @return the Int value at index into pCap + */ static int GetIndexIntValue(pTW_ENUMERATION pCap, TW_UINT32 index); /** This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jim...@us...> - 2008-11-26 19:14:07
|
Revision: 21 http://twain-samples.svn.sourceforge.net/twain-samples/?rev=21&view=rev Author: jim0watters Date: 2008-11-26 19:14:03 +0000 (Wed, 26 Nov 2008) Log Message: ----------- Update TW_SETUPMEMXFER MSG_GET to reflect the current minimum memory requirements to do a memory transfer. Modified Paths: -------------- trunk/TWAIN-Samples/Twain_DS_sample01/ChangeLog.txt trunk/TWAIN-Samples/Twain_DS_sample01/Installer/DS Installer 32.vdproj trunk/TWAIN-Samples/Twain_DS_sample01/Installer/DS Installer 64.vdproj trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_FreeImage.cpp trunk/TWAIN-Samples/Twain_DS_sample01/visual_studio/TWAINDS_GUI.rc Modified: trunk/TWAIN-Samples/Twain_DS_sample01/ChangeLog.txt =================================================================== --- trunk/TWAIN-Samples/Twain_DS_sample01/ChangeLog.txt 2008-10-30 15:11:31 UTC (rev 20) +++ trunk/TWAIN-Samples/Twain_DS_sample01/ChangeLog.txt 2008-11-26 19:14:03 UTC (rev 21) @@ -1,5 +1,9 @@ -2008-10-23 JFL Peripheral Solutions ji...@jf... +2008-11-26 JFL Peripheral Solutions ji...@jf... + * Update TW_SETUPMEMXFER MSG_GET to reflect the current minimum memory requirements to do a memory transfer. + +2008-10-30 JFL Peripheral Solutions ji...@jf... + * Fix bug of not indexing Enumeration values correctly for int types. Causing MSG_SET with TWON_ENUMERATION to fail * Always Enable DS without UI even when TW_USERINTERFACE.ShowUI is TRUE. Modified: trunk/TWAIN-Samples/Twain_DS_sample01/Installer/DS Installer 32.vdproj =================================================================== --- trunk/TWAIN-Samples/Twain_DS_sample01/Installer/DS Installer 32.vdproj 2008-10-30 15:11:31 UTC (rev 20) +++ trunk/TWAIN-Samples/Twain_DS_sample01/Installer/DS Installer 32.vdproj 2008-11-26 19:14:03 UTC (rev 21) @@ -296,14 +296,14 @@ { "Name" = "8:Microsoft Visual Studio" "ProductName" = "8:TWAIN 2.0 DS 32bit Sample" - "ProductCode" = "8:{5147D271-675D-424F-9841-0AA1E034F685}" - "PackageCode" = "8:{CC446D88-F633-412A-95F0-46D3E09C40B0}" + "ProductCode" = "8:{3CCB3EA9-AC23-46B4-9C5A-D0C22610E8EE}" + "PackageCode" = "8:{BE46C23F-96E4-44FB-B4A6-85B3A4DCC440}" "UpgradeCode" = "8:{42397C41-AA95-45D0-A500-A692EB1A93B4}" "RestartWWWService" = "11:FALSE" "RemovePreviousVersions" = "11:FALSE" "DetectNewerInstalledVersion" = "11:TRUE" "InstallAllUsers" = "11:TRUE" - "ProductVersion" = "8:1.0.5" + "ProductVersion" = "8:1.0.6" "Manufacturer" = "8:TWAIN Working Group" "ARPHELPTELEPHONE" = "8:http://www.twainforum.org/phpBB2/index.php" "ARPHELPLINK" = "8:http://sourceforge.net/projects/twain-samples/" Modified: trunk/TWAIN-Samples/Twain_DS_sample01/Installer/DS Installer 64.vdproj =================================================================== --- trunk/TWAIN-Samples/Twain_DS_sample01/Installer/DS Installer 64.vdproj 2008-10-30 15:11:31 UTC (rev 20) +++ trunk/TWAIN-Samples/Twain_DS_sample01/Installer/DS Installer 64.vdproj 2008-11-26 19:14:03 UTC (rev 21) @@ -291,14 +291,14 @@ { "Name" = "8:Microsoft Visual Studio" "ProductName" = "8:TWAIN 2.0 DS 64bit Sample" - "ProductCode" = "8:{21B76EBB-2D69-434A-ACF9-204A1169744A}" - "PackageCode" = "8:{DD598F22-9318-4D81-B40B-7D37642360C4}" + "ProductCode" = "8:{438A7FD2-98F2-432C-BA3A-66C94C2EB705}" + "PackageCode" = "8:{D3E3C882-E4A1-43CD-9245-E99694E832B9}" "UpgradeCode" = "8:{C2305D08-ACCD-48FD-8147-F655F8356F23}" "RestartWWWService" = "11:FALSE" "RemovePreviousVersions" = "11:FALSE" "DetectNewerInstalledVersion" = "11:TRUE" "InstallAllUsers" = "11:TRUE" - "ProductVersion" = "8:1.0.5" + "ProductVersion" = "8:1.0.6" "Manufacturer" = "8:TWAIN Working Group" "ARPHELPTELEPHONE" = "8:http://www.twainforum.org/phpBB2/index.php" "ARPHELPLINK" = "8:http://sourceforge.net/projects/twain-samples/" Modified: trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_FreeImage.cpp =================================================================== --- trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_FreeImage.cpp 2008-10-30 15:11:31 UTC (rev 20) +++ trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_FreeImage.cpp 2008-11-26 19:14:03 UTC (rev 21) @@ -677,13 +677,68 @@ } // Min is the physical width at highest res and hishest bits/pixel count + TW_UINT32 bytes = (TW_UINT32)BYTES_PERLINE_ALIGN4(8.5*600, 24); + _pData->MinBufSize = bytes; + // chose 64k because this is a typical sweet spot for most real world scanners // (max transfer size for SCSI read of typical SCSI devices) - TW_UINT32 bytes = (TW_UINT32)BYTES_PERLINE_ALIGN4(8.5*600, 24); - _pData->MinBufSize = bytes; _pData->MaxBufSize = MAX(64*1024, bytes);//bytes; _pData->Preferred = MAX(64*1024, bytes);//bytes; + // Update the min based on current settings. + if(m_CurrentState == dsState_XferReady) + { + // If we have an image ready then we can use that info to get the memory requirements + //get the number of bytes per line we'll need for this image, and make sure it's DWORD-aligned + _pData->MinBufSize = BYTES_PERLINE_ALIGN4(m_ImageInfo.ImageWidth, m_ImageInfo.BitsPerPixel); + } + else + { + // calculate the min based on the current settings + int nBitDepth = 24; + float fXResolution = 600.0f; + float fWidth = 8.5f * fXResolution; + CTWAINContainerInt *pnCap = 0; + CTWAINContainerFix32 *pfCap = 0; + InternalFrame frame; + + if(0 == (pnCap = dynamic_cast<CTWAINContainerInt*>(findCapability(ICAP_BITDEPTH)))) + { + cerr << "Could not get ICAP_BITDEPTH" << endl; + setConditionCode(TWCC_BUMMER); + return TWRC_FAILURE; + } + else + { + pnCap->GetCurrent(nBitDepth); + } + + if(0 == (pfCap = dynamic_cast<CTWAINContainerFix32*>(findCapability(ICAP_XRESOLUTION)))) + { + cerr << "Could not get ICAP_XRESOLUTION" << endl; + setConditionCode(TWCC_BUMMER); + return TWRC_FAILURE; + } + else + { + pfCap->GetCurrent(fXResolution); + } + + if(!m_pICAP_FRAMES->GetCurrent(frame)) + { + cerr << "Could not get ICAP_FRAMES" << endl; + setConditionCode(TWCC_BUMMER); + return TWRC_FAILURE; + } + else + { + // Get the scanning window by converting from our internal units to pixels. + TW_FRAME TWframe = frame.AsTW_FRAME(TWUN_PIXELS, fXResolution, fXResolution); + fWidth = FIX32ToFloat(TWframe.Right) - FIX32ToFloat(TWframe.Left); + } + _pData->MinBufSize = (TW_UINT32)BYTES_PERLINE_ALIGN4(fWidth, nBitDepth); + } + return TWRC_SUCCESS; } Modified: trunk/TWAIN-Samples/Twain_DS_sample01/visual_studio/TWAINDS_GUI.rc =================================================================== --- trunk/TWAIN-Samples/Twain_DS_sample01/visual_studio/TWAINDS_GUI.rc 2008-10-30 15:11:31 UTC (rev 20) +++ trunk/TWAIN-Samples/Twain_DS_sample01/visual_studio/TWAINDS_GUI.rc 2008-11-26 19:14:03 UTC (rev 21) @@ -63,8 +63,8 @@ // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,0,0,5 - PRODUCTVERSION 1,0,0,5 + FILEVERSION 2,0,6,0 + PRODUCTVERSION 2,0,6,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -81,12 +81,12 @@ BEGIN VALUE "CompanyName", "TWAIN Working Group" VALUE "FileDescription", "SAMPLE Data Source" - VALUE "FileVersion", "1.0.0.5" + VALUE "FileVersion", "2.0.6.0" VALUE "InternalName", "TWAINDS.dll" VALUE "LegalCopyright", "(c) TWAIN Working Group. All rights reserved." VALUE "OriginalFilename", "TWAINDS.dll" VALUE "ProductName", "SampleDS01" - VALUE "ProductVersion", "1.0.0.5" + VALUE "ProductVersion", "2.0.6.0" END END BLOCK "VarFileInfo" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jim...@us...> - 2008-10-30 15:11:34
|
Revision: 20 http://twain-samples.svn.sourceforge.net/twain-samples/?rev=20&view=rev Author: jim0watters Date: 2008-10-30 15:11:31 +0000 (Thu, 30 Oct 2008) Log Message: ----------- Fix bug of not indexing Enumeration values correctly for int types. Causing MSG_SET with TWON_ENUMERATION to fail. Always Enable DS without UI even when TW_USERINTERFACE.ShowUI is TRUE. Modified Paths: -------------- trunk/TWAIN-Samples/Twain_DS_sample01/ChangeLog.txt trunk/TWAIN-Samples/Twain_DS_sample01/Installer/DS Installer 32.vdproj trunk/TWAIN-Samples/Twain_DS_sample01/Installer/DS Installer 64.vdproj trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_FreeImage.cpp trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerInt.cpp trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerInt.h trunk/TWAIN-Samples/Twain_DS_sample01/visual_studio/TWAINDS_GUI.rc Modified: trunk/TWAIN-Samples/Twain_DS_sample01/ChangeLog.txt =================================================================== --- trunk/TWAIN-Samples/Twain_DS_sample01/ChangeLog.txt 2008-10-23 22:00:40 UTC (rev 19) +++ trunk/TWAIN-Samples/Twain_DS_sample01/ChangeLog.txt 2008-10-30 15:11:31 UTC (rev 20) @@ -1,5 +1,11 @@ 2008-10-23 JFL Peripheral Solutions ji...@jf... + * Fix bug of not indexing Enumeration values correctly for int types. + Causing MSG_SET with TWON_ENUMERATION to fail + * Always Enable DS without UI even when TW_USERINTERFACE.ShowUI is TRUE. + +2008-10-23 JFL Peripheral Solutions ji...@jf... + * Don't allow updating capabilities when CurrentState >= dsState_XferReady. * Fix bug of not setting condition code correctly in some cases. * Add function to Validate set capabilities before they are committed. Modified: trunk/TWAIN-Samples/Twain_DS_sample01/Installer/DS Installer 32.vdproj =================================================================== --- trunk/TWAIN-Samples/Twain_DS_sample01/Installer/DS Installer 32.vdproj 2008-10-23 22:00:40 UTC (rev 19) +++ trunk/TWAIN-Samples/Twain_DS_sample01/Installer/DS Installer 32.vdproj 2008-10-30 15:11:31 UTC (rev 20) @@ -296,14 +296,14 @@ { "Name" = "8:Microsoft Visual Studio" "ProductName" = "8:TWAIN 2.0 DS 32bit Sample" - "ProductCode" = "8:{F1573A15-ABC0-4318-A3F0-2D727ACD1167}" - "PackageCode" = "8:{FF465AF6-4D5A-4D7B-B087-8083A2DD10CF}" + "ProductCode" = "8:{5147D271-675D-424F-9841-0AA1E034F685}" + "PackageCode" = "8:{CC446D88-F633-412A-95F0-46D3E09C40B0}" "UpgradeCode" = "8:{42397C41-AA95-45D0-A500-A692EB1A93B4}" "RestartWWWService" = "11:FALSE" "RemovePreviousVersions" = "11:FALSE" "DetectNewerInstalledVersion" = "11:TRUE" "InstallAllUsers" = "11:TRUE" - "ProductVersion" = "8:1.0.4" + "ProductVersion" = "8:1.0.5" "Manufacturer" = "8:TWAIN Working Group" "ARPHELPTELEPHONE" = "8:http://www.twainforum.org/phpBB2/index.php" "ARPHELPLINK" = "8:http://sourceforge.net/projects/twain-samples/" Modified: trunk/TWAIN-Samples/Twain_DS_sample01/Installer/DS Installer 64.vdproj =================================================================== --- trunk/TWAIN-Samples/Twain_DS_sample01/Installer/DS Installer 64.vdproj 2008-10-23 22:00:40 UTC (rev 19) +++ trunk/TWAIN-Samples/Twain_DS_sample01/Installer/DS Installer 64.vdproj 2008-10-30 15:11:31 UTC (rev 20) @@ -291,14 +291,14 @@ { "Name" = "8:Microsoft Visual Studio" "ProductName" = "8:TWAIN 2.0 DS 64bit Sample" - "ProductCode" = "8:{B1EA1B6B-C6B5-4C26-80E7-E3D995E63AFC}" - "PackageCode" = "8:{FA258E05-A2D4-4980-A0DC-796582CB0AC1}" + "ProductCode" = "8:{21B76EBB-2D69-434A-ACF9-204A1169744A}" + "PackageCode" = "8:{DD598F22-9318-4D81-B40B-7D37642360C4}" "UpgradeCode" = "8:{C2305D08-ACCD-48FD-8147-F655F8356F23}" "RestartWWWService" = "11:FALSE" "RemovePreviousVersions" = "11:FALSE" "DetectNewerInstalledVersion" = "11:TRUE" "InstallAllUsers" = "11:TRUE" - "ProductVersion" = "8:1.0.4" + "ProductVersion" = "8:1.0.5" "Manufacturer" = "8:TWAIN Working Group" "ARPHELPTELEPHONE" = "8:http://www.twainforum.org/phpBB2/index.php" "ARPHELPLINK" = "8:http://sourceforge.net/projects/twain-samples/" Modified: trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_FreeImage.cpp =================================================================== --- trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_FreeImage.cpp 2008-10-23 22:00:40 UTC (rev 19) +++ trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_FreeImage.cpp 2008-10-30 15:11:31 UTC (rev 20) @@ -559,7 +559,8 @@ return TWRC_FAILURE; } - if(FALSE == _pData->ShowUI) + // @todo Impliment UI in the DS + if(1)//FALSE == _pData->ShowUI) { m_CurrentState = dsState_Enabled; @@ -607,6 +608,13 @@ setConditionCode(TWCC_SEQERROR); return TWRC_FAILURE; } + + // @todo remove this when UI is working + if(TRUE == _pData->ShowUI) + { + setConditionCode(TWCC_BADPROTOCOL); + return TWRC_CHECKSTATUS; + } } else { @@ -760,53 +768,13 @@ dwRead = MIN(64000, nImageSize) / nDestBytesPerRow * nDestBytesPerRow; dwReceived =0; -// if(TWPT_RGB!=m_ImageInfo.PixelType) -// { - // if BW or GRAY just copy the data - if( !m_Scanner.getScanStrip(pImageData, dwRead, dwReceived) || - dwReceived != dwReceived / nDestBytesPerRow * nDestBytesPerRow) - { - //No more data to recieve fill the rest - break; - } - pImageData += dwReceived; -// } -/* else + if( !m_Scanner.getScanStrip(pImageData, dwRead, dwReceived) || + dwReceived != dwReceived / nDestBytesPerRow * nDestBytesPerRow) { - // With color images we need to reorder the data - if(hImageBuff == 0) - { - hImageBuff = _DSM_Alloc(dwRead); - if(!hImageBuff) - { - _DSM_UnlockMemory(pData); - setConditionCode(TWCC_LOWMEMORY); - return TWRC_FAILURE; - } - } - BYTE *pBuff = (BYTE *)_DSM_LockMemory(hImageBuff); - - if( !m_Scanner.getScanStrip(pBuff, dwRead, dwReceived)) - { - _DSM_UnlockMemory(pBuff); - break; - } - - //need to re-order from BGR to RGB, pixel by pixel - for(WORD nRow = 0; nRow < dwReceived/nDestBytesPerRow; nRow++) - { - for(WORD nCol = 0; nCol<m_ImageInfo.ImageWidth; nCol++) - { - pImageData[(nCol*3)] = pBuff[FI_RGBA_RED]; - pImageData[(nCol*3)+1] = pBuff[FI_RGBA_GREEN]; - pImageData[(nCol*3)+2] = pBuff[FI_RGBA_BLUE]; - pBuff += 3; - } - pImageData += nDestBytesPerRow; - } - - _DSM_UnlockMemory(pBuff); - }*/ + //No more data to recieve fill the rest + break; + } + pImageData += dwReceived; nImageSize -= dwReceived; }while(nImageSize>0 && twrc == TWRC_SUCCESS); Modified: trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerInt.cpp =================================================================== --- trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerInt.cpp 2008-10-23 22:00:40 UTC (rev 19) +++ trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerInt.cpp 2008-10-30 15:11:31 UTC (rev 20) @@ -294,7 +294,8 @@ for(TW_UINT32 x = 0; x < pCap->NumItems; ++x) { // only set the value if it exists in m_listIntsDefault - iter = find(m_listIntsDefault.begin(), m_listIntsDefault.end(), pCap->ItemList[x]); + int nValue = GetIndexIntValue(pCap, x); + iter = find(m_listIntsDefault.begin(), m_listIntsDefault.end(), nValue); if(iter != m_listIntsDefault.end()) { @@ -307,10 +308,10 @@ } // only add it if it was not added already - iter = find(m_listInts.begin(), m_listInts.end(), pCap->ItemList[x]); + iter = find(m_listInts.begin(), m_listInts.end(), nValue); if(iter == m_listInts.end()) { - m_listInts.push_back(pCap->ItemList[x]); + m_listInts.push_back(nValue); } else { @@ -468,3 +469,41 @@ return ret; } +static int GetIndexIntValue(pTW_ENUMERATION pCap, TW_UINT32 index) +{ + int rtn = 0; + if(pCap && pCap->NumItems > index) + { + switch(pCap->ItemType) + { + case TWTY_INT8: + rtn = ((TW_INT8*)&pCap->ItemList)[index]; + break; + + case TWTY_INT16: + rtn = ((TW_INT16*)&pCap->ItemList)[index]; + break; + + case TWTY_INT32: + rtn = ((TW_INT32*)&pCap->ItemList)[index]; + break; + + case TWTY_UINT8: + rtn = ((TW_UINT8*)&pCap->ItemList)[index]; + break; + + case TWTY_UINT16: + rtn = ((TW_UINT16*)&pCap->ItemList)[index]; + break; + + case TWTY_UINT32: + rtn = ((TW_UINT32*)&pCap->ItemList)[index]; + break; + + case TWTY_BOOL: + rtn = ((TW_BOOL*)&pCap->ItemList)[index]; + break; + } + } + return rtn; +} \ No newline at end of file Modified: trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerInt.h =================================================================== --- trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerInt.h 2008-10-23 22:00:40 UTC (rev 19) +++ trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerInt.h 2008-10-30 15:11:31 UTC (rev 20) @@ -42,6 +42,8 @@ #include "TWAINContainer.h" +static int GetIndexIntValue(pTW_ENUMERATION pCap, TW_UINT32 index); + /** * This class can be used for any Integer based TWAIN container. * All values are stored internally as 1/1000th of an inch. They are converted Modified: trunk/TWAIN-Samples/Twain_DS_sample01/visual_studio/TWAINDS_GUI.rc =================================================================== --- trunk/TWAIN-Samples/Twain_DS_sample01/visual_studio/TWAINDS_GUI.rc 2008-10-23 22:00:40 UTC (rev 19) +++ trunk/TWAIN-Samples/Twain_DS_sample01/visual_studio/TWAINDS_GUI.rc 2008-10-30 15:11:31 UTC (rev 20) @@ -63,8 +63,8 @@ // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,0,0,4 - PRODUCTVERSION 1,0,0,4 + FILEVERSION 1,0,0,5 + PRODUCTVERSION 1,0,0,5 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -81,12 +81,12 @@ BEGIN VALUE "CompanyName", "TWAIN Working Group" VALUE "FileDescription", "SAMPLE Data Source" - VALUE "FileVersion", "1.0.0.4" + VALUE "FileVersion", "1.0.0.5" VALUE "InternalName", "TWAINDS.dll" VALUE "LegalCopyright", "(c) TWAIN Working Group. All rights reserved." VALUE "OriginalFilename", "TWAINDS.dll" VALUE "ProductName", "SampleDS01" - VALUE "ProductVersion", "1.0.0.4" + VALUE "ProductVersion", "1.0.0.5" END END BLOCK "VarFileInfo" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jim...@us...> - 2008-10-23 22:10:40
|
Revision: 18 http://twain-samples.svn.sourceforge.net/twain-samples/?rev=18&view=rev Author: jim0watters Date: 2008-10-23 21:57:01 +0000 (Thu, 23 Oct 2008) Log Message: ----------- Constrain Frames to within the min width and height of the scanner Physical width and height of the scanner. Don't allow updating capabilities when CurrentState >= dsState_XferReady. Correct bug with not setting condition code correctly in some cases. Add function to Validate set capabilities before they are committed. Do not allow exferCount of 0 or less than -1 Fix bug with InternalFrame constructor using SupportedSize not generating correct size frame. Add support for TW_UINT32 in TWAINContainerInt class. Modified Paths: -------------- trunk/TWAIN-Samples/Twain_DS_sample01/ChangeLog.txt trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_Base.cpp trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_Base.h trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerFix32.cpp trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerFrame.cpp trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerFrame.h trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerInt.cpp trunk/TWAIN-Samples/Twain_DS_sample01/visual_studio/TWAINDS_GUI.rc Property Changed: ---------------- trunk/TWAIN-Samples/Twain_DS_sample01/visual_studio/ Modified: trunk/TWAIN-Samples/Twain_DS_sample01/ChangeLog.txt =================================================================== --- trunk/TWAIN-Samples/Twain_DS_sample01/ChangeLog.txt 2008-09-29 21:22:21 UTC (rev 17) +++ trunk/TWAIN-Samples/Twain_DS_sample01/ChangeLog.txt 2008-10-23 21:57:01 UTC (rev 18) @@ -1,3 +1,13 @@ +2008-10-23 JFL Peripheral Solutions ji...@jf... + + * Don't allow updating capabilities when CurrentState >= dsState_XferReady. + * Fix bug of not setting condition code correctly in some cases. + * Add function to Validate set capabilities before they are committed. + * Do not allow exferCount of 0 or less than -1 + * Constrain Frames to within the min width and height of the scanner Physical width and height of the scanner. + * Fix bug with InternalFrame constructor using SupportedSize not generating correct size frame. + * Add support for TW_UINT32 in TWAINContainerInt class. + 2008-09-29 JFL Peripheral Solutions ji...@jf... * Fix several bugs with MSG_SET and TWON_ENUMERATION containers when bad data is used. Modified: trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_Base.cpp =================================================================== --- trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_Base.cpp 2008-09-29 21:22:21 UTC (rev 17) +++ trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_Base.cpp 2008-10-23 21:57:01 UTC (rev 18) @@ -268,6 +268,11 @@ if(MSG_RESETALL == _MSG) // special case { + if(m_CurrentState >= dsState_XferReady) + { + setConditionCode(TWCC_SEQERROR); + return TWRC_FAILURE; + } // Loop through all supported caps and reset them. CTWAINContainer *pCap = NULL; CTWAINContainerInt *pCapSC = dynamic_cast<CTWAINContainerInt*>(findCapability(CAP_SUPPORTEDCAPS)); @@ -313,13 +318,11 @@ if(0 != pCap) { twrc = handleCap(_MSG, pCap, _pCap); - } - // when some capabilities are changed it requires changing others - if(twrc == TWRC_SUCCESS || twrc == TWRC_CHECKSTATUS) - { - // Only Set and Reset message are of concern - if( MSG_SET == _MSG || MSG_RESET == _MSG ) + // when some capabilities are successfully changed with Set or Reset + // it requires changing others + if( (twrc == TWRC_SUCCESS || twrc == TWRC_CHECKSTATUS) && + (MSG_SET == _MSG || MSG_RESET == _MSG) ) { TW_INT16 twrc2 = updatePostDependencies(_MSG, _pCap->Cap); if(twrc == TWRC_SUCCESS && twrc2 != TWRC_SUCCESS) @@ -832,6 +835,12 @@ { case MSG_RESET: //MSG_RESET is supposed to reset and then return the current value + if(m_CurrentState >= dsState_XferReady) + { + setConditionCode(TWCC_SEQERROR); + twrc = TWRC_FAILURE; + break; + } _pContainer->Reset(); //change the behavior to a get current _MSG = MSG_GETCURRENT; @@ -851,23 +860,37 @@ case MSG_SET: { + if(m_CurrentState >= dsState_XferReady) + { + setConditionCode(TWCC_SEQERROR); + twrc = TWRC_FAILURE; + break; + } twrc = updatePreDependencies(_pContainer); if(twrc != TWRC_SUCCESS) { break; } - twrc = validateCapabilitySet(_pContainer); + twrc = validateCapabilitySet(_pCap); if(twrc != TWRC_SUCCESS) { - break; + setConditionCode(TWCC_BADVALUE); + if(twrc == TWRC_FAILURE) + { + break; + } } TW_INT16 Condition; - twrc = _pContainer->Set(_pCap, Condition); - if(twrc != TWRC_SUCCESS) + TW_INT16 twrc2 = _pContainer->Set(_pCap, Condition); + if(twrc2 != TWRC_SUCCESS) { setConditionCode(Condition); + if(twrc == TWRC_SUCCESS && twrc2 != TWRC_SUCCESS) + { + twrc = twrc2; + } } } break; @@ -882,24 +905,73 @@ return twrc; } -TW_INT16 CTWAINDS_Base::validateCapabilitySet(CTWAINContainer* _pContainer) +////////////////////////////////////////////////////////////////////////////// +TW_INT16 CTWAINDS_Base::validateCapabilitySet(pTW_CAPABILITY _pCap) { TW_INT16 twrc = TWRC_SUCCESS; - switch(_pContainer->GetCapID()) + switch(_pCap->Cap) { case CAP_XFERCOUNT: { - CTWAINContainerInt *pnCap = dynamic_cast<CTWAINContainerInt*>(_pContainer); - int Count = -1; - - if(!pnCap || !pnCap->GetCurrent(Count) || Count == 0 || Count <-1) + twrc = TWRC_FAILURE; + if(TWON_ONEVALUE == _pCap->ConType) { - twrc = TWRC_FAILURE; - setConditionCode(TWCC_BADVALUE); + pTW_ONEVALUE pCap = (pTW_ONEVALUE)_DSM_LockMemory(_pCap->hContainer); + + if(pCap) + { + if( (TW_INT16)pCap->Item == -1 || (TW_INT16)pCap->Item > 0 ) + { + twrc = TWRC_SUCCESS; + } + _DSM_UnlockMemory((TW_MEMREF)pCap); + } } break; } + case ICAP_FRAMES: + { + int unit = TWUN_PIXELS; + float Xres = 100; + float Yres = 100; + twrc = getCurrentUnits(unit, Xres, Yres); + + if(TWON_ONEVALUE == _pCap->ConType) + { + pTW_ONEVALUE_FRAME pCap = (pTW_ONEVALUE_FRAME)_DSM_LockMemory(_pCap->hContainer); + + if(pCap && pCap->ItemType == TWTY_FRAME) + { + InternalFrame frame(pCap->Item, unit, Xres, Yres); + if(ConstrainFrameToScanner(frame)) + { + pCap->Item = frame.AsTW_FRAME(unit, Xres, Yres); + twrc = TWRC_CHECKSTATUS; + } + _DSM_UnlockMemory((TW_MEMREF)pCap); + } + } + else if(TWON_ENUMERATION == _pCap->ConType) + { + pTW_ENUMERATION_FRAME pCap = (pTW_ENUMERATION_FRAME)_DSM_LockMemory(_pCap->hContainer); + + if(pCap && pCap->ItemType == TWTY_FRAME) + { + for(TW_UINT32 x = 0; x < pCap->NumItems; ++x) + { + InternalFrame frame(pCap->ItemList[x], unit, Xres, Yres); + if(ConstrainFrameToScanner(frame)) + { + pCap->ItemList[x] = frame.AsTW_FRAME(unit, Xres, Yres); + twrc = TWRC_CHECKSTATUS; + } + } + _DSM_UnlockMemory((TW_MEMREF)pCap); + } + } + break; + } default: break; } @@ -907,6 +979,7 @@ return twrc; } +////////////////////////////////////////////////////////////////////////////// TW_INT16 CTWAINDS_Base::updatePreDependencies(CTWAINContainer* _pContainer) { TW_INT16 twrc = TWRC_SUCCESS; @@ -938,6 +1011,7 @@ return twrc; } +////////////////////////////////////////////////////////////////////////////// TW_INT16 CTWAINDS_Base::updatePostDependencies(TW_UINT16 MSG, TW_UINT16 Cap) { TW_INT16 twrc = TWRC_SUCCESS; @@ -962,19 +1036,15 @@ break; } - if(MSG_SET == MSG) + if( MSG == MSG_SET + || MSG == MSG_RESET ) { int ss; pDepCapSS->GetCurrent(ss); InternalFrame frame(ss); - - pDepCapFrames->Reset(); - pDepCapFrames->Add(frame); + ConstrainFrameToScanner(frame); + pDepCapFrames->Set(frame); } - else if(MSG_RESET == MSG) - { - pDepCapFrames->Reset(); - } } break; @@ -991,7 +1061,8 @@ break; } - if(MSG_SET == MSG || MSG_RESET == MSG) + if( MSG == MSG_SET + || MSG == MSG_RESET ) { // Figure out if the current frame is in our list of ICAP_SUPPORTEDSIZES // if it is in the list, then we need to set the current SS to match @@ -1031,8 +1102,59 @@ return twrc; } +////////////////////////////////////////////////////////////////////////////// +bool CTWAINDS_Base::ConstrainFrameToScanner(InternalFrame& _frame) +{ + bool bChanged = false; + float fMaxValue; + float fMinValue; + // ICAP_PHYSICALWIDTH and ICAP_PHYSICALHEIGHT are required Caps while + // ICAP_MINIMUMWIDTH and ICAP_MINIMUMHEIGHT are not required caps. + CTWAINContainerFix32* pPhysicalWidth = dynamic_cast<CTWAINContainerFix32*>(findCapability(ICAP_PHYSICALWIDTH)); + CTWAINContainerFix32* pPhysicalHeight = dynamic_cast<CTWAINContainerFix32*>(findCapability(ICAP_PHYSICALHEIGHT)); + CTWAINContainerFix32* pMinWidth = dynamic_cast<CTWAINContainerFix32*>(findCapability(ICAP_MINIMUMWIDTH)); + CTWAINContainerFix32* pMinHeight = dynamic_cast<CTWAINContainerFix32*>(findCapability(ICAP_MINIMUMHEIGHT)); + // Constrain the width + if(_frame.nLeft < 0) + { + _frame.nLeft = 0; + bChanged = true; + } + if(pPhysicalWidth && true == pPhysicalWidth->GetCurrent(fMaxValue) && (int)fMaxValue < _frame.nRight) + { + _frame.nRight = (int)fMaxValue; + bChanged = true; + } + if(pMinWidth && true == pMinWidth->GetCurrent(fMinValue) && (int)fMinValue > _frame.nRight-_frame.nLeft) + { + _frame.nLeft = max( 0, _frame.nLeft - ((int)fMinValue - (_frame.nRight-_frame.nLeft)) ); + _frame.nRight = _frame.nLeft + max((int)fMinValue, _frame.nRight-_frame.nLeft); + bChanged = true; + } + + // Constrain the height + if(_frame.nTop < 0) + { + _frame.nTop = 0; + bChanged = true; + } + if(pPhysicalHeight && true == pPhysicalHeight->GetCurrent(fMaxValue) && (int)fMaxValue < _frame.nBottom) + { + _frame.nBottom = (int)fMaxValue; + bChanged = true; + } + if(pMinHeight && true == pMinHeight->GetCurrent(fMinValue) && (int)fMinValue > _frame.nBottom-_frame.nTop) + { + _frame.nTop = max( 0, _frame.nTop - ((int)fMinValue - (_frame.nBottom-_frame.nTop)) ); + _frame.nBottom = _frame.nTop + max((int)fMinValue, _frame.nBottom-_frame.nTop); + bChanged = true; + } + + return bChanged; +} + ////////////////////////////////////////////////////////////////////////////// TW_INT16 CTWAINDS_Base::getCurrentUnits(int &Unit, float &Xres, float &Yres) { Modified: trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_Base.h =================================================================== --- trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_Base.h 2008-09-29 21:22:21 UTC (rev 17) +++ trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_Base.h 2008-10-23 21:57:01 UTC (rev 18) @@ -526,9 +526,9 @@ * @param[in] _pCap a pointer to TW_CAPABILITY structure. * @return a valid TWRC_xxxx return code. */ - virtual TW_INT16 validateCapabilitySet(CTWAINContainer* _pContainer); + virtual TW_INT16 validateCapabilitySet(pTW_CAPABILITY _pCap); - /** + /** * if the CTWAINContainer is dependend on another Capabiltiy. * This function is used to get the data it needs. * @param[in] MSG the message that was sent @@ -538,6 +538,14 @@ virtual TW_INT16 updatePostDependencies(TW_UINT16 MSG, TW_UINT16 Cap); /** + * Update the frame to bewithin the constrains of the scanners Phyisical + * dimentions and minimum allowed sizes. + * @param[in out] _frame the frame to update. + * @return true if the frame is not change, false if changed. + */ + virtual bool ConstrainFrameToScanner(InternalFrame& _frame); + + /** * get the current unit and resolution. A helper function used by Unit dependent cap * @param[out] Unit the current unit value. * @param[out] Xres the current X resolution value. Modified: trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerFix32.cpp =================================================================== --- trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerFix32.cpp 2008-09-29 21:22:21 UTC (rev 17) +++ trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerFix32.cpp 2008-10-23 21:57:01 UTC (rev 18) @@ -235,7 +235,10 @@ } else { - nNewCurrentIndex--; + if(x < pCap->CurrentIndex) + { + nNewCurrentIndex--; + } twrc = TWRC_CHECKSTATUS; Condition = TWCC_BADVALUE; } Modified: trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerFrame.cpp =================================================================== --- trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerFrame.cpp 2008-09-29 21:22:21 UTC (rev 17) +++ trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerFrame.cpp 2008-10-23 21:57:01 UTC (rev 18) @@ -42,228 +42,228 @@ InternalFrame::InternalFrame() { - unLeft = 0; - unTop = 0; - unRight = 0; - unBottom = 0; + nLeft = 0; + nTop = 0; + nRight = 0; + nBottom = 0; } -InternalFrame::InternalFrame(UINT left, UINT top, UINT right, UINT bottom) +InternalFrame::InternalFrame(int left, int top, int right, int bottom) { - unLeft = left; - unTop = top; - unRight = right; - unBottom = bottom; + nLeft = left; + nTop = top; + nRight = right; + nBottom = bottom; } -InternalFrame::InternalFrame(float left, float top, float right, float bottom, int fromUnits, float Xresolution, float Yresolution) -{ - unLeft = int(ConvertUnits(left, fromUnits, TWUN_1000INCHES, Xresolution)); - unTop = int(ConvertUnits(top, fromUnits, TWUN_1000INCHES, Yresolution)); - unRight = int(ConvertUnits(right, fromUnits, TWUN_1000INCHES, Xresolution)); - unBottom = int(ConvertUnits(bottom, fromUnits, TWUN_1000INCHES, Yresolution)); -} - InternalFrame::InternalFrame(const TW_FRAME twFrame, int fromUnits, float Xresolution, float Yresolution) { - unLeft = int(ConvertUnits(FIX32ToFloat(twFrame.Left), fromUnits, TWUN_1000INCHES, Xresolution)); - unTop = int(ConvertUnits(FIX32ToFloat(twFrame.Top), fromUnits, TWUN_1000INCHES, Yresolution)); - unRight = int(ConvertUnits(FIX32ToFloat(twFrame.Right), fromUnits, TWUN_1000INCHES, Xresolution)); - unBottom = int(ConvertUnits(FIX32ToFloat(twFrame.Bottom), fromUnits, TWUN_1000INCHES, Yresolution)); + nLeft = int(ConvertUnits(FIX32ToFloat(twFrame.Left), fromUnits, TWUN_1000INCHES, Xresolution)); + nTop = int(ConvertUnits(FIX32ToFloat(twFrame.Top), fromUnits, TWUN_1000INCHES, Yresolution)); + nRight = int(ConvertUnits(FIX32ToFloat(twFrame.Right), fromUnits, TWUN_1000INCHES, Xresolution)); + nBottom = int(ConvertUnits(FIX32ToFloat(twFrame.Bottom), fromUnits, TWUN_1000INCHES, Yresolution)); } -TW_FRAME InternalFrame::AsTW_FRAME(int toUnits, float Xresolution, float Yresolution) -{ - TW_FRAME frame; - frame.Left = FloatToFIX32(ConvertUnits(float(unLeft), TWUN_1000INCHES, toUnits, Xresolution)); - frame.Top = FloatToFIX32(ConvertUnits(float(unTop), TWUN_1000INCHES, toUnits, Yresolution)); - frame.Right = FloatToFIX32(ConvertUnits(float(unRight), TWUN_1000INCHES, toUnits, Xresolution)); - frame.Bottom = FloatToFIX32(ConvertUnits(float(unBottom), TWUN_1000INCHES, toUnits, Yresolution)); - return frame; -} - InternalFrame::InternalFrame(const TW_UINT16 ss) { //see which supported size they want the dimensions of switch(ss) { case TWSS_USLEDGER: - InternalFrame( 0, 0, 11.0f, 17.0f, TWUN_INCHES, 100, 100); + SetFrame( 0, 0, 11.0f, 17.0f, TWUN_INCHES, 100, 100); break; case TWSS_USLEGAL: - InternalFrame( 0, 0, 8.5f, 14.0f, TWUN_INCHES, 100, 100); + SetFrame( 0, 0, 8.5f, 14.0f, TWUN_INCHES, 100, 100); break; case TWSS_USLETTER: - InternalFrame( 0, 0, 8.5f, 11.0f, TWUN_INCHES, 100, 100); + SetFrame( 0, 0, 8.5f, 11.0f, TWUN_INCHES, 100, 100); break; case TWSS_USEXECUTIVE: - InternalFrame( 0, 0, 7.25f, 10.5f, TWUN_INCHES, 100, 100); + SetFrame( 0, 0, 7.25f, 10.5f, TWUN_INCHES, 100, 100); break; case TWSS_USSTATEMENT: - InternalFrame( 0, 0, 5.5f, 8.5f, TWUN_INCHES, 100, 100); + SetFrame( 0, 0, 5.5f, 8.5f, TWUN_INCHES, 100, 100); break; case TWSS_BUSINESSCARD: - InternalFrame( 0, 0, 3.5f, 2.0f, TWUN_INCHES, 100, 100); + SetFrame( 0, 0, 3.5f, 2.0f, TWUN_INCHES, 100, 100); break; case TWSS_4A0: - InternalFrame( 0, 0,168.2f, 237.8f, TWUN_CENTIMETERS, 100, 100); + SetFrame( 0, 0,168.2f, 237.8f, TWUN_CENTIMETERS, 100, 100); break; case TWSS_2A0: - InternalFrame( 0, 0,118.9f, 168.2f, TWUN_CENTIMETERS, 100, 100); + SetFrame( 0, 0,118.9f, 168.2f, TWUN_CENTIMETERS, 100, 100); break; case TWSS_A0: - InternalFrame( 0, 0, 84.1f, 118.9f, TWUN_CENTIMETERS, 100, 100); + SetFrame( 0, 0, 84.1f, 118.9f, TWUN_CENTIMETERS, 100, 100); break; case TWSS_A1: - InternalFrame( 0, 0, 59.4f, 84.1f, TWUN_CENTIMETERS, 100, 100); + SetFrame( 0, 0, 59.4f, 84.1f, TWUN_CENTIMETERS, 100, 100); break; case TWSS_A2: - InternalFrame( 0, 0, 42.0f, 59.4f, TWUN_CENTIMETERS, 100, 100); + SetFrame( 0, 0, 42.0f, 59.4f, TWUN_CENTIMETERS, 100, 100); break; case TWSS_A3: - InternalFrame( 0, 0, 29.7f, 42.0f, TWUN_CENTIMETERS, 100, 100); + SetFrame( 0, 0, 29.7f, 42.0f, TWUN_CENTIMETERS, 100, 100); break; case TWSS_A4: // case TWSS_A4LETTER: - InternalFrame( 0, 0, 21.0f, 29.7f, TWUN_CENTIMETERS, 100, 100); + SetFrame( 0, 0, 21.0f, 29.7f, TWUN_CENTIMETERS, 100, 100); break; case TWSS_A5: - InternalFrame( 0, 0, 14.8f, 21.0f, TWUN_CENTIMETERS, 100, 100); + SetFrame( 0, 0, 14.8f, 21.0f, TWUN_CENTIMETERS, 100, 100); break; case TWSS_A6: - InternalFrame( 0, 0, 10.5f, 14.8f, TWUN_CENTIMETERS, 100, 100); + SetFrame( 0, 0, 10.5f, 14.8f, TWUN_CENTIMETERS, 100, 100); break; case TWSS_A7: - InternalFrame( 0, 0, 7.4f, 10.5f, TWUN_CENTIMETERS, 100, 100); + SetFrame( 0, 0, 7.4f, 10.5f, TWUN_CENTIMETERS, 100, 100); break; case TWSS_A8: - InternalFrame( 0, 0, 5.2f, 7.4f, TWUN_CENTIMETERS, 100, 100); + SetFrame( 0, 0, 5.2f, 7.4f, TWUN_CENTIMETERS, 100, 100); break; case TWSS_A9: - InternalFrame( 0, 0, 3.7f, 5.2f, TWUN_CENTIMETERS, 100, 100); + SetFrame( 0, 0, 3.7f, 5.2f, TWUN_CENTIMETERS, 100, 100); break; case TWSS_A10: - InternalFrame( 0, 0, 2.6f, 3.7f, TWUN_CENTIMETERS, 100, 100); + SetFrame( 0, 0, 2.6f, 3.7f, TWUN_CENTIMETERS, 100, 100); break; case TWSS_ISOB0: - InternalFrame( 0, 0,100.0f, 141.4f, TWUN_CENTIMETERS, 100, 100); + SetFrame( 0, 0,100.0f, 141.4f, TWUN_CENTIMETERS, 100, 100); break; case TWSS_ISOB1: - InternalFrame( 0, 0, 70.7f, 100.0f, TWUN_CENTIMETERS, 100, 100); + SetFrame( 0, 0, 70.7f, 100.0f, TWUN_CENTIMETERS, 100, 100); break; case TWSS_ISOB2: - InternalFrame( 0, 0, 50.0f, 70.7f, TWUN_CENTIMETERS, 100, 100); + SetFrame( 0, 0, 50.0f, 70.7f, TWUN_CENTIMETERS, 100, 100); break; case TWSS_ISOB3: // case TWSS_B3: - InternalFrame( 0, 0, 35.3f, 50.0f, TWUN_CENTIMETERS, 100, 100); + SetFrame( 0, 0, 35.3f, 50.0f, TWUN_CENTIMETERS, 100, 100); break; case TWSS_ISOB4: // case TWSS_B4: - InternalFrame( 0, 0, 25.0f, 35.4f, TWUN_CENTIMETERS, 100, 100); + SetFrame( 0, 0, 25.0f, 35.4f, TWUN_CENTIMETERS, 100, 100); break; case TWSS_ISOB5: - InternalFrame( 0, 0, 17.6f, 25.0f, TWUN_CENTIMETERS, 100, 100); + SetFrame( 0, 0, 17.6f, 25.0f, TWUN_CENTIMETERS, 100, 100); break; case TWSS_ISOB6: // case TWSS_B6: - InternalFrame( 0, 0, 12.5f, 17.6f, TWUN_CENTIMETERS, 100, 100); + SetFrame( 0, 0, 12.5f, 17.6f, TWUN_CENTIMETERS, 100, 100); break; case TWSS_ISOB7: - InternalFrame( 0, 0, 8.8f, 12.5f, TWUN_CENTIMETERS, 100, 100); + SetFrame( 0, 0, 8.8f, 12.5f, TWUN_CENTIMETERS, 100, 100); break; case TWSS_ISOB8: - InternalFrame( 0, 0, 6.2f, 8.8f, TWUN_CENTIMETERS, 100, 100); + SetFrame( 0, 0, 6.2f, 8.8f, TWUN_CENTIMETERS, 100, 100); break; case TWSS_ISOB9: - InternalFrame( 0, 0, 4.4f, 6.2f, TWUN_CENTIMETERS, 100, 100); + SetFrame( 0, 0, 4.4f, 6.2f, TWUN_CENTIMETERS, 100, 100); break; case TWSS_ISOB10: - InternalFrame( 0, 0, 3.1f, 4.4f, TWUN_CENTIMETERS, 100, 100); + SetFrame( 0, 0, 3.1f, 4.4f, TWUN_CENTIMETERS, 100, 100); break; case TWSS_JISB0: - InternalFrame( 0, 0,103.0f, 145.6f, TWUN_CENTIMETERS, 100, 100); + SetFrame( 0, 0,103.0f, 145.6f, TWUN_CENTIMETERS, 100, 100); break; case TWSS_JISB1: - InternalFrame( 0, 0, 72.8f, 103.0f, TWUN_CENTIMETERS, 100, 100); + SetFrame( 0, 0, 72.8f, 103.0f, TWUN_CENTIMETERS, 100, 100); break; case TWSS_JISB2: - InternalFrame( 0, 0, 51.5f, 72.8f, TWUN_CENTIMETERS, 100, 100); + SetFrame( 0, 0, 51.5f, 72.8f, TWUN_CENTIMETERS, 100, 100); break; case TWSS_JISB3: - InternalFrame( 0, 0, 36.4f, 51.5f, TWUN_CENTIMETERS, 100, 100); + SetFrame( 0, 0, 36.4f, 51.5f, TWUN_CENTIMETERS, 100, 100); break; case TWSS_JISB4: - InternalFrame( 0, 0, 25.7f, 36.4f, TWUN_CENTIMETERS, 100, 100); + SetFrame( 0, 0, 25.7f, 36.4f, TWUN_CENTIMETERS, 100, 100); break; case TWSS_JISB5: // case TWSS_B5LETTER: - InternalFrame( 0, 0, 18.2f, 25.7f, TWUN_CENTIMETERS, 100, 100); + SetFrame( 0, 0, 18.2f, 25.7f, TWUN_CENTIMETERS, 100, 100); break; case TWSS_JISB6: - InternalFrame( 0, 0, 12.8f, 18.2f, TWUN_CENTIMETERS, 100, 100); + SetFrame( 0, 0, 12.8f, 18.2f, TWUN_CENTIMETERS, 100, 100); break; case TWSS_JISB7: - InternalFrame( 0, 0, 9.1f, 12.8f, TWUN_CENTIMETERS, 100, 100); + SetFrame( 0, 0, 9.1f, 12.8f, TWUN_CENTIMETERS, 100, 100); break; case TWSS_JISB8: - InternalFrame( 0, 0, 6.4f, 9.1f, TWUN_CENTIMETERS, 100, 100); + SetFrame( 0, 0, 6.4f, 9.1f, TWUN_CENTIMETERS, 100, 100); break; case TWSS_JISB9: - InternalFrame( 0, 0, 4.5f, 6.4f, TWUN_CENTIMETERS, 100, 100); + SetFrame( 0, 0, 4.5f, 6.4f, TWUN_CENTIMETERS, 100, 100); break; case TWSS_JISB10: - InternalFrame( 0, 0, 3.2f, 4.5f, TWUN_CENTIMETERS, 100, 100); + SetFrame( 0, 0, 3.2f, 4.5f, TWUN_CENTIMETERS, 100, 100); break; case TWSS_C0: - InternalFrame( 0, 0, 91.7f, 129.7f, TWUN_CENTIMETERS, 100, 100); + SetFrame( 0, 0, 91.7f, 129.7f, TWUN_CENTIMETERS, 100, 100); break; case TWSS_C1: - InternalFrame( 0, 0, 64.8f, 91.7f, TWUN_CENTIMETERS, 100, 100); + SetFrame( 0, 0, 64.8f, 91.7f, TWUN_CENTIMETERS, 100, 100); break; case TWSS_C2: - InternalFrame( 0, 0, 45.8f, 64.8f, TWUN_CENTIMETERS, 100, 100); + SetFrame( 0, 0, 45.8f, 64.8f, TWUN_CENTIMETERS, 100, 100); break; case TWSS_C3: - InternalFrame( 0, 0, 32.4f, 45.8f, TWUN_CENTIMETERS, 100, 100); + SetFrame( 0, 0, 32.4f, 45.8f, TWUN_CENTIMETERS, 100, 100); break; case TWSS_C4: - InternalFrame( 0, 0, 22.9f, 32.4f, TWUN_CENTIMETERS, 100, 100); + SetFrame( 0, 0, 22.9f, 32.4f, TWUN_CENTIMETERS, 100, 100); break; case TWSS_C5: - InternalFrame( 0, 0, 16.2f, 22.9f, TWUN_CENTIMETERS, 100, 100); + SetFrame( 0, 0, 16.2f, 22.9f, TWUN_CENTIMETERS, 100, 100); break; case TWSS_C6: - InternalFrame( 0, 0, 11.4f, 16.2f, TWUN_CENTIMETERS, 100, 100); + SetFrame( 0, 0, 11.4f, 16.2f, TWUN_CENTIMETERS, 100, 100); break; case TWSS_C7: - InternalFrame( 0, 0, 8.1f, 11.4f, TWUN_CENTIMETERS, 100, 100); + SetFrame( 0, 0, 8.1f, 11.4f, TWUN_CENTIMETERS, 100, 100); break; case TWSS_C8: - InternalFrame( 0, 0, 5.7f, 8.1f, TWUN_CENTIMETERS, 100, 100); + SetFrame( 0, 0, 5.7f, 8.1f, TWUN_CENTIMETERS, 100, 100); break; case TWSS_C9: - InternalFrame( 0, 0, 4.0f, 5.7f, TWUN_CENTIMETERS, 100, 100); + SetFrame( 0, 0, 4.0f, 5.7f, TWUN_CENTIMETERS, 100, 100); break; case TWSS_C10: - InternalFrame( 0, 0, 2.8f, 4.0f, TWUN_CENTIMETERS, 100, 100); + SetFrame( 0, 0, 2.8f, 4.0f, TWUN_CENTIMETERS, 100, 100); break; default: - InternalFrame(0, 0, 0, 0); //if we don't recognize their size, return a default frame + nLeft = nTop = nRight = nBottom = 0; break; } +} - + +InternalFrame* InternalFrame::SetFrame(float left, float top, float right, float bottom, int fromUnits, float Xresolution, float Yresolution) +{ + nLeft = int(ConvertUnits(left, fromUnits, TWUN_1000INCHES, Xresolution)); + nTop = int(ConvertUnits(top, fromUnits, TWUN_1000INCHES, Yresolution)); + nRight = int(ConvertUnits(right, fromUnits, TWUN_1000INCHES, Xresolution)); + nBottom = int(ConvertUnits(bottom, fromUnits, TWUN_1000INCHES, Yresolution)); + + return this; } +TW_FRAME InternalFrame::AsTW_FRAME(int toUnits, float Xresolution, float Yresolution) +{ + TW_FRAME frame; + frame.Left = FloatToFIX32(ConvertUnits(float(nLeft), TWUN_1000INCHES, toUnits, Xresolution)); + frame.Top = FloatToFIX32(ConvertUnits(float(nTop), TWUN_1000INCHES, toUnits, Yresolution)); + frame.Right = FloatToFIX32(ConvertUnits(float(nRight), TWUN_1000INCHES, toUnits, Xresolution)); + frame.Bottom = FloatToFIX32(ConvertUnits(float(nBottom), TWUN_1000INCHES, toUnits, Yresolution)); + return frame; +} bool operator== (const InternalFrame& _frame1, const InternalFrame& _frame2) { - if((2> abs((int)_frame1.unLeft - (int)_frame2.unLeft) ) && - (2> abs((int)_frame1.unTop - (int)_frame2.unTop) ) && - (2> abs((int)_frame1.unRight - (int)_frame2.unRight) ) && - (2> abs((int)_frame1.unBottom - (int)_frame2.unBottom)) ) + if((2> abs((int)_frame1.nLeft - (int)_frame2.nLeft) ) && + (2> abs((int)_frame1.nTop - (int)_frame2.nTop) ) && + (2> abs((int)_frame1.nRight - (int)_frame2.nRight) ) && + (2> abs((int)_frame1.nBottom - (int)_frame2.nBottom)) ) { return true; } @@ -487,6 +487,21 @@ return twrc; } +bool CTWAINContainerFrame::Set(const InternalFrame& _frame) +{ + // Set is only called after the Frame has been initilized by calling Add + if(m_nDefault == -1) + { + assert(m_nDefault != -1); + return false; + } + + m_listFrames.clear(); + m_listFrames.push_back(_frame); + m_nCurrent = 0; + return true; +} + bool CTWAINContainerFrame::Reset() { m_nCurrent = m_nDefault; @@ -544,9 +559,9 @@ return m_listFrames; } -bool CTWAINContainerFrame::Add(const UINT _unLeft, const UINT _unTop, const UINT _unRight, const UINT _unBottom, bool _bDefault /*= false*/) +bool CTWAINContainerFrame::Add(const int _nLeft, const int _nTop, const int _nRight, const int _nBottom, bool _bDefault /*= false*/) { - InternalFrame frame(_unLeft, _unTop, _unRight, _unBottom); + InternalFrame frame(_nLeft, _nTop, _nRight, _nBottom); return Add(frame, _bDefault); } @@ -562,9 +577,9 @@ return true; } -bool CTWAINContainerFrame::SetCurrent(const UINT _unLeft, const UINT _unTop, const UINT _unRight, const UINT _unBottom) +bool CTWAINContainerFrame::SetCurrent(const int _nLeft, const int _nTop, const int _nRight, const int _nBottom) { - InternalFrame frame(_unLeft, _unTop, _unRight, _unBottom); + InternalFrame frame(_nLeft, _nTop, _nRight, _nBottom); return SetCurrent(frame); } Modified: trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerFrame.h =================================================================== --- trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerFrame.h 2008-09-29 21:22:21 UTC (rev 17) +++ trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerFrame.h 2008-10-23 21:57:01 UTC (rev 18) @@ -1,5 +1,5 @@ /*************************************************************************** -* Copyright \xA9 2007 TWAIN Working Group: +* Copyright 2007 TWAIN Working Group: * Adobe Systems Incorporated, AnyDoc Software Inc., Eastman Kodak Company, * Fujitsu Computer Products of America, JFL Peripheral Solutions Inc., * Ricoh Corporation, and Xerox Corporation. @@ -50,10 +50,10 @@ */ struct InternalFrame { - UINT unLeft; /**< left */ - UINT unTop; /**< top */ - UINT unRight; /**< right */ - UINT unBottom; /**< bottom */ + int nLeft; /**< left */ + int nTop; /**< top */ + int nRight; /**< right */ + int nBottom; /**< bottom */ /** * Constructor @@ -67,22 +67,9 @@ * @param[in] right Right * @param[in] bottom Bottom */ - InternalFrame(UINT left, UINT top, UINT right, UINT bottom); + InternalFrame(int left, int top, int right, int bottom); /** - * Constructor Convert to interanal from external units - * @param[in] left Left - * @param[in] lop Top - * @param[in] right Right - * @param[in] bottom Bottom - * @param[in] fromUnits the units to convert to - * @param[in] Xresolution the X resolution - * @param[in] Yresolution the Y resolution - * @return true if success. - */ - InternalFrame(float left, float top, float right, float bottom, int fromUnits, float Xresolution, float Yresolution); - - /** * Constructor Convert to interanal from TW_FRAME * @param[in] twFrame external value to convert. * @param[in] fromUnits the units to convert to @@ -93,6 +80,13 @@ InternalFrame(const TW_FRAME twFrame, int fromUnits, float Xresolution, float Yresolution); /** + * create interanal frame from a SupportedSize + * @param[in] ss the CSupportedSize to create internal frame from + * @return the InternalFrame + */ + InternalFrame(const TW_UINT16 ss); + + /** * Convert interanal frame value to external TW_FRAME value converting the units * @param[in] toUnits the units to convert to * @param[in] Xresolution the X resolution @@ -101,12 +95,19 @@ */ TW_FRAME AsTW_FRAME(int toUnits, float Xresolution, float Yresolution); - /** - * create interanal frame from a SupportedSize - * @param[in] ss the CSupportedSize to create internal frame from - * @return the InternalFrame +protected: + /** + * Set the frame to interanal from external units + * @param[in] left Left + * @param[in] lop Top + * @param[in] right Right + * @param[in] bottom Bottom + * @param[in] fromUnits the units to convert to + * @param[in] Xresolution the X resolution + * @param[in] Yresolution the Y resolution + * @return true if success. */ - InternalFrame(const TW_UINT16 ss); + InternalFrame * SetFrame(float left, float top, float right, float bottom, int fromUnits, float Xresolution, float Yresolution); }; /** @@ -159,16 +160,23 @@ /** * Try to add a value for container. The first value added to a capabiltiy is set as the default and current value. - * @param[in] _unLeft left - * @param[in] _unTop top - * @param[in] _unRight right - * @param[in] _unBottom bottom + * @param[in] _nLeft left + * @param[in] _nTop top + * @param[in] _nRight right + * @param[in] _nBottom bottom * @param[in] _bDefault if true explisitly sets this value to be the default and current. * @return true if success. */ - bool Add(const UINT _unLeft, const UINT _unTop, const UINT _unRight, const UINT _unBottom, bool _bDefault = false); + bool Add(const int _nLeft, const int _nTop, const int _nRight, const int _nBottom, bool _bDefault = false); /** + * Set the current Frame. Only used after the default has been set using Add + * @param[in] _frame the value to be added. + * @return true if success. + */ + bool Set(const InternalFrame& _frame); + + /** * Try to set the current value for container. * The value must already be part of the container. * @param[in] _frame the value to be set as current. @@ -179,13 +187,13 @@ /** * Try to set the current value for container. * The value must already be part of the container. - * @param[in] _unLeft left - * @param[in] _unTop top - * @param[in] _unRight right - * @param[in] _unBottom bottom + * @param[in] _nLeft left + * @param[in] _nTop top + * @param[in] _nRight right + * @param[in] _nBottom bottom * @return true if success. */ - bool SetCurrent(const UINT _unLeft, const UINT _unTop, const UINT _unRight, const UINT _unBottom); + bool SetCurrent(const int _nLeft, const int _nTop, const int _nRight, const int _nBottom); /** * Return the default value through _frame if set. @@ -229,7 +237,7 @@ */ void setCurrentUnits(int Unit, float Xres, float Yres); - protected: +protected: /** * Check to see if type is valid. * @param[in] _unTWType type to check Modified: trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerInt.cpp =================================================================== --- trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerInt.cpp 2008-09-29 21:22:21 UTC (rev 17) +++ trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerInt.cpp 2008-10-23 21:57:01 UTC (rev 18) @@ -160,6 +160,10 @@ ((TW_UINT16*)_pItemList)[x] = (TW_UINT16)m_listInts[x]; break; + case TWTY_UINT32: + ((TW_UINT32*)_pItemList)[x] = (TW_UINT32)m_listInts[x]; + break; + case TWTY_BOOL: ((TW_BOOL*)_pItemList)[x] = (TW_BOOL)m_listInts[x]; break; @@ -178,6 +182,7 @@ case TWTY_INT32: case TWTY_UINT8: case TWTY_UINT16: + case TWTY_UINT32: case TWTY_BOOL: bret = true; break; @@ -212,6 +217,10 @@ nRet = *((TW_UINT16*)&(_pVal->Item)); break; + case TWTY_UINT32: + nRet = *((TW_UINT32*)&(_pVal->Item)); + break; + case TWTY_BOOL: nRet = *((TW_BOOL*)&(_pVal->Item)); break; @@ -305,7 +314,11 @@ } else { - nNewCurrentIndex--; + // if the index is below the current then we need to adjust what is going to be current + if(x < pCap->CurrentIndex) + { + nNewCurrentIndex--; + } twrc = TWRC_CHECKSTATUS; Condition = TWCC_BADVALUE; } Property changes on: trunk/TWAIN-Samples/Twain_DS_sample01/visual_studio ___________________________________________________________________ Added: svn:ignore + Debug Debug32 Debug64 Release32 Release64 Modified: trunk/TWAIN-Samples/Twain_DS_sample01/visual_studio/TWAINDS_GUI.rc =================================================================== --- trunk/TWAIN-Samples/Twain_DS_sample01/visual_studio/TWAINDS_GUI.rc 2008-09-29 21:22:21 UTC (rev 17) +++ trunk/TWAIN-Samples/Twain_DS_sample01/visual_studio/TWAINDS_GUI.rc 2008-10-23 21:57:01 UTC (rev 18) @@ -63,8 +63,8 @@ // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,0,0,2 - PRODUCTVERSION 1,0,0,2 + FILEVERSION 1,0,0,4 + PRODUCTVERSION 1,0,0,4 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -81,12 +81,12 @@ BEGIN VALUE "CompanyName", "TWAIN Working Group" VALUE "FileDescription", "SAMPLE Data Source" - VALUE "FileVersion", "1.0.0.2" + VALUE "FileVersion", "1.0.0.4" VALUE "InternalName", "TWAINDS.dll" VALUE "LegalCopyright", "(c) TWAIN Working Group. All rights reserved." VALUE "OriginalFilename", "TWAINDS.dll" VALUE "ProductName", "SampleDS01" - VALUE "ProductVersion", "1.0.0.2" + VALUE "ProductVersion", "1.0.0.4" END END BLOCK "VarFileInfo" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jim...@us...> - 2008-10-23 22:10:32
|
Revision: 19 http://twain-samples.svn.sourceforge.net/twain-samples/?rev=19&view=rev Author: jim0watters Date: 2008-10-23 22:00:40 +0000 (Thu, 23 Oct 2008) Log Message: ----------- Update installer for updated DS Modified Paths: -------------- trunk/TWAIN-Samples/Twain_DS_sample01/Installer/DS Installer 32.vdproj trunk/TWAIN-Samples/Twain_DS_sample01/Installer/DS Installer 64.vdproj Modified: trunk/TWAIN-Samples/Twain_DS_sample01/Installer/DS Installer 32.vdproj =================================================================== --- trunk/TWAIN-Samples/Twain_DS_sample01/Installer/DS Installer 32.vdproj 2008-10-23 21:57:01 UTC (rev 18) +++ trunk/TWAIN-Samples/Twain_DS_sample01/Installer/DS Installer 32.vdproj 2008-10-23 22:00:40 UTC (rev 19) @@ -63,7 +63,7 @@ "DisplayName" = "8:Release" "IsDebugOnly" = "11:FALSE" "IsReleaseOnly" = "11:TRUE" - "OutputFilename" = "8:TWAINDS_win32_installer\\DS Installer 32.msi" + "OutputFilename" = "8:TWAINDS_win32_installer\\twainds.win32.installer.msi" "PackageFilesAs" = "3:2" "PackageFileSize" = "3:-2147483648" "CabType" = "3:1" @@ -75,7 +75,7 @@ "InstallerBootstrapper" = "3:2" "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}" { - "Enabled" = "11:TRUE" + "Enabled" = "11:FALSE" "PromptEnabled" = "11:TRUE" "PrerequisitesLocation" = "2:1" "Url" = "8:" @@ -84,7 +84,7 @@ { "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:Microsoft.Net.Framework.2.0" { - "Name" = "8:Microsoft .NET Framework 2.0" + "Name" = "8:.NET Framework 2.0" "ProductCode" = "8:Microsoft.Net.Framework.2.0" } } @@ -296,14 +296,14 @@ { "Name" = "8:Microsoft Visual Studio" "ProductName" = "8:TWAIN 2.0 DS 32bit Sample" - "ProductCode" = "8:{FBFDCBF6-57BE-4558-B93E-D048CC0DA9D6}" - "PackageCode" = "8:{DBF15355-6198-41EA-82C7-C07CBC57CF20}" + "ProductCode" = "8:{F1573A15-ABC0-4318-A3F0-2D727ACD1167}" + "PackageCode" = "8:{FF465AF6-4D5A-4D7B-B087-8083A2DD10CF}" "UpgradeCode" = "8:{42397C41-AA95-45D0-A500-A692EB1A93B4}" "RestartWWWService" = "11:FALSE" "RemovePreviousVersions" = "11:FALSE" "DetectNewerInstalledVersion" = "11:TRUE" "InstallAllUsers" = "11:TRUE" - "ProductVersion" = "8:1.0.2" + "ProductVersion" = "8:1.0.4" "Manufacturer" = "8:TWAIN Working Group" "ARPHELPTELEPHONE" = "8:http://www.twainforum.org/phpBB2/index.php" "ARPHELPLINK" = "8:http://sourceforge.net/projects/twain-samples/" Modified: trunk/TWAIN-Samples/Twain_DS_sample01/Installer/DS Installer 64.vdproj =================================================================== --- trunk/TWAIN-Samples/Twain_DS_sample01/Installer/DS Installer 64.vdproj 2008-10-23 21:57:01 UTC (rev 18) +++ trunk/TWAIN-Samples/Twain_DS_sample01/Installer/DS Installer 64.vdproj 2008-10-23 22:00:40 UTC (rev 19) @@ -63,7 +63,7 @@ "DisplayName" = "8:Release" "IsDebugOnly" = "11:FALSE" "IsReleaseOnly" = "11:TRUE" - "OutputFilename" = "8:TWAINDS_win64_installer\\DS Installer 64.msi" + "OutputFilename" = "8:TWAINDS_win64_installer\\twainds.win64.installer.msi" "PackageFilesAs" = "3:2" "PackageFileSize" = "3:-2147483648" "CabType" = "3:1" @@ -75,7 +75,7 @@ "InstallerBootstrapper" = "3:2" "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}" { - "Enabled" = "11:TRUE" + "Enabled" = "11:FALSE" "PromptEnabled" = "11:TRUE" "PrerequisitesLocation" = "2:1" "Url" = "8:" @@ -291,14 +291,14 @@ { "Name" = "8:Microsoft Visual Studio" "ProductName" = "8:TWAIN 2.0 DS 64bit Sample" - "ProductCode" = "8:{B248AA3A-8C22-4E59-BE2A-883F6050353F}" - "PackageCode" = "8:{D2F47781-F8C0-4582-AB49-ECCA194CA7DD}" + "ProductCode" = "8:{B1EA1B6B-C6B5-4C26-80E7-E3D995E63AFC}" + "PackageCode" = "8:{FA258E05-A2D4-4980-A0DC-796582CB0AC1}" "UpgradeCode" = "8:{C2305D08-ACCD-48FD-8147-F655F8356F23}" "RestartWWWService" = "11:FALSE" "RemovePreviousVersions" = "11:FALSE" "DetectNewerInstalledVersion" = "11:TRUE" "InstallAllUsers" = "11:TRUE" - "ProductVersion" = "8:1.0.2" + "ProductVersion" = "8:1.0.4" "Manufacturer" = "8:TWAIN Working Group" "ARPHELPTELEPHONE" = "8:http://www.twainforum.org/phpBB2/index.php" "ARPHELPLINK" = "8:http://sourceforge.net/projects/twain-samples/" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jim...@us...> - 2008-09-29 21:22:39
|
Revision: 17 http://twain-samples.svn.sourceforge.net/twain-samples/?rev=17&view=rev Author: jim0watters Date: 2008-09-29 21:22:21 +0000 (Mon, 29 Sep 2008) Log Message: ----------- Fix several bugs with MSG_SET and TWON_ENUMERATION containers when bad data is used. Modified Paths: -------------- trunk/TWAIN-Samples/Twain_DS_sample01/ChangeLog.txt trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_Base.cpp trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerFix32.cpp trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerFrame.cpp trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerInt.cpp Modified: trunk/TWAIN-Samples/Twain_DS_sample01/ChangeLog.txt =================================================================== --- trunk/TWAIN-Samples/Twain_DS_sample01/ChangeLog.txt 2008-09-22 14:01:51 UTC (rev 16) +++ trunk/TWAIN-Samples/Twain_DS_sample01/ChangeLog.txt 2008-09-29 21:22:21 UTC (rev 17) @@ -1,6 +1,12 @@ +2008-09-29 JFL Peripheral Solutions ji...@jf... + + * Fix several bugs with MSG_SET and TWON_ENUMERATION containers when bad data is used. + TWAINContainerInt.cpp, TWAINContainerFix32.cpp, TWAINContainerInt.cpp + 2008-09-12 JFL Peripheral Solutions ji...@jf... * Fix typo + * add mechanism to Validate TWON_ONEVALUES * Use latest DSM merge module * Increase build number Modified: trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_Base.cpp =================================================================== --- trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_Base.cpp 2008-09-22 14:01:51 UTC (rev 16) +++ trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_Base.cpp 2008-09-29 21:22:21 UTC (rev 17) @@ -316,12 +316,16 @@ } // when some capabilities are changed it requires changing others - if(twrc == TWRC_SUCCESS) + if(twrc == TWRC_SUCCESS || twrc == TWRC_CHECKSTATUS) { // Only Set and Reset message are of concern if( MSG_SET == _MSG || MSG_RESET == _MSG ) { - twrc = updatePostDependencies(_MSG, _pCap->Cap); + TW_INT16 twrc2 = updatePostDependencies(_MSG, _pCap->Cap); + if(twrc == TWRC_SUCCESS && twrc2 != TWRC_SUCCESS) + { + twrc = twrc2; + } } } } Modified: trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerFix32.cpp =================================================================== --- trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerFix32.cpp 2008-09-22 14:01:51 UTC (rev 16) +++ trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerFix32.cpp 2008-09-29 21:22:21 UTC (rev 17) @@ -180,7 +180,7 @@ } else { - twrc = TWRC_CHECKSTATUS; + twrc = TWRC_FAILURE; Condition = TWCC_BADVALUE; } } @@ -204,12 +204,10 @@ if(isValidType(pCap->ItemType)) { - m_nCurrent = pCap->CurrentIndex; - // We ignor trying to set the default. The default can not be changed from outside - + int nNewCurrentIndex = pCap->CurrentIndex; FloatVector::iterator iter; - m_listFloats.clear(); - + bool bListCleared = false; // We only want to crear the current list if we are passed + // valid data, and only clear it once through the loop of testing float flVal; for(TW_UINT32 x = 0; x < pCap->NumItems; ++x) @@ -221,21 +219,66 @@ if(iter != m_listFloatsDefault.end()) { - m_listFloats.push_back(flVal); + // We have valid data + if(!bListCleared) + { + // only clear the list if we have not done so already + m_listFloats.clear(); + bListCleared = true; + } + + // only add it if it was not added already + iter = find(m_listFloats.begin(), m_listFloats.end(), flVal); + if(iter == m_listFloats.end()) + { + m_listFloats.push_back(flVal); + } + else + { + nNewCurrentIndex--; + twrc = TWRC_CHECKSTATUS; + Condition = TWCC_BADVALUE; + } } else { - // if the index was pointing to this value we have to change it because this value is now invalid - if(x == (UINT)m_nCurrent) // casting to uint to remove compiler warning + // if the index is below the current then we need to adjust what is going to be current + if(x < pCap->CurrentIndex) { - m_nCurrent = 0; + nNewCurrentIndex--; } twrc = TWRC_CHECKSTATUS; - Condition = TWCC_SUCCESS; + Condition = TWCC_BADVALUE; } } + + // If the list has been cleared then there was at at least some valid data + if(bListCleared) + { + if(nNewCurrentIndex >= 0 && nNewCurrentIndex < (int)(m_listFloats.size())) + { + m_nCurrent = nNewCurrentIndex; + } + else + { + // the new current index is not in range + m_nCurrent = 0; + twrc = TWRC_CHECKSTATUS; + Condition = TWCC_BADVALUE; + } + } + else + { + twrc = TWRC_FAILURE; + Condition = TWCC_BADVALUE; + } } + else // NOT isValidType(pCap->ItemType)) + { + twrc = TWRC_FAILURE; + Condition = TWCC_CAPBADOPERATION; + } _DSM_UnlockMemory((TW_MEMREF)pCap); } Modified: trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerFrame.cpp =================================================================== --- trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerFrame.cpp 2008-09-22 14:01:51 UTC (rev 16) +++ trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerFrame.cpp 2008-09-29 21:22:21 UTC (rev 17) @@ -470,11 +470,16 @@ } else { - twrc = TWRC_CHECKSTATUS; - Condition = TWCC_SUCCESS; + twrc = TWRC_FAILURE; + Condition = TWCC_BADVALUE; } } } + else // NOT isValidType(pCap->ItemType)) + { + twrc = TWRC_FAILURE; + Condition = TWCC_CAPBADOPERATION; + } _DSM_UnlockMemory((TW_MEMREF)pCap); } Modified: trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerInt.cpp =================================================================== --- trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerInt.cpp 2008-09-22 14:01:51 UTC (rev 16) +++ trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerInt.cpp 2008-09-29 21:22:21 UTC (rev 17) @@ -249,7 +249,7 @@ } else { - twrc = TWRC_CHECKSTATUS; + twrc = TWRC_FAILURE; Condition = TWCC_BADVALUE; } } @@ -277,12 +277,11 @@ if(isValidType(pCap->ItemType)) { - m_nCurrent = pCap->CurrentIndex; - // We ignor trying to set the default. The default can not be changed from outside - + int nNewCurrentIndex = pCap->CurrentIndex; IntVector::iterator iter; - m_listInts.clear(); - + bool bListCleared = false; // We only want to crear the current list if we are passed + // valid data, and only clear it once through the loop of testing + for(TW_UINT32 x = 0; x < pCap->NumItems; ++x) { // only set the value if it exists in m_listIntsDefault @@ -290,20 +289,60 @@ if(iter != m_listIntsDefault.end()) { - m_listInts.push_back(pCap->ItemList[x]); + // We have valid data + if(!bListCleared) + { + // only clear the list if we have not done so already + m_listInts.clear(); + bListCleared = true; + } + + // only add it if it was not added already + iter = find(m_listInts.begin(), m_listInts.end(), pCap->ItemList[x]); + if(iter == m_listInts.end()) + { + m_listInts.push_back(pCap->ItemList[x]); + } + else + { + nNewCurrentIndex--; + twrc = TWRC_CHECKSTATUS; + Condition = TWCC_BADVALUE; + } } else { - // if the index was pointing to this value we have to change it because this value is now invalid - if(x == (UINT)m_nCurrent) // casting to uint to remove compiler warning + // if the index is below the current then we need to adjust what is going to be current + if(x < pCap->CurrentIndex) { - m_nCurrent = 0; + nNewCurrentIndex--; } twrc = TWRC_CHECKSTATUS; - Condition = TWCC_SUCCESS; + Condition = TWCC_BADVALUE; } } + + // If the list has been cleared then there was at at least some valid data + if(bListCleared) + { + if(nNewCurrentIndex >= 0 && nNewCurrentIndex < (int)(m_listInts.size())) + { + m_nCurrent = nNewCurrentIndex; + } + else + { + // the new current index is not in range + m_nCurrent = 0; + twrc = TWRC_CHECKSTATUS; + Condition = TWCC_BADVALUE; + } + } + else + { + twrc = TWRC_FAILURE; + Condition = TWCC_BADVALUE; + } } else // NOT isValidType(pCap->ItemType)) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jim...@us...> - 2008-09-22 14:02:21
|
Revision: 16 http://twain-samples.svn.sourceforge.net/twain-samples/?rev=16&view=rev Author: jim0watters Date: 2008-09-22 14:01:51 +0000 (Mon, 22 Sep 2008) Log Message: ----------- WinVerifyTrust will now prompt for non-trusted DSM. with choice of run / do not run, with an option to always trust this company. For DSM that do not have a signature is prompted to continue to use this DSM. Modified Paths: -------------- trunk/TWAIN-Samples/Twain_App_sample01/src/VerifySignature.cpp Modified: trunk/TWAIN-Samples/Twain_App_sample01/src/VerifySignature.cpp =================================================================== --- trunk/TWAIN-Samples/Twain_App_sample01/src/VerifySignature.cpp 2008-09-19 18:57:04 UTC (rev 15) +++ trunk/TWAIN-Samples/Twain_App_sample01/src/VerifySignature.cpp 2008-09-22 14:01:51 UTC (rev 16) @@ -57,7 +57,7 @@ WinTrustData.cbStruct = sizeof(WinTrustData); WinTrustData.pPolicyCallbackData = NULL; // Use default code signing EKU. WinTrustData.pSIPClientData = NULL; // No data to pass to SIP. - WinTrustData.dwUIChoice = WTD_UI_NONE; // Disable WVT UI. //WTD_UI_NONE; WTD_UI_ALL; WTD_UI_NOGOOD; + WinTrustData.dwUIChoice = WTD_UI_NOGOOD; // Disable WVT UI. //WTD_UI_NONE; WTD_UI_ALL; WTD_UI_NOGOOD; //NOGOOD will not display a dialog for no signature WinTrustData.fdwRevocationChecks = WTD_REVOKE_NONE; // No revocation checking. WinTrustData.dwUnionChoice = WTD_CHOICE_FILE; // Verify an embedded signature on a file. WinTrustData.dwStateAction = 0; // Default verification. @@ -94,6 +94,10 @@ { // The file was not signed. TRACE( _T("The file \"%s\" is not signed.\n"), pwszSourceFile ); + if(IDYES==::MessageBox( NULL, L"The TWAIN DSM is not signed.\nContinue to load this DSM?", L"The TWAIN DSM Signature", MB_YESNO|MB_ICONQUESTION)) + { + lStatus = ERROR_SUCCESS; + } } else { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jim...@us...> - 2008-09-15 21:26:38
|
Revision: 14 http://twain-samples.svn.sourceforge.net/twain-samples/?rev=14&view=rev Author: jim0watters Date: 2008-09-15 21:26:48 +0000 (Mon, 15 Sep 2008) Log Message: ----------- For DAT_CAPABILITY MSG_SET Validate TW_ONEVALUES before applying the set. No longer able to set CAP_XFERCOUNT to 0 or less than -1 Modified Paths: -------------- trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_Base.cpp trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_Base.h Modified: trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_Base.cpp =================================================================== --- trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_Base.cpp 2008-09-12 19:43:19 UTC (rev 13) +++ trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_Base.cpp 2008-09-15 21:26:48 UTC (rev 14) @@ -488,7 +488,7 @@ default: setConditionCode(TWCC_BADPROTOCOL); - assert(0); + //assert(0); twrc = TWRC_FAILURE; break; } @@ -599,7 +599,7 @@ default: setConditionCode(TWCC_BADPROTOCOL); - assert(0); + //assert(0); twrc = TWRC_FAILURE; break; } @@ -835,14 +835,30 @@ case MSG_GETDEFAULT: case MSG_GET: _pCap->ConType = (MSG_GET==_MSG)?_pContainer->GetGetType():TWON_ONEVALUE; - updatePreDependencies(_pContainer); + twrc = updatePreDependencies(_pContainer); + if(twrc != TWRC_SUCCESS) + { + break; + } + _pCap->hContainer = _pContainer->GetContainer(_MSG); twrc = TWRC_SUCCESS; break; case MSG_SET: { - updatePreDependencies(_pContainer); + twrc = updatePreDependencies(_pContainer); + if(twrc != TWRC_SUCCESS) + { + break; + } + + twrc = validateCapabilitySet(_pContainer); + if(twrc != TWRC_SUCCESS) + { + break; + } + TW_INT16 Condition; twrc = _pContainer->Set(_pCap, Condition); if(twrc != TWRC_SUCCESS) @@ -862,6 +878,31 @@ return twrc; } +TW_INT16 CTWAINDS_Base::validateCapabilitySet(CTWAINContainer* _pContainer) +{ + TW_INT16 twrc = TWRC_SUCCESS; + + switch(_pContainer->GetCapID()) + { + case CAP_XFERCOUNT: + { + CTWAINContainerInt *pnCap = dynamic_cast<CTWAINContainerInt*>(_pContainer); + int Count = -1; + + if(!pnCap || !pnCap->GetCurrent(Count) || Count == 0 || Count <-1) + { + twrc = TWRC_FAILURE; + setConditionCode(TWCC_BADVALUE); + } + break; + } + default: + break; + } + + return twrc; +} + TW_INT16 CTWAINDS_Base::updatePreDependencies(CTWAINContainer* _pContainer) { TW_INT16 twrc = TWRC_SUCCESS; Modified: trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_Base.h =================================================================== --- trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_Base.h 2008-09-12 19:43:19 UTC (rev 13) +++ trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_Base.h 2008-09-15 21:26:48 UTC (rev 14) @@ -519,6 +519,15 @@ */ virtual TW_INT16 updatePreDependencies(CTWAINContainer* _pContainer); + /** + * Validate the value being used to set a capability. Ranges and enums can be tested + * by the capability but OneValues might have only some values that are acceptable. + * Override this function in base class to support more capabilities + * @param[in] _pCap a pointer to TW_CAPABILITY structure. + * @return a valid TWRC_xxxx return code. + */ + virtual TW_INT16 validateCapabilitySet(CTWAINContainer* _pContainer); + /** * if the CTWAINContainer is dependend on another Capabiltiy. * This function is used to get the data it needs. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jim...@us...> - 2008-09-12 22:14:52
|
Revision: 13 http://twain-samples.svn.sourceforge.net/twain-samples/?rev=13&view=rev Author: jim0watters Date: 2008-09-12 19:43:19 +0000 (Fri, 12 Sep 2008) Log Message: ----------- Fix typo Use latest DSM merge module Increase build number Modified Paths: -------------- trunk/TWAIN-Samples/Twain_DS_sample01/ChangeLog.txt trunk/TWAIN-Samples/Twain_DS_sample01/Installer/DS Installer 32.vdproj trunk/TWAIN-Samples/Twain_DS_sample01/Installer/DS Installer 64.vdproj trunk/TWAIN-Samples/Twain_DS_sample01/visual_studio/TWAINDS_GUI.rc trunk/TWAIN-Samples/Twain_DS_sample01/visual_studio/resource.h Added Paths: ----------- trunk/TWAIN-Samples/Twain_DS_sample01/Installer/DS Installer.sln Removed Paths: ------------- trunk/TWAIN-Samples/Twain_DS_sample01/Installer/Installer.sln Modified: trunk/TWAIN-Samples/Twain_DS_sample01/ChangeLog.txt =================================================================== --- trunk/TWAIN-Samples/Twain_DS_sample01/ChangeLog.txt 2008-09-12 19:16:30 UTC (rev 12) +++ trunk/TWAIN-Samples/Twain_DS_sample01/ChangeLog.txt 2008-09-12 19:43:19 UTC (rev 13) @@ -1,3 +1,9 @@ +2008-09-12 JFL Peripheral Solutions ji...@jf... + + * Fix typo + * Use latest DSM merge module + * Increase build number + December 10, 2007 JFL Peripheral Solutions ji...@jf... * Initial Release. Modified: trunk/TWAIN-Samples/Twain_DS_sample01/Installer/DS Installer 32.vdproj =================================================================== --- trunk/TWAIN-Samples/Twain_DS_sample01/Installer/DS Installer 32.vdproj 2008-09-12 19:16:30 UTC (rev 12) +++ trunk/TWAIN-Samples/Twain_DS_sample01/Installer/DS Installer 32.vdproj 2008-09-12 19:43:19 UTC (rev 13) @@ -58,39 +58,12 @@ } "Configurations" { - "Debug" - { - "DisplayName" = "8:Debug" - "IsDebugOnly" = "11:TRUE" - "IsReleaseOnly" = "11:FALSE" - "OutputFilename" = "8:Debug32\\Installer.msi" - "PackageFilesAs" = "3:2" - "PackageFileSize" = "3:-2147483648" - "CabType" = "3:1" - "Compression" = "3:2" - "SignOutput" = "11:FALSE" - "CertificateFile" = "8:" - "PrivateKeyFile" = "8:" - "TimeStampServer" = "8:" - "InstallerBootstrapper" = "3:2" - "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}" - { - "Enabled" = "11:TRUE" - "PromptEnabled" = "11:TRUE" - "PrerequisitesLocation" = "2:1" - "Url" = "8:" - "ComponentsUrl" = "8:" - "Items" - { - } - } - } "Release" { "DisplayName" = "8:Release" "IsDebugOnly" = "11:FALSE" "IsReleaseOnly" = "11:TRUE" - "OutputFilename" = "8:TWAINDS_win32_installer\\Installer.msi" + "OutputFilename" = "8:TWAINDS_win32_installer\\DS Installer 32.msi" "PackageFilesAs" = "3:2" "PackageFileSize" = "3:-2147483648" "CabType" = "3:1" @@ -179,7 +152,7 @@ } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_82FC78C1D02143AD89B4D9BD6721D026" { - "SourcePath" = "8:..\\pub\\bin\\TWAIN_logo.png" + "SourcePath" = "8:..\\..\\pub\\bin\\TWAIN_logo.png" "TargetName" = "8:TWAIN_logo.png" "Tag" = "8:" "Folder" = "8:_425B83679B2D435AAD48C246EBD188D1" @@ -330,15 +303,15 @@ "RemovePreviousVersions" = "11:FALSE" "DetectNewerInstalledVersion" = "11:TRUE" "InstallAllUsers" = "11:TRUE" - "ProductVersion" = "8:1.0.0" + "ProductVersion" = "8:1.0.2" "Manufacturer" = "8:TWAIN Working Group" "ARPHELPTELEPHONE" = "8:http://www.twainforum.org/phpBB2/index.php" "ARPHELPLINK" = "8:http://sourceforge.net/projects/twain-samples/" "Title" = "8:TWAIN Sample DS 32 Installer" "Subject" = "8:" "ARPCONTACT" = "8:TWAIN Working Group" - "Keywords" = "8:TWIAN 2.0 DS Sample 32bit" - "ARPCOMMENTS" = "8:Sample software only TWIAN 2.0 Data Source using freeimage" + "Keywords" = "8:TWAIN 2.0 DS Sample 32bit" + "ARPCOMMENTS" = "8:Sample software only TWAIN 2.0 Data Source using freeimage" "ARPURLINFOABOUT" = "8:http://twain.org" "ARPPRODUCTICON" = "8:_914BB823F10544F082D7DD50B14DD151" "ARPIconIndex" = "3:0" @@ -748,7 +721,7 @@ { "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" - "SourcePath" = "8:..\\..\\pub\\bin\\twain32\\TWAINDSM32.msm" + "SourcePath" = "8:..\\..\\pub\\external\\bin\\TWAINDSM32.msm" "Properties" { "_92C0B735BA65418D80665F240AE78CAF.F6BD06CC863147E1A74785A2413759ED" Modified: trunk/TWAIN-Samples/Twain_DS_sample01/Installer/DS Installer 64.vdproj =================================================================== --- trunk/TWAIN-Samples/Twain_DS_sample01/Installer/DS Installer 64.vdproj 2008-09-12 19:16:30 UTC (rev 12) +++ trunk/TWAIN-Samples/Twain_DS_sample01/Installer/DS Installer 64.vdproj 2008-09-12 19:43:19 UTC (rev 13) @@ -58,33 +58,6 @@ } "Configurations" { - "Debug" - { - "DisplayName" = "8:Debug" - "IsDebugOnly" = "11:TRUE" - "IsReleaseOnly" = "11:FALSE" - "OutputFilename" = "8:Debug64\\DS Installer 64.msi" - "PackageFilesAs" = "3:2" - "PackageFileSize" = "3:-2147483648" - "CabType" = "3:1" - "Compression" = "3:2" - "SignOutput" = "11:FALSE" - "CertificateFile" = "8:" - "PrivateKeyFile" = "8:" - "TimeStampServer" = "8:" - "InstallerBootstrapper" = "3:2" - "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}" - { - "Enabled" = "11:TRUE" - "PromptEnabled" = "11:TRUE" - "PrerequisitesLocation" = "2:1" - "Url" = "8:" - "ComponentsUrl" = "8:" - "Items" - { - } - } - } "Release" { "DisplayName" = "8:Release" @@ -134,7 +107,7 @@ { "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_164B111C280C4535AC7E0ECE5A7DE80E" { - "SourcePath" = "8:..\\pub\\bin\\TWAIN_logo.png" + "SourcePath" = "8:..\\..\\pub\\bin\\TWAIN_logo.png" "TargetName" = "8:TWAIN_logo.png" "Tag" = "8:" "Folder" = "8:_7F3AC73469D641B392D2D1F48A9249E9" @@ -325,15 +298,15 @@ "RemovePreviousVersions" = "11:FALSE" "DetectNewerInstalledVersion" = "11:TRUE" "InstallAllUsers" = "11:TRUE" - "ProductVersion" = "8:1.0.0" + "ProductVersion" = "8:1.0.2" "Manufacturer" = "8:TWAIN Working Group" "ARPHELPTELEPHONE" = "8:http://www.twainforum.org/phpBB2/index.php" "ARPHELPLINK" = "8:http://sourceforge.net/projects/twain-samples/" "Title" = "8:TWAIN Sample DS 64 Installer" "Subject" = "8:" "ARPCONTACT" = "8:TWAIN Working Group" - "Keywords" = "8:TWIAN 2.0 DS Sample 64bit" - "ARPCOMMENTS" = "8:Sample software only TWIAN 2.0 Data Source using freeimage" + "Keywords" = "8:TWAIN 2.0 DS Sample 64bit" + "ARPCOMMENTS" = "8:Sample software only TWAIN 2.0 Data Source using freeimage" "ARPURLINFOABOUT" = "8:http://twain.org" "ARPPRODUCTICON" = "8:_B7ECB12BF6AB400BACA48E8A3E93AD3B" "ARPIconIndex" = "3:0" @@ -743,7 +716,7 @@ { "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" - "SourcePath" = "8:..\\..\\pub\\bin\\twain64\\TWAINDSM64.msm" + "SourcePath" = "8:..\\..\\pub\\external\\bin\\TWAINDSM64.msm" "Properties" { } Copied: trunk/TWAIN-Samples/Twain_DS_sample01/Installer/DS Installer.sln (from rev 10, trunk/TWAIN-Samples/Twain_DS_sample01/Installer/Installer.sln) =================================================================== --- trunk/TWAIN-Samples/Twain_DS_sample01/Installer/DS Installer.sln (rev 0) +++ trunk/TWAIN-Samples/Twain_DS_sample01/Installer/DS Installer.sln 2008-09-12 19:43:19 UTC (rev 13) @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "DS Installer 32", "DS Installer 32.vdproj", "{A540EBDC-617D-41C1-B8A1-8A7AF85F753F}" +EndProject +Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "DS Installer 64", "DS Installer 64.vdproj", "{3A198E1E-1A53-422A-852A-BF6D613ADC83}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Release|Default = Release|Default + Description = Installers for sample TWAIN DS + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {A540EBDC-617D-41C1-B8A1-8A7AF85F753F}.Release|Default.ActiveCfg = Release + {A540EBDC-617D-41C1-B8A1-8A7AF85F753F}.Release|Default.Build.0 = Release + {3A198E1E-1A53-422A-852A-BF6D613ADC83}.Release|Default.ActiveCfg = Release + {3A198E1E-1A53-422A-852A-BF6D613ADC83}.Release|Default.Build.0 = Release + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal Deleted: trunk/TWAIN-Samples/Twain_DS_sample01/Installer/Installer.sln =================================================================== --- trunk/TWAIN-Samples/Twain_DS_sample01/Installer/Installer.sln 2008-09-12 19:16:30 UTC (rev 12) +++ trunk/TWAIN-Samples/Twain_DS_sample01/Installer/Installer.sln 2008-09-12 19:43:19 UTC (rev 13) @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 9.00 -# Visual Studio 2005 -Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "DS Installer 32", "DS Installer 32.vdproj", "{A540EBDC-617D-41C1-B8A1-8A7AF85F753F}" -EndProject -Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "DS Installer 64", "DS Installer 64.vdproj", "{3A198E1E-1A53-422A-852A-BF6D613ADC83}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Default = Debug|Default - Release|Default = Release|Default - Description = Installers for sample TWAIN DS - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {A540EBDC-617D-41C1-B8A1-8A7AF85F753F}.Debug|Default.ActiveCfg = Debug - {A540EBDC-617D-41C1-B8A1-8A7AF85F753F}.Release|Default.ActiveCfg = Release - {A540EBDC-617D-41C1-B8A1-8A7AF85F753F}.Release|Default.Build.0 = Release - {3A198E1E-1A53-422A-852A-BF6D613ADC83}.Debug|Default.ActiveCfg = Debug - {3A198E1E-1A53-422A-852A-BF6D613ADC83}.Release|Default.ActiveCfg = Release - {3A198E1E-1A53-422A-852A-BF6D613ADC83}.Release|Default.Build.0 = Release - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal Modified: trunk/TWAIN-Samples/Twain_DS_sample01/visual_studio/TWAINDS_GUI.rc =================================================================== --- trunk/TWAIN-Samples/Twain_DS_sample01/visual_studio/TWAINDS_GUI.rc 2008-09-12 19:16:30 UTC (rev 12) +++ trunk/TWAIN-Samples/Twain_DS_sample01/visual_studio/TWAINDS_GUI.rc 2008-09-12 19:43:19 UTC (rev 13) @@ -63,8 +63,8 @@ // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,0,0,1 - PRODUCTVERSION 1,0,0,1 + FILEVERSION 1,0,0,2 + PRODUCTVERSION 1,0,0,2 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -81,12 +81,12 @@ BEGIN VALUE "CompanyName", "TWAIN Working Group" VALUE "FileDescription", "SAMPLE Data Source" - VALUE "FileVersion", "1.0.0.1" + VALUE "FileVersion", "1.0.0.2" VALUE "InternalName", "TWAINDS.dll" VALUE "LegalCopyright", "(c) TWAIN Working Group. All rights reserved." VALUE "OriginalFilename", "TWAINDS.dll" VALUE "ProductName", "SampleDS01" - VALUE "ProductVersion", "1.0.0.1" + VALUE "ProductVersion", "1.0.0.2" END END BLOCK "VarFileInfo" @@ -102,22 +102,18 @@ // IDD_DLG_TWAINSAMPLE DIALOGEX 0, 0, 141, 121 -STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | - WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Dialog" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN DEFPUSHBUTTON "Scan",IDOK,7,100,50,14 PUSHBUTTON "Cancel",IDCANCEL,84,100,50,14 LTEXT "Resolution",IDC_STATIC,7,7,34,8 - COMBOBOX IDC_CBX_RESOLUTION,53,7,81,30,CBS_DROPDOWN | CBS_SORT | - WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_CBX_RESOLUTION,53,7,81,30,CBS_DROPDOWN | CBS_SORT | WS_VSCROLL | WS_TABSTOP LTEXT "Papersize",IDC_STATIC,9,38,32,8 - COMBOBOX IDC_CBX_PAPERSIZE,53,39,81,30,CBS_DROPDOWN | CBS_SORT | - WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_CBX_PAPERSIZE,53,39,81,30,CBS_DROPDOWN | CBS_SORT | WS_VSCROLL | WS_TABSTOP LTEXT "PixelType",IDC_STATIC,7,69,32,8 - COMBOBOX IDC_CBX_PIXELTYPE,53,69,81,30,CBS_DROPDOWN | CBS_SORT | - WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_CBX_PIXELTYPE,53,69,81,30,CBS_DROPDOWN | CBS_SORT | WS_VSCROLL | WS_TABSTOP END Modified: trunk/TWAIN-Samples/Twain_DS_sample01/visual_studio/resource.h =================================================================== --- trunk/TWAIN-Samples/Twain_DS_sample01/visual_studio/resource.h 2008-09-12 19:16:30 UTC (rev 12) +++ trunk/TWAIN-Samples/Twain_DS_sample01/visual_studio/resource.h 2008-09-12 19:43:19 UTC (rev 13) @@ -1,20 +1,19 @@ -//{{NO_DEPENDENCIES}} -// Microsoft Visual C++ generated include file. -// Used by TWAINGUI.rc -// -#define IDD_DLG_TWAINSAMPLE 1000 -#define IDC_CBX_RESOLUTION 1000 -#define IDD_DLG_TWAINSAMPLE 1000 -#define IDC_CBX_PAPERSIZE 1001 -#define IDC_CBX_PIXELTYPE 1002 - -// Next default values for new objects -// -#ifdef APSTUDIO_INVOKED -#ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 1001 -#define _APS_NEXT_COMMAND_VALUE 32771 -#define _APS_NEXT_CONTROL_VALUE 1003 -#define _APS_NEXT_SYMED_VALUE 1000 -#endif -#endif +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by TWAINDS_GUI.rc +// +#define IDD_DLG_TWAINSAMPLE 1000 +#define IDC_CBX_RESOLUTION 1000 +#define IDC_CBX_PAPERSIZE 1001 +#define IDC_CBX_PIXELTYPE 1002 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 1001 +#define _APS_NEXT_COMMAND_VALUE 32771 +#define _APS_NEXT_CONTROL_VALUE 1003 +#define _APS_NEXT_SYMED_VALUE 1000 +#endif +#endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jim...@us...> - 2008-09-12 21:27:56
|
Revision: 12 http://twain-samples.svn.sourceforge.net/twain-samples/?rev=12&view=rev Author: jim0watters Date: 2008-09-12 19:16:30 +0000 (Fri, 12 Sep 2008) Log Message: ----------- Revert project change. Modified Paths: -------------- trunk/TWAIN-Samples/Twain_App_sample01/visual_studio_mfc/TWAIN_APP_VS2005_mfc.vcproj Modified: trunk/TWAIN-Samples/Twain_App_sample01/visual_studio_mfc/TWAIN_APP_VS2005_mfc.vcproj =================================================================== --- trunk/TWAIN-Samples/Twain_App_sample01/visual_studio_mfc/TWAIN_APP_VS2005_mfc.vcproj 2008-09-12 17:11:20 UTC (rev 11) +++ trunk/TWAIN-Samples/Twain_App_sample01/visual_studio_mfc/TWAIN_APP_VS2005_mfc.vcproj 2008-09-12 19:16:30 UTC (rev 12) @@ -78,7 +78,7 @@ LinkIncremental="2" AdditionalLibraryDirectories="..\..\pub\external\lib;..\..\pub\lib" IgnoreAllDefaultLibraries="false" - IgnoreDefaultLibraryNames="uafxcwd.lib" + IgnoreDefaultLibraryNames="" GenerateDebugInformation="true" SubSystem="2" TargetMachine="1" @@ -171,7 +171,7 @@ LinkIncremental="2" AdditionalLibraryDirectories="..\..\pub\external\lib;..\..\pub\lib" IgnoreAllDefaultLibraries="false" - IgnoreDefaultLibraryNames="uafxcwd.lib" + IgnoreDefaultLibraryNames="" GenerateDebugInformation="true" SubSystem="2" TargetMachine="17" @@ -261,7 +261,7 @@ LinkIncremental="1" AdditionalLibraryDirectories="..\..\pub\external\lib;..\..\pub\lib" IgnoreAllDefaultLibraries="false" - IgnoreDefaultLibraryNames="uafxcw.lib" + IgnoreDefaultLibraryNames="" GenerateDebugInformation="true" SubSystem="2" OptimizeReferences="2" @@ -354,7 +354,7 @@ LinkIncremental="1" AdditionalLibraryDirectories="..\..\pub\external\lib;..\..\pub\lib" IgnoreAllDefaultLibraries="false" - IgnoreDefaultLibraryNames="uafxcw.lib" + IgnoreDefaultLibraryNames="" GenerateDebugInformation="true" SubSystem="2" OptimizeReferences="2" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jim...@us...> - 2008-09-12 17:11:10
|
Revision: 11 http://twain-samples.svn.sourceforge.net/twain-samples/?rev=11&view=rev Author: jim0watters Date: 2008-09-12 17:11:20 +0000 (Fri, 12 Sep 2008) Log Message: ----------- Fix DSM Callback, to set flag and return right away Display image info on dialog Added sample code to verify the Integrity of the DSM being loaded. Close the file with memory transfer so it can be displayed. Create updateIMAGEINFO as a separate function Create set_CapabilityXXXX functions for to simplify code. Statically link to MFC, remove dependencies from installer. Fix typos Use latest DSM merge module Increase build number Modified Paths: -------------- trunk/TWAIN-Samples/Twain_App_sample01/ChangeLog.txt trunk/TWAIN-Samples/Twain_App_sample01/Installer/App Installer 32.vdproj trunk/TWAIN-Samples/Twain_App_sample01/Installer/App Installer 64.vdproj trunk/TWAIN-Samples/Twain_App_sample01/Installer/App Installer.sln trunk/TWAIN-Samples/Twain_App_sample01/src/DSMInterface.cpp trunk/TWAIN-Samples/Twain_App_sample01/src/TwainApp.cpp trunk/TWAIN-Samples/Twain_App_sample01/src/TwainApp.h trunk/TWAIN-Samples/Twain_App_sample01/src/main.cpp trunk/TWAIN-Samples/Twain_App_sample01/visual_studio/TWAIN_APP_VS2005.vcproj trunk/TWAIN-Samples/Twain_App_sample01/visual_studio_mfc/TWAIN_APP_VS2005_mfc.sln trunk/TWAIN-Samples/Twain_App_sample01/visual_studio_mfc/TWAIN_APP_VS2005_mfc.vcproj trunk/TWAIN-Samples/Twain_App_sample01/visual_studio_mfc/mfc.rc trunk/TWAIN-Samples/Twain_App_sample01/visual_studio_mfc/mfcDlgConfigure.cpp trunk/TWAIN-Samples/Twain_App_sample01/visual_studio_mfc/mfcDlgConfigure.h trunk/TWAIN-Samples/Twain_App_sample01/visual_studio_mfc/mfcDlgMain.h Added Paths: ----------- trunk/TWAIN-Samples/Twain_App_sample01/src/VerifySignature.cpp Modified: trunk/TWAIN-Samples/Twain_App_sample01/ChangeLog.txt =================================================================== --- trunk/TWAIN-Samples/Twain_App_sample01/ChangeLog.txt 2008-06-10 15:57:04 UTC (rev 10) +++ trunk/TWAIN-Samples/Twain_App_sample01/ChangeLog.txt 2008-09-12 17:11:20 UTC (rev 11) @@ -1,3 +1,16 @@ +2008-09-12 JFL Peripheral Solutions ji...@jf... + + * mfcDlgConfigure.cpp, Fix DSM Callback, to set flag and return right away + * mfcDlgConfigure.cpp, Display image info on dialog + * VerifySignature.cpp, DSMInterface.cpp, Added sample code to verify the Integrity of the DSM being loaded. + * TwainApp.cpp, Close the file with memory transfer so it can be displayed. + * TwainApp.cpp, TwainApp.h, Create updateIMAGEINFO as a separate function + * TwainApp.cpp, TwainApp.h, Create set_CapabilityXXXX functions for to simplify code. + * Statically link to MFC, remove dependencies from installer. + * Fix typos + * Use latest DSM merge module + * Increase build number + 2008-06-10 JFL Peripheral Solutions ji...@jf... * TwainApp.cpp List all DS, not just version 2. Modified: trunk/TWAIN-Samples/Twain_App_sample01/Installer/App Installer 32.vdproj =================================================================== --- trunk/TWAIN-Samples/Twain_App_sample01/Installer/App Installer 32.vdproj 2008-06-10 15:57:04 UTC (rev 10) +++ trunk/TWAIN-Samples/Twain_App_sample01/Installer/App Installer 32.vdproj 2008-09-12 17:11:20 UTC (rev 11) @@ -52,33 +52,6 @@ } "Configurations" { - "Debug" - { - "DisplayName" = "8:Debug" - "IsDebugOnly" = "11:TRUE" - "IsReleaseOnly" = "11:FALSE" - "OutputFilename" = "8:Debug32\\App Installer 32.msi" - "PackageFilesAs" = "3:2" - "PackageFileSize" = "3:-2147483648" - "CabType" = "3:1" - "Compression" = "3:2" - "SignOutput" = "11:FALSE" - "CertificateFile" = "8:" - "PrivateKeyFile" = "8:" - "TimeStampServer" = "8:" - "InstallerBootstrapper" = "3:2" - "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}" - { - "Enabled" = "11:TRUE" - "PromptEnabled" = "11:TRUE" - "PrerequisitesLocation" = "2:1" - "Url" = "8:" - "ComponentsUrl" = "8:" - "Items" - { - } - } - } "Release" { "DisplayName" = "8:Release" @@ -96,18 +69,13 @@ "InstallerBootstrapper" = "3:2" "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}" { - "Enabled" = "11:TRUE" + "Enabled" = "11:FALSE" "PromptEnabled" = "11:TRUE" "PrerequisitesLocation" = "2:1" "Url" = "8:" "ComponentsUrl" = "8:" "Items" { - "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:Microsoft.Net.Framework.2.0" - { - "Name" = "8:Microsoft .NET Framework 2.0" - "ProductCode" = "8:Microsoft.Net.Framework.2.0" - } } } } @@ -286,21 +254,21 @@ { "Name" = "8:Microsoft Visual Studio" "ProductName" = "8:TWAIN 2.0 App 32bit Sample" - "ProductCode" = "8:{5D1B8A05-A7FB-48D4-9199-0BE61AF5B54C}" - "PackageCode" = "8:{678679F7-0536-4C85-83AE-20E0E04B98EB}" + "ProductCode" = "8:{8FB891DF-3D56-4115-8365-83EFD3F38B36}" + "PackageCode" = "8:{33F2AEEF-F1A8-418D-9E7A-7AFCE6DA3302}" "UpgradeCode" = "8:{3093BF18-1ADD-4A3C-AE32-8F818163DFAF}" "RestartWWWService" = "11:FALSE" "RemovePreviousVersions" = "11:FALSE" "DetectNewerInstalledVersion" = "11:TRUE" "InstallAllUsers" = "11:TRUE" - "ProductVersion" = "8:1.0.0" + "ProductVersion" = "8:1.0.2" "Manufacturer" = "8:TWAIN Working Group" "ARPHELPTELEPHONE" = "8:http://www.twainforum.org/phpBB2/index.php" "ARPHELPLINK" = "8:http://sourceforge.net/projects/twain-samples/" "Title" = "8:App Installer 32" "Subject" = "8:" "ARPCONTACT" = "8:TWAIN Working Group" - "Keywords" = "8:TWIAN 2.0 App Sample 32bit" + "Keywords" = "8:TWAIN 2.0 App Sample 32bit" "ARPCOMMENTS" = "8:Sample TWAIN 2.0 Application " "ARPURLINFOABOUT" = "8:http://twain.org" "ARPPRODUCTICON" = "8:_08699E2E1EFE422DBB6F4BDE4BAEA4D5" @@ -816,7 +784,7 @@ { "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" - "SourcePath" = "8:..\\..\\pub\\bin\\twain32\\TWAINDSM32.msm" + "SourcePath" = "8:..\\..\\pub\\external\\bin\\TWAINDSM32.msm" "Properties" { "_92C0B735BA65418D80665F240AE78CAF.F6BD06CC863147E1A74785A2413759ED" Modified: trunk/TWAIN-Samples/Twain_App_sample01/Installer/App Installer 64.vdproj =================================================================== --- trunk/TWAIN-Samples/Twain_App_sample01/Installer/App Installer 64.vdproj 2008-06-10 15:57:04 UTC (rev 10) +++ trunk/TWAIN-Samples/Twain_App_sample01/Installer/App Installer 64.vdproj 2008-09-12 17:11:20 UTC (rev 11) @@ -52,33 +52,6 @@ } "Configurations" { - "Debug" - { - "DisplayName" = "8:Debug" - "IsDebugOnly" = "11:TRUE" - "IsReleaseOnly" = "11:FALSE" - "OutputFilename" = "8:Debug64\\App Installer 64.msi" - "PackageFilesAs" = "3:2" - "PackageFileSize" = "3:-2147483648" - "CabType" = "3:1" - "Compression" = "3:2" - "SignOutput" = "11:FALSE" - "CertificateFile" = "8:" - "PrivateKeyFile" = "8:" - "TimeStampServer" = "8:" - "InstallerBootstrapper" = "3:2" - "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}" - { - "Enabled" = "11:TRUE" - "PromptEnabled" = "11:TRUE" - "PrerequisitesLocation" = "2:1" - "Url" = "8:" - "ComponentsUrl" = "8:" - "Items" - { - } - } - } "Release" { "DisplayName" = "8:Release" @@ -96,18 +69,13 @@ "InstallerBootstrapper" = "3:2" "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}" { - "Enabled" = "11:TRUE" + "Enabled" = "11:FALSE" "PromptEnabled" = "11:TRUE" "PrerequisitesLocation" = "2:1" "Url" = "8:" "ComponentsUrl" = "8:" "Items" { - "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:Microsoft.Net.Framework.2.0" - { - "Name" = "8:Microsoft .NET Framework 2.0" - "ProductCode" = "8:Microsoft.Net.Framework.2.0" - } } } } @@ -293,14 +261,14 @@ "RemovePreviousVersions" = "11:FALSE" "DetectNewerInstalledVersion" = "11:TRUE" "InstallAllUsers" = "11:TRUE" - "ProductVersion" = "8:1.0.0" + "ProductVersion" = "8:1.0.2" "Manufacturer" = "8:TWAIN Working Group" "ARPHELPTELEPHONE" = "8:http://www.twainforum.org/phpBB2/index.php" "ARPHELPLINK" = "8:http://sourceforge.net/projects/twain-samples/" "Title" = "8:App Installer 64" "Subject" = "8:" "ARPCONTACT" = "8:TWAIN Working Group" - "Keywords" = "8:TWIAN 2.0 App Sample 64bit" + "Keywords" = "8:TWAIN 2.0 App Sample 64bit" "ARPCOMMENTS" = "8:Sample TWAIN 2.0 Application " "ARPURLINFOABOUT" = "8:http://twain.org" "ARPPRODUCTICON" = "8:_5B6EB5FCCECA4AAA97BDF758779B4E0F" @@ -816,7 +784,7 @@ { "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" - "SourcePath" = "8:..\\..\\pub\\bin\\twain64\\TWAINDSM64.msm" + "SourcePath" = "8:..\\..\\pub\\external\\bin\\TWAINDSM64.msm" "Properties" { } Modified: trunk/TWAIN-Samples/Twain_App_sample01/Installer/App Installer.sln =================================================================== --- trunk/TWAIN-Samples/Twain_App_sample01/Installer/App Installer.sln 2008-06-10 15:57:04 UTC (rev 10) +++ trunk/TWAIN-Samples/Twain_App_sample01/Installer/App Installer.sln 2008-09-12 17:11:20 UTC (rev 11) @@ -7,15 +7,12 @@ EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Default = Debug|Default Release|Default = Release|Default Description = Installers for sample TWAIN App EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {B26F85C9-516D-446E-8641-C10962BA08D3}.Debug|Default.ActiveCfg = Debug {B26F85C9-516D-446E-8641-C10962BA08D3}.Release|Default.ActiveCfg = Release {B26F85C9-516D-446E-8641-C10962BA08D3}.Release|Default.Build.0 = Release - {29BC35A1-3970-4101-B9F6-59EBD08FD0C0}.Debug|Default.ActiveCfg = Debug {29BC35A1-3970-4101-B9F6-59EBD08FD0C0}.Release|Default.ActiveCfg = Release {29BC35A1-3970-4101-B9F6-59EBD08FD0C0}.Release|Default.Build.0 = Release EndGlobalSection Modified: trunk/TWAIN-Samples/Twain_App_sample01/src/DSMInterface.cpp =================================================================== --- trunk/TWAIN-Samples/Twain_App_sample01/src/DSMInterface.cpp 2008-06-10 15:57:04 UTC (rev 10) +++ trunk/TWAIN-Samples/Twain_App_sample01/src/DSMInterface.cpp 2008-09-12 17:11:20 UTC (rev 11) @@ -45,7 +45,12 @@ #include <iostream> using namespace std; +// On Windows the official TWAINDSM.dll is signed. this function can verify the signature. #ifdef TWH_CMP_MSC +BOOL VerifyEmbeddedSignature(LPCWSTR pwszSourceFile); +#endif + +#ifdef TWH_CMP_MSC HMODULE #else void* @@ -100,6 +105,15 @@ if((gpDSM=LOADLIBRARY(_pszLibName)) != 0) { +// On Windows the official TWAINDSM.dll is signed. this function can verify the signature. +#ifdef TWH_CMP_MSC + WCHAR szPath[MAX_PATH]; + if(GetModuleFileNameW(gpDSM, szPath, MAX_PATH)) + { + VerifyEmbeddedSignature(szPath); + } +#endif //TWH_CMP_MSC + if((gpDSM_Entry=(DSMENTRYPROC)LOADFUNCTION(gpDSM, "DSM_Entry")) == 0) { #ifdef TWH_CMP_MSC // dlsym returning NULL is not an error on Unix Modified: trunk/TWAIN-Samples/Twain_App_sample01/src/TwainApp.cpp =================================================================== --- trunk/TWAIN-Samples/Twain_App_sample01/src/TwainApp.cpp 2008-06-10 15:57:04 UTC (rev 10) +++ trunk/TWAIN-Samples/Twain_App_sample01/src/TwainApp.cpp 2008-09-12 17:11:20 UTC (rev 11) @@ -774,6 +774,29 @@ } ////////////////////////////////////////////////////////////////////////////// +bool TwainApp::updateIMAGEINFO() +{ + // clear our image info structure + memset(&m_ImageInfo, 0, sizeof(m_ImageInfo)); + + // get the image details + cout << "app: Getting the image info..." << endl; + TW_UINT16 twrc = _DSM_Entry( + &m_MyInfo, + m_pDataSource, + DG_IMAGE, + DAT_IMAGEINFO, + MSG_GET, + (TW_MEMREF)&(m_ImageInfo)); + + if(TWRC_SUCCESS != twrc) + { + printError(m_pDataSource, "Error while trying to get the image information!"); + } + return TWRC_SUCCESS==twrc? true:false; +} + +////////////////////////////////////////////////////////////////////////////// void TwainApp::initiateTransfer_Native() { cout << "app: Starting a TWSX_NATIVE transfer..." << endl; @@ -787,22 +810,8 @@ m_nXferNum++; memset(szOutFileName, 0, sizeof(szOutFileName)); - // clear our image info structure - memset(&m_ImageInfo, 0, sizeof(m_ImageInfo)); - - // get the image details - cout << "app: Getting the image info..." << endl; - twrc = _DSM_Entry( - &m_MyInfo, - m_pDataSource, - DG_IMAGE, - DAT_IMAGEINFO, - MSG_GET, - (TW_MEMREF)&(m_ImageInfo)); - - if(TWRC_SUCCESS != twrc) + if(!updateIMAGEINFO()) { - printError(m_pDataSource, "Error while trying to get the image information!"); break; } @@ -990,22 +999,8 @@ { m_nXferNum++; - // clear our image info structure - memset(&m_ImageInfo, 0, sizeof(m_ImageInfo)); - - // get the image details - cout << "app: Getting the image info..." << endl; - twrc = _DSM_Entry( - &m_MyInfo, - m_pDataSource, - DG_IMAGE, - DAT_IMAGEINFO, - MSG_GET, - (TW_MEMREF)&(m_ImageInfo)); - - if(TWRC_SUCCESS != twrc) + if(!updateIMAGEINFO()) { - printError(m_pDataSource, "Error while trying to get the image information!"); break; } @@ -1051,6 +1046,15 @@ if(TWRC_XFERDONE == twrc) { + // Findout where the file was actualy saved + twrc = _DSM_Entry( + &m_MyInfo, + m_pDataSource, + DG_CONTROL, + DAT_SETUPFILEXFER, + MSG_GET, + (TW_MEMREF)&(filexfer)); + #ifdef _WINDOWS ShellExecute(m_Parent, "open", filexfer.FileName, NULL, NULL, SW_SHOWNORMAL); #else @@ -1159,22 +1163,8 @@ m_nXferNum++; memset(szOutFileName, 0, sizeof(szOutFileName)); - // clear our image info structure - memset(&m_ImageInfo, 0, sizeof(m_ImageInfo)); - - // get the image details - cout << "app: Getting the image info..." << endl; - twrc = _DSM_Entry( - &m_MyInfo, - m_pDataSource, - DG_IMAGE, - DAT_IMAGEINFO, - MSG_GET, - (TW_MEMREF)&(m_ImageInfo)); - - if(TWRC_SUCCESS != twrc) + if(!updateIMAGEINFO()) { - printError(m_pDataSource, "Error while trying to get the image information!"); break; } @@ -1291,6 +1281,13 @@ if(TWRC_XFERDONE == twrc) { + // deleting the CTiffWriter object will close the file + if(pTifImg) + { + delete pTifImg; + pTifImg = 0; + } + #ifdef _WINDOWS ShellExecute(m_Parent, "open", szOutFileName, NULL, NULL, SW_SHOWNORMAL); #else @@ -1316,8 +1313,8 @@ if(pTifImg) { delete pTifImg; + pTifImg = 0; } - pTifImg = 0; // cleanup memory used to transfer image _DSM_UnlockMemory((TW_MEMREF)(memXferBufTemplate.Memory.TheMem)); _DSM_Free(hMem); @@ -1455,6 +1452,33 @@ } ////////////////////////////////////////////////////////////////////////////// +pTW_IDENTITY TwainApp::getAppIdentity() +{ + return &m_MyInfo; +} + + +////////////////////////////////////////////////////////////////////////////// +pTW_IDENTITY TwainApp::getDataSource(TW_INT16 _index /*= -1*/) const +{ + if(_index < 0 ) + { + return m_pDataSource; + } + else + { + if(((unsigned int)_index) < m_DataSources.size()) + { + return (pTW_IDENTITY)&m_DataSources[_index]; + } + else + { + return NULL; + } + } +} + +////////////////////////////////////////////////////////////////////////////// bool TwainApp::get_CAP(TW_CAPABILITY& _cap) { if(m_DSMState < 4) @@ -1504,23 +1528,23 @@ } ////////////////////////////////////////////////////////////////////////////// -void TwainApp::set_CAP_XFERCOUNT(const TW_INT16 _count) +bool TwainApp::set_CapabilityOneValue(TW_UINT16 Cap, const TW_INT16 _value) { + bool bResult = true; TW_CAPABILITY cap; - cap.Cap = CAP_XFERCOUNT; + cap.Cap = Cap; cap.ConType = TWON_ONEVALUE; cap.hContainer = (TW_HANDLE)_DSM_Alloc(sizeof(TW_ONEVALUE_INT16)); if(0 == cap.hContainer) { printError(0, "Error allocating memory"); - return; + return false; } - pTW_ONEVALUE_INT16 pVal = (pTW_ONEVALUE_INT16)_DSM_LockMemory(cap.hContainer); pVal->ItemType = TWTY_INT16; - pVal->Item = _count; + pVal->Item = _value; // capability structure is set, make the call to the source now TW_INT16 twrc = _DSM_Entry( @@ -1534,43 +1558,71 @@ if(TWRC_FAILURE == twrc) { printError(m_pDataSource, "Could not set capability"); + bResult = false; } _DSM_UnlockMemory((TW_MEMREF)pVal); _DSM_Free(cap.hContainer); + return bResult; +} - // now that we have set it, re-get it to ensure it was set - if(get_CAP(m_CAP_XFERCOUNT)) +bool TwainApp::set_CapabilityOneValue(TW_UINT16 Cap, const TW_UINT16 _value) +{ + bool bResult = true; + TW_CAPABILITY cap; + cap.Cap = Cap; + cap.ConType = TWON_ONEVALUE; + + cap.hContainer = (TW_HANDLE)_DSM_Alloc(sizeof(TW_ONEVALUE_UINT16)); + if(0 == cap.hContainer) { - TW_INT16 count; - if(getCAP_XFERCOUNT(count) && - count == _count) - { - cout << "Capability successfully set!" << endl; - } + printError(0, "Error allocating memory"); + return false; } + pTW_ONEVALUE_UINT16 pVal = (pTW_ONEVALUE_UINT16)_DSM_LockMemory(cap.hContainer); - return; + pVal->ItemType = TWTY_UINT16; + pVal->Item = _value; + + // capability structure is set, make the call to the source now + TW_INT16 twrc = _DSM_Entry( + &m_MyInfo, + m_pDataSource, + DG_CONTROL, + DAT_CAPABILITY, + MSG_SET, + (TW_MEMREF)&(cap)); + + if(TWRC_FAILURE == twrc) + { + printError(m_pDataSource, "Could not set capability"); + bResult = false; + } + + _DSM_UnlockMemory((TW_MEMREF)pVal); + _DSM_Free(cap.hContainer); + return bResult; } -////////////////////////////////////////////////////////////////////////////// -void TwainApp::set_ICAP_UNITS(const TW_UINT16 _val) + +bool TwainApp::set_CapabilityOneValue(TW_UINT16 Cap, const pTW_FIX32 _pValue) { + bool bResult = true; TW_CAPABILITY cap; + cap.Cap = Cap; + cap.ConType = TWON_ONEVALUE; - cap.Cap = ICAP_UNITS; - cap.ConType = TWON_ONEVALUE; - cap.hContainer = (TW_HANDLE)_DSM_Alloc(sizeof(TW_ONEVALUE_UINT16)); + cap.hContainer = (TW_HANDLE)_DSM_Alloc(sizeof(TW_ONEVALUE_FIX32)); if(0 == cap.hContainer) { printError(0, "Error allocating memory"); - return; + return false; } - pTW_ONEVALUE_UINT16 pVal = (pTW_ONEVALUE_UINT16)_DSM_LockMemory(cap.hContainer); + pTW_ONEVALUE_FIX32 pVal = (pTW_ONEVALUE_FIX32)_DSM_LockMemory(cap.hContainer); - pVal->ItemType = TWTY_UINT16; - pVal->Item = _val; + pVal->ItemType = TWTY_FIX32; + pVal->Item = *_pValue; // capability structure is set, make the call to the source now TW_UINT16 twrc = _DSM_Entry( @@ -1584,12 +1636,40 @@ if(TWRC_FAILURE == twrc) { printError(m_pDataSource, "Could not set capability"); + bResult = false; } _DSM_UnlockMemory((TW_MEMREF)pVal); _DSM_Free(cap.hContainer); + return bResult; +} + +////////////////////////////////////////////////////////////////////////////// +void TwainApp::set_CAP_XFERCOUNT(const TW_INT16 _count) +{ + set_CapabilityOneValue(CAP_XFERCOUNT, _count); + // now that we have set it, re-get it to ensure it was set + if(get_CAP(m_CAP_XFERCOUNT)) + { + TW_INT16 count; + if(getCAP_XFERCOUNT(count) && + count == _count) + { + cout << "Capability successfully set!" << endl; + } + } + + return; +} + +////////////////////////////////////////////////////////////////////////////// +void TwainApp::set_ICAP_UNITS(const TW_UINT16 _val) +{ + set_CapabilityOneValue(ICAP_UNITS, _val); + + // now that we have set it, re-get it to ensure it was set if(get_CAP(m_ICAP_UNITS)) { if(TWON_ENUMERATION == m_ICAP_UNITS.ConType && @@ -1615,39 +1695,8 @@ ////////////////////////////////////////////////////////////////////////////// void TwainApp::set_ICAP_PIXELTYPE(const TW_UINT16 _pt) { - TW_CAPABILITY cap; - cap.Cap = ICAP_PIXELTYPE; - cap.ConType = TWON_ONEVALUE; + set_CapabilityOneValue(ICAP_PIXELTYPE, _pt); - cap.hContainer = (TW_HANDLE)_DSM_Alloc(sizeof(TW_ONEVALUE_UINT16)); - if(0 == cap.hContainer) - { - printError(0, "Error allocating memory"); - return; - } - - pTW_ONEVALUE_UINT16 pVal = (pTW_ONEVALUE_UINT16)_DSM_LockMemory(cap.hContainer); - - pVal->ItemType = TWTY_UINT16; - pVal->Item = _pt; - - // capability structure is set, make the call to the source now - TW_UINT16 twrc = _DSM_Entry( - &m_MyInfo, - m_pDataSource, - DG_CONTROL, - DAT_CAPABILITY, - MSG_SET, - (TW_MEMREF)&(cap)); - - if(TWRC_FAILURE == twrc) - { - printError(m_pDataSource, "Could not set capability"); - } - - _DSM_UnlockMemory((TW_MEMREF)pVal); - _DSM_Free(cap.hContainer); - // now that we have set it, re-get it to ensure it was set if(get_CAP(m_ICAP_PIXELTYPE)) { @@ -1696,39 +1745,8 @@ return; } - TW_CAPABILITY cap; - cap.Cap = _ICAP; - cap.ConType = TWON_ONEVALUE; + set_CapabilityOneValue(_ICAP, _pVal); - cap.hContainer = (TW_HANDLE)_DSM_Alloc(sizeof(TW_ONEVALUE_FIX32)); - if(0 == cap.hContainer) - { - printError(0, "Error allocating memory"); - return; - } - - pTW_ONEVALUE_FIX32 pVal = (pTW_ONEVALUE_FIX32)_DSM_LockMemory(cap.hContainer); - - pVal->ItemType = TWTY_FIX32; - pVal->Item = *_pVal; - - // capability structure is set, make the call to the source now - TW_UINT16 twrc = _DSM_Entry( - &m_MyInfo, - m_pDataSource, - DG_CONTROL, - DAT_CAPABILITY, - MSG_SET, - (TW_MEMREF)&(cap)); - - if(TWRC_FAILURE == twrc) - { - printError(m_pDataSource, "Could not set capability"); - } - - _DSM_UnlockMemory((TW_MEMREF)pVal); - _DSM_Free(cap.hContainer); - // Get the new RESOLUTION caps values to see if the set was successfull. get_CAP(m_ICAP_XRESOLUTION); get_CAP(m_ICAP_YRESOLUTION); @@ -1823,39 +1841,8 @@ ////////////////////////////////////////////////////////////////////////////// void TwainApp::set_ICAP_XFERMECH(const TW_UINT16 _mech) { - TW_CAPABILITY cap; - cap.Cap = ICAP_XFERMECH; - cap.ConType = TWON_ONEVALUE; + set_CapabilityOneValue(ICAP_XFERMECH, _mech); - cap.hContainer = (TW_HANDLE)_DSM_Alloc(sizeof(TW_ONEVALUE_UINT16)); - if(0 == cap.hContainer) - { - printError(0, "Error allocating memory"); - return; - } - - pTW_ONEVALUE_UINT16 pVal = (pTW_ONEVALUE_UINT16)_DSM_LockMemory(cap.hContainer); - - pVal->ItemType = TWTY_UINT16; - pVal->Item = _mech; - - // capability structure is set, make the call to the source now - TW_UINT16 twrc = _DSM_Entry( - &m_MyInfo, - m_pDataSource, - DG_CONTROL, - DAT_CAPABILITY, - MSG_SET, - (TW_MEMREF)&(cap)); - - if(TWRC_FAILURE == twrc) - { - printError(m_pDataSource, "Could not set capability"); - } - - _DSM_UnlockMemory((TW_MEMREF)pVal); - _DSM_Free(cap.hContainer); - // now that we have set it, re-get it to ensure it was set if(get_CAP(m_ICAP_XFERMECH)) { @@ -1877,39 +1864,8 @@ ////////////////////////////////////////////////////////////////////////////// void TwainApp::set_ICAP_IMAGEFILEFORMAT(const TW_UINT16 _fileformat) { - TW_CAPABILITY cap; - cap.Cap = ICAP_IMAGEFILEFORMAT; - cap.ConType = TWON_ONEVALUE; + set_CapabilityOneValue(ICAP_IMAGEFILEFORMAT, _fileformat); - cap.hContainer = (TW_HANDLE)_DSM_Alloc(sizeof(TW_ONEVALUE_UINT16)); - if(0 == cap.hContainer) - { - printError(0, "Error allocating memory"); - return; - } - - pTW_ONEVALUE_UINT16 pVal = (pTW_ONEVALUE_UINT16)_DSM_LockMemory(cap.hContainer); - - pVal->ItemType = TWTY_UINT16; - pVal->Item = _fileformat; - - // capability structure is set, make the call to the source now - TW_UINT16 twrc = _DSM_Entry( - &m_MyInfo, - m_pDataSource, - DG_CONTROL, - DAT_CAPABILITY, - MSG_SET, - (TW_MEMREF)&(cap)); - - if(TWRC_FAILURE == twrc) - { - printError(m_pDataSource, "Could not set capability"); - } - - _DSM_UnlockMemory((TW_MEMREF)pVal); - _DSM_Free(cap.hContainer); - // now that we have set it, re-get it to ensure it was set if(get_CAP(m_ICAP_IMAGEFILEFORMAT)) { @@ -1930,39 +1886,8 @@ ////////////////////////////////////////////////////////////////////////////// void TwainApp::set_ICAP_COMPRESSION(const TW_UINT16 _comp) { - TW_CAPABILITY cap; - cap.Cap = ICAP_COMPRESSION; - cap.ConType = TWON_ONEVALUE; + set_CapabilityOneValue(ICAP_COMPRESSION, _comp); - cap.hContainer = (TW_HANDLE)_DSM_Alloc(sizeof(TW_ONEVALUE_UINT16)); - if(0 == cap.hContainer) - { - printError(0, "Error allocating memory"); - return; - } - - pTW_ONEVALUE_UINT16 pVal = (pTW_ONEVALUE_UINT16)_DSM_LockMemory(cap.hContainer); - - pVal->ItemType = TWTY_UINT16; - pVal->Item = _comp; - - // capability structure is set, make the call to the source now - TW_UINT16 twrc = _DSM_Entry( - &m_MyInfo, - m_pDataSource, - DG_CONTROL, - DAT_CAPABILITY, - MSG_SET, - (TW_MEMREF)&(cap)); - - if(TWRC_FAILURE == twrc) - { - printError(m_pDataSource, "Could not set capability"); - } - - _DSM_UnlockMemory((TW_MEMREF)pVal); - _DSM_Free(cap.hContainer); - // now that we have set it, re-get it to ensure it was set if(get_CAP(m_ICAP_COMPRESSION)) { @@ -2243,33 +2168,6 @@ } ////////////////////////////////////////////////////////////////////////////// -pTW_IDENTITY TwainApp::getAppIdentity() -{ - return &m_MyInfo; -} - - -////////////////////////////////////////////////////////////////////////////// -pTW_IDENTITY TwainApp::getDataSource(TW_INT16 _index /*= -1*/) const -{ - if(_index < 0 ) - { - return m_pDataSource; - } - else - { - if(((unsigned int)_index) < m_DataSources.size()) - { - return (pTW_IDENTITY)&m_DataSources[_index]; - } - else - { - return NULL; - } - } -} - -////////////////////////////////////////////////////////////////////////////// bool TwainApp::getICAP_XRESOLUTION(TW_FIX32& _xres) { bool bret = false; Modified: trunk/TWAIN-Samples/Twain_App_sample01/src/TwainApp.h =================================================================== --- trunk/TWAIN-Samples/Twain_App_sample01/src/TwainApp.h 2008-06-10 15:57:04 UTC (rev 10) +++ trunk/TWAIN-Samples/Twain_App_sample01/src/TwainApp.h 2008-09-12 17:11:20 UTC (rev 11) @@ -239,6 +239,30 @@ void initiateTransfer_Memory(); /** +* Try to sets a OneValue Capability to the value passed +* @param[in] Cap the capability to update to set +* @param[in] _value the value to set +* @return true if successful +*/ + bool set_CapabilityOneValue(TW_UINT16 Cap, const TW_INT16 _value); + +/** +* Try to sets a OneValue Capability to the value passed +* @param[in] Cap the capability to update to set +* @param[in] _value the value to set +* @return true if successful +*/ + bool set_CapabilityOneValue(TW_UINT16 Cap, const TW_UINT16 _value); + +/** +* Try to sets a OneValue Capability to the value passed +* @param[in] Cap the capability to update to set +* @param[in] _value the value to set +* @return true if successful +*/ + bool set_CapabilityOneValue(TW_UINT16 Cap, const pTW_FIX32 _pValue); + +/** * Gets the capability. * @param[in,out] _cap the capability struct to fill. _cap.Cap needs to be * filled with the capability to retrieve. @@ -389,6 +413,12 @@ */ pTW_IMAGEINFO getIMAGEINFO() {return &m_ImageInfo;} +/** +* retrieve the imageinfo for the current image +* @return true on succes +*/ + bool updateIMAGEINFO(); + //////////////// // CAPABILITIES Added: trunk/TWAIN-Samples/Twain_App_sample01/src/VerifySignature.cpp =================================================================== --- trunk/TWAIN-Samples/Twain_App_sample01/src/VerifySignature.cpp (rev 0) +++ trunk/TWAIN-Samples/Twain_App_sample01/src/VerifySignature.cpp 2008-09-12 17:11:20 UTC (rev 11) @@ -0,0 +1,163 @@ +//------------------------------------------------------------------- +// Copyright (c) Microsoft Corporation. All rights reserved. +// Example of verifying the embedded signature of a PE file by using +// the WinVerifyTrust function. + +#define _UNICODE 1 +#define UNICODE 1 + +#ifdef _WINDOWS + #include "stdafx.h" +#endif + +#include <afx.h> +#include <tchar.h> +#include <stdio.h> +#include <stdlib.h> +#include <Softpub.h> +#include <wincrypt.h> +#include <wintrust.h> + +// Link with the Wintrust.lib file. +#pragma comment (lib, "wintrust") + +BOOL VerifyEmbeddedSignature( LPCWSTR pwszSourceFile ) +{ + // Initialize the WINTRUST_FILE_INFO structure. + WINTRUST_FILE_INFO FileData; + memset(&FileData, 0, sizeof(FileData)); + FileData.cbStruct = sizeof(WINTRUST_FILE_INFO); + FileData.pcwszFilePath = pwszSourceFile; + FileData.hFile = NULL; + FileData.pgKnownSubject = NULL; + + /* + WVTPolicyGUID specifies the policy to apply on the file + WINTRUST_ACTION_GENERIC_VERIFY_V2 policy checks: + + 1) The certificate used to sign the file chains up to a root + certificate located in the trusted root certificate store. This + implies that the identity of the publisher has been verified by + a certification authority. + + 2) In cases where user interface is displayed (which this example + does not do), WinVerifyTrust will check for whether the + end entity certificate is stored in the trusted publisher store, + implying that the user trusts content from this publisher. + + 3) The end entity certificate has sufficient permission to sign + code, as indicated by the presence of a code signing EKU or no + EKU. + */ + GUID WVTPolicyGUID = WINTRUST_ACTION_GENERIC_VERIFY_V2; + + // Initialize the WinVerifyTrust input data structure. + WINTRUST_DATA WinTrustData; + memset(&WinTrustData, 0, sizeof(WinTrustData)); // Default all fields to 0. + WinTrustData.cbStruct = sizeof(WinTrustData); + WinTrustData.pPolicyCallbackData = NULL; // Use default code signing EKU. + WinTrustData.pSIPClientData = NULL; // No data to pass to SIP. + WinTrustData.dwUIChoice = WTD_UI_ALL;//WTD_UI_NONE; // Disable WVT UI. + WinTrustData.fdwRevocationChecks = WTD_REVOKE_NONE; // No revocation checking. + WinTrustData.dwUnionChoice = WTD_CHOICE_FILE; // Verify an embedded signature on a file. + WinTrustData.dwStateAction = 0; // Default verification. + WinTrustData.hWVTStateData = NULL; // Not applicable for default verification of embedded signature. + WinTrustData.pwszURLReference = NULL; // Not used. + WinTrustData.dwProvFlags = WTD_SAFER_FLAG; // Default. + WinTrustData.dwUIContext = 0; // This is not applicable if there is no UI because it changes the UI to accommodate running applications instead of installing applications. + WinTrustData.pFile = &FileData; // Set pFile. + + // WinVerifyTrust verifies signatures as specified by the GUID and Wintrust_Data. + LONG lStatus = WinVerifyTrust( NULL, &WVTPolicyGUID, &WinTrustData ); + + switch (lStatus) + { + case ERROR_SUCCESS: + /* + Signed file: + - Hash that represents the subject is trusted. + - Trusted publisher without any verification errors. + - UI was disabled in dwUIChoice. No publisher or time stamp chain errors. + - UI was enabled in dwUIChoice and the user clicked "Yes" when asked to run the signed subject. + */ + TRACE( "The file \"%s\" is signed and the signature was verified.", pwszSourceFile ); + break; + + case TRUST_E_NOSIGNATURE: + { + // The file was not signed or had a signature that was not valid. + // Get the reason for no signature. + DWORD dwLastError = GetLastError(); + if( dwLastError == TRUST_E_NOSIGNATURE + || dwLastError == TRUST_E_SUBJECT_FORM_UNKNOWN + || dwLastError == TRUST_E_PROVIDER_UNKNOWN ) + { + // The file was not signed. + TRACE( "The file \"%s\" is not signed.", pwszSourceFile ); + } + else + { + // The signature was not valid or there was an error opening the file. + TRACE( "An unknown error occurred trying to verify the signature of the \"%s\" file.", pwszSourceFile ); + lStatus = dwLastError; + } + } + break; + + case TRUST_E_EXPLICIT_DISTRUST: + // The hash that represents the subject or the publisher is not allowed by the admin or user. + TRACE( "The signature is present, but specifically disallowed." ); + break; + + case TRUST_E_SUBJECT_NOT_TRUSTED: + // The user clicked "No" when asked to install and run. + TRACE( "The signature is present, but not trusted." ); + break; + + case CRYPT_E_SECURITY_SETTINGS: + // The hash that represents the subject or the publisher was not explicitly trusted + // by the admin and the admin policy has disabled user trust. No signature, publisher + // or time stamp errors. + TRACE( "CRYPT_E_SECURITY_SETTINGS - The hash representing the subject or the " + "publisher wasn't explicitly trusted by the admin and admin policy has " + "disabled user trust. No signature, publisher or timestamp errors." ); + break; + + case CERT_E_UNTRUSTEDROOT: + TRACE( "A certificate chain processed, but terminated in a root " + "certificate which is not trusted by the trust provider. " ); + break; + + default: + // The UI was disabled in dwUIChoice or the admin policy + // has disabled user trust. lStatus contains the + // publisher or time stamp chain error. + TRACE( "Error is:%d ", lStatus ); + break; + } + + LPVOID lpMsgBuf; + if( lStatus != ERROR_SUCCESS + && FormatMessage( + FORMAT_MESSAGE_ALLOCATE_BUFFER | + FORMAT_MESSAGE_FROM_SYSTEM | + FORMAT_MESSAGE_IGNORE_INSERTS, + NULL, + (DWORD)lStatus, + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language + (LPTSTR) &lpMsgBuf, + 0, + NULL )) + { + TRACE("Error: %s", (LPCTSTR)lpMsgBuf); + + { + HWND hWnd = NULL; + ::MessageBox( hWnd, (LPCTSTR)lpMsgBuf, L"signature", MB_OK|MB_ICONEXCLAMATION); + } + // Free the buffer. + LocalFree( lpMsgBuf ); + } + + return lStatus==ERROR_SUCCESS; +} Modified: trunk/TWAIN-Samples/Twain_App_sample01/src/main.cpp =================================================================== --- trunk/TWAIN-Samples/Twain_App_sample01/src/main.cpp 2008-06-10 15:57:04 UTC (rev 10) +++ trunk/TWAIN-Samples/Twain_App_sample01/src/main.cpp 2008-09-12 17:11:20 UTC (rev 11) @@ -61,9 +61,9 @@ ////////////////////////////////////////////////////////////////////////////// // Global Variables -bool gWaitForDS; /**< global statis to indicate if we are waiting for DS */ -TwainApp* gpTwainApplication; /**< The main application */ -extern bool gUSE_CALLBACKS; // defined in TwainApp.cpp +TW_UINT16 gDSMessage; /**< global statis to indicate if we are waiting for DS */ +TwainApp *gpTwainApplication; /**< The main application */ +extern bool gUSE_CALLBACKS; // defined in TwainApp.cpp ////////////////////////////////////////////////////////////////////////////// /** @@ -289,7 +289,7 @@ */ void EnableDS() { - gWaitForDS = true; + gDSMessage = 0; // -Enable the data source. This puts us in state 5 which means that we // have to wait for the data source to tell us to move to state 6 and @@ -303,7 +303,7 @@ } // now we have to wait until we hear something back from the DS. - while(gWaitForDS) + while(!gDSMessage) { // If we are using callbacks, there is nothing to do here except sleep @@ -325,16 +325,15 @@ switch (twEvent.TWMessage) { case MSG_XFERREADY: - gWaitForDS = false; - gpTwainApplication->m_DSMState = 6; - break; case MSG_CLOSEDSREQ: - break; case MSG_CLOSEDSOK: - break; case MSG_NULL: - // no message returned from the source + gDSMessage = twEvent.TWMessage; break; + + default: + cerr << "\nError - Unknown message in MSG_PROCESSEVENT loop\n" << endl; + break; } } @@ -348,9 +347,14 @@ // At this point the source has sent us a callback saying that it is ready to // transfer the image. - // move to state 6 as a result of the data source. We can start a scan now. - gpTwainApplication->startScan(); + if(gDSMessage == MSG_XFERREADY) + { + // move to state 6 as a result of the data source. We can start a scan now. + gpTwainApplication->m_DSMState = 6; + gpTwainApplication->startScan(); + } + // Scan is done, disable the ds, thus moving us back to state 4 where we // can negotiate caps again. gpTwainApplication->disableDS(); @@ -363,6 +367,8 @@ * Callback funtion for DS. This is a callback function that will be called by * the source when it is ready for the application to start a scan. This * callback needs to be registered with the DSM before it can be called. +* It is important that the application returns right away after recieving this +* message. Set a flag and return. Do not process the callback in this function. */ #ifdef TWH_CMP_MSC TW_UINT16 FAR PASCAL @@ -385,17 +391,20 @@ { return TWRC_FAILURE; } + switch (_MSG) + { + case MSG_XFERREADY: + case MSG_CLOSEDSREQ: + case MSG_CLOSEDSOK: + case MSG_NULL: + gDSMessage = _MSG; + break; - if(MSG_XFERREADY == _MSG) - { - gWaitForDS = false; - gpTwainApplication->m_DSMState = 6; + default: + cerr << "Error - Unknown message in callback routine" << endl; + twrc = TWRC_FAILURE; + break; } - else - { - cerr << "Error - Unknown message in callback routine" << endl; - twrc = TWRC_FAILURE; - } return twrc; } Modified: trunk/TWAIN-Samples/Twain_App_sample01/visual_studio/TWAIN_APP_VS2005.vcproj =================================================================== --- trunk/TWAIN-Samples/Twain_App_sample01/visual_studio/TWAIN_APP_VS2005.vcproj 2008-06-10 15:57:04 UTC (rev 10) +++ trunk/TWAIN-Samples/Twain_App_sample01/visual_studio/TWAIN_APP_VS2005.vcproj 2008-09-12 17:11:20 UTC (rev 11) @@ -219,6 +219,10 @@ RelativePath="..\src\TwainApp_ui.cpp" > </File> + <File + RelativePath="..\src\VerifySignature.cpp" + > + </File> </Filter> <Filter Name="Header Files" Modified: trunk/TWAIN-Samples/Twain_App_sample01/visual_studio_mfc/TWAIN_APP_VS2005_mfc.sln =================================================================== --- trunk/TWAIN-Samples/Twain_App_sample01/visual_studio_mfc/TWAIN_APP_VS2005_mfc.sln 2008-06-10 15:57:04 UTC (rev 10) +++ trunk/TWAIN-Samples/Twain_App_sample01/visual_studio_mfc/TWAIN_APP_VS2005_mfc.sln 2008-09-12 17:11:20 UTC (rev 11) @@ -2,6 +2,8 @@ # Visual Studio 2005 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TWAIN_App_mfc", "TWAIN_APP_VS2005_mfc.vcproj", "{A41F1D7E-7F85-410C-89FF-A82545154628}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TWAIN_APP_CMD", "..\visual_studio\TWAIN_APP_VS2005.vcproj", "{431AD693-726F-41AB-AA59-B81F5D2E5847}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 @@ -18,6 +20,12 @@ {A41F1D7E-7F85-410C-89FF-A82545154628}.Release|Win32.Build.0 = Release|Win32 {A41F1D7E-7F85-410C-89FF-A82545154628}.Release|x64.ActiveCfg = Release|x64 {A41F1D7E-7F85-410C-89FF-A82545154628}.Release|x64.Build.0 = Release|x64 + {431AD693-726F-41AB-AA59-B81F5D2E5847}.Debug|Win32.ActiveCfg = Debug|Win32 + {431AD693-726F-41AB-AA59-B81F5D2E5847}.Debug|Win32.Build.0 = Debug|Win32 + {431AD693-726F-41AB-AA59-B81F5D2E5847}.Debug|x64.ActiveCfg = Debug|Win32 + {431AD693-726F-41AB-AA59-B81F5D2E5847}.Release|Win32.ActiveCfg = Release|Win32 + {431AD693-726F-41AB-AA59-B81F5D2E5847}.Release|Win32.Build.0 = Release|Win32 + {431AD693-726F-41AB-AA59-B81F5D2E5847}.Release|x64.ActiveCfg = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE Modified: trunk/TWAIN-Samples/Twain_App_sample01/visual_studio_mfc/TWAIN_APP_VS2005_mfc.vcproj =================================================================== --- trunk/TWAIN-Samples/Twain_App_sample01/visual_studio_mfc/TWAIN_APP_VS2005_mfc.vcproj 2008-06-10 15:57:04 UTC (rev 10) +++ trunk/TWAIN-Samples/Twain_App_sample01/visual_studio_mfc/TWAIN_APP_VS2005_mfc.vcproj 2008-09-12 17:11:20 UTC (rev 11) @@ -23,7 +23,7 @@ OutputDirectory="$(ConfigurationName)32" IntermediateDirectory="$(ConfigurationName)32" ConfigurationType="1" - UseOfMFC="2" + UseOfMFC="1" CharacterSet="2" > <Tool @@ -52,7 +52,7 @@ PreprocessorDefinitions="WIN32;_WINDOWS;_DEBUG" MinimalRebuild="true" BasicRuntimeChecks="3" - RuntimeLibrary="3" + RuntimeLibrary="1" TreatWChar_tAsBuiltInType="true" UsePrecompiledHeader="0" WarningLevel="3" @@ -77,6 +77,8 @@ OutputFile="$(OutDir)\$(ProjectName)32_d.exe" LinkIncremental="2" AdditionalLibraryDirectories="..\..\pub\external\lib;..\..\pub\lib" + IgnoreAllDefaultLibraries="false" + IgnoreDefaultLibraryNames="uafxcwd.lib" GenerateDebugInformation="true" SubSystem="2" TargetMachine="1" @@ -113,7 +115,7 @@ OutputDirectory="$(ConfigurationName)64" IntermediateDirectory="$(ConfigurationName)64" ConfigurationType="1" - UseOfMFC="2" + UseOfMFC="1" CharacterSet="2" > <Tool @@ -143,7 +145,7 @@ PreprocessorDefinitions="WIN32;_WINDOWS;_DEBUG;WIN64" MinimalRebuild="true" BasicRuntimeChecks="3" - RuntimeLibrary="3" + RuntimeLibrary="1" TreatWChar_tAsBuiltInType="true" UsePrecompiledHeader="0" WarningLevel="3" @@ -168,6 +170,8 @@ OutputFile="$(OutDir)\$(ProjectName)64_d.exe" LinkIncremental="2" AdditionalLibraryDirectories="..\..\pub\external\lib;..\..\pub\lib" + IgnoreAllDefaultLibraries="false" + IgnoreDefaultLibraryNames="uafxcwd.lib" GenerateDebugInformation="true" SubSystem="2" TargetMachine="17" @@ -204,7 +208,7 @@ OutputDirectory="$(ConfigurationName)32" IntermediateDirectory="$(ConfigurationName)32" ConfigurationType="1" - UseOfMFC="2" + UseOfMFC="1" CharacterSet="2" > <Tool @@ -231,11 +235,11 @@ AdditionalIncludeDirectories=".;..;..\..\pub\external\include\;..\..\Common" PreprocessorDefinitions="WIN32;_WINDOWS;NDEBUG" MinimalRebuild="false" - RuntimeLibrary="2" + RuntimeLibrary="0" TreatWChar_tAsBuiltInType="true" UsePrecompiledHeader="0" WarningLevel="3" - Detect64BitPortabilityProblems="true" + Detect64BitPortabilityProblems="false" DebugInformationFormat="3" /> <Tool @@ -256,6 +260,8 @@ OutputFile="$(OutDir)\$(ProjectName)32.exe" LinkIncremental="1" AdditionalLibraryDirectories="..\..\pub\external\lib;..\..\pub\lib" + IgnoreAllDefaultLibraries="false" + IgnoreDefaultLibraryNames="uafxcw.lib" GenerateDebugInformation="true" SubSystem="2" OptimizeReferences="2" @@ -294,7 +300,7 @@ OutputDirectory="$(ConfigurationName)64" IntermediateDirectory="$(ConfigurationName)64" ConfigurationType="1" - UseOfMFC="2" + UseOfMFC="1" CharacterSet="2" > <Tool @@ -322,7 +328,7 @@ AdditionalIncludeDirectories=".;..;..\..\pub\external\include\;..\..\Common" PreprocessorDefinitions="WIN32;_WINDOWS;NDEBUG;WIN64" MinimalRebuild="false" - RuntimeLibrary="2" + RuntimeLibrary="0" TreatWChar_tAsBuiltInType="true" UsePrecompiledHeader="0" WarningLevel="3" @@ -347,6 +353,8 @@ OutputFile="$(OutDir)\$(ProjectName)64.exe" LinkIncremental="1" AdditionalLibraryDirectories="..\..\pub\external\lib;..\..\pub\lib" + IgnoreAllDefaultLibraries="false" + IgnoreDefaultLibraryNames="uafxcw.lib" GenerateDebugInformation="true" SubSystem="2" OptimizeReferences="2" @@ -525,6 +533,10 @@ RelativePath="..\src\TwainApp_ui.cpp" > </File> + <File + RelativePath="..\src\VerifySignature.cpp" + > + </File> </Filter> <Filter Name="Header Files" Modified: trunk/TWAIN-Samples/Twain_App_sample01/visual_studio_mfc/mfc.rc =================================================================== --- trunk/TWAIN-Samples/Twain_App_sample01/visual_studio_mfc/mfc.rc 2008-06-10 15:57:04 UTC (rev 10) +++ trunk/TWAIN-Samples/Twain_App_sample01/visual_studio_mfc/mfc.rc 2008-09-12 17:11:20 UTC (rev 11) @@ -126,8 +126,8 @@ // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,0,0,1 - PRODUCTVERSION 1,0,0,1 + FILEVERSION 1,0,0,2 + PRODUCTVERSION 1,0,0,2 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -144,12 +144,12 @@ BEGIN VALUE "CompanyName", "TWAIN Working Group" VALUE "FileDescription", "Sample TWAIN Application" - VALUE "FileVersion", "1.0.0.1" + VALUE "FileVersion", "1.0.0.2" VALUE "InternalName", "SampleApp.exe" VALUE "LegalCopyright", "(c) TWAIN Working Group. All rights reserved." VALUE "OriginalFilename", "SampleApp.exe" VALUE "ProductName", "SampleApp" - VALUE "ProductVersion", "1.0.0.1" + VALUE "ProductVersion", "1.0.0.2" END END BLOCK "VarFileInfo" Modified: trunk/TWAIN-Samples/Twain_App_sample01/visual_studio_mfc/mfcDlgConfigure.cpp =================================================================== --- trunk/TWAIN-Samples/Twain_App_sample01/visual_studio_mfc/mfcDlgConfigure.cpp 2008-06-10 15:57:04 UTC (rev 10) +++ trunk/TWAIN-Samples/Twain_App_sample01/visual_studio_mfc/mfcDlgConfigure.cpp 2008-09-12 17:11:20 UTC (rev 11) @@ -56,12 +56,15 @@ */ TwainApp *g_pTWAINApp = NULL; extern bool gUSE_CALLBACKS; // defined in TwainApp.cpp +TW_UINT16 gDSMessage; /**< global statis to indicate if we are waiting for DS */ ////////////////////////////////////////////////////////////////////////////// /** * Callback funtion for DS. This is a callback function that will be called by * the source when it is ready for the application to start a scan. This * callback needs to be registered with the DSM before it can be called. +* It is important that the application returns right away after recieving this +* message. Set a flag and return. Do not process the callback in this function. */ TW_UINT16 FAR PASCAL DSMCallback(pTW_IDENTITY _pOrigin, pTW_IDENTITY _pDest, @@ -79,27 +82,14 @@ { return TWRC_FAILURE; } + switch (_MSG) { case MSG_XFERREADY: - g_pTWAINApp->m_DSMState = 6; - // move to state 6 as a result of the data source. We can start a scan now. - g_pTWAINApp->startScan(); - // Scan is done, disable the ds, thus moving us back to state 4 where we - // can negotiate caps again. - g_pTWAINApp->disableDS(); - break; - case MSG_CLOSEDSREQ: - g_pTWAINApp->disableDS(); - break; - case MSG_CLOSEDSOK: - g_pTWAINApp->disableDS(); - break; - case MSG_NULL: - // no message returned from the source + gDSMessage = _MSG; break; default: @@ -663,6 +653,8 @@ void Cmfc32DlgConfigure::OnBnClickedScan() { + gDSMessage = 0; + // -Enable the data source. This puts us in state 5 which means that we // have to wait for the data source to tell us to move to state 6 and // start the transfer. Once in state 5, no more set ops can be done on the @@ -674,76 +666,65 @@ return; } - // If we are using callbacks, there is nothing to do here except sleep - // and wait for our callback from the DS. If we are not using them, - // then we have to poll the DSM. - if(gUSE_CALLBACKS) + // now we have to wait until we hear something back from the DS. + while(!gDSMessage) { -//#ifdef TWH_CMP_MSC -// Sleep(1000); -//#else -// sleep(1); -//#endif //TWH_CMP_MSC - // At this point the source has sent us a callback saying that it is ready to - // transfer the image. + // If we are using callbacks, there is nothing to do here except sleep + // and wait for our callback from the DS. If we are not using them, + // then we have to poll the DSM. + if(!gUSE_CALLBACKS) + { + TW_EVENT twEvent = {0}; - // move to state 6 as a result of the data source. We can start a scan now. -// g_pTWAINApp->startScan(); + twEvent.TWMessage = MSG_NULL; + _DSM_Entry( g_pTWAINApp->getAppIdentity(), + g_pTWAINApp->getDataSource(), + DG_CONTROL, + DAT_EVENT, + MSG_PROCESSEVENT, + (TW_MEMREF)&twEvent); - // Scan is done, disable the ds, thus moving us back to state 4 where we - // can negotiate caps again. -// g_pTWAINApp->disableDS(); - //OnOK(); - } + // check for message from Source + switch (twEvent.TWMessage) + { + case MSG_XFERREADY: + case MSG_CLOSEDSREQ: + case MSG_CLOSEDSOK: + case MSG_NULL: + gDSMessage = twEvent.TWMessage; + break; -} + default: + TRACE("Error - Unknown message in MSG_PROCESSEVENT loop"); + break; + } + } -BOOL Cmfc32DlgConfigure::PreTranslateMessage(MSG* pMsg) -{ - if(5 <= g_pTWAINApp->m_DSMState) - { - TW_INT16 rc; - TW_EVENT twEvent = {0}; +#ifdef TWH_CMP_MSC + Sleep(1000); +#else + sleep(1); +#endif //TWH_CMP_MSC + } - twEvent.pEvent = (TW_MEMREF)pMsg; - twEvent.TWMessage = MSG_NULL; + // At this point the source has sent us a callback saying that it is ready to + // transfer the image. - rc = _DSM_Entry( g_pTWAINApp->getAppIdentity(), - g_pTWAINApp->getDataSource(), - DG_CONTROL, - DAT_EVENT, - MSG_PROCESSEVENT, - (TW_MEMREF)&twEvent); - - if( TWRC_DSEVENT == rc ) - { - switch (twEvent.TWMessage) - { - case MSG_XFERREADY: - - - g_pTWAINApp->m_DSMState = 6; - g_pTWAINApp->startScan(); - UpdateImageInfo(); - //UpdateExtImageInfo(); - g_pTWAINApp->disableDS(); - break; - case MSG_CLOSEDSREQ: - g_pTWAINApp->disableDS(); - break; - case MSG_CLOSEDSOK: - g_pTWAINApp->disableDS(); - break; - case MSG_NULL: - // no message returned from the source - break; - } - return FALSE; - } + if(gDSMessage == MSG_XFERREADY) + { + // move to state 6 as a result of the data source. We can start a scan now. + g_pTWAINApp->m_DSMState = 6; + g_pTWAINApp->updateIMAGEINFO(); + UpdateImageInfo(); + g_pTWAINApp->startScan(); } - return CDialog::PreTranslateMessage(pMsg); + // Scan is done, disable the ds, thus moving us back to state 4 where we + // can negotiate caps again. + g_pTWAINApp->disableDS(); + + return; } void Cmfc32DlgConfigure::OnBnClickedCancel() Modified: trunk/TWAIN-Samples/Twain_App_sample01/visual_studio_mfc/mfcDlgConfigure.h =================================================================== --- trunk/TWAIN-Samples/Twain_App_sample01/visual_studio_mfc/mfcDlgConfigure.h 2008-06-10 15:57:04 UTC (rev 10) +++ trunk/TWAIN-Samples/Twain_App_sample01/visual_studio_mfc/mfcDlgConfigure.h 2008-09-12 17:11:20 UTC (rev 11) @@ -80,7 +80,6 @@ afx_msg void OnDestroy(); afx_msg void OnLbnSelchangeCAPS(); afx_msg void OnBnClickedScan(); - virtual BOOL PreTranslateMessage(MSG* pMsg); afx_msg void OnBnClickedCancel(); afx_msg void OnLbnDblclkCaps(); void UpdateImageInfo(); Modified: trunk/TWAIN-Samples/Twain_App_sample01/visual_studio_mfc/mfcDlgMain.h =================================================================== --- trunk/TWAIN-Samples/Twain_App_sample01/visual_studio_mfc/mfcDlgMain.h 2008-06-10 15:57:04 UTC (rev 10) +++ trunk/TWAIN-Samples/Twain_App_sample01/visual_studio_mfc/mfcDlgMain.h 2008-09-12 17:11:20 UTC (rev 11) @@ -84,7 +84,6 @@ afx_msg void OnLbnSelchangeDS(); afx_msg void OnBnClickedConnectDs(); afx_msg void OnLbnDblclkDs(); -// virtual BOOL PreTranslateMessage(MSG* pMsg); CString m_sStc_DS; CListBox m_lst_DS; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jim...@us...> - 2008-06-10 15:57:18
|
Revision: 10 http://twain-samples.svn.sourceforge.net/twain-samples/?rev=10&view=rev Author: jim0watters Date: 2008-06-10 08:57:04 -0700 (Tue, 10 Jun 2008) Log Message: ----------- Update to newest twain.h Display all DS, not just Version 2 Modified Paths: -------------- trunk/TWAIN-Samples/Twain_App_sample01/ChangeLog.txt trunk/TWAIN-Samples/Twain_App_sample01/src/TwainApp.cpp trunk/TWAIN-Samples/Twain_DS_sample01/visual_studio/TWAINDS_VS2005.sln trunk/TWAIN-Samples/Twain_DS_sample01/visual_studio/TWAINDS_VS2005.vcproj trunk/TWAIN-Samples/pub/external/include/twain.h Modified: trunk/TWAIN-Samples/Twain_App_sample01/ChangeLog.txt =================================================================== --- trunk/TWAIN-Samples/Twain_App_sample01/ChangeLog.txt 2008-02-19 19:21:39 UTC (rev 9) +++ trunk/TWAIN-Samples/Twain_App_sample01/ChangeLog.txt 2008-06-10 15:57:04 UTC (rev 10) @@ -1,2 +1,8 @@ +2008-06-10 JFL Peripheral Solutions ji...@jf... + + * TwainApp.cpp List all DS, not just version 2. + * Update to newest twain.h file + + December 10, 2007 JFL Peripheral Solutions ji...@jf... * Initial Release. Modified: trunk/TWAIN-Samples/Twain_App_sample01/src/TwainApp.cpp =================================================================== --- trunk/TWAIN-Samples/Twain_App_sample01/src/TwainApp.cpp 2008-02-19 19:21:39 UTC (rev 9) +++ trunk/TWAIN-Samples/Twain_App_sample01/src/TwainApp.cpp 2008-06-10 15:57:04 UTC (rev 10) @@ -416,7 +416,7 @@ break; default: - printError(0, "Failed to open data source."); + printError(m_pDataSource, "Failed to open data source."); m_pDataSource = 0; break; } @@ -492,10 +492,7 @@ switch (twrc) { case TWRC_SUCCESS: - if( Source.SupportedGroups & DF_DS2 ) - { - m_DataSources.push_back(Source); - } + m_DataSources.push_back(Source); break; case TWRC_FAILURE: @@ -523,10 +520,7 @@ switch (twrc) { case TWRC_SUCCESS: - if( Source.SupportedGroups & DF_DS2 ) - { - m_DataSources.push_back(Source); - } + m_DataSources.push_back(Source); break; case TWRC_FAILURE: Modified: trunk/TWAIN-Samples/Twain_DS_sample01/visual_studio/TWAINDS_VS2005.sln =================================================================== --- trunk/TWAIN-Samples/Twain_DS_sample01/visual_studio/TWAINDS_VS2005.sln 2008-02-19 19:21:39 UTC (rev 9) +++ trunk/TWAIN-Samples/Twain_DS_sample01/visual_studio/TWAINDS_VS2005.sln 2008-06-10 15:57:04 UTC (rev 10) @@ -2,12 +2,6 @@ # Visual Studio 2005 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TWAINDS_Sample", "TWAINDS_VS2005.vcproj", "{1E73CADF-90D9-45E9-97E2-CD25E3532DB4}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TWAIN_App_mfc", "..\..\Twain_App_sample01\visual_studio_mfc\TWAIN_APP_VS2005_mfc.vcproj", "{A41F1D7E-7F85-410C-89FF-A82545154628}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TWAIN_APP_CMD", "..\..\Twain_App_sample01\visual_studio\TWAIN_APP_VS2005.vcproj", "{431AD693-726F-41AB-AA59-B81F5D2E5847}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TWAINDSM", "..\..\TWAINDSM\visual_studio\TWAIN_DSM_VS2005.vcproj", "{5F73EBC7-6A0E-4CBF-A37C-CB167E4CC379}" -EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 @@ -24,28 +18,6 @@ {1E73CADF-90D9-45E9-97E2-CD25E3532DB4}.Release|Win32.Build.0 = Release|Win32 {1E73CADF-90D9-45E9-97E2-CD25E3532DB4}.Release|x64.ActiveCfg = Release|x64 {1E73CADF-90D9-45E9-97E2-CD25E3532DB4}.Release|x64.Build.0 = Release|x64 - {A41F1D7E-7F85-410C-89FF-A82545154628}.Debug|Win32.ActiveCfg = Debug|Win32 - {A41F1D7E-7F85-410C-89FF-A82545154628}.Debug|Win32.Build.0 = Debug|Win32 - {A41F1D7E-7F85-410C-89FF-A82545154628}.Debug|x64.ActiveCfg = Debug|x64 - {A41F1D7E-7F85-410C-89FF-A82545154628}.Debug|x64.Build.0 = Debug|x64 - {A41F1D7E-7F85-410C-89FF-A82545154628}.Release|Win32.ActiveCfg = Release|Win32 - {A41F1D7E-7F85-410C-89FF-A82545154628}.Release|Win32.Build.0 = Release|Win32 - {A41F1D7E-7F85-410C-89FF-A82545154628}.Release|x64.ActiveCfg = Release|x64 - {A41F1D7E-7F85-410C-89FF-A82545154628}.Release|x64.Build.0 = Release|x64 - {431AD693-726F-41AB-AA59-B81F5D2E5847}.Debug|Win32.ActiveCfg = Debug|Win32 - {431AD693-726F-41AB-AA59-B81F5D2E5847}.Debug|Win32.Build.0 = Debug|Win32 - {431AD693-726F-41AB-AA59-B81F5D2E5847}.Debug|x64.ActiveCfg = Debug|Win32 - {431AD693-726F-41AB-AA59-B81F5D2E5847}.Release|Win32.ActiveCfg = Release|Win32 - {431AD693-726F-41AB-AA59-B81F5D2E5847}.Release|Win32.Build.0 = Release|Win32 - {431AD693-726F-41AB-AA59-B81F5D2E5847}.Release|x64.ActiveCfg = Release|Win32 - {5F73EBC7-6A0E-4CBF-A37C-CB167E4CC379}.Debug|Win32.ActiveCfg = Debug|Win32 - {5F73EBC7-6A0E-4CBF-A37C-CB167E4CC379}.Debug|Win32.Build.0 = Debug|Win32 - {5F73EBC7-6A0E-4CBF-A37C-CB167E4CC379}.Debug|x64.ActiveCfg = Debug|x64 - {5F73EBC7-6A0E-4CBF-A37C-CB167E4CC379}.Debug|x64.Build.0 = Debug|x64 - {5F73EBC7-6A0E-4CBF-A37C-CB167E4CC379}.Release|Win32.ActiveCfg = Release|Win32 - {5F73EBC7-6A0E-4CBF-A37C-CB167E4CC379}.Release|Win32.Build.0 = Release|Win32 - {5F73EBC7-6A0E-4CBF-A37C-CB167E4CC379}.Release|x64.ActiveCfg = Release|x64 - {5F73EBC7-6A0E-4CBF-A37C-CB167E4CC379}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE Modified: trunk/TWAIN-Samples/Twain_DS_sample01/visual_studio/TWAINDS_VS2005.vcproj =================================================================== --- trunk/TWAIN-Samples/Twain_DS_sample01/visual_studio/TWAINDS_VS2005.vcproj 2008-02-19 19:21:39 UTC (rev 9) +++ trunk/TWAIN-Samples/Twain_DS_sample01/visual_studio/TWAINDS_VS2005.vcproj 2008-06-10 15:57:04 UTC (rev 10) @@ -29,7 +29,7 @@ <Tool Name="VCPreBuildEventTool" Description="create pub folders if do not exist" - CommandLine="if NOT EXIST $(ProjectDir)\..\pub\bin mkdir $(ProjectDir)\..\pub\bin
if NOT EXIST c:\windows\twain_32\sample2 mkdir c:\windows\twain_32\sample2
" + CommandLine="if NOT EXIST "$(ProjectDir)\..\pub\bin" mkdir "$(ProjectDir)\..\pub\bin"
if NOT EXIST c:\windows\twain_32\sample2 mkdir c:\windows\twain_32\sample2
" /> <Tool Name="VCCustomBuildTool" @@ -121,7 +121,7 @@ <Tool Name="VCPreBuildEventTool" Description="create pub folders if do not exist" - CommandLine="if NOT EXIST $(ProjectDir)\..\pub\bin mkdir $(ProjectDir)\..\pub\bin
if NOT EXIST c:\windows\twain_64\sample2 mkdir c:\windows\twain_64\sample2
" + CommandLine="if NOT EXIST "$(ProjectDir)\..\pub\bin" mkdir "$(ProjectDir)\..\pub\bin"
if NOT EXIST c:\windows\twain_64\sample2 mkdir c:\windows\twain_64\sample2
" /> <Tool Name="VCCustomBuildTool" @@ -210,7 +210,7 @@ <Tool Name="VCPreBuildEventTool" Description="create pub folders if do not exist" - CommandLine="if NOT EXIST $(ProjectDir)\..\pub\bin mkdir $(ProjectDir)\..\pub\bin" + CommandLine="if NOT EXIST "$(ProjectDir)\..\pub\bin" mkdir "$(ProjectDir)\..\pub\bin"" /> <Tool Name="VCCustomBuildTool" @@ -293,7 +293,7 @@ <Tool Name="VCPreBuildEventTool" Description="create pub folders if do not exist" - CommandLine="if NOT EXIST $(ProjectDir)\..\pub\bin mkdir $(ProjectDir)\..\pub\bin" + CommandLine="if NOT EXIST "$(ProjectDir)\..\pub\bin" mkdir "$(ProjectDir)\..\pub\bin"" /> <Tool Name="VCCustomBuildTool" Modified: trunk/TWAIN-Samples/pub/external/include/twain.h =================================================================== --- trunk/TWAIN-Samples/pub/external/include/twain.h 2008-02-19 19:21:39 UTC (rev 9) +++ trunk/TWAIN-Samples/pub/external/include/twain.h 2008-06-10 15:57:04 UTC (rev 10) @@ -1,5 +1,10 @@ /* ======================================================================== *\ + Copyright (C) 2007 TWAIN Working Group: Adobe Systems Incorporated, + AnyDoc Software Inc., Eastman Kodak Company, Fujitsu Computer Products + of America, JFL Peripheral Solutions Inc., Ricoh Corporation, and + Xerox Corporation. All rights reserved. + Copyright (C) 1991, 1992 TWAIN Working Group: Aldus, Caere, Eastman-Kodak, Hewlett-Packard and Logitech Corporations. All rights reserved. @@ -71,6 +76,9 @@ for 1.91 Specification MLM version 2.0 Sept 2007 Added new types and definitions required for 2.0 Specification FHH + version 2.0 Mar 2008 Depreciated ICAP_PIXELTYPEs TWPT_SRGB64, TWPT_BGR, + TWPT_CIELAB, TWPT_CIELUV, and TWPT_YCBCR JMW + version 2.0 Mar 2008 Added missing new 2.0 CAP_ definitions JMW \* ======================================================================== */ #ifndef TWAIN @@ -126,7 +134,7 @@ #if defined(TWH_CMP_MSC) | defined(TWH_CMP_BORLAND) typedef HANDLE TW_HANDLE; typedef LPVOID TW_MEMREF; - typedef INT_PTR TW_INTPTR; + typedef UINT_PTR TW_UINTPTR; /* MacOS/X... */ #elif defined(TWH_CMP_XCODE) @@ -137,10 +145,10 @@ #ifdef TWH_32BIT //32 bit GNU - typedef unsigned long TW_INTPTR; + typedef unsigned long TW_UINTPTR; #else //64 bit GNU - typedef unsigned long long TW_INTPTR; + typedef unsigned long long TW_UINTPTR; #endif /* Everything else... */ @@ -153,10 +161,10 @@ #ifdef TWH_32BIT //32 bit GNU - typedef unsigned long TW_INTPTR; + typedef unsigned long TW_UINTPTR; #else //64 bit GNU - typedef unsigned long long TW_INTPTR; + typedef unsigned long long TW_UINTPTR; #endif #endif @@ -348,7 +356,7 @@ /* DG_CONTROL / DAT_FILESYSTEM / MSG_DELETE field */ int Recursive; /* recursively delete all sub-directories */ /* DG_CONTROL / DAT_FILESYSTEM / MSG_GETINFO fields */ - TW_INT32 FileType; /* One of the TWFT_xxxx values */ + TW_INT32 FileType; /* One of the TWFY_xxxx values */ TW_UINT32 Size; /* Size of current FileType */ TW_STR32 CreateTimeDate; /* creation date of the file */ TW_STR32 ModifiedTimeDate; /* last date the file was modified */ @@ -685,11 +693,7 @@ #define TWPT_CIEXYZ 8 #define TWPT_LAB 9 #define TWPT_SRGB 10 /* 1.91 */ -#define TWPT_SRGB64 11 /* 1.91 */ -#define TWPT_BGR 12 /* 1.91 */ -#define TWPT_CIELAB 13 /* 1.91 */ -#define TWPT_CIELUV 14 /* 1.91 */ -#define TWPT_YCBCR 15 /* 1.91 */ +#define TWPT_SCRGB 11 /* 1.91 */ #define TWPT_INFRARED 16 /* 2.0 */ /* ICAP_SUPPORTEDSIZES values (SS_ means Supported Sizes) */ @@ -895,18 +899,7 @@ #define TWDE_POWERSAVE 15 #define TWDE_POWERSAVENOTIFY 16 -/* File Types for TW_FILESYSTEM */ -#define TWFT_CAMERA 0 -#define TWFT_CAMERATOP 1 -#define TWFT_CAMERABOTTOM 2 -#define TWFT_CAMERAPREVIEW 3 -#define TWFT_DOMAIN 4 -#define TWFT_HOST 5 -#define TWFT_DIRECTORY 6 -#define TWFT_IMAGE 7 -#define TWFT_UNKNOWN 8 - /* CAP_FEEDERALIGNMENT values (FA_ means feeder alignment) */ #define TWFA_NONE 0 #define TWFA_LEFT 1 @@ -917,7 +910,7 @@ #define TWFO_FIRSTPAGEFIRST 0 #define TWFO_LASTPAGEFIRST 1 -/* CAP_FEEDERPOCKETS */ +/* CAP_FEEDERPOCKET */ #define TWFP_POCKETERROR 0 #define TWFP_POCKET1 1 #define TWFP_POCKET2 2 @@ -936,12 +929,8 @@ #define TWFP_POCKET15 15 #define TWFP_POCKET16 16 -/* CAP_FEEDERTYPE */ -#define TWFP_GENERAL 0 -#define TWFP_PICTURE 1 - -/* CAP_ICCPROFILE */ -#define TWIC_NOINFILE 0 +/* ICAP_ICCPROFILE */ +#define TWIC_NONE 0 #define TWIC_LINK 1 #define TWIC_EMBED 2 @@ -1014,7 +1003,7 @@ #define TWOV_LEFTRIGHT 3 #define TWOV_ALL 4 -/* TW_FILESYSTEM.FileType values (FT_ means file type) */ +/* TW_FILESYSTEM.FileType values (FY_ means file type) */ #define TWFY_CAMERA 0 #define TWFY_CAMERATOP 1 #define TWFY_CAMERABOTTOM 2 @@ -1649,6 +1638,12 @@ #define CAP_BATTERYPERCENTAGE 0x1033 /* Added 1.8 */ #define CAP_CAMERASIDE 0x1034 /* Added 1.91 */ #define CAP_SEGMENTED 0x1035 /* Added 1.91 */ +#define CAP_CAMERAENABLED 0x1036 /* Added 2.0 */ +#define CAP_CAMERAORDER 0x1037 /* Added 2.0 */ +#define CAP_MICRENABLED 0x1038 /* Added 2.0 */ +#define CAP_FEEDERPREP 0x1039 /* Added 2.0 */ +#define CAP_FEEDERPOCKET 0x103a /* Added 2.0 */ + /* image data sources MAY support these caps */ #define ICAP_AUTOBRIGHT 0x1100 @@ -1720,7 +1715,11 @@ #define ICAP_AUTOMATICDESKEW 0x1151 /* Added 1.8 */ #define ICAP_AUTOMATICROTATE 0x1152 /* Added 1.8 */ #define ICAP_JPEGQUALITY 0x1153 /* Added 1.9 */ +#define ICAP_FEEDERTYPE 0x1154 /* Added 1.91 */ +#define ICAP_ICCPROFILE 0x1155 /* Added 1.91 */ +#define ICAP_AUTOSIZE 0x1156 /* Added 2.0 */ + /* image data sources MAY support these audio caps */ #define ACAP_AUDIOFILEFORMAT 0x1201 /* Added 1.8 */ #define ACAP_XFERMECH 0x1202 /* Added 1.8 */ @@ -1915,6 +1914,12 @@ #define TWFS_FILESYSTEM 0 #define TWFS_RECURSIVEDELETE 1 +#define TWPT_SRGB64 11 /* 1.91 */ +#define TWPT_BGR 12 /* 1.91 */ +#define TWPT_CIELAB 13 /* 1.91 */ +#define TWPT_CIELUV 14 /* 1.91 */ +#define TWPT_YCBCR 15 /* 1.91 */ + /* DAT_SETUPFILEXFER2. Sets up DS to application data transfer via a file. */ /* Added 1.9 */ typedef struct { @@ -2148,9 +2153,9 @@ /* Restore the previous packing alignment: this occurs after all structures are defined */ #ifdef TWH_CMP_MSC #pragma pack (pop, before_twain) -#elif defined(TWH_CMP_GNUC) +#elif defined(TWH_CMP_GNU) #pragma pack (pop, before_twain) -#elif defined(TWH_CMP_BORLANDC) +#elif defined(TWH_CMP_BORLAND) #pragma option \x96a. #elif defined(TWH_CMP_XCODE) #if PRAGMA_STRUCT_ALIGN This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jim...@us...> - 2008-02-19 19:21:35
|
Revision: 9 http://twain-samples.svn.sourceforge.net/twain-samples/?rev=9&view=rev Author: jim0watters Date: 2008-02-19 11:21:39 -0800 (Tue, 19 Feb 2008) Log Message: ----------- Fix issue setting current Cap using TWON_ONEVALUE. Modified Paths: -------------- trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerFix32.cpp trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerFrame.cpp trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerInt.cpp Modified: trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerFix32.cpp =================================================================== --- trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerFix32.cpp 2008-02-16 02:30:38 UTC (rev 8) +++ trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerFix32.cpp 2008-02-19 19:21:39 UTC (rev 9) @@ -159,22 +159,40 @@ { pTW_ONEVALUE_FIX32 pCap = (pTW_ONEVALUE_FIX32)_DSM_LockMemory(_pCap->hContainer); - int nVal = -1; - if(isValidType(pCap->ItemType)) { float flVal = FIX32ToFloat(pCap->Item); - - /*if(TWON_RANGE == m_unGetType) + switch(m_unGetType) { - } - else */ - if(TWON_ENUMERATION == m_unGetType) - { - if((nVal = getIndexForValue(flVal)) >= 0) + case TWON_ONEVALUE: { - m_nCurrent = nVal; + m_listFloats.clear(); + m_listFloats.push_back(flVal); + m_nCurrent = 0; } + break; + case TWON_ENUMERATION: + { + int nVal = -1; + if((nVal = getIndexForValue(flVal)) >= 0) + { + m_nCurrent = nVal; + } + else + { + twrc = TWRC_CHECKSTATUS; + Condition = TWCC_BADVALUE; + } + } + break; + //case TWON_ARRAY: + //break; + //case TWON_RANGE: + //break; + default: + twrc = TWRC_FAILURE; + Condition = TWCC_CAPBADOPERATION; + break; } } Modified: trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerFrame.cpp =================================================================== --- trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerFrame.cpp 2008-02-16 02:30:38 UTC (rev 8) +++ trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerFrame.cpp 2008-02-19 19:21:39 UTC (rev 9) @@ -390,6 +390,8 @@ TW_INT16 CTWAINContainerFrame::Set(pTW_CAPABILITY _pCap, TW_INT16 &Condition) { + // TW_FRAME can override the current and available list regardless if they + // are available in the default list. TW_INT16 twrc = TWRC_SUCCESS; Condition = TWCC_SUCCESS; @@ -399,13 +401,44 @@ if(isValidType(pCap->ItemType)) { - /// @todo check to see if frame is in range InternalFrame frame(pCap->Item, m_Unit, m_Xres, m_Yres); - m_listFrames.clear(); - m_listFrames.push_back(frame); - - m_nCurrent = 0; + switch(m_unGetType) + { + case TWON_ONEVALUE: + case TWON_ENUMERATION: + { + /// @todo check to see if frame is in range + m_listFrames.clear(); + m_listFrames.push_back(frame); + m_nCurrent = 0; + } + break; + /* + case TWON_ENUMERATION: + { + int nVal = -1; + if((nVal = getIndexForValue(frame)) >= 0) + { + m_nCurrent = nVal; + } + else + { + twrc = TWRC_CHECKSTATUS; + Condition = TWCC_BADVALUE; + } + } + break; + */ + //case TWON_ARRAY: + //break; + //case TWON_RANGE: + //break; + default: + twrc = TWRC_FAILURE; + Condition = TWCC_CAPBADOPERATION; + break; + } } _DSM_UnlockMemory((TW_MEMREF)pCap); Modified: trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerInt.cpp =================================================================== --- trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerInt.cpp 2008-02-16 02:30:38 UTC (rev 8) +++ trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerInt.cpp 2008-02-19 19:21:39 UTC (rev 9) @@ -228,15 +228,47 @@ if(TWON_ONEVALUE == _pCap->ConType) { pTW_ONEVALUE pCap = (pTW_ONEVALUE)_DSM_LockMemory(_pCap->hContainer); + if(isValidType(pCap->ItemType)) + { + switch(m_unGetType) + { + case TWON_ONEVALUE: + { + m_listInts.clear(); + m_listInts.push_back(getValue(pCap)); + m_nCurrent = 0; + } + break; + case TWON_ENUMERATION: + { + int nVal = -1; - int nVal = -1; - - if(isValidType(pCap->ItemType) && - ((nVal = getIndexForValue(getValue(pCap))) >= 0)) + if( (nVal = getIndexForValue(getValue(pCap))) >= 0 ) + { + m_nCurrent = nVal; + } + else + { + twrc = TWRC_CHECKSTATUS; + Condition = TWCC_BADVALUE; + } + } + break; + //case TWON_ARRAY: + //break; + //case TWON_RANGE: + //break; + default: + twrc = TWRC_FAILURE; + Condition = TWCC_CAPBADOPERATION; + break; + } + } + else // NOT isValidType(pCap->ItemType)) { - m_nCurrent = nVal; + twrc = TWRC_FAILURE; + Condition = TWCC_CAPBADOPERATION; } - _DSM_UnlockMemory((TW_MEMREF)pCap); } else if(TWON_ENUMERATION == _pCap->ConType) @@ -273,6 +305,11 @@ } } } + else // NOT isValidType(pCap->ItemType)) + { + twrc = TWRC_FAILURE; + Condition = TWCC_CAPBADOPERATION; + } _DSM_UnlockMemory((TW_MEMREF)pCap); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jim...@us...> - 2008-02-16 02:30:36
|
Revision: 8 http://twain-samples.svn.sourceforge.net/twain-samples/?rev=8&view=rev Author: jim0watters Date: 2008-02-15 18:30:38 -0800 (Fri, 15 Feb 2008) Log Message: ----------- Fix state transition error, reported by Mark. DS was not being updated to proper state when the App is using callback to get image after receiving XferReady. Modified Paths: -------------- trunk/TWAIN-Samples/Twain_DS_sample01/ChangeLog.txt trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_Base.cpp trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_FreeImage.cpp Modified: trunk/TWAIN-Samples/Twain_DS_sample01/ChangeLog.txt =================================================================== --- trunk/TWAIN-Samples/Twain_DS_sample01/ChangeLog.txt 2008-02-16 01:38:48 UTC (rev 7) +++ trunk/TWAIN-Samples/Twain_DS_sample01/ChangeLog.txt 2008-02-16 02:30:38 UTC (rev 8) @@ -1,2 +1,8 @@ December 10, 2007 JFL Peripheral Solutions ji...@jf... * Initial Release. + +February 15, 2008 JFL Peripheral Solutions ji...@jf... + * Fix state transition error, reported by Mark. + DS was not being updated to proper state when the App is using callback to get image after receiving XferReady. + CTWAINDS_Base.cpp + CTWAINDS_FreeeImage.cpp Modified: trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_Base.cpp =================================================================== --- trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_Base.cpp 2008-02-16 01:38:48 UTC (rev 7) +++ trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_Base.cpp 2008-02-16 02:30:38 UTC (rev 8) @@ -683,6 +683,8 @@ /// Document only updates with new sheet of paper. m_DocumentNumber++; m_PageNumber++; + m_CurrentState = dsState_XferReady; + getImageInfo(&m_ImageInfo); // Tell the DSM that we are ready to send images if(TWRC_SUCCESS==_DSM_Entry(getIdentity(), @@ -693,7 +695,6 @@ 0)) { bRC = true; - m_CurrentState = dsState_XferReady; } return bRC; } Modified: trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_FreeImage.cpp =================================================================== --- trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_FreeImage.cpp 2008-02-16 01:38:48 UTC (rev 7) +++ trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_FreeImage.cpp 2008-02-16 02:30:38 UTC (rev 8) @@ -607,8 +607,6 @@ setConditionCode(TWCC_SEQERROR); return TWRC_FAILURE; } - - getImageInfo(&m_ImageInfo); } else { @@ -823,7 +821,8 @@ { /// @todo Unknow paper size // for unknow paper size need to use reallocate and keep transfering and adding to image data. - ; + setConditionCode(TWCC_CAPUNSUPPORTED); + return TWRC_FAILURE; } if(twrc == TWRC_FAILURE) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |