######### FUNCTION THAT CALLS THE DIALOG BOX ######### void CCompilerDlg::OnBnClickedExtractbyZip() { ExtractbyZip dlg; dlg.DoModal(); } ######### .H FILE ######### #pragma once // ExtractbyZip dialog class ExtractbyZip : public CDialog { DECLARE_DYNAMIC(ExtractbyZip) public: ExtractbyZip(CWnd* pParent = NULL); // standard constructor virtual ~ExtractbyZip(); // Dialog Data enum { IDD = IDD_EXTRACTBYZIP }; //}}AFX_DATA CListBox m_List; protected: DWORD m_ListStyle; virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support public: virtual BOOL PreTranslateMessage(MSG* pMsg); DECLARE_MESSAGE_MAP() public: afx_msg void OnBnClickedLoadinputfile(); public: afx_msg void OnBnClickedLoadzipfile(); public: afx_msg void OnBnClickedQuit(); public: afx_msg void OnBnClickedAddzip(); public: afx_msg void OnBnClickedDeletezip(); public: afx_msg void OnBnClickedSavezipfile(); }; ######### .CPP FILE BELOW ########### #pragma once // ExtractbyZip dialog class ExtractbyZip : public CDialog { DECLARE_DYNAMIC(ExtractbyZip) public: ExtractbyZip(CWnd* pParent = NULL); // standard constructor virtual ~ExtractbyZip(); // Dialog Data enum { IDD = IDD_EXTRACTBYZIP }; //}}AFX_DATA CListBox m_List; protected: DWORD m_ListStyle; virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support public: virtual BOOL PreTranslateMessage(MSG* pMsg); DECLARE_MESSAGE_MAP() public: afx_msg void OnBnClickedLoadinputfile(); public: afx_msg void OnBnClickedLoadzipfile(); public: afx_msg void OnBnClickedQuit(); public: afx_msg void OnBnClickedAddzip(); public: afx_msg void OnBnClickedDeletezip(); public: afx_msg void OnBnClickedSavezipfile(); }; ######### .CPP FILE ######### // ExtractbyZip.cpp : implementation file // #include "stdafx.h" #include "Compiler.h" #include "ExtractbyZip.h" #include "Purge.h" CString ZipCodeFile; CString ZipOutputFile; CString SimplePickOpenFile(CWnd *pWnd, LPCTSTR pszTitle, LPCTSTR pszFilter); int VerifyInputFile(const char *File); int validnumber(const char *string); int VerifyZipcodeFile(const char *File); char *strip_invalid_chars(char *string); CString SimplePickSaveFile(CWnd *pWnd, LPCTSTR pszTitle); // ExtractbyZip dialog IMPLEMENT_DYNAMIC(ExtractbyZip, CDialog) ExtractbyZip::ExtractbyZip(CWnd* pParent /*=NULL*/) : CDialog(ExtractbyZip::IDD, pParent) { } ExtractbyZip::~ExtractbyZip() { } void ExtractbyZip::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Control(pDX, IDC_ZIPCODES, m_List); } BEGIN_MESSAGE_MAP(ExtractbyZip, CDialog) ON_BN_CLICKED(IDC_LOADINPUTFILE, &ExtractbyZip::OnBnClickedLoadinputfile) ON_BN_CLICKED(IDC_LOADZIPFILE, &ExtractbyZip::OnBnClickedLoadzipfile) ON_BN_CLICKED(IDC_QUIT, &ExtractbyZip::OnBnClickedQuit) ON_BN_CLICKED(IDC_ADDZIP, &ExtractbyZip::OnBnClickedAddzip) ON_BN_CLICKED(IDC_DELETEZIP, &ExtractbyZip::OnBnClickedDeletezip) ON_BN_CLICKED(IDC_SAVEZIPFILE, &ExtractbyZip::OnBnClickedSavezipfile) END_MESSAGE_MAP() BOOL ExtractbyZip::PreTranslateMessage(MSG* pMsg) { int idCtrl= this->GetFocus()->GetDlgCtrlID(); if(idCtrl == IDC_INPUTZIP && pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN) { OnBnClickedAddzip(); return TRUE; } else { return CDialog::PreTranslateMessage(pMsg); } } // ExtractbyZip message handlers void ExtractbyZip::OnBnClickedLoadinputfile() { CString File; LPCTSTR filter = _T("Output Files (*.output)\0*.output\0"); File = SimplePickOpenFile(NULL, NULL, filter); if (File != "" && VerifyInputFile(File)) { if (m_List.GetCount() > 0) { GetDlgItem(IDC_START)->EnableWindow(TRUE); } ZipOutputFile = File; SetDlgItemText(IDC_LOADFILE, File); } else { SetDlgItemText(IDC_LOADFILE, NULL); GetDlgItem(IDC_START)->EnableWindow(FALSE); } } int VerifyZipcodeFile(const char *File) { CString error, temp; const int BUFSIZE = 1024; char buf[BUFSIZE]; FILE *zfile; fopen_s(&zfile, File, "r"); if (zfile == NULL) { error.Format("ERROR: Unable to open %s.", File); AfxMessageBox(error); return 0; } while (fgets(buf, BUFSIZE, zfile)) { strcpy_s(buf, strip_invalid_chars(buf)); if (!validnumber(buf)) { error.Format("ERROR: The zip code file you selected isn't a valid zip code file!"); AfxMessageBox(error); fclose(zfile); return 0; } } fclose(zfile); return 1; } void ExtractbyZip::OnBnClickedLoadzipfile() { CString File, AddrFile; LPCTSTR filter = _T("Zip Code Files (*.zipcode)\0*.zipcode\0"); const int BUFSIZE = 1024; char buf[BUFSIZE]; FILE *zfile; File = SimplePickOpenFile(NULL, NULL, filter); if (File != "" && VerifyZipcodeFile(File)) { SetDlgItemText(IDC_ZIPCODEFILE, File); m_List.ResetContent(); ZipCodeFile = File; fopen_s(&zfile, File, "r"); while (fgets(buf, BUFSIZE, zfile)) { strcpy_s(buf, strip_invalid_chars(buf)); m_List.AddString(buf); } fclose(zfile); if (m_List.GetCount() > 0) { GetDlgItemText(IDC_ADDRFILE, AddrFile); if (AddrFile != "") GetDlgItem(IDC_START)->EnableWindow(TRUE); GetDlgItem(IDC_SAVEZIPFILE)->EnableWindow(TRUE); } else { GetDlgItem(IDC_START)->EnableWindow(FALSE); GetDlgItem(IDC_SAVEZIPFILE)->EnableWindow(FALSE); } } else { SetDlgItemText(IDC_ZIPCODEFILE, NULL); } } void ExtractbyZip::OnBnClickedQuit() { EndDialog(IDD_EXTRACTBYZIP); } void ExtractbyZip::OnBnClickedAddzip() { CString input, AddrFile; GetDlgItemText(IDC_INPUTZIP, input); if (input == "") { AfxMessageBox("You haven't input a zip code!"); } else { if (!validnumber(input) || (strlen(input) != 5)) { AfxMessageBox("You have input an invalid zip code."); } else if (!m_List.FindString(-1, input)) { AfxMessageBox("Zip code already exists!"); } else { GetDlgItemText(IDC_ADDRFILE, AddrFile); m_List.AddString(input); if (m_List.GetCount() > 0 && AddrFile != "") GetDlgItem(IDC_START)->EnableWindow(TRUE); SetDlgItemText(IDC_INPUTZIP, NULL); GetDlgItem(IDC_SAVEZIPFILE)->EnableWindow(TRUE); } } } void ExtractbyZip::OnBnClickedDeletezip() { int idx = m_List.GetCurSel(); m_List.DeleteString(idx); if (m_List.GetCount() == 0) { GetDlgItem(IDC_SAVEZIPFILE)->EnableWindow(FALSE); GetDlgItem(IDC_START)->EnableWindow(FALSE); } } void ExtractbyZip::OnBnClickedSavezipfile() { CString error, tmp; FILE *zfile; int n; if (ZipOutputFile == "") ZipOutputFile = SimplePickSaveFile(NULL, NULL); if (ZipOutputFile == "") { AfxMessageBox("Warning: No file was selected; zip code file has NOT been saved!"); return; } fopen_s(&zfile, ZipOutputFile, "wb"); if (zfile == NULL) { error.Format("ERROR: Unable to open %s.", ZipOutputFile); AfxMessageBox(error); return; } for (int i=0; i < m_List.GetCount(); i++) { n = m_List.GetTextLen(i); m_List.GetText(i, tmp.GetBuffer(n)); fprintf(zfile, "%s\r\n", tmp); tmp.ReleaseBuffer(); } fclose(zfile); SetDlgItemText(IDC_ZIPCODEFILE, ZipOutputFile); AfxMessageBox("Zip code list has been successfully saved to file!"); } CString SimplePickSaveFile(CWnd *pWnd, LPCTSTR pszTitle) { OPENFILENAME ofn; TCHAR pszFile[MAX_PATH*2]; strcpy_s(pszFile, _T("")); memset( &ofn, 0, sizeof(ofn) ); ofn.lStructSize = sizeof(ofn); ofn.hwndOwner = pWnd ? pWnd->m_hWnd : GetActiveWindow(); ofn.lpstrFile = pszFile; ofn.lpstrDefExt = "zipcode"; ofn.nMaxFile = sizeof(pszFile); ofn.Flags = OFN_HIDEREADONLY | OFN_NONETWORKBUTTON | OFN_FILEMUSTEXIST; ofn.lpstrFilter = _T("Zipcode Output Files (*.zipcode)\0*.zipcode"); ofn.lpstrTitle = pszTitle ? pszTitle : _T("Please select a file"); if (GetSaveFileName( &ofn )) return pszFile; else return CString(); }