--- /dev/null
+///////////////////////////////////////////////////////////////////////////////
+// HEX_STR.C
+// Copyright (c) 1995 by Robert Dickenson
+//
+#include "hex_str.h"
+
+
+#define LOBYTE(w) ((unsigned char)(w))
+#define HIBYTE(w) ((unsigned char)((unsigned short)(w) >> 8))
+
+
+unsigned char AsciiTable[256][3] = {
+ "00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "0A", "0B", "0C", "0D", "0E", "0F",
+ "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "1A", "1B", "1C", "1D", "1E", "1F",
+ "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "2A", "2B", "2C", "2D", "2E", "2F",
+ "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "3A", "3B", "3C", "3D", "3E", "3F",
+ "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "4A", "4B", "4C", "4D", "4E", "4F",
+ "50", "51", "52", "53", "54", "55", "56", "57", "58", "59", "5A", "5B", "5C", "5D", "5E", "5F",
+ "60", "61", "62", "63", "64", "65", "66", "67", "68", "69", "6A", "6B", "6C", "6D", "6E", "6F",
+ "70", "71", "72", "73", "74", "75", "76", "77", "78", "79", "7A", "7B", "7C", "7D", "7E", "7F",
+ "80", "81", "82", "83", "84", "85", "86", "87", "88", "89", "8A", "8B", "8C", "8D", "8E", "8F",
+ "90", "91", "92", "93", "94", "95", "96", "97", "98", "99", "9A", "9B", "9C", "9D", "9E", "9F",
+ "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8", "A9", "AA", "AB", "AC", "AD", "AE", "AF",
+ "B0", "B1", "B2", "B3", "B4", "B5", "B6", "B7", "B8", "B9", "BA", "BB", "BC", "BD", "BE", "BF",
+ "C0", "C1", "C2", "C3", "C4", "C5", "C6", "C7", "C8", "C9", "CA", "CB", "CC", "CD", "CE", "CF",
+ "D0", "D1", "D2", "D3", "D4", "D5", "D6", "D7", "D8", "D9", "DA", "DB", "DC", "DD", "DE", "DF",
+ "E0", "E1", "E2", "E3", "E4", "E5", "E6", "E7", "E8", "E9", "EA", "EB", "EC", "ED", "EE", "EF",
+ "F0", "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "FA", "FB", "FC", "FD", "FE", "FF"
+};
+
+unsigned char HexTable[24] = {
+0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 10, 11, 12, 13, 14, 15, 16
+};
+
+unsigned long BinaryNibbles[] = {
+ (unsigned long)"0000",
+ (unsigned long)"0001",
+ (unsigned long)"0010",
+ (unsigned long)"0011",
+ (unsigned long)"0100",
+ (unsigned long)"0101",
+ (unsigned long)"0110",
+ (unsigned long)"0111",
+ (unsigned long)"1000",
+ (unsigned long)"1001",
+ (unsigned long)"1010",
+ (unsigned long)"1011",
+ (unsigned long)"1100",
+ (unsigned long)"1101",
+ (unsigned long)"1110",
+ (unsigned long)"1111"
+};
+
+
+void ByteBinStr(char* dst, unsigned char num)
+{
+ *(unsigned long*)dst++ = BinaryNibbles[(num >> 4) & 0x07];
+ *(unsigned long*)dst++ = BinaryNibbles[num & 0x07];
+}
+
+void WordBinStr(char* dst, unsigned short num)
+{
+ ByteBinStr(dst, HIBYTE(num));
+ ByteBinStr(dst+4, LOBYTE(num));
+}
+
+unsigned short Byte2Hex(unsigned char data)
+{
+ register unsigned short result;
+
+ result = AsciiTable[data][1] << 8;
+ result += AsciiTable[data][0];
+ return result;
+}
+
+unsigned long Word2Hex(unsigned short data)
+{
+ register unsigned long result;
+
+ result = (unsigned long)Byte2Hex(LOBYTE(data)) << 16;
+ result += Byte2Hex(HIBYTE(data));
+ return result;
+}
+
+unsigned char HexByte(char* str)
+{
+ register unsigned char result;
+
+ result = HexTable[*str++ - '0'] * 16;
+ result += HexTable[*str++ - '0'];
+ return result;
+}
+
+unsigned int HexWord(char* str)
+{
+ register unsigned int result;
+
+ result = HexByte(str) << 8;
+ result += HexByte(str+2);
+ return result;
+}
+
+unsigned long HexLong(char* str)
+{
+ register unsigned long result;
+
+ result = HexByte(str++) << 24;
+ result += HexByte(str++) << 16;
+ result += HexByte(str++) << 8;
+ result += HexByte(str);
+ return result;
+}
+
+unsigned long HexString(char* str)
+{
+ unsigned long temp = 0;
+
+ while ( *str )
+ {
+ temp <<= 4;
+ switch ( *str++ )
+ {
+ case '0': break;
+ case '1': temp += 1; break;
+ case '2': temp += 2; break;
+ case '3': temp += 3; break;
+ case '4': temp += 4; break;
+ case '5': temp += 5; break;
+ case '6': temp += 6; break;
+ case '7': temp += 7; break;
+ case '8': temp += 8; break;
+ case '9': temp += 9; break;
+ case 'A': temp += 10; break;
+ case 'B': temp += 11; break;
+ case 'C': temp += 12; break;
+ case 'D': temp += 13; break;
+ case 'E': temp += 14; break;
+ case 'F': temp += 15; break;
+ case 'a': temp += 10; break;
+ case 'b': temp += 11; break;
+ case 'c': temp += 12; break;
+ case 'd': temp += 13; break;
+ case 'e': temp += 14; break;
+ case 'f': temp += 15; break;
+ case 'X': temp = 0; break;
+ case 'x': temp = 0; break;
+ default: return temp;
+ }
+ }
+ return temp;
+}
+
+///////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
// Local module support methods
//
+extern unsigned char AsciiTable[256][3];
static void AddEntryToList(HWND hwndLV, LPTSTR Name, DWORD dwValType, void* ValBuf, DWORD dwCount)
{
LVITEM item;
+ int index;
item.mask = LVIF_TEXT | LVIF_PARAM;
item.iItem = 0;//idx;
item.stateMask = 0;
item.pszText = Name;
item.cchTextMax = _tcslen(item.pszText);
+ if (item.cchTextMax == 0)
+ item.pszText = LPSTR_TEXTCALLBACK;
item.cchTextMax = 0;
item.iImage = 0;
item.lParam = (LPARAM)dwValType;
#if (_WIN32_IE >= 0x0300)
item.iIndent = 0;
#endif
- ListView_InsertItem(hwndLV, &item);
+
+ index = ListView_InsertItem(hwndLV, &item);
+ if (index != -1) {
+// LPTSTR pszText = NULL;
+ LPTSTR pszText = _T("value");
+ switch (dwValType) {
+ case REG_SZ:
+ case REG_EXPAND_SZ:
+ ListView_SetItemText(hwndLV, index, 2, ValBuf);
+ break;
+ case REG_DWORD:
+ {
+ TCHAR buf[64];
+ wsprintf(buf, "0x%08X (%d)", *(DWORD*)ValBuf, *(DWORD*)ValBuf);
+ ListView_SetItemText(hwndLV, index, 2, buf);
+ }
+// lpsRes = convertHexToDWORDStr(lpbData, dwLen);
+ break;
+ case REG_BINARY:
+ {
+ int i;
+ LPTSTR pData = (LPTSTR)ValBuf;
+ LPTSTR strBinary = malloc(dwCount * sizeof(TCHAR) * 3 + 1);
+ memset(strBinary, _T(' '), dwCount * sizeof(TCHAR) * 3);
+ strBinary[dwCount * sizeof(TCHAR) * 3] = _T('\0');
+ for (i = 0; i < dwCount; i++) {
+ unsigned short* pShort;
+ pShort = &(strBinary[i*3]);
+// strBinary[i*3] = Byte2Hex((LPTSTR)ValBuf+i);
+// *pShort++ = Byte2Hex(*(pData+i));
+ *pShort = Byte2Hex(*(pData+i));
+ }
+ ListView_SetItemText(hwndLV, index, 2, strBinary);
+ free(strBinary);
+ }
+ break;
+ default:
+// lpsRes = convertHexToHexCSV(lpbData, dwLen);
+ ListView_SetItemText(hwndLV, index, 2, pszText);
+ break;
+ }
+ }
}
static void CreateListColumns(HWND hWndListView)
BOOL RefreshListView(HWND hwndLV, HKEY hKey, LPTSTR keyPath)
{
- if (hwndLV != NULL) {
- ListView_DeleteAllItems(hwndLV);
- }
+ if (hwndLV != NULL) {
+ ListView_DeleteAllItems(hwndLV);
+ }
if (hKey != NULL) {
- LONG errCode;
HKEY hNewKey;
-
-
- DWORD max_sub_key_len;
- DWORD max_val_name_len;
- DWORD max_val_size;
- DWORD val_count;
- errCode = RegQueryInfoKey(hKey, NULL, NULL, NULL, NULL,
- &max_sub_key_len, NULL, &val_count, &max_val_name_len, &max_val_size, NULL, NULL);
- if (errCode == ERROR_SUCCESS) {
- TCHAR* ValName = malloc(++max_val_name_len * sizeof(TCHAR));
- DWORD dwValNameLen = max_val_name_len;
- BYTE* ValBuf = malloc(++max_val_size);
- DWORD dwValSize = max_val_size;
- DWORD dwIndex = 0L;
- DWORD dwValType;
- while (RegEnumValue(hKey, dwIndex, ValName, &dwValNameLen, NULL, &dwValType, ValBuf, &dwValSize) == ERROR_SUCCESS) {
- AddEntryToList(hwndLV, ValName, dwValType, ValBuf, dwIndex);
- dwValNameLen = max_val_name_len;
- dwValSize = max_val_size;
- dwValType = 0L;
- ++dwIndex;
- }
- free(ValBuf);
- free(ValName);
- }
-
-
- errCode = RegOpenKeyEx(hKey, keyPath, 0, KEY_READ, &hNewKey);
+ LONG errCode = RegOpenKeyEx(hKey, keyPath, 0, KEY_READ, &hNewKey);
if (errCode == ERROR_SUCCESS) {
DWORD max_sub_key_len;
DWORD max_val_name_len;
DWORD dwValSize = max_val_size;
DWORD dwIndex = 0L;
DWORD dwValType;
+// if (RegQueryValueEx(hNewKey, NULL, NULL, &dwValType, ValBuf, &dwValSize) == ERROR_SUCCESS) {
+// AddEntryToList(hwndLV, _T("(Default)"), dwValType, ValBuf, dwValSize);
+// }
+// dwValSize = max_val_size;
while (RegEnumValue(hNewKey, dwIndex, ValName, &dwValNameLen, NULL, &dwValType, ValBuf, &dwValSize) == ERROR_SUCCESS) {
- //while (RegEnumValue(hNewKey, dwIndex, ValName, &dwValNameLen, NULL, &dwValType, NULL, NULL) == ERROR_SUCCESS) {
- AddEntryToList(hwndLV, ValName, dwValType, ValBuf, dwIndex);
+ ValBuf[dwValSize] = NULL;
+ AddEntryToList(hwndLV, ValName, dwValType, ValBuf, dwValSize);
dwValNameLen = max_val_name_len;
dwValSize = max_val_size;
dwValType = 0L;
--- /dev/null
+/////////////////////////////////////////////////////////////////////////////
+// Diagnostic Trace
+//
+#include <stdio.h>
+#include <stdarg.h>
+#define WIN32_LEAN_AND_MEAN
+#include "windows.h"
+#include "trace.h"
+
+DeclAssertFile; // Should be added at the begining of each .C/.CPP
+
+
+#ifdef _DEBUG
+
+#ifdef WIN32
+//#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
+//#include <windows.h>
+//#include <assert.h>
+//WINBASEAPI VOID WINAPI DebugBreak(VOID);
+//WINBASEAPI VOID WINAPI OutputDebugStringA(LPCSTR lpOutputString);
+//WINBASEAPI VOID WINAPI OutputDebugStringW(LPCWSTR lpOutputString);
+//void __stdcall DebugBreak(void);
+//void __stdcall OutputDebugStringA(char* lpOutputString);
+//void __stdcall OutputDebugStringW(wchar_t* lpOutputString);
+#ifdef UNICODE
+#define OutputDebugString OutputDebugStringW
+#else
+#define OutputDebugString OutputDebugStringA
+#endif // !UNICODE
+
+#else
+#include "hardware.h"
+#endif // WIN32
+
+
+#undef THIS_FILE
+static char THIS_FILE[] = __FILE__;
+
+void _DebugBreak(void)
+{
+ DebugBreak();
+}
+
+void Trace(TCHAR* lpszFormat, ...)
+{
+ va_list args;
+ int nBuf;
+ TCHAR szBuffer[512];
+
+ va_start(args, lpszFormat);
+// nBuf = vsprintf(szBuffer, lpszFormat, args);
+// nBuf = _vsntprintf(szBuffer, _countof(szBuffer), lpszFormat, args);
+#ifdef _UNICODE
+ nBuf = _vsnwprintf(szBuffer, sizeof(szBuffer), lpszFormat, args);
+#else
+ nBuf = _vsnprintf(szBuffer, sizeof(szBuffer), lpszFormat, args);
+#endif
+ OutputDebugString(szBuffer);
+ // was there an error? was the expanded string too long?
+// ASSERT(nBuf >= 0);
+ va_end(args);
+}
+
+void Assert(void* assert, TCHAR* file, int line, void* msg)
+{
+ if (msg == NULL) {
+ printf("ASSERT -- %s occured on line %u of file %s.\n",
+ assert, line, file);
+ } else {
+ printf("ASSERT -- %s occured on line %u of file %s: Message = %s.\n",
+ assert, line, file, msg);
+ }
+}
+
+
+#else
+
+//inline void Trace(TCHAR* lpszFormat, ...) { };
+//inline void Assert(void* assert, TCHAR* file, int line, void* msg) { };
+void Trace(TCHAR* lpszFormat, ...) { };
+void Assert(void* assert, TCHAR* file, int line, void* msg) { };
+
+#endif //_DEBUG
+/////////////////////////////////////////////////////////////////////////////