//Main routine int main(void) { int d; uint16_t v; // cli(); initio(); inittxt(); usbInit(); usbDeviceDisconnect(); /* enforce re-enumeration, do this while interrupts are disabled! */ uint8_t i = 0; while(--i){ /* fake USB disconnect for > 250 ms */ _delay_ms(1); } usbDeviceConnect(); sei(); //Go display stuff while(1) { for (d=0; d<11; d++) { v=getcharat(d); setvfd(d,v); _delay_ms(1); handlepwm(); usbPoll(); } } }
/** * @brief Handle dialog messages. * @param [in] hDlg Handle to the dialog. * @param [in] iMsg The message. * @param [in] wParam The command in the message. * @param [in] lParam The optional parameter for the command. * @return TRUE if the message was handled, FALSE otherwise. */ INT_PTR FillWithDialog::DlgProc(HWindow* pDlg, UINT iMsg, WPARAM wParam, LPARAM lParam) { switch (iMsg) { case WM_INITDIALOG: { HEdit* pEditt = static_cast<HEdit *>(pDlg->GetDlgItem(IDC_HEX));//get the handle to the hex edit box pEditt->LimitText(FW_MAX);//limit the amount of text the user can enter pEditt->SetWindowText(pcFWText);//init hex text pEditt->SetFocus();//give the hex box focus pEditt->EnableWindow(!curtyp); oldproc = static_cast<LONG_PTR>(pEditt->SetWindowLongPtr(GWLP_WNDPROC, reinterpret_cast<LONG_PTR>(HexProc)));//override the old proc to be HexProc EnableDlgItem(pDlg, IDC_HEXSTAT, !curtyp); HComboBox* typ = static_cast<HComboBox *>(pDlg->GetDlgItem(IDC_TYPE)); typ->AddString(_T("Input")); typ->AddString(_T("File")); typ->SetCurSel(curtyp);//set cursel to previous //en/disable filename box and browse button HWindow* fn = pDlg->GetDlgItem(IDC_FN); fn->SetWindowText(szFWFileName); fn->EnableWindow(curtyp); EnableDlgItem(pDlg, IDC_BROWSE, curtyp); EnableDlgItem(pDlg, IDC_FILESTAT, curtyp); hfon = CreateFont(16, 0, 0, 0, FW_NORMAL, 0, 0, 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, _T("Symbol")); inittxt(pDlg); switch (asstyp) { case 0: pDlg->CheckDlgButton(IDC_EQ, BST_CHECKED); break; case 1: pDlg->CheckDlgButton(IDC_OR, BST_CHECKED); break; case 2: pDlg->CheckDlgButton(IDC_AND, BST_CHECKED); break; case 3: pDlg->CheckDlgButton(IDC_XOR, BST_CHECKED); break; } return 0;//stop the system from setting focus to the control handle in (HWND) wParam because we already set focus above } case WM_COMMAND: switch (wParam) { case IDOK: //ok pressed { if (curtyp) {//1-file pDlg->GetDlgItemText(IDC_FN, szFWFileName, _MAX_PATH);//get file name FWFile = _topen(szFWFileName, _O_RDONLY | _O_BINARY); if (FWFile == -1) {//if there is error opening MessageBox(pDlg, GetLangString(IDS_ERR_OPENING_FILE), MB_ICONERROR);//tell user but don't close dlgbox return 1;//didn't process this message }//if FWFilelen = _filelength(FWFile); if (FWFilelen == 0) {//if filelen is zero MessageBox(pDlg, GetLangString(IDS_FILL_ZERO_SIZE_FILE), MB_ICONERROR);//tell user but don't close dlgbox _close(FWFile);//close file return 1;//didn't process this message }//if else if (FWFilelen == -1) {//error returned by _filelength MessageBox(pDlg, GetLangString(IDS_ERR_OPENING_FILE), MB_ICONERROR);//tell user but don't close dlgbox _close(FWFile);//close file return 1;//didn't process this message }//elseif } else {//0-input if (!buflen) {//no hex input MessageBox(pDlg, GetLangString(IDS_FILL_ZERO_SIZE_STR), MB_ICONERROR);//tell user but don't close dlgbox return 1;//didn't process this message }//if int i = pDlg->GetDlgItemText(IDC_HEX, pcFWText, FW_MAX); if (i == 0 || i == FW_MAX - 1) {//error MessageBox(pDlg, GetLangString(IDS_FILL_TOO_MANY_BYTES), MB_ICONERROR);//tell user but don't close dlgbox return 1;//didn't process this message }//if hexstring2charstring();//just in case //pcFWText[(aa?buflen:buflen*2)]='\0';//access violation if i do it in the above function } if (pDlg->IsDlgButtonChecked(IDC_EQ)) asstyp = 0; else if (pDlg->IsDlgButtonChecked(IDC_OR)) asstyp = 1; else if (pDlg->IsDlgButtonChecked(IDC_AND)) asstyp = 2; else if (pDlg->IsDlgButtonChecked(IDC_XOR)) asstyp = 3; // go ahead SetCursor(LoadCursor(nullptr, IDC_WAIT)); BYTE (*fnc)(int); int iStartOfSelSetting; int iEndOfSelSetting; int iimax; if (curtyp) {//1-file fnc = file; iimax = FWFilelen; }//if else {//0-input fnc = input; iimax = buflen; }//else if (bSelected) { iStartOfSelSetting = iGetStartOfSelection(); iEndOfSelSetting = iGetEndOfSelection(); } else { iStartOfSelSetting = 0; iEndOfSelSetting = m_dataArray.GetUpperBound(); } SimpleArray<BYTE> olddata(iEndOfSelSetting - iStartOfSelSetting + 1, &m_dataArray[iStartOfSelSetting]); int i = iStartOfSelSetting; int ii = 0; switch (asstyp) {// use switch instead of pointers to funcs that just call an operator as its faster case 0: while (i <= iEndOfSelSetting) { m_dataArray[i++] = fnc(ii++); ii %= iimax; } break; case 1: while (i <= iEndOfSelSetting) { m_dataArray[i++] |= fnc(ii++); ii %= iimax; } break; case 2: while (i <= iEndOfSelSetting) { m_dataArray[i++] &= fnc(ii++); ii %= iimax; } break; case 3: while (i <= iEndOfSelSetting) { m_dataArray[i++] ^= fnc(ii++); ii %= iimax; } break; } push_undorecord(iStartOfSelSetting, olddata, olddata.GetLength(), &m_dataArray[iStartOfSelSetting], olddata.GetLength()); if (curtyp) _close(FWFile);//close file SetCursor(LoadCursor(nullptr, IDC_ARROW)); bFilestatusChanged = true; repaint();//you tell me } // fall through case IDCANCEL: //cancel pressed DeleteObject(hfon);// won't need till next time pDlg->EndDialog(wParam);//tell CMD_fw not to carry out the fill with operation return 1;//did process this message case MAKEWPARAM(IDC_TYPE, CBN_SELCHANGE): //thing to fill selection with changes curtyp = static_cast<char>(pDlg->SendDlgItemMessage(IDC_TYPE, CB_GETCURSEL, 0, 0));//get cursel EnableDlgItem(pDlg, IDC_FN, curtyp);//en/disable fnamebox and browse button EnableDlgItem(pDlg, IDC_BROWSE, curtyp); EnableDlgItem(pDlg, IDC_FILESTAT, curtyp); curtyp = !curtyp;//flip it for the others EnableDlgItem(pDlg, IDC_HEX, curtyp);//en/disable hexboxand relateds EnableDlgItem(pDlg, IDC_HEXSTAT, curtyp); curtyp = !curtyp;//restore original value -not for below -accurate value needed elsewhere //set text in boxes down below inittxt(pDlg); break; case IDC_BROWSE: { //prepare OPENFILENAME for the file open common dlg box szFWFileName[0] = '\0'; OPENFILENAME ofn; ZeroMemory(&ofn, sizeof ofn); ofn.lStructSize = sizeof ofn; ofn.hwndOwner = pDlg->m_hWnd; ofn.lpstrFilter = GetLangString(IDS_OPEN_ALL_FILES); ofn.lpstrFile = szFWFileName; ofn.nMaxFile = _MAX_PATH ; ofn.Flags = OFN_PATHMUSTEXIST | OFN_HIDEREADONLY | OFN_FILEMUSTEXIST; //show open dlgbox and if file good save name & path in edit box if (GetOpenFileName(&ofn)) pDlg->SetDlgItemText(IDC_FN, ofn.lpstrFile); } return TRUE; case MAKEWPARAM(IDC_HEX, EN_UPDATE): //hexedit updated pDlg->GetDlgItemText(IDC_HEX, pcFWText, FW_MAX);//gettext hexstring2charstring();//convert to char string //set text in boxes down below inittxt(pDlg); return TRUE; } break; case WM_HELP: OnHelp(pDlg); break; } return FALSE; }