|
|
1.1.1.9 root 1: /* 1.1.1.11! 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.9 root 10: packages. */ 1.1.1.6 root 11: 12: #include "Tcdefs.h" 13: #include "Combo.h" 14: #include "Dlgcode.h" 15: #include "Xml.h" 1.1 root 16: 17: #include <time.h> 18: 1.1.1.6 root 19: #define SIZEOF_MRU_LIST 20 1.1 root 20: 21: void 1.1.1.8 root 22: AddComboItem (HWND hComboBox, char *lpszFileName, BOOL saveHistory) 1.1 root 23: { 24: LPARAM nIndex; 25: 1.1.1.8 root 26: if (!saveHistory) 27: { 28: SendMessage (hComboBox, CB_RESETCONTENT, 0, 0); 29: SetWindowText (hComboBox, lpszFileName); 30: return; 31: } 32: 33: nIndex = SendMessage (hComboBox, CB_FINDSTRINGEXACT, (WPARAM) - 1, (LPARAM) & lpszFileName[0]); 1.1 root 34: 35: if (nIndex == CB_ERR && *lpszFileName) 36: { 1.1.1.6 root 37: time_t lTime = time (NULL); 1.1 root 38: nIndex = SendMessage (hComboBox, CB_ADDSTRING, 0, (LPARAM) & lpszFileName[0]); 39: if (nIndex != CB_ERR) 40: SendMessage (hComboBox, CB_SETITEMDATA, nIndex, (LPARAM) lTime); 41: } 42: 43: if (nIndex != CB_ERR && *lpszFileName) 44: nIndex = SendMessage (hComboBox, CB_SETCURSEL, nIndex, 0); 45: 46: if (*lpszFileName == 0) 47: { 48: SendMessage (hComboBox, CB_SETCURSEL, (WPARAM) - 1, 0); 49: } 50: } 51: 52: 53: LPARAM 1.1.1.8 root 54: MoveEditToCombo (HWND hComboBox, BOOL saveHistory) 1.1 root 55: { 1.1.1.8 root 56: char szTmp[TC_MAX_PATH] = {0}; 57: 58: if (!saveHistory) 59: { 60: GetWindowText (hComboBox, szTmp, sizeof (szTmp)); 61: SendMessage (hComboBox, CB_RESETCONTENT, 0, 0); 62: SetWindowText (hComboBox, szTmp); 63: return 0; 64: } 1.1 root 65: 66: GetWindowText (hComboBox, szTmp, sizeof (szTmp)); 67: 68: if (strlen (szTmp) > 0) 69: { 70: LPARAM nIndex = SendMessage (hComboBox, CB_FINDSTRINGEXACT, (WPARAM) - 1, 71: (LPARAM) & szTmp[0]); 72: if (nIndex == CB_ERR) 73: { 1.1.1.6 root 74: time_t lTime = time (NULL); 1.1 root 75: nIndex = SendMessage (hComboBox, CB_ADDSTRING, 0, (LPARAM) & szTmp[0]); 76: if (nIndex != CB_ERR) 77: SendMessage (hComboBox, CB_SETITEMDATA, nIndex, (DWORD) lTime); 78: } 79: else 80: { 1.1.1.6 root 81: time_t lTime = time (NULL); 1.1 root 82: SendMessage (hComboBox, CB_SETITEMDATA, nIndex, (DWORD) lTime); 83: } 84: 85: return nIndex; 86: } 87: 88: return SendMessage (hComboBox, CB_GETCURSEL, 0, 0); 89: } 90: 91: int 92: GetOrderComboIdx (HWND hComboBox, int *nIdxList, int nElems) 93: { 94: int x = (int) SendMessage (hComboBox, CB_GETCOUNT, 0, 0); 95: if (x != CB_ERR) 96: { 97: int i, nHighIdx = CB_ERR; 1.1.1.6 root 98: time_t lHighTime = -1; 1.1 root 99: 100: for (i = 0; i < x; i++) 101: { 1.1.1.6 root 102: time_t lTime = SendMessage (hComboBox, CB_GETITEMDATA, (WPARAM) i, 0); 1.1 root 103: if (lTime > lHighTime) 104: { 105: int n; 106: for (n = 0; n < nElems; n++) 107: if (nIdxList[n] == i) 108: break; 109: if (n == nElems) 110: { 111: lHighTime = lTime; 112: nHighIdx = i; 113: } 114: } 115: } 116: 117: return nHighIdx; 118: } 119: 120: return CB_ERR; 121: } 122: 123: LPARAM 124: UpdateComboOrder (HWND hComboBox) 125: { 126: LPARAM nIndex; 127: 128: nIndex = SendMessage (hComboBox, CB_GETCURSEL, 0, 0); 129: 130: if (nIndex != CB_ERR) 131: { 1.1.1.6 root 132: time_t lTime = time (NULL); 1.1 root 133: nIndex = SendMessage (hComboBox, CB_SETITEMDATA, (WPARAM) nIndex, 134: (LPARAM) lTime); 135: } 136: 137: return nIndex; 138: } 139: 140: void 1.1.1.6 root 141: LoadCombo (HWND hComboBox) 1.1 root 142: { 1.1.1.6 root 143: DWORD size; 144: char *history = LoadFile (GetConfigPath (FILE_HISTORY), &size); 145: char *xml = history; 146: char volume[MAX_PATH]; 1.1 root 147: 1.1.1.6 root 148: if (xml == NULL) return; 1.1 root 149: 1.1.1.6 root 150: while (xml = XmlFindElement (xml, "volume")) 151: { 1.1.1.9 root 152: XmlGetNodeText (xml, volume, sizeof (volume)); 1.1.1.8 root 153: AddComboItem (hComboBox, volume, TRUE); 1.1.1.6 root 154: xml++; 1.1 root 155: } 156: 157: SendMessage (hComboBox, CB_SETCURSEL, 0, 0); 158: 1.1.1.6 root 159: free (history); 1.1 root 160: } 161: 162: void 1.1.1.6 root 163: DumpCombo (HWND hComboBox, int bClear) 1.1 root 164: { 1.1.1.6 root 165: FILE *f; 1.1 root 166: int i, nComboIdx[SIZEOF_MRU_LIST]; 167: 1.1.1.6 root 168: if (bClear) 169: { 170: DeleteFile (GetConfigPath (FILE_HISTORY)); 171: return; 172: } 173: 174: f = fopen (GetConfigPath (FILE_HISTORY), "w"); 175: if (f == NULL) return; 176: 177: XmlWriteHeader (f); 178: fputs ("\n\t<history>", f); 179: 1.1 root 180: /* combo list part:- get mru items */ 181: for (i = 0; i < SIZEOF_MRU_LIST; i++) 1.1.1.6 root 182: nComboIdx[i] = GetOrderComboIdx (hComboBox, &nComboIdx[0], i); 1.1 root 183: 184: /* combo list part:- write out mru items */ 185: for (i = 0; i < SIZEOF_MRU_LIST; i++) 186: { 1.1.1.6 root 187: char szTmp[MAX_PATH] = { 0 }; 188: 189: if (SendMessage (hComboBox, CB_GETLBTEXTLEN, nComboIdx[i], 0) < sizeof (szTmp)) 1.1 root 190: SendMessage (hComboBox, CB_GETLBTEXT, nComboIdx[i], (LPARAM) & szTmp[0]); 191: 1.1.1.6 root 192: if (szTmp[0] != 0) 1.1.1.9 root 193: { 194: char q[MAX_PATH * 2] = { 0 }; 195: XmlQuoteText (szTmp, q, sizeof (q)); 196: 197: fprintf (f, "\n\t\t<volume>%s</volume>", q); 198: } 1.1 root 199: } 1.1.1.6 root 200: 201: fputs ("\n\t</history>", f); 202: XmlWriteFooter (f); 203: fclose (f); 1.1 root 204: } 205: 206: void 207: ClearCombo (HWND hComboBox) 208: { 209: int i; 210: for (i = 0; i < SIZEOF_MRU_LIST; i++) 211: { 212: SendMessage (hComboBox, CB_DELETESTRING, 0, 0); 213: } 214: } 215: 216: int 217: IsComboEmpty (HWND hComboBox) 218: { 219: return SendMessage (hComboBox, CB_GETCOUNT, 0, 0) < 1; 220: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.