|
| 1 | +// Jednoduchý C++ spammer. Kvůli využití wmain() musí být všechny I/O operace wide (široké), tzn. string musí být wstring a cin musí být wcin. |
| 2 | +// Před každým stringem musí také být prefix L (pro wide string). |
| 3 | +// _setmode zajišťuje Unicode podporu, tudíž není nutné nastavovat locale a codepage. |
| 4 | + |
| 5 | + |
| 6 | + |
| 7 | + |
| 8 | +// Windows definice |
1 | 9 | #define NOMINMAX
|
2 |
| -#define SUCCESS 10 |
3 |
| -#define FAILURE 12 |
4 |
| -#define USERINPUT 11 |
5 |
| -#define WHITE 15 |
| 10 | + |
| 11 | +// Konstantní výrazy |
| 12 | +constexpr int B_BASE = 9; |
| 13 | +constexpr int SUCCESS = 10; |
| 14 | +constexpr int FAILURE = 12; |
| 15 | +constexpr int USERINPUT = 11; |
| 16 | +constexpr int WHITE = 15; |
6 | 17 |
|
7 | 18 | #include "lyoUtil.h"
|
8 | 19 |
|
9 | 20 | using namespace std;
|
10 | 21 |
|
11 |
| -int main() { |
| 22 | +int wmain() { |
12 | 23 |
|
13 | 24 | // Seed pro rand()
|
14 | 25 | srand((unsigned int)time(NULL));
|
15 | 26 |
|
16 |
| - // Proměnné a jejich základní hodnoty |
17 |
| - string ans; |
18 |
| - UINT codepage = 1250; |
19 |
| - string sLocale = "cs_CZ"; |
| 27 | + // Proměnné a jejich základní hodnoty |
| 28 | + wstring ans; |
20 | 29 | delay = 30;
|
21 | 30 |
|
22 | 31 | // Vektory
|
23 |
| - vector<string> splashText = { "Le fishe au chocolat.", "Napajedla neexistují.", "Praise Gabča.", "30x rychlejší než Python.", "Garance špagetového kódu.", "Schváleno Kuncišem.", "Směřujte spam na lyorig#0775.", "Isn't it?", "Nenávidím tento jazyk.", "Pořád stabilnější než Fallout 76.", "Kvůli tomuto mám dvojku z biologie.", "Spam! není spam."}; |
24 |
| - vector<string> titleText = { "Audavillage", "Videomath", "paint.com", "Imagine 2", "Paint 4D", "XboxDiagram", "C++Charm", "Kyberdigi.cz", "Craftmine", "Toto !== virus" }; // UTF-8 |
25 |
| - |
26 |
| - // Základní nastavení |
27 |
| - SetConsoleTitleA(chooseRandElem(titleText).c_str()); |
28 |
| - setlocale(LC_ALL, "cs_CZ"); |
29 |
| - SetConsoleCP(1250); |
| 32 | + vector<wstring> splashText = { L"Le fishe au chocolat.", L"Napajedla neexistují.", L"Praise Gabča.", L"30x rychlejší než Python.", L"Garance špagetového kódu.", L"Schváleno Kuncišem.", L"Směřujte spam na lyorig#0775.", L"Isn't it?", L"Nenávidím tento jazyk.", L"Pořád stabilnější než Fallout 76.", L"Kvůli tomuto mám dvojku z biologie.", L"Spam! není spam."}; |
| 33 | + vector<wstring> titleText = { L"Audavillage", L"Videomath", L"paint.com", L"Imagine 2", L"Malování 4D", L"XboxDiagram", L"C++Charm", L"Kyberdigi", L"Craftmine", L"Windows Defender" }; |
30 | 34 |
|
31 |
| - setColor(WHITE); |
| 35 | + // Základní nastavení |
| 36 | + SetConsoleTitleW(ChooseRandElem(titleText).c_str()); |
| 37 | + SetColor(WHITE); |
| 38 | + |
| 39 | + (void)_setmode(_fileno(stdout), _O_U16TEXT); // Oba jsou castované na void protože jinak Visual Studio hází |
| 40 | + (void)_setmode(_fileno(stdin), _O_U16TEXT); // varování o ignorování vratné hodnoty (kterou stejně nevyužiju) |
32 | 41 |
|
33 |
| - cout << "(c) Petr Šácha 2022. "; |
34 |
| - printColoredMsg(false, USERINPUT, chooseRandElem(splashText), WHITE); |
35 |
| - cout << "\nPoužitím či modifikací programu souhlasíte se samostatností Míkovic.\n\n"; |
36 |
| - printColoredMsg(false, WHITE, "Chcete upravit nastavení? (ano/ne): ", USERINPUT); |
37 |
| - cin >> ans; |
38 | 42 |
|
39 | 43 |
|
40 | 44 |
|
41 |
| - |
42 |
| - // Goto je giga cringe ale jsem líný programátor |
43 |
| - if (ans == "ano") { |
| 45 | + wcout << L"(c) Petr Šácha 2022. "; |
44 | 46 |
|
45 |
| - Q1A: |
46 |
| - printColoredMsg(false, WHITE, "\nProdleva mezi repeticemi (ms): ", USERINPUT); |
47 |
| - cin >> delay; |
| 47 | + PrintColoredMsg(false, USERINPUT, ChooseRandElem(splashText), WHITE); |
48 | 48 |
|
49 |
| - if (!cin || delay < 0 || delay > 10000) { |
| 49 | + wcout << L"\nPoužitím či modifikací programu souhlasíte se samostatností Míkovic.\n\n"; |
50 | 50 |
|
51 |
| - printColoredMsg(false, FAILURE, "Neplatná prodleva. Zadejte jinou.\n", WHITE); |
52 |
| - flushCin(); |
53 |
| - goto Q1A; |
54 |
| - } |
| 51 | + PrintColoredMsg(false, WHITE, L"Chcete upravit nastavení? (ano/ne): ", USERINPUT); |
| 52 | + |
| 53 | + wcin >> ans; |
55 | 54 |
|
56 | 55 |
|
57 | 56 |
|
58 |
| - Q1B: |
59 |
| - printColoredMsg(false, WHITE, "\nProdleva mezi stiskem a odesláním klávesy (ms): ", USERINPUT); |
60 |
| - cin >> inbDelay; |
| 57 | + |
| 58 | + // Goto je giga cringe ale jsem líný programátor |
61 | 59 |
|
62 |
| - if (!cin || inbDelay < 0 || inbDelay > 1000) { |
| 60 | + if (ans == L"ano") { |
63 | 61 |
|
64 |
| - printColoredMsg(false, FAILURE, "Neplatná prodleva. Zadejte jinou.\n", WHITE); |
65 |
| - flushCin(); |
66 |
| - goto Q1B; |
67 |
| - } |
| 62 | + Q1: |
| 63 | + PrintColoredMsg(false, WHITE, L"\nProdleva mezi repeticemi (ms): ", USERINPUT); |
| 64 | + wcin >> delay; |
68 | 65 |
|
| 66 | + if (!wcin || delay < 0 || delay > 10000) { |
| 67 | + |
| 68 | + PrintColoredMsg(false, FAILURE, L"Neplatná prodleva. Zadejte jinou.\n", WHITE); |
| 69 | + FlushCinW(); |
| 70 | + goto Q1; |
| 71 | + } |
69 | 72 |
|
70 | 73 |
|
| 74 | + |
71 | 75 | Q2:
|
72 |
| - printColoredMsg(false, WHITE, "\nCodepage: ", USERINPUT); |
73 |
| - cin >> codepage; |
| 76 | + PrintColoredMsg(false, WHITE, L"\nProdleva mezi stiskem a odesláním klávesy (ms): ", USERINPUT); |
| 77 | + wcin >> inbDelay; |
74 | 78 |
|
75 |
| - if (!cin || codepage > 1500) { |
| 79 | + if (!wcin || inbDelay < 0 || inbDelay > 1000) { |
76 | 80 |
|
77 |
| - printColoredMsg(false, FAILURE, "Neplatný codepage. Zadejte jiný.\n", WHITE); |
78 |
| - flushCin(); |
| 81 | + PrintColoredMsg(false, FAILURE, L"Neplatná prodleva. Zadejte jinou.\n", WHITE); |
| 82 | + FlushCinW(); |
79 | 83 | goto Q2;
|
80 | 84 | }
|
81 | 85 |
|
82 | 86 |
|
83 |
| - |
84 |
| - Q3: |
85 |
| - printColoredMsg(false, WHITE, "\nLocale: ", USERINPUT); |
86 |
| - cin >> sLocale; |
87 |
| - |
88 |
| - if (!cin || sLocale.length() < 4 || sLocale.length() > 10) { // Locale může být i 10 znaků dlouhý, tak pro jistotu |
89 |
| - |
90 |
| - printColoredMsg(false, FAILURE, "Neplatný locale. Zadejte jiný.\n", WHITE); |
91 |
| - flushCin(); |
92 |
| - goto Q3; |
93 |
| - } |
94 |
| - |
95 |
| - printColoredMsg(false, SUCCESS, "\nNastaveno.\n", WHITE); // Lež! Přece to bude nastaveno až o několik řádků později |
| 87 | + |
| 88 | + PrintColoredMsg(false, SUCCESS, L"\nNastaveno.\n", WHITE); |
96 | 89 | }
|
97 | 90 |
|
98 | 91 |
|
99 | 92 |
|
100 |
| - else { // Cokoliv jiného než "ano" se bere jako ne |
| 93 | + else { // Cokoliv jiného než "ano" se bere jako ne |
101 | 94 |
|
102 |
| - setColor(SUCCESS); |
| 95 | + SetColor(SUCCESS); |
103 | 96 |
|
104 |
| - cout << "\nProdleva nastavena na doporučenou (" << delay << "ms).\n"; |
105 |
| - cout << "Prodleva mezi stiskem a odesláním klávesy nastavena na doporučenou (" << inbDelay << "ms).\n"; |
106 |
| - cout << "Locale nastaven na doporučený (" << sLocale << ").\n"; |
107 |
| - cout << "Codepage nastaven na doporučený (" << codepage << ").\n"; // Další lži! Tyto jsou alespoň o hodně řádků blíž |
| 97 | + wcout << L"\nProdleva nastavena na doporučenou (" << delay << "ms).\n"; |
| 98 | + wcout << L"Prodleva mezi stiskem a odesláním klávesy nastavena na doporučenou (" << inbDelay << "ms).\n"; |
108 | 99 | }
|
109 | 100 |
|
110 |
| - setlocale(LC_ALL, sLocale.c_str()); |
111 |
| - SetConsoleCP(codepage); |
112 | 101 |
|
113 |
| - printColoredMsg(false, WHITE, "\nCo chcete spamovat? -> ", USERINPUT); |
| 102 | + |
| 103 | + PrintColoredMsg(false, WHITE, L"\nCo chcete spamovat? -> ", USERINPUT); |
114 | 104 |
|
115 |
| - flushCin(); |
| 105 | + FlushCinW(); |
116 | 106 | getline(wcin, wts);
|
117 | 107 |
|
118 |
| - printColoredMsg(false, SUCCESS, "\nPřipraveno. Držte F12 pro spam.", WHITE); |
119 |
| - |
| 108 | + PrintColoredMsg(false, SUCCESS, L"\nPřipraveno. Držte F12 pro spam.", WHITE); |
120 | 109 |
|
| 110 | + |
| 111 | + |
| 112 | + // DEBUG ZÓNA |
| 113 | + |
121 | 114 |
|
122 | 115 |
|
| 116 | + // KONEC DEBUG ZÓNY |
| 117 | + |
| 118 | + |
| 119 | + |
123 | 120 | while(true) {
|
124 | 121 |
|
125 | 122 | if (GetKeyState(VK_F12) & 0x8000) {
|
|
0 commit comments