Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

444 lines
16 KiB

  1. /*++
  2. Copyright (c) 2000 Microsoft Corporation
  3. Module Name:
  4. ToStr.cpp
  5. Abstract:
  6. Author:
  7. Hakki T. Bostanci (hakkib) 06-Apr-2000
  8. Revision History:
  9. --*/
  10. #include "StdAfx.h"
  11. #include "ToStr.h"
  12. //////////////////////////////////////////////////////////////////////////
  13. //
  14. // bugbug: remove this when defined in wia.h
  15. //
  16. #define StiDeviceTypeStreamingVideo 3
  17. //////////////////////////////////////////////////////////////////////////
  18. //
  19. //
  20. //
  21. CAutoStr IntToStr(int Value)
  22. {
  23. CAutoStr szValue(34); // 34 = max for _itot
  24. _itot(Value, szValue, 10);
  25. return szValue;
  26. }
  27. //////////////////////////////////////////////////////////////////////////
  28. //
  29. //
  30. //
  31. CAutoStr Int64ToStr(__int64 Value)
  32. {
  33. CAutoStr szValue(64); //bugbug
  34. _stprintf(szValue, _T("%i64d"), Value);
  35. return szValue;
  36. }
  37. //////////////////////////////////////////////////////////////////////////
  38. //
  39. //
  40. //
  41. CAutoStr FloatToStr(float Value)
  42. {
  43. CAutoStr szValue(64); //bugbug
  44. _stprintf(szValue, _T("%f"), Value);
  45. return szValue;
  46. }
  47. //////////////////////////////////////////////////////////////////////////
  48. //
  49. //
  50. //
  51. CAutoStr DoubleToStr(double Value)
  52. {
  53. CAutoStr szValue(34); //bugbug
  54. _stprintf(szValue, _T("%lf"), Value);
  55. return szValue;
  56. }
  57. //////////////////////////////////////////////////////////////////////////
  58. //
  59. //
  60. //
  61. CAutoStr SzToStr(PCSTR Value)
  62. {
  63. CAutoStr szValue(strlen(Value) + 1);
  64. _stprintf(szValue, _T("%hs"), Value);
  65. return szValue;
  66. }
  67. //////////////////////////////////////////////////////////////////////////
  68. //
  69. //
  70. //
  71. CAutoStr WSzToStr(PCWSTR Value)
  72. {
  73. CAutoStr szValue(wcslen(Value) + 1);
  74. _stprintf(szValue, _T("%ws"), Value);
  75. return szValue;
  76. }
  77. //////////////////////////////////////////////////////////////////////////
  78. //
  79. //
  80. //
  81. CAutoStr ToStr(const void *Value, VARTYPE vt)
  82. {
  83. CAutoStr szValue(1024);
  84. switch (vt)
  85. {
  86. case VT_EMPTY: return _T("<EMPTY>"); break;
  87. case VT_NULL: return _T("<NULL>"); break;
  88. case VT_I2: return IntToStr(*(SHORT*)Value); break;
  89. case VT_I4: return IntToStr(*(ULONG*)Value); break;
  90. case VT_R4: return FloatToStr(*(FLOAT*)Value); break;
  91. case VT_R8: return DoubleToStr(*(DOUBLE*)Value); break;
  92. case VT_BSTR: return WSzToStr((PCWSTR)Value); break;
  93. case VT_BOOL: return *(VARIANT_BOOL*)Value ? _T("TRUE") : _T("FALSE"); break;
  94. case VT_I1: return IntToStr(*(CHAR*)Value); break;
  95. case VT_UI1: return IntToStr(*(BYTE*)Value); break;
  96. case VT_UI2: return IntToStr(*(USHORT*)Value); break;
  97. case VT_UI4: return IntToStr(*(ULONG*)Value); break;
  98. case VT_I8: return Int64ToStr(*(__int64*)Value); break;
  99. case VT_UI8: return Int64ToStr(*(__int64*)Value); break;
  100. case VT_INT: return IntToStr(*(INT*)Value); break;
  101. case VT_UINT: return IntToStr(*(UINT*)Value); break;
  102. case VT_LPSTR: return SzToStr((PCSTR)Value); break;
  103. case VT_LPWSTR: return WSzToStr((PCWSTR)Value); break;
  104. case VT_CLSID: return GuidToStr(*(CLSID*)Value); break;
  105. default: return _T("<UNKNOWN>"); break;
  106. };
  107. return szValue;
  108. }
  109. //////////////////////////////////////////////////////////////////////////
  110. //
  111. //
  112. //
  113. CAutoStr PropVariantToStr(const PROPVARIANT &Value)
  114. {
  115. switch (Value.vt)
  116. {
  117. case VT_EMPTY: return _T("<EMPTY>"); break;
  118. case VT_NULL: return _T("<NULL>"); break;
  119. case VT_I2: return IntToStr(Value.iVal); break;
  120. case VT_I4: return IntToStr(Value.lVal); break;
  121. case VT_R4: return FloatToStr(Value.fltVal); break;
  122. case VT_R8: return DoubleToStr(Value.dblVal); break;
  123. case VT_BSTR: return WSzToStr(Value.bstrVal); break;
  124. case VT_BOOL: return Value.boolVal ? _T("TRUE") : _T("FALSE"); break;
  125. case VT_I1: return IntToStr(Value.cVal); break;
  126. case VT_UI1: return IntToStr(Value.bVal); break;
  127. case VT_UI2: return IntToStr(Value.uiVal); break;
  128. case VT_UI4: return IntToStr(Value.ulVal); break;
  129. case VT_I8: return Int64ToStr(*(__int64*)&Value.hVal); break;
  130. case VT_UI8: return Int64ToStr(*(__int64*)&Value.uhVal); break;
  131. case VT_INT: return IntToStr(Value.intVal); break;
  132. case VT_UINT: return IntToStr(Value.uintVal); break;
  133. case VT_LPSTR: return SzToStr(Value.pszVal); break;
  134. case VT_LPWSTR: return WSzToStr(Value.pwszVal); break;
  135. case VT_CLSID: return GuidToStr(*Value.puuid); break;
  136. default: return _T("<UNKNOWN>"); break;
  137. };
  138. }
  139. //////////////////////////////////////////////////////////////////////////
  140. //
  141. //
  142. //
  143. CAutoStr GuidToStr(REFGUID Value)
  144. {
  145. if (Value == GUID_NULL) return _T("GUID_NULL");
  146. else if (Value == WiaImgFmt_UNDEFINED) return _T("WiaImgFmt_UNDEFINED");
  147. else if (Value == WiaImgFmt_MEMORYBMP) return _T("WiaImgFmt_MEMORYBMP");
  148. else if (Value == WiaImgFmt_BMP) return _T("WiaImgFmt_BMP");
  149. else if (Value == WiaImgFmt_EMF) return _T("WiaImgFmt_EMF");
  150. else if (Value == WiaImgFmt_WMF) return _T("WiaImgFmt_WMF");
  151. else if (Value == WiaImgFmt_JPEG) return _T("WiaImgFmt_JPEG");
  152. else if (Value == WiaImgFmt_PNG) return _T("WiaImgFmt_PNG");
  153. else if (Value == WiaImgFmt_GIF) return _T("WiaImgFmt_GIF");
  154. else if (Value == WiaImgFmt_TIFF) return _T("WiaImgFmt_TIFF");
  155. else if (Value == WiaImgFmt_EXIF) return _T("WiaImgFmt_EXIF");
  156. else if (Value == WiaImgFmt_PHOTOCD) return _T("WiaImgFmt_PHOTOCD");
  157. else if (Value == WiaImgFmt_FLASHPIX) return _T("WiaImgFmt_FLASHPIX");
  158. else if (Value == WiaImgFmt_ICO) return _T("WiaImgFmt_ICO");
  159. CAutoStr szValue(MAX_GUID_STRING_LEN);
  160. #ifdef UNICODE
  161. StringFromGUID2(Value, szValue, MAX_GUID_STRING_LEN);
  162. #else //UNICODE
  163. WCHAR wszValue[MAX_GUID_STRING_LEN];
  164. StringFromGUID2(Value, wszValue, MAX_GUID_STRING_LEN);
  165. WideCharToMultiByte(
  166. CP_ACP,
  167. 0,
  168. wszValue,
  169. MAX_GUID_STRING_LEN,
  170. szValue,
  171. MAX_GUID_STRING_LEN,
  172. 0,
  173. 0
  174. );
  175. #endif //UNICODE
  176. return szValue;
  177. }
  178. //////////////////////////////////////////////////////////////////////////
  179. //
  180. //
  181. //
  182. CAutoStr TymedToStr(TYMED Value)
  183. {
  184. switch (Value)
  185. {
  186. case (TYMED) TYMED_HGLOBAL: return _T("TYMED_HGLOBAL");
  187. case (TYMED) TYMED_FILE: return _T("TYMED_FILE");
  188. case (TYMED) TYMED_ISTREAM: return _T("TYMED_ISTREAM");
  189. case (TYMED) TYMED_ISTORAGE: return _T("TYMED_ISTORAGE");
  190. case (TYMED) TYMED_GDI: return _T("TYMED_GDI");
  191. case (TYMED) TYMED_MFPICT: return _T("TYMED_MFPICT");
  192. case (TYMED) TYMED_ENHMF: return _T("TYMED_ENHMF");
  193. case (TYMED) TYMED_NULL: return _T("TYMED_NULL");
  194. case (TYMED) TYMED_CALLBACK: return _T("TYMED_CALLBACK");
  195. };
  196. return IntToStr((int) Value);
  197. }
  198. //////////////////////////////////////////////////////////////////////////
  199. //
  200. //
  201. //
  202. CAutoStr DeviceTypeToStr(STI_DEVICE_MJ_TYPE Value)
  203. {
  204. switch (Value)
  205. {
  206. case (STI_DEVICE_MJ_TYPE) StiDeviceTypeDefault: return _T("StiDeviceTypeDefault");
  207. case (STI_DEVICE_MJ_TYPE) StiDeviceTypeScanner: return _T("StiDeviceTypeScanner");
  208. case (STI_DEVICE_MJ_TYPE) StiDeviceTypeDigitalCamera: return _T("StiDeviceTypeDigitalCamera");
  209. case (STI_DEVICE_MJ_TYPE) StiDeviceTypeStreamingVideo: return _T("StiDeviceTypeStreamingVideo");
  210. };
  211. return IntToStr((int) Value);
  212. }
  213. //////////////////////////////////////////////////////////////////////////
  214. //
  215. //
  216. //
  217. CAutoStr ButtonIdToStr(int Value)
  218. {
  219. switch (Value)
  220. {
  221. case IDOK: return _T("IDOK");
  222. case IDCANCEL: return _T("IDCANCEL");
  223. case IDABORT: return _T("IDABORT");
  224. case IDRETRY: return _T("IDRETRY");
  225. case IDIGNORE: return _T("IDIGNORE");
  226. case IDYES: return _T("IDYES");
  227. case IDNO: return _T("IDNO");
  228. case IDCLOSE: return _T("IDCLOSE");
  229. case IDHELP: return _T("IDHELP");
  230. case IDTRYAGAIN: return _T("IDTRYAGAIN");
  231. case IDCONTINUE: return _T("IDCONTINUE");
  232. };
  233. return IntToStr((int) Value);
  234. }
  235. //////////////////////////////////////////////////////////////////////////
  236. //
  237. //
  238. //
  239. CAutoStr HResultToStr(HRESULT Value)
  240. {
  241. switch (Value)
  242. {
  243. case S_OK: return _T("S_OK");
  244. case S_FALSE: return _T("S_FALSE");
  245. case E_UNEXPECTED: return _T("E_UNEXPECTED");
  246. case E_NOTIMPL: return _T("E_NOTIMPL");
  247. case E_OUTOFMEMORY: return _T("E_OUTOFMEMORY");
  248. case E_INVALIDARG: return _T("E_INVALIDARG");
  249. case E_NOINTERFACE: return _T("E_NOINTERFACE");
  250. case E_POINTER: return _T("E_POINTER");
  251. case E_HANDLE: return _T("E_HANDLE");
  252. case E_ABORT: return _T("E_ABORT");
  253. case E_FAIL: return _T("E_FAIL");
  254. case E_ACCESSDENIED: return _T("E_ACCESSDENIED");
  255. case DV_E_TYMED: return _T("DV_E_TYMED");
  256. case WIA_S_NO_DEVICE_AVAILABLE: return _T("WIA_S_NO_DEVICE_AVAILABLE");
  257. case WIA_ERROR_GENERAL_ERROR: return _T("WIA_ERROR_GENERAL_ERROR");
  258. case WIA_ERROR_PAPER_JAM: return _T("WIA_ERROR_PAPER_JAM");
  259. case WIA_ERROR_PAPER_EMPTY: return _T("WIA_ERROR_PAPER_EMPTY");
  260. case WIA_ERROR_PAPER_PROBLEM: return _T("WIA_ERROR_PAPER_PROBLEM");
  261. case WIA_ERROR_OFFLINE: return _T("WIA_ERROR_OFFLINE");
  262. case WIA_ERROR_BUSY: return _T("WIA_ERROR_BUSY");
  263. case WIA_ERROR_WARMING_UP: return _T("WIA_ERROR_WARMING_UP");
  264. case WIA_ERROR_USER_INTERVENTION: return _T("WIA_ERROR_USER_INTERVENTION");
  265. case WIA_ERROR_ITEM_DELETED: return _T("WIA_ERROR_ITEM_DELETED");
  266. case WIA_ERROR_DEVICE_COMMUNICATION: return _T("WIA_ERROR_DEVICE_COMMUNICATION");
  267. case WIA_ERROR_INVALID_COMMAND: return _T("WIA_ERROR_INVALID_COMMAND");
  268. };
  269. return IntToStr((int) Value);
  270. }
  271. //////////////////////////////////////////////////////////////////////////
  272. //
  273. //
  274. //
  275. CAutoStr VarTypeToStr(VARTYPE Value)
  276. {
  277. CAutoStr szValue(256);
  278. if (Value & VT_VECTOR) _tcscat(szValue, _T("VT_VECTOR | "));
  279. if (Value & VT_ARRAY) _tcscat(szValue, _T("VT_ARRAY | "));
  280. if (Value & VT_BYREF) _tcscat(szValue, _T("VT_BYREF | "));
  281. TCHAR szNum[34];
  282. PCTSTR pTypeName;
  283. switch (Value & VT_TYPEMASK)
  284. {
  285. case VT_EMPTY: pTypeName = _T("VT_EMPTY"); break;
  286. case VT_NULL: pTypeName = _T("VT_NULL"); break;
  287. case VT_I2: pTypeName = _T("VT_I2"); break;
  288. case VT_I4: pTypeName = _T("VT_I4"); break;
  289. case VT_R4: pTypeName = _T("VT_R4"); break;
  290. case VT_R8: pTypeName = _T("VT_R8"); break;
  291. case VT_CY: pTypeName = _T("VT_CY"); break;
  292. case VT_DATE: pTypeName = _T("VT_DATE"); break;
  293. case VT_BSTR: pTypeName = _T("VT_BSTR"); break;
  294. case VT_DISPATCH: pTypeName = _T("VT_DISPATCH"); break;
  295. case VT_ERROR: pTypeName = _T("VT_ERROR"); break;
  296. case VT_BOOL: pTypeName = _T("VT_BOOL"); break;
  297. case VT_VARIANT: pTypeName = _T("VT_VARIANT"); break;
  298. case VT_UNKNOWN: pTypeName = _T("VT_UNKNOWN"); break;
  299. case VT_DECIMAL: pTypeName = _T("VT_DECIMAL"); break;
  300. case VT_I1: pTypeName = _T("VT_I1"); break;
  301. case VT_UI1: pTypeName = _T("VT_UI1"); break;
  302. case VT_UI2: pTypeName = _T("VT_UI2"); break;
  303. case VT_UI4: pTypeName = _T("VT_UI4"); break;
  304. case VT_I8: pTypeName = _T("VT_I8"); break;
  305. case VT_UI8: pTypeName = _T("VT_UI8"); break;
  306. case VT_INT: pTypeName = _T("VT_INT"); break;
  307. case VT_UINT: pTypeName = _T("VT_UINT"); break;
  308. case VT_VOID: pTypeName = _T("VT_VOID"); break;
  309. case VT_HRESULT: pTypeName = _T("VT_HRESULT"); break;
  310. case VT_PTR: pTypeName = _T("VT_PTR"); break;
  311. case VT_SAFEARRAY: pTypeName = _T("VT_SAFEARRAY"); break;
  312. case VT_CARRAY: pTypeName = _T("VT_CARRAY"); break;
  313. case VT_USERDEFINED: pTypeName = _T("VT_USERDEFINED"); break;
  314. case VT_LPSTR: pTypeName = _T("VT_LPSTR"); break;
  315. case VT_LPWSTR: pTypeName = _T("VT_LPWSTR"); break;
  316. case VT_RECORD: pTypeName = _T("VT_RECORD"); break;
  317. case VT_FILETIME: pTypeName = _T("VT_FILETIME"); break;
  318. case VT_BLOB: pTypeName = _T("VT_BLOB"); break;
  319. case VT_STREAM: pTypeName = _T("VT_STREAM"); break;
  320. case VT_STORAGE: pTypeName = _T("VT_STORAGE"); break;
  321. case VT_STREAMED_OBJECT: pTypeName = _T("VT_STREAMED_OBJECT"); break;
  322. case VT_STORED_OBJECT: pTypeName = _T("VT_STORED_OBJECT"); break;
  323. case VT_BLOB_OBJECT: pTypeName = _T("VT_BLOB_OBJECT"); break;
  324. case VT_CF: pTypeName = _T("VT_CF"); break;
  325. case VT_CLSID: pTypeName = _T("VT_CLSID"); break;
  326. case VT_VERSIONED_STREAM: pTypeName = _T("VT_VERSIONED_STREAM"); break;
  327. default: pTypeName = _itot(Value, szNum, 10); break;
  328. };
  329. _tcscat(szValue, pTypeName);
  330. return szValue;
  331. }
  332. //////////////////////////////////////////////////////////////////////////
  333. //
  334. //
  335. //
  336. CAutoStr WiaCallbackReasonToStr(ULONG Value)
  337. {
  338. switch (Value)
  339. {
  340. case IT_MSG_DATA_HEADER: return _T("IT_MSG_DATA_HEADER");
  341. case IT_MSG_DATA: return _T("IT_MSG_DATA");
  342. case IT_MSG_STATUS: return _T("IT_MSG_STATUS");
  343. case IT_MSG_TERMINATION: return _T("IT_MSG_TERMINATION");
  344. case IT_MSG_NEW_PAGE: return _T("IT_MSG_NEW_PAGE");
  345. };
  346. return IntToStr((int) Value);
  347. }
  348. //////////////////////////////////////////////////////////////////////////
  349. //
  350. //
  351. //
  352. CAutoStr WiaCallbackStatusToStr(ULONG Value)
  353. {
  354. CAutoStr szValue(256);
  355. if (Value & IT_STATUS_TRANSFER_FROM_DEVICE) _tcscat(szValue, _T("IT_STATUS_TRANSFER_FROM_DEVICE "));
  356. else if (Value & IT_STATUS_PROCESSING_DATA) _tcscat(szValue, _T("IT_STATUS_PROCESSING_DATA "));
  357. else if (Value & IT_STATUS_TRANSFER_TO_CLIENT) _tcscat(szValue, _T("IT_STATUS_TRANSFER_TO_CLIENT "));
  358. return szValue;
  359. }