Ejemplo n.º 1
0
BOOL GetBookmarkFileName(HWND hwndHexView, LPCTSTR szFileName, TCHAR *szBookPath)
{
	TCHAR szBase[MAX_PATH] = {0};
	TCHAR szAppData[MAX_PATH];
	TCHAR *pszName;
	UINT64 bookid;
	
	if(szFileName == 0)
	{
		szFileName = szBase;

		if(!HexView_GetFileName(hwndHexView, szBase, MAX_PATH))
			return FALSE;
	}

	// has this file got a bookmark id already??
	if(LoadFileData(szFileName, TEXT("HexEdit.bookmark"), &bookid, sizeof(UINT64)) != sizeof(UINT64))
	{
		//BY_HANDLE_FILE_INFORMATION bhfi;
		//HANDLE hFile = CreateFile(szBase, 0, FILE_SHARE_READ|FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0);

		//if(hFile == INVALID_HANDLE_VALUE)
		//	return FALSE;

		// generate one from the base NTFS fileid
		//GetFileInformationByHandle(hFile, &bhfi);
		//CloseHandle(hFile);

		bookid = GetTickCount();//(UINT64)bhfi.nFileIndexLow | ((UINT64)bhfi.nFileIndexHigh << 32);

		// only save if the file exists
		if(GetFileAttributes(szFileName) != INVALID_FILE_ATTRIBUTES)
		{
			SaveFileData(szFileName, TEXT("HexEdit.bookmark"), &bookid, sizeof(UINT64));
		}
	}

	if((pszName = _tcsrchr(szFileName, '\\')) == 0)
		return FALSE;

	// get location of application data

	//
	// get/create the following directory:
	//
	//	{ApplicationData}\Local\Catch22\Bookmarks 
	//
	GetProgramDataPath(szAppData, MAX_PATH);
	lstrcat(szAppData, TEXT("\\Bookmarks"));
	SHCreateDirectory(NULL, szAppData);

	//
	//	Formulate the bookmark filename
	//
	wsprintf(szBookPath, TEXT("%s\\%s-%08x-bookmark.xml"), szAppData, pszName+1, bookid);
	//lstrcat(szBookPath, pszName+1);
	//lstrcat(szBookPath, TEXT(".bookmark"));

	return TRUE;
}
Ejemplo n.º 2
0
BOOL UpdateHighlights(BOOL fAlways)
{
	HWND hwndGridView;

	if ((hwndGridView = GetDlgItem(GetBookmarkWnd(), IDC_HIGHLIGHT_GRIDVIEW)) == 0)
		return FALSE;

	SendMessage(hwndGridView, WM_SETREDRAW, FALSE, 0);

	if(fAlways)
	{
		WIN32_FIND_DATA win32fd;
		HANDLE hFind;
		TCHAR szBookPath[MAX_PATH];
		TCHAR szFilePath[MAX_PATH];

		GetProgramDataPath(szBookPath, MAX_PATH);
		lstrcat(szBookPath, TEXT("\\Bookmarks\\*"));

		// enumerate all files in the bookmarks directory
		if((hFind = FindFirstFile(szBookPath, &win32fd)) != 0)
		{
			do 
			{
				if((win32fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0)
				{
					GetProgramDataPath(szBookPath, MAX_PATH);
					wsprintf(szFilePath, TEXT("%s\\Bookmarks\\%s"), szBookPath, win32fd.cFileName);				

					UpdateHighlight(0, szFilePath, TRUE);
				}

			} while(FindNextFile(hFind, &win32fd));

			FindClose(hFind);
		}
	}
	//else
	{
		int i;
		HWND hwndHexView;

		// add bookmarks for all open files
		for(i = 0; (hwndHexView = EnumHexView(g_hwndMain, i)) != 0; i++)
		{
			TCHAR szFilePath[MAX_PATH];
			HexView_GetFileName(hwndHexView, szFilePath, MAX_PATH);
			UpdateHighlight(szFilePath, 0, FALSE);
		}
	}

	SendMessage(hwndGridView, WM_SETREDRAW, TRUE, 0);
	return TRUE;
}
Ejemplo n.º 3
0
//
//	Add hexview's filename + bookmarks to the gridview
//
void AddHexViewHighlights(HGRIDITEM hRoot, HWND hwndHexView, HWND hwndGridView, COLORREF col)
{
	GVITEM gvitem = { 0 };
	HGRIDITEM hItem;
	TCHAR szFileName[MAX_PATH];

	HexView_GetFileName(hwndHexView, szFileName, MAX_PATH);

	MkRootGVITEM(&gvitem, szFileName, TRUE, 0);	
	hItem = GridView_InsertChild(hwndGridView, hRoot, &gvitem);
	
	FillHexViewHighlights(hItem, hwndHexView, hwndGridView, col);
}
Ejemplo n.º 4
0
BOOL HexSetCurFile(HWND hwndMain, int iItem, BOOL fSetFocus)
{
	TCITEM tci = { TCIF_PARAM };
	HWND hwndHV, hwndOld;
	TCHAR szFilePath[MAX_PATH];
	TCHAR *name;
	RECT rect;
		
	// get specied item
	if(!TabCtrl_GetItem(g_hwndTabView, iItem, &tci))
		return FALSE;

	TabCtrl_SetCurSel(g_hwndTabView, iItem);

	hwndHV = (HWND)tci.lParam;
	hwndOld = g_hwndHexView;

	GetWindowRect(hwndOld, &rect);
	MapWindowPoints(0, hwndMain, (POINT *)&rect, 2);
	MoveWindow(hwndHV, rect.left, rect.top, rect.right-rect.left, rect.bottom-rect.top,0);
	
	g_hwndHexView = hwndHV;
			
	ForceClientResize(hwndMain);

	if(fSetFocus)
		SetFocus(hwndHV);

	HexView_GetFileName(hwndHV, szFilePath, MAX_PATH);

	name = _tcsrchr(szFilePath, '\\');
	name = name ? name+1 : TEXT("Untitled");

	SetWindowFileName(hwndMain, name, HexView_CanUndo(hwndHV), HexView_IsReadOnly(hwndHV));
	
	if(hwndOld != hwndHV)
		ShowWindow(hwndOld, SW_HIDE);

	UpdateStatusBarText(g_hwndStatusBar, hwndHV);

	UpdateTypeView();

	return TRUE;
}
Ejemplo n.º 5
0
BOOL SaveHighlights(HWND hwndHexView)
{
	TCHAR szBookPath[MAX_PATH];
	TCHAR szFilePath[MAX_PATH];
	BOOKMARK bm;
	HBOOKMARK hbm;
	HCONFIG config, filedata, bookmarks;

	if (!GetBookmarkFileName(hwndHexView, NULL, szBookPath))
		return FALSE;

	config	  = CreateConfig();
	filedata  = CreateConfigSection(config, TEXT("hexFileData"));

	HexView_GetFileName(hwndHexView, szFilePath, MAX_PATH);

	// only save if the file exists
	if(GetFileAttributes(szFilePath) != INVALID_FILE_ATTRIBUTES)
	{
		SetConfigStr(filedata, TEXT("filePath"), szFilePath);
	}

	bookmarks = CreateConfigSection(filedata, TEXT("bookmarks"));

	for(hbm = 0; (hbm = HexView_EnumBookmark(hwndHexView, hbm, &bm)) != 0; )
	{
		if((bm.flags & HVBF_NOPERSIST) == 0)
		{
			HCONFIG bookmark = CreateConfigSection(bookmarks, TEXT("bookmark"));

			SetConfigStr(bookmark, TEXT("name"), bm.pszTitle);
			SetConfigStr(bookmark, TEXT("desc"), bm.pszText);
			SetConfigI64(bookmark, TEXT("offset"), bm.offset);
			SetConfigI64(bookmark, TEXT("length"), bm.length);
			SetConfigH32(bookmark, TEXT("fgcol"), bm.col);
			SetConfigH32(bookmark, TEXT("bgcol"), bm.backcol);
		}
	}

	SaveConfig(szBookPath, config);

	return TRUE;
}
Ejemplo n.º 6
0
//
//	yes IDYES/IDNO/IDCANCEL
//
UINT HexFileCloseNotify(HWND hwndMain, HWND hwndHV)
{
	if(HexView_CanUndo(hwndHV))
	{
		TCHAR buf[MAX_PATH+100];
		TCHAR name[MAX_PATH];

		if(HexView_GetFileName(hwndHV, name, MAX_PATH))
			wsprintf(buf, TEXT("Do you want to save changes to\r\n%s?"), name);
		else
			wsprintf(buf, TEXT("Do you want to save changes to Untitled?"));

		return MessageBox(hwndMain, buf, g_szAppName, MB_YESNOCANCEL | MB_ICONQUESTION);
	}
	else
	{
		return IDNO;
	}
}
Ejemplo n.º 7
0
BOOL HexCloseFile(MAINWND *mainWnd, int iItem)
{
	TCITEM	tci = { TCIF_PARAM };
	HWND	hwndHV;
	TCHAR	szFilePath[MAX_PATH];

	if(!TabCtrl_GetItem(mainWnd->hwndTabView, iItem, &tci))
		return FALSE;

	hwndHV = (HWND)tci.lParam;

	// is this the last tab left?
	if(TabCtrl_GetItemCount(mainWnd->hwndTabView) == 1)
	{
		HexView_Clear((HWND)tci.lParam);
		
		tci.mask = TCIF_TEXT;
		tci.pszText = TEXT("(Untitled)");
		TabCtrl_SetItem(mainWnd->hwndTabView, 0, &tci);
		tci.lParam = 0;
	}
	else
	{
		// remove the tab
		TabCtrl_DeleteItem(mainWnd->hwndTabView, iItem);
	}

	// set focus to a new tab
	iItem = TabCtrl_GetCurSel(mainWnd->hwndTabView);
	HexSetCurFile(mainWnd->hwndMain, iItem, TRUE);
	
	// lastly destroy the unwanted hexview
	SaveHighlights(hwndHV);
	
	HexView_GetFileName(hwndHV, szFilePath, MAX_PATH);
	
	if(hwndHV == (HWND)tci.lParam)
		DestroyWindow(hwndHV);

	UpdateHighlight(szFilePath, 0, TRUE);
	return TRUE;
}
Ejemplo n.º 8
0
void UpdateMainTabs(HWND hwndTabView)
{
	int i;
	TCITEM tci = { TCIF_PARAM, 0, 0, NULL, 0, 0, 0 };

	for(i = 0; TabCtrl_GetItem(hwndTabView, i, &tci); i++)
	{
		HWND hwndHV = (HWND)tci.lParam;
		TCHAR szPath[MAX_PATH];

		if(HexView_GetFileName(hwndHV, szPath, MAX_PATH))
		{
			TCITEM tci2 = {0};

			tci.mask     = TCIF_PARAM | TCIF_TEXT | TCIF_STATE;
			tci.dwState  = TCIS_FILENAME;
			tci.lParam   = (LPARAM)hwndHV;
			tci.pszText  = (WCHAR *)szPath;//g_szFileTitle;
			
			TabCtrl_SetItem(hwndTabView, i, &tci);
		}
	}
}
Ejemplo n.º 9
0
HWND HexIsOpen(HWND hwndMain, LPCTSTR szFileName, int *idx)
{
	int i;
	HWND hwndHV;
	
	// is the file already open?!
	for(i = 0; (hwndHV = EnumHexView(hwndMain, i)) != 0; i++)
	{
		TCHAR szPath[MAX_PATH];
		
		if(HexView_GetFileName(hwndHV, szPath, MAX_PATH))
		{
			if(lstrcmpi(szPath, szFileName) == 0)
			{
				if(idx) 
					*idx = i;
				
				return hwndHV;
			}
		}
	}

	return NULL;
}
Ejemplo n.º 10
0
//
//	Open the specified file
//
BOOL HexOpenFile(HWND hwndMain, LPCTSTR szFileName, DWORD fHexViewFlags)
{
	HWND   hwndHV;
	TCITEM tci = { TCIF_PARAM, 0, 0, NULL, 0, 0, 0 };
	BOOL fReuseTab = FALSE;
	int  i;
	
	// is the file already open?!
	if(HexIsOpen(hwndMain, szFileName, &i))
	{
		return HexSetCurFile(hwndMain, i, TRUE);
	}
	
	// shall we use the (untitled) document or create a new window?
	if(TabCtrl_GetItemCount(g_hwndTabView) == 1 && TabCtrl_GetItem(g_hwndTabView, 0, &tci))
	{
		hwndHV = (HWND)tci.lParam;

		// is file (new) and unmodified?
		if(HexView_GetFileName(hwndHV, 0,0) == 0 && HexView_CanUndo(hwndHV) == FALSE && HexView_CanRedo(hwndHV) == FALSE)
		{
			fReuseTab = TRUE;
		}
	}
	
	if(fReuseTab == FALSE)
		hwndHV = CreateHexViewCtrl(hwndMain);

	// 
	if(HexView_OpenFile(hwndHV, szFileName, fHexViewFlags))
	{
		DWORD e = GetLastError();
			
		LoadHighlights(hwndHV);

		UpdateCurFileName(hwndMain, hwndHV, szFileName, FALSE);

		if(fReuseTab == FALSE)
		{
			tci.mask     = TCIF_PARAM | TCIF_TEXT | TCIF_STATE;
			tci.dwState  = TCIS_FILENAME;
			tci.lParam   = (LPARAM)hwndHV;
			tci.pszText  = (WCHAR *)szFileName;//g_szFileTitle;
			
			// insert at the end
			TabCtrl_InsertItem(g_hwndTabView, TabCtrl_GetItemCount(g_hwndTabView), &tci);			
		}

		UpdateMainTabs(g_hwndTabView);
		HexSetCurFile(hwndMain, TabCtrl_GetItemCount(g_hwndTabView)-1, TRUE);

		if(e == ERROR_SHARING_VIOLATION)
		{
			HexInfoBox(TEXT("%s\r\nhas been opened as read-only."), g_szFileName);
			//MessageBox(hwndMain, TEXT("Another "), TEXT("HexEdit"), MB_ICONINFORMATION);
		}

		UpdateHighlight(szFileName, 0, TRUE);
		UpdateTypeView();

		return TRUE;
	}
	else
	{
		DWORD dwError = GetLastError();
		DestroyWindow(hwndHV);
		FmtErrorMsg(hwndMain, MB_OK|MB_ICONWARNING, dwError, TEXT("Error opening \'%s\'\r\n\r\n"), szFileName);
		return FALSE;
	}
}