mirror of
https://github.com/bobranten/Ext4Fsd.git
synced 2025-10-30 05:18:31 -05:00
Ext4Fsd master
This commit is contained in:
168
Ext2Mgr/DelDeadLetter.cpp
Normal file
168
Ext2Mgr/DelDeadLetter.cpp
Normal file
@@ -0,0 +1,168 @@
|
||||
// DelDeadLetter.cpp : implementation file
|
||||
//
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "ext2mgr.h"
|
||||
#include "DelDeadLetter.h"
|
||||
|
||||
#ifdef _DEBUG
|
||||
#define new DEBUG_NEW
|
||||
#undef THIS_FILE
|
||||
static char THIS_FILE[] = __FILE__;
|
||||
#endif
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// CDelDeadLetter dialog
|
||||
|
||||
|
||||
CDelDeadLetter::CDelDeadLetter(CWnd* pParent /*=NULL*/)
|
||||
: CDialog(CDelDeadLetter::IDD, pParent)
|
||||
{
|
||||
//{{AFX_DATA_INIT(CDelDeadLetter)
|
||||
m_sDrvLetter = _T("");
|
||||
m_bAutoRemoval = g_bAutoRemoveDeadLetters;
|
||||
m_bKeepIt = TRUE;
|
||||
//}}AFX_DATA_INIT
|
||||
}
|
||||
|
||||
|
||||
void CDelDeadLetter::DoDataExchange(CDataExchange* pDX)
|
||||
{
|
||||
CDialog::DoDataExchange(pDX);
|
||||
//{{AFX_DATA_MAP(CDelDeadLetter)
|
||||
DDX_CBString(pDX, IDC_DEAD_LETTER_LIST, m_sDrvLetter);
|
||||
DDX_Check(pDX, IDC_AUTO_REMOVAL, m_bAutoRemoval);
|
||||
DDX_Check(pDX, IDC_REMOVAL_CURRENT, m_bKeepIt);
|
||||
//}}AFX_DATA_MAP
|
||||
}
|
||||
|
||||
|
||||
BEGIN_MESSAGE_MAP(CDelDeadLetter, CDialog)
|
||||
//{{AFX_MSG_MAP(CDelDeadLetter)
|
||||
ON_BN_CLICKED(ID_RELOAD_DL, OnReloadDl)
|
||||
ON_BN_CLICKED(IDC_AUTO_REMOVAL, OnAutoRemoval)
|
||||
ON_BN_CLICKED(IDC_AUTOREMOVALTEXT, OnAutoremovaltext)
|
||||
//}}AFX_MSG_MAP
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// CDelDeadLetter message handlers
|
||||
|
||||
void CDelDeadLetter::OnOK()
|
||||
{
|
||||
CHAR drvChar;
|
||||
PEXT2_LETTER drvLetter = NULL;
|
||||
UpdateData(TRUE);
|
||||
|
||||
drvChar = m_sDrvLetter.GetAt(0);
|
||||
|
||||
if ((drvChar >= '0') && (drvChar <= '9')) {
|
||||
drvLetter = &drvDigits[drvChar - '0'];
|
||||
}
|
||||
|
||||
if ((drvChar >= 'A') && (drvChar <= 'Z')) {
|
||||
drvLetter = &drvLetters[drvChar - 'A'];
|
||||
}
|
||||
|
||||
if (drvLetter) {
|
||||
if (AfxMessageBox("Warning: the driver letter might be still used. Are you\r\n"
|
||||
" sure that make it's a real dead driver letter ?", MB_YESNO) == IDYES) {
|
||||
|
||||
Ext2RemoveMountPoint(drvLetter, !m_bKeepIt);
|
||||
Ext2RemoveDosSymLink(drvLetter->Letter);
|
||||
UpdateDeadLetterList();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
BOOL CDelDeadLetter::OnInitDialog()
|
||||
{
|
||||
CDialog::OnInitDialog();
|
||||
|
||||
UpdateDeadLetterList();
|
||||
|
||||
return TRUE; // return TRUE unless you set the focus to a control
|
||||
// EXCEPTION: OCX Property Pages should return FALSE
|
||||
}
|
||||
|
||||
VOID
|
||||
CDelDeadLetter::UpdateDeadLetterList()
|
||||
{
|
||||
ULONGLONG LetterMask = -1;
|
||||
DWORD i, j;
|
||||
PEXT2_VOLUME volume;
|
||||
PEXT2_DISK disk;
|
||||
PEXT2_PARTITION part;
|
||||
PEXT2_CDROM cdrom;
|
||||
CString str;
|
||||
|
||||
CComboBox *cbList = (CComboBox *)GetDlgItem(IDC_DEAD_LETTER_LIST);
|
||||
|
||||
cbList->ResetContent();
|
||||
|
||||
for (volume = gVols; volume != NULL; volume = volume->Next) {
|
||||
LetterMask &= ~(volume->DrvLetters);
|
||||
}
|
||||
|
||||
for (i = 0; i < g_nDisks; i++) {
|
||||
disk = &gDisks[i];
|
||||
if (disk->DataParts == NULL) {
|
||||
continue;
|
||||
}
|
||||
for (j=0; j < disk->NumParts; j++) {
|
||||
part = &disk->DataParts[j];
|
||||
if (part) {
|
||||
LetterMask &= ~(part->DrvLetters);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < g_nCdroms; i++) {
|
||||
cdrom = &gCdroms[i];
|
||||
LetterMask &= ~(cdrom->DrvLetters);
|
||||
}
|
||||
|
||||
for (i=0; i < 10; i++) {
|
||||
if (drvDigits[i].bUsed && (drvDigits[i].Extent == NULL) &&
|
||||
(LetterMask & (((ULONGLONG) 1) << (i + 32)) ) ) {
|
||||
str.Format("%c: ", drvDigits[i].Letter);
|
||||
str += drvDigits[i].SymLink;
|
||||
cbList->AddString(str);
|
||||
}
|
||||
}
|
||||
|
||||
for (i=0; i <26; i++) {
|
||||
if (drvLetters[i].bUsed && (drvLetters[i].Extent == NULL) &&
|
||||
(LetterMask & (((ULONGLONG) 1) << i)) ) {
|
||||
str.Format("%c: ", drvLetters[i].Letter);
|
||||
str += drvLetters[i].SymLink;
|
||||
cbList->AddString(str);
|
||||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
if (cbList->GetCount() == 0) {
|
||||
AfxMessageBox("No dead driver letters exist :)", MB_OK|MB_ICONINFORMATION);
|
||||
EndDialog(TRUE);
|
||||
}
|
||||
#endif
|
||||
|
||||
cbList->SetCurSel(0);
|
||||
}
|
||||
|
||||
void CDelDeadLetter::OnReloadDl()
|
||||
{
|
||||
// TODO: Add your control notification handler code here
|
||||
UpdateDeadLetterList();
|
||||
}
|
||||
|
||||
void CDelDeadLetter::OnAutoRemoval()
|
||||
{
|
||||
// TODO: Add your control notification handler code here
|
||||
UpdateData(TRUE);
|
||||
g_bAutoRemoveDeadLetters = m_bAutoRemoval;
|
||||
}
|
||||
|
||||
void CDelDeadLetter::OnAutoremovaltext()
|
||||
{
|
||||
}
|
||||
Reference in New Issue
Block a user