+++ /dev/null
-#include "ReportDialog.h"\r
-#include "Unfrag.h"\r
-#include "Fraginator.h"\r
-#include "DriveVolume.h"\r
-#include "Defragment.h"\r
-#include "resource.h"\r
-\r
-\r
-void SetReportInfo (HWND Dlg, DefragReport &Report, uint32 BytesDivisor, const wchar_t *BytesUnits, bool Fractional)\r
-{\r
- wchar_t Text[1000];\r
- wchar_t Text2[1000];\r
- wchar_t Text3[1000];\r
-\r
- memset (Text, 0, sizeof (Text));\r
-\r
- // Volume name\r
- SetDlgItemText (Dlg, IDC_DRIVELETTER, Report.RootPath.c_str());\r
-\r
- // Volume label\r
- SetDlgItemText (Dlg, IDC_VOLUMELABEL, Defrag->GetVolume().GetVolumeInfo().Name.c_str());\r
-\r
- // Volume Serial\r
- SetDlgItemText (Dlg, IDC_VOLUMESERIAL, Defrag->GetVolume().GetVolumeInfo().Serial.c_str());\r
-\r
- // File System\r
- SetDlgItemText (Dlg, IDC_FILESYSTEM, Defrag->GetVolume().GetVolumeInfo().FileSystem.c_str());\r
-\r
- // DiskSizeBytes\r
- if (Fractional)\r
- {\r
- swprintf (Text, L"%.2f %s", (double)(signed)(Report.DiskSizeBytes /\r
- (BytesDivisor / 1024)) / 1024.0, BytesUnits);\r
- }\r
- else\r
- {\r
- AddCommas (Text, Report.DiskSizeBytes / BytesDivisor);\r
- wcscat (Text, L" ");\r
- wcscat (Text, BytesUnits);\r
- }\r
-\r
- SetDlgItemText (Dlg, IDC_DISKSIZEBYTES, Text);\r
-\r
- // DiskFreeBytes\r
- if (Fractional)\r
- {\r
- swprintf (Text, L"%.2f %s", (double)(signed)(Defrag->GetVolume().GetVolumeInfo().FreeBytes /\r
- (BytesDivisor / 1024)) / 1024.0, BytesUnits);\r
- }\r
- else\r
- {\r
- AddCommas (Text, Defrag->GetVolume().GetVolumeInfo().FreeBytes / BytesDivisor);\r
- wcscat (Text, L" ");\r
- wcscat (Text, BytesUnits);\r
- }\r
- SetDlgItemText (Dlg, IDC_DISKFREEBYTES, Text);\r
-\r
- // DiskSizeClusters\r
- AddCommas (Text, Defrag->GetVolume().GetVolumeInfo().ClusterCount);\r
- wcscat (Text, L" clusters");\r
- SetDlgItemText (Dlg, IDC_DISKSIZECLUSTERS, Text);\r
-\r
- // DiskClusterSize\r
- swprintf (Text, L"%u bytes", Defrag->GetVolume().GetVolumeInfo().ClusterSize);\r
- SetDlgItemText (Dlg, IDC_DISKCLUSTERSIZE, Text);\r
-\r
- // DirsCount\r
- AddCommas (Text, Report.DirsCount);\r
- SetDlgItemText (Dlg, IDC_DIRSCOUNT, Text);\r
-\r
- // FilesCount\r
- AddCommas (Text, Report.FilesCount);\r
- SetDlgItemText (Dlg, IDC_FILESCOUNT, Text);\r
-\r
- // FilesFragged\r
- swprintf (Text, L"(%.2f%%)", Report.PercentFragged);\r
- AddCommas (Text2, Report.FraggedFiles.size());\r
- swprintf (Text3, L"%s %s", Text, Text2);\r
- SetDlgItemText (Dlg, IDC_FILESFRAGGED, Text3);\r
-\r
- // Average Frags\r
- swprintf (Text, L"%.2f", Report.AverageFragments);\r
- SetDlgItemText (Dlg, IDC_AVERAGEFRAGS, Text);\r
-\r
- // FilesSizeBytes\r
- if (Fractional)\r
- {\r
- swprintf (Text, L"%.2f %s", (double)(signed)(Report.FilesSizeBytes /\r
- (BytesDivisor / 1024)) / 1024.0, BytesUnits);\r
- }\r
- else\r
- {\r
- AddCommas (Text, Report.FilesSizeBytes / (uint64)BytesDivisor);\r
- wcscat (Text, L" ");\r
- wcscat (Text, BytesUnits);\r
- }\r
- SetDlgItemText (Dlg, IDC_FILESSIZEBYTES, Text);\r
-\r
- // Files SizeOnDisk\r
- if (Fractional)\r
- {\r
- swprintf (Text, L"%.2f %s", (double)(signed)((Report.FilesSizeBytes + Report.FilesSlackBytes) /\r
- (BytesDivisor / 1024)) / 1024.0, BytesUnits);\r
- }\r
- else\r
- {\r
- AddCommas (Text, (Report.FilesSizeBytes + Report.FilesSlackBytes) / (uint64)BytesDivisor);\r
- wcscat (Text, L" ");\r
- wcscat (Text, BytesUnits);\r
-\r
- }\r
- SetDlgItemText (Dlg, IDC_FILESSIZEONDISK, Text);\r
-\r
- // FilesSlackBytes\r
- if (Fractional)\r
- {\r
- swprintf (Text, L"%.2f %s", (double)(signed)(Report.FilesSlackBytes /\r
- (BytesDivisor / 1024)) / 1024.0, BytesUnits);\r
- }\r
- else\r
- {\r
- AddCommas (Text, Report.FilesSlackBytes / BytesDivisor);\r
- wcscat (Text, L" ");\r
- wcscat (Text, BytesUnits);\r
- }\r
- swprintf (Text2, L"(%.2f%%)", Report.PercentSlack);\r
- swprintf (Text3, L"%s %s", Text2, Text);\r
- SetDlgItemText (Dlg, IDC_FILESSLACKBYTES, Text3);\r
-\r
- // Recommendation\r
- bool PFRec = false; // Recommend based off percent fragged files?\r
- bool AFRec = false; // Recommend based off average fragments per file?\r
-\r
- if (Report.PercentFragged >= 5.0f)\r
- PFRec = true;\r
-\r
- if (Report.AverageFragments >= 1.1f)\r
- AFRec = true;\r
-\r
- wcscpy (Text, L"* ");\r
-\r
- if (PFRec)\r
- {\r
- swprintf\r
- (\r
- Text2,\r
- L"%.2f%% of the files on this volume are fragmented. ",\r
- Report.PercentFragged\r
- );\r
-\r
- wcscat (Text, Text2);\r
- }\r
-\r
- if (AFRec)\r
- {\r
- swprintf\r
- (\r
- Text2,\r
- L"The average fragments per file (%.2f) indicates a high degree of fragmentation. ",\r
- Report.AverageFragments\r
- );\r
-\r
- wcscat (Text, Text2);\r
- }\r
-\r
- if (Report.PercentFragged < 5.0f && Report.AverageFragments < 1.1f)\r
- swprintf (Text, L"* No defragmentation is necessary at this point.");\r
- else\r
- if (Report.PercentFragged < 15.0f && Report.AverageFragments < 1.3f)\r
- wcscat (Text, L"It is recommended that you perform a Fast Defrag.");\r
- else\r
- wcscat (Text, L"It is recommended that you perform an Extensive Defrag.");\r
-\r
- // Should we recommend a smaller cluster size?\r
- if (Report.PercentSlack >= 10.0f)\r
- {\r
- swprintf\r
- (\r
- Text2,\r
- L"\n* A large amount of disk space (%.2f%%) is being lost "\r
- L"due to a large (%u bytes) cluster size. It is recommended "\r
- L"that you use a disk utility such as Partition Magic to "\r
- L"reduce the cluster size of this volume.",\r
- Report.PercentSlack,\r
- Defrag->GetVolume().GetVolumeInfo().ClusterSize\r
- );\r
-\r
- wcscat (Text, Text2);\r
- }\r
-\r
- SetDlgItemText (Dlg, IDC_RECOMMEND, Text);\r
-\r
- return;\r
-}\r
-\r
-\r
-INT_PTR CALLBACK ReportDialogProc (HWND Dlg, UINT Msg, WPARAM WParam, LPARAM LParam)\r
-{\r
- switch (Msg)\r
- {\r
- case WM_INITDIALOG:\r
- SetReportInfo (Dlg, Defrag->GetDefragReport (), 1, L"bytes", false);\r
- return (1);\r
-\r
- case WM_COMMAND:\r
- switch (LOWORD(WParam))\r
- {\r
- case IDC_REPORTOK:\r
- EndDialog (Dlg, 0);\r
- return (1);\r
-\r
- case IDC_GIGABYTES:\r
- SetReportInfo (Dlg, Defrag->GetDefragReport (), 1024*1024*1024, L"GB", true);\r
- return (1);\r
-\r
- case IDC_MEGABYTES:\r
- SetReportInfo (Dlg, Defrag->GetDefragReport (), 1024*1024, L"MB", false);\r
- return (1);\r
-\r
- case IDC_KILOBYTES:\r
- SetReportInfo (Dlg, Defrag->GetDefragReport (), 1024, L"KB", false);\r
- return (1);\r
-\r
- case IDC_BYTES:\r
- SetReportInfo (Dlg, Defrag->GetDefragReport (), 1, L"bytes", false);\r
- return (1);\r
- }\r
- }\r
-\r
- return (0);\r
-}\r