void Do(const FOCUS_EVENT_RECORD& fer, Screen& screen, const EditScheme& scheme) { if (fer.bSetFocus) { bool modeChanged = false; if (fileInfo.changed(modeChanged)) { ModePromptYesNo mpyn(this, ms.buffer, ms.pos, L"File changed, Revert?"); DoMode(mpyn, screen, scheme); WORD key = mpyn.Ret(); me.readOnly = fileInfo.isreadonly(); me.invalid = true; if (key == 'Y') me.Revert(fileInfo, l); } if (modeChanged) me.invalid = true; } }
void SummaryCommand :: Summarise( IOManager & io ) { if ( mType == Min || mType == Max ) { DoMinMax( io ); } else if ( mType == Sum ) { DoSum( io ); } else if ( mType == Average ) { DoAvg( io ); } else if ( mType == Frequency ) { DoFreq( io ); } else if ( mType == Median ) { DoMedian( io ); } else if ( mType == Mode ) { DoMode( io ); } else { CSVTHROW( "Unsupported option" ); } }
static void g_gchannote(struct Luser *lptr, int ac, char **av) { int cnt, alen; char *mask; char *message; char argbuf[MAXLINE + 1], temp[MAXLINE + 1]; struct Channel *cptr; if (!GlobalNotices) { notice(n_Global, lptr->nick, "Global notices are disabled"); return; } if (ac < 2) { notice(n_Global, lptr->nick, "Syntax: \002GCHANNOTE [options] <message>\002"); return; } mask = NULL; message = NULL; for (cnt = 1; cnt < ac; ++cnt) { alen = strlen(av[cnt]); if (!ircncmp(av[cnt], "-mask", alen)) { if (++cnt >= ac) { notice(n_Global, lptr->nick, "No mask specified"); return; } mask = av[cnt]; } else { message = GetString(ac - cnt, av + cnt); break; } } if (!message) { notice(n_Global, lptr->nick, "No message specified"); return; } *argbuf = '\0'; if (mask) ircsprintf(argbuf, "-mask %s ", mask); ircsprintf(temp, "%s%s", argbuf, message); strncpy(argbuf, temp, sizeof(argbuf) - 1); argbuf[sizeof(argbuf) - 1] = '\0'; RecordCommand("%s: %s!%s@%s GCHANNOTE %s", n_Global, lptr->nick, lptr->username, lptr->hostname, argbuf); cnt = 0; for (cptr = ChannelList; cptr; cptr = cptr->next) { if (mask && !match(mask, cptr->name)) continue; *temp = '-'; *(temp + 1) = '\0'; if (cptr->modes & MODE_N) strcat(temp, "n"); if (cptr->modes & MODE_M) strcat(temp, "m"); if (*(temp + 1)) DoMode(cptr, temp, 0); notice(n_Global, cptr->name, message); ++cnt; if (*(temp + 1)) { *temp = '+'; DoMode(cptr, temp, 0); } } notice(n_Global, lptr->nick, "Channel message sent (%d match%s)", cnt, (cnt == 1) ? "" : "es"); MyFree(message); } /* g_gchannote() */
bool Do(const KEY_EVENT_RECORD& ker, Screen& screen, const EditScheme& scheme) { bool cont = true; if (ker.bKeyDown) { const bool readOnly = fileInfo.isreadonly(); switch (ker.wVirtualKeyCode) { case VK_F1: { wchar_t* pWData = nullptr; { HMODULE hModule = NULL; Memory mem = GetResource(hModule, IDR_TEXT); const char* pData = static_cast<const char*>(mem.data); pWData = new wchar_t[mem.size + 1]; for (DWORD i = 0; i < mem.size; ++i) { switch (pData[i]) { case '\r': pWData[i] = L' '; break; case '\n': pWData[i] = L'\0'; break; default: pWData[i] = pData[i]; break; } } pWData[mem.size] = L'\0'; } ModeInfoBox mmb(this, _COORD(4, 4), pWData); DoMode(mmb, screen, scheme); delete[] pWData; me.invalid = true; } break; case VK_F3: switch (ker.dwControlKeyState & 0x1F) { case RIGHT_CTRL_PRESSED: case LEFT_CTRL_PRESSED: if (me.Selection().empty()) { size_t p = MoveWordBegin(me.Chars(), me.Selection().end); if (iswblank(me.Chars()[p])) // TODO Use locale? break; // Don't search me.MoveCursor(p, false); me.MoveCursor(MoveWordEnd(me.Chars(), me.Selection().end), true); } if (!me.Selection().empty()) { mf.setFind(me.GetSelectedText()); mf.visible = true; me.invalid = true; } Find(true, true); break; case 0: Find(true, true); break; case SHIFT_PRESSED: Find(false, true); break; } break; case 'F': switch (ker.dwControlKeyState & 0x1F) { case RIGHT_CTRL_PRESSED: case LEFT_CTRL_PRESSED: // TODO Set focus to find window to edit search text mf.visible = true; DoMode(mf, screen, scheme); me.invalid = true; break; } break; case 'G': switch (ker.dwControlKeyState & 0x1F) { case RIGHT_CTRL_PRESSED: case LEFT_CTRL_PRESSED: { ModePromptInteger mpi(this, ms.buffer, ms.pos, L"Goto line?"); DoMode(mpi, screen, scheme); int line = mpi.Ret(); if (line > 0) { me.MoveCursor(GetLineOffset(me.Chars(), line), false); } me.invalid = true; } break; } break; case 'I': switch (ker.dwControlKeyState & 0x1F) { case RIGHT_CTRL_PRESSED: case LEFT_CTRL_PRESSED: mf.ToggleCaseSensitive(); Find(true, false); break; } break; case 'R': switch (ker.dwControlKeyState & 0x1F) { case RIGHT_CTRL_PRESSED: case LEFT_CTRL_PRESSED: me.Revert(fileInfo, l); break; } break; case 'S': switch (ker.dwControlKeyState & 0x1F) { case RIGHT_CTRL_PRESSED: case LEFT_CTRL_PRESSED: if (!readOnly) { try { me.Save(fileInfo, l); ms.message = L"Saved"; } catch (const std::exception& e) { ms.error = convert(e.what(), l); me.invalid = true; } } else Beep(); break; } break; case 'X': switch (ker.dwControlKeyState & 0x1F) { case RIGHT_ALT_PRESSED: case LEFT_ALT_PRESSED: { if (me.isEdited()) { ModePromptYesNo mpyn(this, ms.buffer, ms.pos, L"Save?"); DoMode(mpyn, screen, scheme); WORD key = mpyn.Ret(); me.invalid = true; if (key == L'Y') me.Save(fileInfo, l); if (key != 0) cont = false; } else cont = false; } break; } break; } } if (cont) cont = me.Do(ker, screen, scheme); return cont; }
int wmain(int argc, const wchar_t* argv[]) { try { if (argc < 2) { DisplayAboutMessage(NULL); DisplayResource(NULL, IDR_TEXT); return 1; } _locale_t l = _create_locale(LC_ALL, "C"); FileInfo fileInfo(argv[1]); std::vector<wchar_t> chars; if (fileInfo.exists) chars = fileInfo.load(l); HWND hWnd = GetConsoleWindow(); HICON hIcon = (HICON) SendMessage(hWnd, WM_GETICON, ICON_SMALL, 0); SendMessage(hWnd, WM_SETICON, ICON_SMALL, (LPARAM) LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ICON))); const Screen screenOrig; AutoRestoreBufferInfo arbi(screenOrig.hOut); AutoRestoreMode armIn(screenOrig.hIn, ENABLE_EXTENDED_FLAGS | ENABLE_MOUSE_INPUT | ENABLE_WINDOW_INPUT, 0xFFFF); AutoRestoreMode armOut(screenOrig.hOut, 0, ENABLE_PROCESSED_OUTPUT | ENABLE_WRAP_AT_EOL_OUTPUT); Screen screen(screenOrig); screen.hOut = CreateConsoleScreenBuffer(GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, CONSOLE_TEXTMODE_BUFFER, nullptr); HKEY hKey = NULL; RegOpenKey(HKEY_CURRENT_USER, L"SOFTWARE\\RadSoft\\ConEdit", &hKey); CONSOLE_SCREEN_BUFFER_INFOEX csbi = arbi.get(); csbi.dwSize = GetSize(screen.csbi.srWindow); EditScheme scheme(hKey, csbi); csbi.wAttributes = 0; scheme.get(EditScheme::DEFAULT).apply(csbi.wAttributes); SetConsoleScreenBufferInfoEx(screen.hOut, &csbi); AutoRestoreActiveScreenBuffer arasb(screenOrig.hOut, screen.hOut); ModeConEdit mce(hKey, fileInfo, GetSize(screen.csbi.srWindow), chars, l); RegCloseKey(hKey); hKey = NULL; DoMode(mce, screen, scheme); SendMessage(hWnd, WM_SETICON, ICON_SMALL, (LPARAM) hIcon); _free_locale(l); return 0; } catch (const std::exception& e) { printf(e.what()); printf("\n"); return 1; } }