コード例 #1
0
ファイル: Tipdlg.cpp プロジェクト: KB3NZQ/hexedit4
CTipDlg::CTipDlg(CWnd* pParent /*=NULL*/)
	: CDialog(IDD_TIP, pParent)
{
	//{{AFX_DATA_INIT(CTipDlg)
	m_bStartup = TRUE;
	//}}AFX_DATA_INIT

	// We need to find out what the startup and file position parameters are
	// If startup does not exist, we assume that the Tips on startup is checked TRUE.
	CHexEditApp *aa = dynamic_cast<CHexEditApp *>(AfxGetApp());
	m_bStartup = aa->tipofday_;
	UINT iFilePos = aa->GetProfileInt(szSection, szIntFilePos, 0);

	const char *tip_name = "HexEdit.tip";

	// Now try to open the tips file in the current directory
	m_pStream = fopen(tip_name, "r");
	if (m_pStream == NULL) 
	{
// AP: This bit added by me -----------------------------------------------------------
		// Not found so try to open from the .exe dir
		if ((m_pStream = fopen(GetExePath() + tip_name, "r")) == NULL)
// ------------------------------------------------------------------------------------
		{
			VERIFY(m_strTip.LoadString(CG_IDS_FILE_ABSENT));
			return;
		}
	} 

	// If the timestamp in the INI file is different from the timestamp of
	// the tips file, then we know that the tips file has been modified
	// Reset the file position to 0 and write the latest timestamp to the
	// ini file
	struct _stat buf;
	_fstat(_fileno(m_pStream), &buf);
	CString strCurrentTime = ctime(&buf.st_ctime);
	strCurrentTime.TrimRight();
	CString strStoredTime = 
		aa->GetProfileString(szSection, szTimeStamp, NULL);
	if (strCurrentTime != strStoredTime) 
	{
		iFilePos = 0;
		aa->WriteProfileString(szSection, szTimeStamp, strCurrentTime);
	}

	if (fseek(m_pStream, iFilePos, SEEK_SET) != 0) 
	{
		AfxMessageBox(CG_IDP_FILE_CORRUPT);
	}
	else 
	{
		GetNextTipString(m_strTip);
	}
}
コード例 #2
0
ファイル: HexFileList.cpp プロジェクト: KB3NZQ/hexedit4
void CHexFileList::ReadList()
{
	ClearAll();

	if (ReadFile())
	{
		// Update m_arrNames to match
		for (int ii = 0; ii < name_.size() && ii < m_nSize; ++ii)
			m_arrNames[ii] = name_[name_.size()-ii-1];
	}
	else
	{
		// Call base class to get file names from the registry
		CRecentFileList::ReadList();

		// Get other parameters using old registry entries (for backward compatibility)
		int ii;
		CString fnum;
		struct
		{
			union
			{
				DWORD disp_state_;
				struct display_bits display_;
			};
		} tt;

		// Read options for each file of the MRU list
		for (ii = m_nSize - 1; ii >= 0; ii--)
		{
			if (m_arrNames[ii].IsEmpty())
				continue;

			CString ss;

			ss = m_arrNames[ii];
			name_.push_back(ss);
			ss.MakeUpper();
			hash_.push_back(str_hash(ss));
			opened_.push_back(time(NULL));
			data_.push_back("");

			fnum.Format("File%d", ii+1);
			SetData(name_.size()-1, CMD, theApp.GetProfileInt(fnum, "WindowState", SW_SHOWNORMAL));
			SetData(name_.size()-1, TOP, (int)theApp.GetProfileInt(fnum, "WindowTop", -30000));
			SetData(name_.size()-1, LEFT, (int)theApp.GetProfileInt(fnum, "WindowLeft", -30000));
			SetData(name_.size()-1, BOTTOM, (int)theApp.GetProfileInt(fnum, "WindowBottom", -30000));
			SetData(name_.size()-1, RIGHT, (int)theApp.GetProfileInt(fnum, "WindowRight", -30000));

			SetData(name_.size()-1, COLUMNS, __min(CHexEditView::max_buf, __max(4, theApp.GetProfileInt(fnum, "Columns", theApp.open_rowsize_))));
			SetData(name_.size()-1, GROUPING,__max(2, theApp.GetProfileInt(fnum, "Grouping", theApp.open_group_by_)));
			SetData(name_.size()-1, OFFSET, __min(atoi(GetData(name_.size()-1, COLUMNS))-1, theApp.GetProfileInt(fnum, "Offset", theApp.open_offset_)));

			ss = theApp.GetProfileString(fnum, "Scheme");
			ss.Replace("|", "_");                               // A scheme name may no longer contain a vertical bar (|)
			SetData(name_.size()-1, SCHEME, ss);

			ss = theApp.GetProfileString(fnum, "Font");
			CString strTemp;
			AfxExtractSubString(strTemp, ss, 0, ',');
			SetData(name_.size()-1, FONT, strTemp);
			AfxExtractSubString(strTemp, ss, 1, ',');
			SetData(name_.size()-1, HEIGHT, strTemp);

			ss = theApp.GetProfileString(fnum, "OemFont");
			AfxExtractSubString(strTemp, ss, 0, ',');
			SetData(name_.size()-1, OEMFONT, strTemp);
			AfxExtractSubString(strTemp, ss, 1, ',');
			SetData(name_.size()-1, OEMHEIGHT, strTemp);

			// Read the option values, defaulting to the global (theApp.open_*) values
			if ((tt.disp_state_ = (int)theApp.GetProfileInt(fnum, "DisplayState", -1)) == -1)

			if (!tt.display_.hex_area && !tt.display_.char_area)
				tt.display_.hex_area = TRUE;
			if (!tt.display_.hex_area)
				tt.display_.edit_char = TRUE;
			else if (!tt.display_.char_area)
				tt.display_.edit_char = FALSE;
			if (tt.display_.control > 2)
				tt.display_.control = 0;
			SetData(name_.size()-1, DISPLAY, tt.disp_state_);

			SetData(name_.size()-1, DOC_FLAGS, theApp.GetProfileInt(fnum, "KeepTimes", 0));
			SetData(name_.size()-1, FORMAT, theApp.GetProfileString(fnum, "FormatFile"));

			SetData(name_.size()-1, SELSTART, theApp.GetProfileString(fnum, "SelStart64"));
			SetData(name_.size()-1, SELEND, theApp.GetProfileString(fnum, "SelEnd64"));
			SetData(name_.size()-1, POS, theApp.GetProfileString(fnum, "Pos64"));
			SetData(name_.size()-1, MARK, theApp.GetProfileString(fnum, "Mark64"));

			SetData(name_.size()-1, HIGHLIGHTS, theApp.GetProfileString(fnum, "Highlights"));
		}

		// Now delete the recent file list key (and old one) and all files
		theApp.WriteProfileString(_T("RecentFiles"), NULL, NULL);
		theApp.WriteProfileString(_T("Recent File List"), NULL, NULL);
		for (ii = 0; ii < 16; ++ii)                      // There may be up to 16 entries (some old unused ones)
		{
			fnum.Format("File%d", ii+1);

			theApp.WriteProfileString(fnum, NULL, NULL); // Delete this recent file entry
		}
	}

	((CMainFrame *)AfxGetMainWnd())->UpdateExplorer();  // make sure our explorer window shows info we have just loaded
}