int _tmain(int argc, _TCHAR* argv[]) { //TestAdd(); HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_SCREEN_BUFFER_INFO csbi = { 0 }; GetConsoleScreenBufferInfo(hStdOut, &csbi); // TODO Handle no command line parameters - ie show help // TODO Handle colorizing hStdIn try { std::wstring sConf(_T("default.rgc")); bool bDefaultConf = true; std::wstring sCmdLine; int arg = 1; if (arg < argc && _tcscmp(argv[arg], _T("-conf")) == 0) { ++arg; sConf = argv[arg]; bDefaultConf = false; ++arg; } if (arg < argc && (_tcscmp(argv[arg], _T("dir")) == 0 || _tcscmp(argv[arg], _T("echo")) == 0 || _tcscmp(argv[arg], _T("copy")) == 0 || _tcscmp(argv[arg], _T("del")) == 0 || _tcscmp(argv[arg], _T("move")) == 0 || _tcscmp(argv[arg], _T("type")) == 0)) sCmdLine += _T("cmd /c "); if (bDefaultConf && arg < argc) FindConf(sConf, argv[arg]); for (; arg < argc; ++arg) { if (!sCmdLine.empty()) sCmdLine += _T(' '); bool hasSpaces = _tcschr(argv[arg], _T(' ')) != nullptr; if (hasSpaces) sCmdLine += _T('\"'); sCmdLine += argv[arg]; if (hasSpaces) sCmdLine += _T('\"'); } if (sCmdLine.empty()) DisplayAboutMessage(NULL); else ColorizeProcess(hStdOut, csbi.wAttributes, sConf.c_str(), sCmdLine); } catch (const std::exception& ex) { printf("Exception: %s.\n", ex.what()); } catch (const WinError& ex) { _tprintf(_T("WinError: %s.\n"), ex.what()); } catch (...) { _tprintf(_T("Unknown exception.\n")); } SetConsoleTextAttribute(hStdOut, csbi.wAttributes); return 0; }
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; } }