diff options
Diffstat (limited to 'private/utils/windisk/src/label.cxx')
-rw-r--r-- | private/utils/windisk/src/label.cxx | 216 |
1 files changed, 216 insertions, 0 deletions
diff --git a/private/utils/windisk/src/label.cxx b/private/utils/windisk/src/label.cxx new file mode 100644 index 000000000..1ed79f9ab --- /dev/null +++ b/private/utils/windisk/src/label.cxx @@ -0,0 +1,216 @@ +//+--------------------------------------------------------------------------- +// +// Microsoft Windows +// Copyright (C) Microsoft Corporation, 1992 - 1994. +// +// File: label.cxx +// +// Contents: Change volume label. +// +// History: 14-Jan-94 BruceFo Created +// +//---------------------------------------------------------------------------- + +#include "headers.hxx" +#pragma hdrstop + +#include <util.hxx> + +#include "dialogs.h" +#include "fmifs.hxx" +#include "fs.hxx" +#include "help.hxx" +#include "label.hxx" + +////////////////////////////////////////////////////////////////////////////// + +LOCAL BOOL CALLBACK +SetLabelDlgProc( + IN HWND hDlg, + IN UINT msg, + IN WPARAM wParam, + IN LPARAM lParam + ); + +////////////////////////////////////////////////////////////////////////////// + +typedef struct _LABEL_PARAMS +{ + INT MaxLabelLen; + WCHAR Label[MAXLABELLEN]; + + HWND hwndParent; + +} LABEL_PARAMS, *PLABEL_PARAMS; + +////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// + + +//+--------------------------------------------------------------------------- +// +// Function: SetLabelDlgProc +// +// Synopsis: Dialog procedure for Set Label UI. +// +// Arguments: standard Windows dialog procedure +// +// Returns: standard Windows dialog procedure +// +// History: 27-Aug-93 BruceFo Created +// +//---------------------------------------------------------------------------- + +LOCAL BOOL CALLBACK +SetLabelDlgProc( + IN HWND hDlg, + IN UINT msg, + IN WPARAM wParam, + IN LPARAM lParam + ) +{ + static PLABEL_PARAMS labelParams; + + switch (msg) + { + case WM_INITDIALOG: + { + labelParams = (PLABEL_PARAMS)lParam; + + CenterWindow(hDlg, labelParams->hwndParent); + + SendDlgItemMessage( + hDlg, + IDC_LABEL, + EM_LIMITTEXT, + labelParams->MaxLabelLen, + 0L); + + // set the label to the current label, and select it + + SetDlgItemText(hDlg, IDC_LABEL, labelParams->Label); + SendDlgItemMessage(hDlg, IDC_LABEL, EM_SETSEL, 0, (LPARAM)-1); + + SetFocus(GetDlgItem(hDlg, IDC_LABEL)); + + return 0; // called SetFocus + } + + case WM_COMMAND: + + switch (LOWORD(wParam)) + { + case IDOK: + GetDlgItemText( + hDlg, + IDC_LABEL, + labelParams->Label, + ARRAYLEN(labelParams->Label)); + + EndDialog(hDlg, TRUE); + return TRUE; + + case IDCANCEL: + EndDialog(hDlg, FALSE); + return TRUE; + + case IDHELP: + DialogHelp(HC_DM_DLG_LABEL); + return TRUE; + } + + default: + break; + } + + return FALSE; // message not processed +} + + + + +//+--------------------------------------------------------------------------- +// +// Function: DoLabel +// +// Synopsis: Get a volume label from the user, and set the volume label +// +// Arguments: none +// +// Returns: nothing +// +// History: 27-Aug-93 BruceFo Created +// +//---------------------------------------------------------------------------- + +VOID +DoLabel( + IN HWND hwndParent + ) +{ + if (!LoadFmifs()) + { + return; // can't load fmifs.dll, so bail + } + + DWORD ec; + + PREGION_DESCRIPTOR regionDescriptor = &SELECTED_REGION(0); + FDASSERT(regionDescriptor); + PPERSISTENT_REGION_DATA regionData = PERSISTENT_DATA(regionDescriptor); + FDASSERT(regionData); + + LABEL_PARAMS labelParams; + + FileSystemInfoType* pFSInfo = FindFileSystemInfo(regionData->TypeName); + + labelParams.hwndParent = hwndParent; + lstrcpy(labelParams.Label, regionData->VolumeLabel); + + if (NULL == pFSInfo) + { + labelParams.MaxLabelLen = MAXLABELLEN - 1; + } + else + { + labelParams.MaxLabelLen = pFSInfo->cMaxLabelLen; + } + + int fOk = DialogBoxParam( + g_hInstance, + MAKEINTRESOURCE(IDD_LABEL), + hwndParent, + SetLabelDlgProc, + (LPARAM)&labelParams + ); + + if (-1 == fOk) + { + // error creating dialog + daDebugOut((DEB_ERROR, "DialogBox() failed!\n")); + return; + } + + if (fOk) + { + EnsureSameDevice(regionDescriptor); + + WCHAR DriveName[3]; + DriveName[0] = regionData->DriveLetter; + DriveName[1] = L':'; + DriveName[2] = L'\0'; + + SetLastError(NO_ERROR); + (*lpfnSetLabel)(DriveName, labelParams.Label); + ec = GetLastError(); + + if (ec != NO_ERROR) + { + ErrorDialog(ec); + } + else + { + RefreshVolumeData(); + } + } +} |