|
|
1.1.1.10 root 1: /* 1.1.1.12! root 2: Legal Notice: Some portions of the source code contained in this file were ! 3: derived from the source code of Encryption for the Masses 2.02a, which is ! 4: Copyright (c) 1998-2000 Paul Le Roux and which is governed by the 'License ! 5: Agreement for Encryption for the Masses'. Modifications and additions to ! 6: the original source code (contained in this file) and all other portions of ! 7: this file are Copyright (c) 2003-2008 TrueCrypt Foundation and are governed ! 8: by the TrueCrypt License 2.4 the full text of which is contained in the ! 9: file License.txt included in TrueCrypt binary and source code distribution 1.1.1.10 root 10: packages. */ 1.1.1.6 root 11: 12: #include "Tcdefs.h" 13: #include "Language.h" 14: #include "Dlgcode.h" 15: #include "Progress.h" 1.1.1.12! root 16: #include "../Format/Tcformat.h" 1.1.1.10 root 17: #include "../Format/FormatCom.h" 18: #include "../Format/resource.h" 1.1 root 19: 1.1.1.3 root 20: ULONG prevTime, startTime; 21: __int64 totalSectors; 1.1.1.12! root 22: __int64 resumedPointBytesDone; ! 23: BOOL bProgressBarReverse = FALSE; ! 24: BOOL bRWThroughput = FALSE; ! 25: BOOL bShowStatus = FALSE; ! 26: BOOL bPercentMode = FALSE; 1.1 root 27: 1.1.1.7 root 28: static wchar_t *seconds, *minutes, *hours, *days; 1.1.1.6 root 29: 1.1.1.12! root 30: ! 31: // If bIOThroughput is TRUE, the speed reflects the amount of data read AND written per second (rather than ! 32: // the speed of the "transform cursor"). ! 33: void InitProgressBar (__int64 totalSecs, __int64 bytesDone, BOOL bReverse, BOOL bIOThroughput, BOOL bDisplayStatus, BOOL bShowPercent) 1.1 root 34: { 35: HWND hProgressBar = GetDlgItem (hCurPage, nPbar); 36: SendMessage (hProgressBar, PBM_SETRANGE32, 0, 10000); 37: SendMessage (hProgressBar, PBM_SETSTEP, 1, 0); 38: 1.1.1.12! root 39: bProgressBarReverse = bReverse; ! 40: bRWThroughput = bIOThroughput; ! 41: bShowStatus = bDisplayStatus; ! 42: bPercentMode = bShowPercent; ! 43: 1.1.1.7 root 44: seconds = GetString ("SECONDS"); 1.1.1.6 root 45: minutes = GetString ("MINUTES"); 46: hours = GetString ("HOURS"); 47: days = GetString ("DAYS"); 48: 1.1 root 49: prevTime = startTime = GetTickCount (); 50: totalSectors = totalSecs; 1.1.1.12! root 51: resumedPointBytesDone = bytesDone; 1.1 root 52: } 53: 1.1.1.10 root 54: 1.1.1.12! root 55: BOOL UpdateProgressBar (__int64 nSecNo) 1.1 root 56: { 1.1.1.10 root 57: return UpdateProgressBarProc (nSecNo); 58: } 59: 60: 1.1.1.12! root 61: BOOL UpdateProgressBarProc (__int64 nSecNo) 1.1.1.10 root 62: { 1.1.1.6 root 63: wchar_t text[100]; 64: wchar_t speed[100]; 1.1 root 65: HWND hProgressBar = GetDlgItem (hCurPage, nPbar); 66: int time = GetTickCount (); 67: int elapsed = (time - startTime) / 1000; 68: 1.1.1.12! root 69: unsigned __int64 bytesDone = (bProgressBarReverse ? ((totalSectors - nSecNo + 1) * SECTOR_SIZE) : ((nSecNo + 1) * SECTOR_SIZE)); ! 70: unsigned __int64 bytesPerSec = (bProgressBarReverse ? (resumedPointBytesDone - nSecNo * SECTOR_SIZE + 1) : (bytesDone - resumedPointBytesDone + 1)) / (elapsed + 1); ! 71: ! 72: if (bPercentMode) ! 73: { ! 74: double perc = (double) (100.0 * (bProgressBarReverse ? ((double) (totalSectors - nSecNo)) : ((double) nSecNo)) / (totalSectors == 0 ? 0.0001 : ((double) totalSectors))); ! 75: ! 76: if (perc > 99.999999999) ! 77: wcscpy (text, GetString ("PROCESSED_PORTION_100_PERCENT")); ! 78: else ! 79: _snwprintf (text, sizeof text/2, GetString ("PROCESSED_PORTION_X_PERCENT"), perc); ! 80: ! 81: wcscat (speed, L" "); ! 82: } 1.1.1.7 root 83: else 1.1.1.12! root 84: { ! 85: GetSizeString (bytesDone, text); ! 86: if (bytesDone < (unsigned __int64) BYTES_PER_MB * 1000000) ! 87: swprintf(text, L"%I64d %s ", bytesDone / BYTES_PER_MB, GetString ("MB")); ! 88: else if (bytesDone < (unsigned __int64) BYTES_PER_GB * 1000000) ! 89: swprintf(text, L"%I64d %s ", bytesDone / BYTES_PER_GB, GetString ("GB")); ! 90: else if (bytesDone < (unsigned __int64) BYTES_PER_TB * 1000000) ! 91: swprintf(text, L"%I64d %s ", bytesDone / BYTES_PER_TB, GetString ("TB")); ! 92: else ! 93: swprintf(text, L"%I64d %s ", bytesDone / BYTES_PER_PB, GetString ("PB")); ! 94: } 1.1.1.7 root 95: 1.1.1.6 root 96: SetWindowTextW (GetDlgItem (hCurPage, IDC_BYTESWRITTEN), text); 97: 1.1.1.12! root 98: if (!bShowStatus) ! 99: { ! 100: GetSpeedString (bRWThroughput ? bytesPerSec*2 : bytesPerSec, speed); ! 101: wcscat (speed, L" "); ! 102: SetWindowTextW (GetDlgItem (hCurPage, IDC_WRITESPEED), speed); ! 103: } 1.1 root 104: 105: if (nSecNo < totalSectors) 106: { 1.1.1.12! root 107: __int32 sec = (__int32)((bProgressBarReverse ? nSecNo : (totalSectors - nSecNo)) / ((bytesPerSec == 0 ? 0.00001 : bytesPerSec) / SECTOR_SIZE)); 1.1.1.3 root 108: 1.1.1.6 root 109: if (sec >= 60 * 60 * 24 * 2) 110: swprintf (text, L"%d %s ", sec / (60 * 24 * 60), days); 1.1.1.4 root 111: else if (sec >= 120 * 60) 1.1.1.6 root 112: swprintf (text, L"%d %s ", sec / (60 * 60), hours); 1.1.1.4 root 113: else if (sec >= 120) 1.1.1.6 root 114: swprintf (text, L"%d %s ", sec / 60, minutes); 1.1.1.3 root 115: else 1.1.1.7 root 116: swprintf (text, L"%d %s ", sec, seconds); 1.1.1.3 root 117: 1.1.1.6 root 118: SetWindowTextW (GetDlgItem (hCurPage, IDC_TIMEREMAIN), text); 1.1 root 119: } 120: 121: prevTime = time; 122: 1.1.1.12! root 123: SendMessage (hProgressBar, PBM_SETPOS, ! 124: (int) (10000.0 * (bProgressBarReverse ? (totalSectors - nSecNo) : nSecNo) / (totalSectors == 0 ? 1 : totalSectors)), ! 125: 0); 1.1 root 126: 127: return bThreadCancel; 128: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.