Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

868 lines
27 KiB

  1. #include "pre.h"
  2. #include <stdio.h>
  3. #include <tchar.h>
  4. #include "lookups.h"
  5. #include "icwextsn.h"
  6. //Defines
  7. #define TEMP_OFFER_DIR TEXT("tempoffer\\")
  8. #define DOWNLOAD_OFFER_DIR TEXT("download\\")
  9. #define VALID_MAIN_OFFER_FILE_TYPE TEXT(".cab")
  10. #define VALID_OFFER_INFO_FILE_TYPE TEXT(".csv")
  11. #define VALID_OFFER_INFO_FILE_NAME TEXT("offers50.csv")
  12. #define VALID_ICW_INFO_FILE_NAME TEXT("ispinfo.csv")
  13. #define ISPINFO_CSV_HEADER "Name,OfferID,Icon,LocalHtm,OEMSpecialIcon,OEMSpecialHtm,ISPFile,CFGFlag,UIFlag,BillingForm,PayCSV,GUID,MIRS,LCID\r\n"
  14. #define INFO_FILE_DELIMITER TEXT(',')
  15. #define BROWSE_FILTER TEXT("CAB Files(*.cab)\0*.cab\0\0")
  16. #define ICWDEBUG_KEY TEXT("software\\microsoft\\Icwdebug")
  17. #define CORPNET_VAL TEXT("CorpNet")
  18. #define DBGPATH_VAL TEXT("DebugPath")
  19. #define ISPFILE_VAL TEXT("IspFile")
  20. #define URL_VAL TEXT("Url")
  21. #define MAX_INT_STR 10
  22. #define CAB_PATH_INDEX 7
  23. #define NUMBER_OF_FIELDS 21
  24. //Prototypes
  25. void InitListView (HWND hwndDlg, int iListViewCtrlID);
  26. void SetupOfferToDebug (HWND hwndDlg, int iListViewCtrlID);
  27. void TryToUpdateListBox (HWND hwndDlg, int iListViewCtrlID, int iEditCtrlID);
  28. void AddOffersToListView (HWND hwndLV, TCHAR* pFileBuff, DWORD dwBuffSize);
  29. void Browse (HWND hwndDlg);
  30. BOOL WriteCSVLine (HWND hwndLV, int iSelItem, HFILE hFile);
  31. BOOL ValidateOfferFile (TCHAR* pszFile, TCHAR* pszValidExt);
  32. BOOL ExpandOfferFileIntoDir (TCHAR* pszFile, TCHAR* pszDir);
  33. //External prototypes
  34. extern BOOL fdi (char* cabinet_fullpath, char* directory);
  35. extern UINT GetDlgIDFromIndex (UINT uPageIndex);
  36. typedef struct IspStruct
  37. {
  38. TCHAR szISPCab [MAX_PATH];
  39. TCHAR szMIRS [MAX_PATH];
  40. TCHAR szISPName [MAX_PATH];
  41. TCHAR szIcon [MAX_PATH];
  42. TCHAR szOEMTeaseHTM [MAX_PATH];
  43. TCHAR szOEMButton [MAX_PATH];
  44. TCHAR szLocalHtm [MAX_PATH];
  45. TCHAR szIspFile [MAX_PATH];
  46. TCHAR szBilling [MAX_PATH];
  47. TCHAR szPayCsv [MAX_PATH];
  48. TCHAR szCab [MAX_PATH];
  49. UINT dwUiFlag;
  50. UINT dwLCID;
  51. UINT dwCfgFlag;
  52. }ISPSTRUCT;
  53. TCHAR* g_pszaHeader[8] = {TEXT("ISP Name "),
  54. TEXT("Country "),
  55. TEXT("Langauage "),
  56. TEXT("Area Code "),
  57. TEXT("Platform "),
  58. TEXT("Product Code "),
  59. TEXT("Promo Code "),
  60. TEXT("Oem ")};
  61. int g_uLastLVSel = -1;
  62. //CountryID to friendly name resolution
  63. inline TCHAR* LookupCountry (TCHAR* pszCid)
  64. {
  65. int iCid = _ttoi(pszCid);
  66. int i;
  67. for (i = 0; i < CIDLEN; i++)
  68. {
  69. if(iCid == aryCIDLookup[i].iCID)
  70. return aryCIDLookup[i].pszCountry;
  71. }
  72. return NULL;
  73. }
  74. //LCID to friendly name resolution
  75. inline TCHAR* LookupLanguage (TCHAR* pszLcid)
  76. {
  77. int iLcid = _ttoi(pszLcid);
  78. for (int i = 0; i < LCIDLEN; i++)
  79. {
  80. if(iLcid == aryLCIDLookup[i].iLCID)
  81. return aryLCIDLookup[i].pszLcid;
  82. }
  83. return NULL;
  84. }
  85. //Platform to friendly name resolution
  86. inline TCHAR* LookupPlatform (TCHAR* pszOSType, TCHAR* pszOSArch, TCHAR* pszOSMajor)
  87. {
  88. int iOsType = _ttoi(pszOSType);
  89. int iOsArch = _ttoi(pszOSArch);
  90. #ifdef UNICODE
  91. CHAR szTmp[MAX_PATH];
  92. wcstombs(szTmp, pszOSMajor, MAX_PATH);
  93. double fOsMajor = atof(szTmp);
  94. #else
  95. double fOsMajor = atof(pszOSMajor);
  96. #endif
  97. for (int i = 0; i < PLATFORMLEN; i++)
  98. {
  99. if ( (iOsType == aryPlatformLookup[i].iOSType) &&
  100. (iOsArch == aryPlatformLookup[i].iOSArch) &&
  101. (fOsMajor == aryPlatformLookup[i].fOSMajor) )
  102. {
  103. return aryPlatformLookup[i].pszOSDescription;
  104. }
  105. }
  106. return NULL;
  107. }
  108. BOOL CALLBACK DebugOfferInitProc (HWND hDlg,BOOL fFirstInit, UINT *puNextPage)
  109. {
  110. if (fFirstInit)
  111. {
  112. PropSheet_SetWizButtons(GetParent(hDlg), 0);
  113. InitListView(hDlg, IDC_ISPCAB_LIST);
  114. }
  115. else
  116. {
  117. HWND hLst = GetDlgItem(hDlg, IDC_ISPCAB_LIST);
  118. if (g_uLastLVSel != -1)
  119. ListView_SetItemState(hLst, g_uLastLVSel, LVIS_FOCUSED | LVIS_SELECTED, LVIS_FOCUSED | LVIS_SELECTED);
  120. if (IsWindowEnabled(hLst))
  121. {
  122. SetFocus(hLst);
  123. PropSheet_SetWizButtons(GetParent(hDlg), PSWIZB_NEXT);
  124. }
  125. else
  126. PropSheet_SetWizButtons(GetParent(hDlg), 0);
  127. }
  128. return TRUE;
  129. }
  130. BOOL CALLBACK DebugOfferOKProc (HWND hDlg, BOOL fForward, UINT *puNextPage, BOOL * pfKeepHistory)
  131. {
  132. if (fForward)
  133. {
  134. g_uLastLVSel = ListView_GetNextItem (GetDlgItem(hDlg, IDC_ISPCAB_LIST), -1, LVNI_SELECTED);
  135. if (g_uLastLVSel != -1)
  136. {
  137. SetupOfferToDebug(hDlg, IDC_ISPCAB_LIST);
  138. return TRUE;
  139. }
  140. else
  141. MessageBox(hDlg, TEXT("Please select an offer to debug"), NULL, MB_OK);
  142. }
  143. return FALSE;
  144. }
  145. BOOL CALLBACK DebugOfferCmdProc (HWND hDlg, WPARAM wParam, LPARAM lParam)
  146. {
  147. DWORD dwMsg = GET_WM_COMMAND_CMD(wParam, lParam);
  148. switch(dwMsg)
  149. {
  150. case EN_CHANGE:
  151. {
  152. TryToUpdateListBox(hDlg, IDC_ISPCAB_LIST, IDC_ISPCAB_PATH);
  153. break;
  154. }
  155. case BN_CLICKED:
  156. {
  157. Browse(hDlg);
  158. return FALSE;
  159. break;
  160. }
  161. default:
  162. break;
  163. }
  164. return TRUE;
  165. }
  166. BOOL CALLBACK DebugOfferNotifyProc
  167. (
  168. HWND hDlg,
  169. WPARAM wParam,
  170. LPARAM lParam
  171. )
  172. {
  173. // Process ListView notifications
  174. switch(((LV_DISPINFO *)lParam)->hdr.code)
  175. {
  176. case NM_DBLCLK:
  177. PropSheet_PressButton(GetParent(hDlg),PSBTN_NEXT);
  178. break;
  179. case NM_SETFOCUS:
  180. case NM_KILLFOCUS:
  181. // update list view
  182. break;
  183. case LVN_ITEMCHANGED:
  184. break;
  185. // The listview is being emptied, or destroyed, either way, our lpSelectedISPInfo
  186. // is no longer valid, since the list view underlying data will be freed.
  187. case LVN_DELETEALLITEMS:
  188. break;
  189. case LVN_DELETEITEM:
  190. // We were notified that an item was deleted.
  191. // so delete the underlying data that it is pointing
  192. // to.
  193. if (((NM_LISTVIEW*)lParam)->lParam)
  194. {
  195. GlobalFree((ISPSTRUCT*)((NM_LISTVIEW*)lParam)->lParam);
  196. ((NM_LISTVIEW*)lParam)->lParam = NULL;
  197. }
  198. break;
  199. default:
  200. break;
  201. }
  202. return TRUE;
  203. }
  204. void InitListView (HWND hwndDlg, int iListViewCtrlID)
  205. {
  206. ASSERT(hwndDlg);
  207. HWND hwndListView;
  208. LVCOLUMN lvColumn;
  209. int iMaxNumHeader;
  210. hwndListView = GetDlgItem(hwndDlg, iListViewCtrlID);
  211. lvColumn.mask = LVCF_TEXT;
  212. iMaxNumHeader = sizeof(g_pszaHeader) / sizeof(g_pszaHeader[0]);
  213. lvColumn.pszText = NULL;
  214. ListView_InsertColumn (hwndListView, 0, &lvColumn);
  215. ListView_SetColumnWidth (hwndListView, 0, 0);
  216. for (int i = 1; i < iMaxNumHeader+1; i++)
  217. {
  218. lvColumn.pszText = g_pszaHeader[i-1];
  219. ListView_InsertColumn (hwndListView, i, &lvColumn);
  220. ListView_SetColumnWidth (hwndListView, i, lstrlen(g_pszaHeader[i-1])*10);
  221. }
  222. //Add drag/drop/ordering and row select
  223. ListView_SetExtendedListViewStyle(hwndListView, LVS_EX_FULLROWSELECT | LVS_EX_HEADERDRAGDROP );
  224. //disable it
  225. Static_Enable(hwndListView, FALSE);
  226. }
  227. BOOL ValidateOfferFile (TCHAR* pszFile, TCHAR* pszValidExt)
  228. {
  229. ASSERT(pszFile);
  230. ASSERT(pszValidExt);
  231. if (GetFileAttributes(pszFile) != 0xFFFFFFFF)
  232. {
  233. TCHAR szExt [_MAX_EXT] = TEXT("\0");
  234. _tsplitpath(pszFile, NULL, NULL, NULL, szExt);
  235. if(!lstrcmpi(szExt, pszValidExt))
  236. return TRUE;
  237. }
  238. return FALSE;
  239. }
  240. BOOL ExpandOfferFileIntoDir (TCHAR* pszFile, TCHAR* pszDir)
  241. {
  242. ASSERT(pszFile);
  243. ASSERT(pszDir);
  244. // Set the current directory.
  245. HKEY hkey = NULL;
  246. TCHAR szAppPathKey[MAX_PATH];
  247. TCHAR szICWPath[MAX_PATH];
  248. TCHAR szCurPath[MAX_PATH];
  249. DWORD dwcbPath = sizeof(szICWPath);
  250. GetCurrentDirectory(ARRAYSIZE(szCurPath), szCurPath);
  251. lstrcpy (szAppPathKey, REGSTR_PATH_APPPATHS);
  252. lstrcat (szAppPathKey, TEXT("\\"));
  253. lstrcat (szAppPathKey, TEXT("ICWCONN1.EXE"));
  254. if ((RegOpenKeyEx(HKEY_LOCAL_MACHINE,szAppPathKey, 0, KEY_QUERY_VALUE, &hkey)) == ERROR_SUCCESS)
  255. {
  256. if (RegQueryValueEx(hkey, TEXT("Path"), NULL, NULL, (BYTE *)szICWPath, (DWORD *)&dwcbPath) == ERROR_SUCCESS)
  257. {
  258. // The Apppaths' have a trailing semicolon that we need to get rid of
  259. // dwcbPath is the lenght of the string including the NULL terminator
  260. int nSize = lstrlen(szICWPath);
  261. szICWPath[nSize-1] = '\0';
  262. SetCurrentDirectory(szICWPath);
  263. }
  264. }
  265. if (hkey)
  266. RegCloseKey(hkey);
  267. //create the temp dir for the offer cab
  268. CreateDirectory(pszDir, NULL);
  269. //
  270. // expand the cab file in the temp directory
  271. //
  272. #ifdef UNICODE
  273. CHAR szFile[MAX_PATH+1];
  274. CHAR szDir[MAX_PATH+1];
  275. wcstombs(szFile, pszFile, MAX_PATH+1);
  276. wcstombs(szDir, pszDir, MAX_PATH+1);
  277. if (fdi(szFile, szDir))
  278. return TRUE;
  279. #else
  280. if (fdi((LPTSTR)(LPCTSTR)pszFile, pszDir))
  281. return TRUE;
  282. #endif
  283. SetCurrentDirectory(szCurPath);
  284. return FALSE;
  285. }
  286. void AddOffersToListView (HWND hwndLV, TCHAR* pFileBuff, DWORD dwBuffSize)
  287. {
  288. TCHAR szField [MAX_PATH] = TEXT("\0");
  289. TCHAR szOs [MAX_INT_STR] = TEXT("\0");
  290. TCHAR szArch [MAX_INT_STR] = TEXT("\0");
  291. TCHAR* pszField = (TCHAR*)&szField;
  292. int i = 0;
  293. int iLen = 0;
  294. LVITEM lvItem;
  295. lvItem.mask = LVIF_TEXT | LVIF_PARAM;
  296. lvItem.pszText = szField;
  297. lvItem.iItem = 0;
  298. lvItem.iSubItem = 0;
  299. TCHAR* pFileBuffStart = pFileBuff;
  300. while((DWORD)(pFileBuff - pFileBuffStart) < dwBuffSize)
  301. {
  302. pszField = (TCHAR*)&szField;
  303. ISPSTRUCT* pIspInfo = (ISPSTRUCT*)GlobalAlloc(GMEM_FIXED | GMEM_ZEROINIT, sizeof(ISPSTRUCT));
  304. if (!pIspInfo)
  305. {
  306. MessageBox(GetParent(hwndLV), TEXT("OUT OF MEMORY!"), NULL, MB_OK);
  307. return;
  308. }
  309. lvItem.lParam = (LPARAM)pIspInfo;
  310. ListView_InsertItem(hwndLV, &lvItem);
  311. while(i <= NUMBER_OF_FIELDS)
  312. {
  313. while(*pFileBuff != ',' && *pFileBuff != '\n')
  314. *pszField++ = *pFileBuff++;
  315. *pFileBuff++;
  316. *pszField++ = '\0';
  317. switch (i)
  318. {
  319. case 0: //mirs
  320. lstrcpy(pIspInfo->szMIRS, szField);
  321. break;
  322. case 1: //isp name
  323. lstrcpy(pIspInfo->szISPName, szField);
  324. ListView_SetItemText(hwndLV, lvItem.iItem, 1, szField);
  325. break;
  326. case 2: //local htm
  327. lstrcpy(pIspInfo->szLocalHtm, szField);
  328. break;
  329. case 3: //icon
  330. lstrcpy(pIspInfo->szIcon, szField);
  331. break;
  332. case 4: //OEM Button
  333. lstrcpy(pIspInfo->szOEMButton, szField);
  334. break;
  335. case 5: //OEM Teaser
  336. lstrcpy(pIspInfo->szOEMTeaseHTM, szField);
  337. break;
  338. case 6: //billing htm
  339. lstrcpy(pIspInfo->szBilling, szField);
  340. break;
  341. case 7: //isp file
  342. lstrcpy(pIspInfo->szIspFile, szField);
  343. break;
  344. case 8: //paycsv file
  345. lstrcpy(pIspInfo->szPayCsv, szField);
  346. break;
  347. case 9: //cab file
  348. lstrcpy(pIspInfo->szCab, szField);
  349. break;
  350. case 10: // LCID
  351. pIspInfo->dwLCID = _ttoi(szField);
  352. ListView_SetItemText(hwndLV, lvItem.iItem, 3, LookupLanguage(szField));
  353. break;
  354. case 11: // Country
  355. ListView_SetItemText(hwndLV, lvItem.iItem, 2, LookupCountry(szField));
  356. break;
  357. case 12: // Areacode
  358. ListView_SetItemText(hwndLV, lvItem.iItem, 4, szField);
  359. break;
  360. case 13: // Exchng
  361. break;
  362. case 14: //prod
  363. ListView_SetItemText(hwndLV, lvItem.iItem, 6, szField);
  364. break;
  365. case 15: //promo
  366. ListView_SetItemText(hwndLV, lvItem.iItem, 7, szField);
  367. break;
  368. case 16: //oem
  369. ListView_SetItemText(hwndLV, lvItem.iItem, 8, szField);
  370. break;
  371. case 17: //os
  372. lstrcpyn(szOs, szField, ARRAYSIZE(szOs));
  373. break;
  374. case 18: //arch
  375. lstrcpyn(szArch, szField, ARRAYSIZE(szOs));
  376. break;
  377. case 19: //major
  378. ListView_SetItemText(hwndLV, lvItem.iItem, 5, LookupPlatform(szOs, szArch, szField));
  379. break;
  380. case 20: //cfg
  381. pIspInfo->dwCfgFlag = _ttoi(szField);
  382. break;
  383. case 21: //ui
  384. pIspInfo->dwUiFlag = _ttoi(szField);
  385. break;
  386. default:
  387. break;
  388. }
  389. pszField = (TCHAR*)&szField;
  390. i++;
  391. }
  392. lvItem.iItem++;
  393. i = 0;
  394. }
  395. pFileBuff = pFileBuffStart;
  396. }
  397. void TryToUpdateListBox (HWND hwndDlg, int iListViewCtrlID, int iEditCtrlID)
  398. {
  399. ASSERT(hwndDlg);
  400. HWND hwndListView = NULL;
  401. HWND hwndEdit = NULL;
  402. HFILE hOfferFile = NULL;
  403. DWORD dwSize = 0;
  404. TCHAR szCabPath [MAX_PATH] = TEXT("\0");
  405. TCHAR szOfferInfoFilePath [MAX_PATH] = TEXT("\0");
  406. void* pFileBuff = NULL;
  407. hwndListView = GetDlgItem(hwndDlg, iListViewCtrlID);
  408. hwndEdit = GetDlgItem(hwndDlg, iEditCtrlID);
  409. GetWindowText(hwndEdit, szCabPath, ARRAYSIZE(szCabPath));
  410. if (!ValidateOfferFile(szCabPath, VALID_MAIN_OFFER_FILE_TYPE))
  411. {
  412. if (IsWindowEnabled(hwndListView))
  413. {
  414. Static_Enable(hwndListView, FALSE);
  415. PropSheet_SetWizButtons(GetParent(hwndDlg), 0);
  416. }
  417. return; //FAILURE
  418. }
  419. RemoveTempOfferDirectory();
  420. if(!ExpandOfferFileIntoDir(szCabPath, TEMP_OFFER_DIR))
  421. return; //FAILURE
  422. lstrcpy(szOfferInfoFilePath, TEMP_OFFER_DIR);
  423. lstrcat(szOfferInfoFilePath, VALID_OFFER_INFO_FILE_NAME);
  424. if (!ValidateOfferFile(szOfferInfoFilePath, VALID_OFFER_INFO_FILE_TYPE))
  425. {
  426. MessageBox(hwndDlg, TEXT("The selected cab is not a valid Offer Wizard 5.0 file."), NULL, MB_OK);
  427. return; //FAILURE
  428. }
  429. #ifdef UNICODE
  430. CHAR szTmp[MAX_PATH+1];
  431. wcstombs(szTmp, szOfferInfoFilePath, MAX_PATH+1);
  432. hOfferFile = _lopen(szTmp, OF_READ | OF_SHARE_EXCLUSIVE);
  433. #else
  434. hOfferFile = _lopen(szOfferInfoFilePath, OF_READ | OF_SHARE_EXCLUSIVE);
  435. #endif
  436. if (hOfferFile)
  437. {
  438. dwSize = GetFileSize((HANDLE)LongToHandle(hOfferFile), NULL);
  439. if(dwSize)
  440. {
  441. pFileBuff = malloc(dwSize + 1);
  442. if (pFileBuff)
  443. {
  444. if (_lread(hOfferFile, pFileBuff, dwSize) != HFILE_ERROR)
  445. {
  446. ListView_DeleteAllItems(hwndListView);
  447. AddOffersToListView(hwndListView, (TCHAR*)pFileBuff, dwSize);
  448. Static_Enable(hwndListView, TRUE);
  449. PropSheet_SetWizButtons(GetParent(hwndDlg), PSWIZB_NEXT);
  450. }
  451. free(pFileBuff);
  452. }
  453. }
  454. _lclose(hOfferFile);
  455. }
  456. }
  457. void Browse (HWND hwndDlg)
  458. {
  459. OPENFILENAME ofn;
  460. TCHAR szNewFileBuff[MAX_PATH + 1] = TEXT("\0");
  461. TCHAR szDesktopPath[MAX_PATH + 1] = TEXT("\0");
  462. ofn.lStructSize = sizeof(OPENFILENAME);
  463. ofn.hwndOwner = hwndDlg;
  464. ofn.lpstrFilter = BROWSE_FILTER;
  465. ofn.lpstrFile = szNewFileBuff;
  466. ofn.nMaxFile = sizeof(szNewFileBuff);
  467. ofn.lpstrFileTitle = NULL;
  468. ofn.lpstrInitialDir = szDesktopPath;
  469. ofn.lpstrTitle = NULL;
  470. ofn.lpstrCustomFilter = (LPTSTR) NULL;
  471. ofn.nMaxCustFilter = 0L;
  472. ofn.nFileOffset = 0;
  473. ofn.nFileExtension = 0;
  474. ofn.lCustData = 0;
  475. ofn.nFilterIndex = 1L;
  476. ofn.nMaxFileTitle = 0;
  477. ofn.Flags = OFN_PATHMUSTEXIST | OFN_HIDEREADONLY |
  478. OFN_EXPLORER | OFN_LONGNAMES;
  479. GetOpenFileName(&ofn);
  480. SetWindowText(GetDlgItem(hwndDlg, IDC_ISPCAB_PATH), ofn.lpstrFile);
  481. }
  482. void SetupOfferToDebug (HWND hwndDlg, int iListViewCtrlID)
  483. {
  484. ASSERT(hwndDlg);
  485. TCHAR szCabPath [MAX_PATH] = TEXT("\0");
  486. TCHAR szFullPath [MAX_PATH] = TEXT("\0");
  487. TCHAR szCSVFile [MAX_PATH] = TEXT("\0");
  488. HWND hwndListView = GetDlgItem(hwndDlg, iListViewCtrlID);
  489. int iItem = ListView_GetSelectionMark(hwndListView);
  490. ISPSTRUCT* pIspStruct = NULL;
  491. LVITEM lvItem;
  492. lvItem.mask = LVIF_PARAM;
  493. lvItem.iItem = iItem;
  494. ListView_GetItem(hwndListView, &lvItem);
  495. pIspStruct = (ISPSTRUCT*)lvItem.lParam;
  496. lstrcpy(szFullPath, TEMP_OFFER_DIR);
  497. lstrcat(szFullPath, pIspStruct->szCab);
  498. if (ValidateOfferFile(szFullPath, VALID_MAIN_OFFER_FILE_TYPE))
  499. {
  500. RemoveDownloadDirectory();
  501. if (ExpandOfferFileIntoDir (szFullPath, DOWNLOAD_OFFER_DIR))
  502. {
  503. HFILE hIspCsvFile = NULL;
  504. lstrcpy(szCSVFile, DOWNLOAD_OFFER_DIR);
  505. lstrcat(szCSVFile, VALID_ICW_INFO_FILE_NAME);
  506. #ifdef UNICODE
  507. CHAR szTmp[MAX_PATH+1];
  508. wcstombs(szTmp, szCSVFile, MAX_PATH+1);
  509. if ((hIspCsvFile = _lcreat(szTmp, 0))!= HFILE_ERROR)
  510. #else
  511. if ((hIspCsvFile = _lcreat(szCSVFile, 0))!= HFILE_ERROR)
  512. #endif
  513. {
  514. //write header
  515. _hwrite(hIspCsvFile, ISPINFO_CSV_HEADER, strlen(ISPINFO_CSV_HEADER));
  516. WriteCSVLine(hwndListView, iItem, hIspCsvFile);
  517. _lclose(hIspCsvFile);
  518. }
  519. }
  520. }
  521. }
  522. // Header Format of the CSV File
  523. #define CSV_FORMAT50 _T("'%s',%d,%s%s,%s%s,%s%s,%s%s,%s%s,%lu,%lu,%s%s,%s%s,%s,%s,%ld\r\n")
  524. // "Name,OfferID,Icon,LocalHtm,OEMSpecialIcon,OEMSpecialHtm,ISPFile,CFGFlag,UIFlag,BillingForm,PayCSV,GUID,MIRS,LCID\r\n";
  525. #define GUID _T("11111111-00000-000000000-0")
  526. BOOL WriteCSVLine (HWND hwndLV, int iSelItem, HFILE hFile)
  527. {
  528. ASSERT(hwndLV);
  529. ASSERT(hFile);
  530. TCHAR szIspCsvLine [1024] = TEXT("\0");
  531. TCHAR szName [MAX_PATH] = TEXT("\0");
  532. ISPSTRUCT* pIspStruct = NULL;
  533. LVITEM lvItem;
  534. lvItem.mask = LVIF_PARAM;
  535. lvItem.iItem = iSelItem;
  536. ListView_GetItemText(hwndLV, iSelItem, 1, szName, sizeof(szName));
  537. ListView_GetItem(hwndLV, &lvItem);
  538. pIspStruct = (ISPSTRUCT*)lvItem.lParam;
  539. wsprintf(szIspCsvLine, CSV_FORMAT50,
  540. pIspStruct->szISPName,
  541. 0,
  542. DOWNLOAD_OFFER_DIR,
  543. pIspStruct->szIcon,
  544. DOWNLOAD_OFFER_DIR,
  545. pIspStruct->szLocalHtm,
  546. (pIspStruct->szOEMButton[0] != TEXT('\0') ? DOWNLOAD_OFFER_DIR : TEXT("")),
  547. (pIspStruct->szOEMButton[0] != TEXT('\0') ? pIspStruct->szOEMButton : TEXT("")),
  548. (pIspStruct->szOEMTeaseHTM[0] != TEXT('\0') ? DOWNLOAD_OFFER_DIR : TEXT("")),
  549. (pIspStruct->szOEMTeaseHTM[0] != TEXT('\0') ? pIspStruct->szOEMTeaseHTM : TEXT("")),
  550. DOWNLOAD_OFFER_DIR,
  551. pIspStruct->szIspFile,
  552. pIspStruct->dwCfgFlag,
  553. pIspStruct->dwUiFlag,
  554. DOWNLOAD_OFFER_DIR,
  555. pIspStruct->szBilling,
  556. DOWNLOAD_OFFER_DIR,
  557. pIspStruct->szPayCsv,
  558. GUID,
  559. pIspStruct->szMIRS,
  560. pIspStruct->dwLCID);
  561. #ifdef UNICODE
  562. CHAR szTmp[1024];
  563. wcstombs(szTmp, szIspCsvLine, 1024);
  564. _hwrite(hFile, szTmp, lstrlenA(szTmp));
  565. #else
  566. _hwrite(hFile, szIspCsvLine, lstrlen(szIspCsvLine));
  567. #endif
  568. return TRUE;
  569. }
  570. /************************************************
  571. *************************************************
  572. *************************************************
  573. ************************************************/
  574. void SetKeyValues (HKEY hKey, DWORD dwCorpNet, DWORD dwDbgPath, DWORD dwIspFile, TCHAR* pszUrl, size_t sizeUrl)
  575. {
  576. RegSetValueEx(hKey,
  577. CORPNET_VAL,
  578. 0,
  579. REG_DWORD,
  580. (LPBYTE)&dwCorpNet,
  581. sizeof(dwCorpNet));
  582. RegSetValueEx(hKey,
  583. DBGPATH_VAL,
  584. 0,
  585. REG_DWORD,
  586. (LPBYTE)&dwDbgPath,
  587. sizeof(dwDbgPath));
  588. RegSetValueEx(hKey,
  589. ISPFILE_VAL,
  590. 0,
  591. REG_DWORD,
  592. (LPBYTE)&dwIspFile,
  593. sizeof(dwIspFile));
  594. RegSetValueEx(hKey,
  595. URL_VAL,
  596. 0,
  597. REG_SZ,
  598. (LPBYTE)pszUrl,
  599. sizeUrl);
  600. }
  601. void GetSettingsFromReg (HKEY hKey, HWND hDlg)
  602. {
  603. DWORD dwVal = 0;
  604. DWORD dwSize = sizeof(dwVal);
  605. TCHAR szUrl [MAX_PATH] = TEXT("\0");
  606. RegQueryValueEx(hKey,
  607. CORPNET_VAL,
  608. 0,
  609. NULL,
  610. (LPBYTE)&dwVal,
  611. &dwSize);
  612. Button_SetCheck(GetDlgItem(hDlg, IDC_USE_NETWORK), (BOOL)dwVal);
  613. Button_SetCheck(GetDlgItem(hDlg, IDC_MODEM), !(BOOL)dwVal);
  614. RegQueryValueEx(hKey,
  615. DBGPATH_VAL,
  616. 0,
  617. NULL,
  618. (LPBYTE)&dwVal,
  619. &dwSize);
  620. Button_SetCheck(GetDlgItem(hDlg, IDC_SIGNUP_PATH), (BOOL)dwVal);
  621. Button_SetCheck(GetDlgItem(hDlg, IDC_AUTO_PATH), !(BOOL)dwVal);
  622. RegQueryValueEx(hKey,
  623. ISPFILE_VAL,
  624. 0,
  625. NULL,
  626. (LPBYTE)&dwVal,
  627. &dwSize);
  628. Button_SetCheck(GetDlgItem(hDlg, IDC_ISP_URL), (BOOL)dwVal);
  629. Button_SetCheck(GetDlgItem(hDlg, IDC_OTHER_URL), !(BOOL)dwVal);
  630. dwSize = sizeof(szUrl);
  631. RegQueryValueEx(hKey,
  632. URL_VAL,
  633. 0,
  634. NULL,
  635. (LPBYTE)&szUrl,
  636. &dwSize);
  637. SetWindowText(GetDlgItem(hDlg, IDC_URL), szUrl);
  638. Edit_Enable(GetDlgItem(hDlg, IDC_URL), !(BOOL)dwVal);
  639. }
  640. void SetSettingsInReg (HWND hDlg)
  641. {
  642. HKEY hKey = NULL;
  643. DWORD dwAction = 0;
  644. DWORD dwCorpNet = 0;
  645. DWORD dwDbgPath = 0;
  646. DWORD dwIspFile = 0;
  647. TCHAR szUrl [MAX_PATH] = TEXT("\0");
  648. RegOpenKeyEx(HKEY_LOCAL_MACHINE,
  649. ICWDEBUG_KEY,
  650. 0,
  651. KEY_ALL_ACCESS,
  652. &hKey);
  653. dwCorpNet = Button_GetCheck(GetDlgItem(hDlg, IDC_USE_NETWORK));
  654. dwDbgPath = Button_GetCheck(GetDlgItem(hDlg, IDC_SIGNUP_PATH));
  655. dwIspFile = Button_GetCheck(GetDlgItem(hDlg, IDC_ISP_URL));
  656. GetWindowText(GetDlgItem(hDlg, IDC_URL), szUrl, ARRAYSIZE(szUrl));
  657. SetKeyValues(hKey, dwCorpNet, dwDbgPath, dwIspFile, szUrl, lstrlen(szUrl));
  658. lstrcpy(gpWizardState->cmnStateData.ispInfo.szIspURL, szUrl);
  659. RegCloseKey(hKey);
  660. }
  661. void InitRegKeySettings (HWND hDlg)
  662. {
  663. HKEY hKey = NULL;
  664. DWORD dwAction = 0;
  665. RegCreateKeyEx(HKEY_LOCAL_MACHINE,
  666. ICWDEBUG_KEY,
  667. 0,
  668. NULL,
  669. 0,
  670. KEY_ALL_ACCESS,
  671. NULL,
  672. &hKey,
  673. &dwAction);
  674. if (dwAction == REG_CREATED_NEW_KEY)
  675. SetKeyValues(hKey, 0, 1, 1, TEXT("\0"), 1);
  676. GetSettingsFromReg(hKey, hDlg);
  677. RegCloseKey(hKey);
  678. }
  679. BOOL CALLBACK DebugSettingsInitProc (HWND hDlg,BOOL fFirstInit, UINT *puNextPage)
  680. {
  681. if(!fFirstInit)
  682. InitRegKeySettings(hDlg);
  683. PropSheet_SetWizButtons(GetParent(hDlg), PSWIZB_BACK | PSWIZB_NEXT);
  684. return TRUE;
  685. }
  686. BOOL CALLBACK DebugSettingsOKProc (HWND hDlg, BOOL fForward, UINT *puNextPage, BOOL * pfKeepHistory)
  687. {
  688. SetSettingsInReg(hDlg);
  689. if (fForward)
  690. {
  691. if(Button_GetCheck(GetDlgItem(hDlg, IDC_USE_NETWORK)))
  692. gpWizardState->cmnStateData.dwFlags |= ICW_CFGFLAG_MODEMOVERRIDE;
  693. else
  694. gpWizardState->cmnStateData.dwFlags &= ~ICW_CFGFLAG_MODEMOVERRIDE;
  695. if(!Button_GetCheck(GetDlgItem(hDlg, IDC_SIGNUP_PATH)))
  696. gpWizardState->cmnStateData.dwFlags |= ICW_CFGFLAG_AUTOCONFIG;
  697. else
  698. gpWizardState->cmnStateData.dwFlags &= ~ICW_CFGFLAG_AUTOCONFIG;
  699. if(!Button_GetCheck(GetDlgItem(hDlg, IDC_ISP_URL)))
  700. gpWizardState->cmnStateData.dwFlags |= ICW_CFGFLAG_ISPURLOVERRIDE;
  701. else
  702. gpWizardState->cmnStateData.dwFlags &= ~ICW_CFGFLAG_ISPURLOVERRIDE;
  703. if (LoadICWCONNUI(GetParent(hDlg),
  704. GetDlgIDFromIndex(ORD_PAGE_ICWDEBUG_SETTINGS),
  705. IDD_PAGE_END,
  706. gpWizardState->cmnStateData.dwFlags))
  707. {
  708. if( DialogIDAlreadyInUse(g_uICWCONNUIFirst))
  709. {
  710. // we're about to jump into the external apprentice, and we don't want
  711. // this page to show up in our history list, infact, we need to back
  712. // the history up 1, because we are going to come back here directly
  713. // from the DLL, not from the history list.
  714. *pfKeepHistory = FALSE;
  715. *puNextPage = g_uICWCONNUIFirst;
  716. }
  717. }
  718. }
  719. return TRUE;
  720. }
  721. BOOL CALLBACK DebugSettingsCmdProc (HWND hDlg, WPARAM wParam, LPARAM lParam)
  722. {
  723. DWORD dwMsg = GET_WM_COMMAND_CMD(wParam, lParam);
  724. switch(dwMsg)
  725. {
  726. case BN_CLICKED:
  727. {
  728. if((GET_WM_COMMAND_ID(wParam, lParam) == IDC_ISP_URL) ||
  729. (GET_WM_COMMAND_ID(wParam, lParam) == IDC_OTHER_URL))
  730. Edit_Enable(GetDlgItem(hDlg, IDC_URL), !Button_GetCheck(GetDlgItem(hDlg, IDC_ISP_URL)));
  731. break;
  732. }
  733. default:
  734. break;
  735. }
  736. return TRUE;
  737. }