Skip to content

Instantly share code, notes, and snippets.

@Rapptz

Rapptz/cmd.hpp Secret

Last active December 26, 2015 02:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Rapptz/fef5a9119e3814b3ee69 to your computer and use it in GitHub Desktop.
Save Rapptz/fef5a9119e3814b3ee69 to your computer and use it in GitHub Desktop.
Command line stuff I used forever ago
#ifndef COMMAND_PROMPT_FUNCTIONS_HPP
#define COMMAND_PROMPT_FUNCTIONS_HPP
#ifndef CMD_WINDOWS
#define CMD_WINDOWS defined(_WIN32) || defined(__WIN32__) || defined (_WIN64)
#endif
#ifndef CMD_LINUX
#define CMD_LINUX defined(__linux__) || defined(__linux) || defined(linux)
#endif
#if CMD_WINDOWS
#ifndef NOMINMAX
#define NOMINMAX
#endif //NOMINMAX
#include <windows.h>
#define BLACK 0
#define BLUE 1
#define GREEN 2
#define AQUA 3
#define RED 4
#define PURPLE 5
#define YELLOW 6
#define WHITE 7
#define GRAY 8
#define LIGHTBLUE 9
#define LIGHTGREEN 10
#define LIGHTAQUA 11
#define LIGHTRED 12
#define LIGHTPURPLE 13
#define LIGHTYELLOW 14
#define BRIGHTWHITE 15
//End windows
#elif CMD_LINUX
#include <cstdio>
#define RESET 0
#define BRIGHT 1
#define DIM 2
#define UNDERLINE 3
#define BLINK 4
#define REVERSE 7
#define HIDDEN 8
#define BLACK 0
#define RED 1
#define GREEN 2
#define YELLOW 3
#define BLUE 4
#define MAGENTA 5
#define CYAN 6
#define WHITE 7
//End linux
#endif
namespace cmd {
inline void text_color(int fg,int bg = 0,int attr = 0) {
#if CMD_LINUX
char command[15];
sprintf(command,"\033[%d;%d;%dm",attr,fg + 30,bg + 40);
printf("%s",command);
#elif CMD_WINDOWS
HANDLE myConsole = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(myConsole,(fg+bg*16));
#endif // windows and linux
}
inline void clear() {
#if CMD_WINDOWS
COORD topLeft = { 0,0 };
HANDLE console = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO screen;
DWORD written;
GetConsoleScreenBufferInfo(console,&screen);
FillConsoleOutputCharacterA(
console,' ',screen.dwSize.X * screen.dwSize.Y,topLeft,&written
);
FillConsoleOutputAttribute(
console,FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE,
screen.dwSize.X * screen.dwSize.Y,topLeft,&written
);
SetConsoleCursorPosition(console,topLeft);
//End of windows
#elif CMD_LINUX
printf("\x1B[2J\x1B[H");
//End of linux
#endif
}
enum class Key
{
Unknown = -1,
A = 0,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z,
Num0,
Num1,
Num2,
Num3,
Num4,
Num5,
Num6,
Num7,
Num8,
Num9,
Escape,
LControl,
LShift,
LAlt,
LSystem,
RControl,
RShift,
RAlt,
RSystem,
Menu,
LBracket,
RBracket,
SemiColon,
Comma,
Period,
Quote,
Slash,
BackSlash,
Tilde,
Equal,
Dash,
Space,
Return,
BackSpace,
Tab,
PageUp,
PageDown,
End,
Home,
Insert,
Delete,
Add,
Subtract,
Multiply,
Divide,
Left,
Right,
Up,
Down,
Numpad0,
Numpad1,
Numpad2,
Numpad3,
Numpad4,
Numpad5,
Numpad6,
Numpad7,
Numpad8,
Numpad9,
F1,
F2,
F3,
F4,
F5,
F6,
F7,
F8,
F9,
F10,
F11,
F12,
F13,
F14,
F15,
Pause
};
inline bool is_key_pressed(Key key) {
#if CMD_WINDOWS
int vkey = 0;
switch (key)
{
case Key::A: vkey = 'A'; break;
case Key::B: vkey = 'B'; break;
case Key::C: vkey = 'C'; break;
case Key::D: vkey = 'D'; break;
case Key::E: vkey = 'E'; break;
case Key::F: vkey = 'F'; break;
case Key::G: vkey = 'G'; break;
case Key::H: vkey = 'H'; break;
case Key::I: vkey = 'I'; break;
case Key::J: vkey = 'J'; break;
case Key::K: vkey = 'K'; break;
case Key::L: vkey = 'L'; break;
case Key::M: vkey = 'M'; break;
case Key::N: vkey = 'N'; break;
case Key::O: vkey = 'O'; break;
case Key::P: vkey = 'P'; break;
case Key::Q: vkey = 'Q'; break;
case Key::R: vkey = 'R'; break;
case Key::S: vkey = 'S'; break;
case Key::T: vkey = 'T'; break;
case Key::U: vkey = 'U'; break;
case Key::V: vkey = 'V'; break;
case Key::W: vkey = 'W'; break;
case Key::X: vkey = 'X'; break;
case Key::Y: vkey = 'Y'; break;
case Key::Z: vkey = 'Z'; break;
case Key::Num0: vkey = '0'; break;
case Key::Num1: vkey = '1'; break;
case Key::Num2: vkey = '2'; break;
case Key::Num3: vkey = '3'; break;
case Key::Num4: vkey = '4'; break;
case Key::Num5: vkey = '5'; break;
case Key::Num6: vkey = '6'; break;
case Key::Num7: vkey = '7'; break;
case Key::Num8: vkey = '8'; break;
case Key::Num9: vkey = '9'; break;
case Key::Escape: vkey = VK_ESCAPE; break;
case Key::LControl: vkey = VK_LCONTROL; break;
case Key::LShift: vkey = VK_LSHIFT; break;
case Key::LAlt: vkey = VK_LMENU; break;
case Key::LSystem: vkey = VK_LWIN; break;
case Key::RControl: vkey = VK_RCONTROL; break;
case Key::RShift: vkey = VK_RSHIFT; break;
case Key::RAlt: vkey = VK_RMENU; break;
case Key::RSystem: vkey = VK_RWIN; break;
case Key::Menu: vkey = VK_APPS; break;
case Key::LBracket: vkey = VK_OEM_4; break;
case Key::RBracket: vkey = VK_OEM_6; break;
case Key::SemiColon: vkey = VK_OEM_1; break;
case Key::Comma: vkey = VK_OEM_COMMA; break;
case Key::Period: vkey = VK_OEM_PERIOD; break;
case Key::Quote: vkey = VK_OEM_7; break;
case Key::Slash: vkey = VK_OEM_2; break;
case Key::BackSlash: vkey = VK_OEM_5; break;
case Key::Tilde: vkey = VK_OEM_3; break;
case Key::Equal: vkey = VK_OEM_PLUS; break;
case Key::Dash: vkey = VK_OEM_MINUS; break;
case Key::Space: vkey = VK_SPACE; break;
case Key::Return: vkey = VK_RETURN; break;
case Key::BackSpace: vkey = VK_BACK; break;
case Key::Tab: vkey = VK_TAB; break;
case Key::PageUp: vkey = VK_PRIOR; break;
case Key::PageDown: vkey = VK_NEXT; break;
case Key::End: vkey = VK_END; break;
case Key::Home: vkey = VK_HOME; break;
case Key::Insert: vkey = VK_INSERT; break;
case Key::Delete: vkey = VK_DELETE; break;
case Key::Add: vkey = VK_ADD; break;
case Key::Subtract: vkey = VK_SUBTRACT; break;
case Key::Multiply: vkey = VK_MULTIPLY; break;
case Key::Divide: vkey = VK_DIVIDE; break;
case Key::Left: vkey = VK_LEFT; break;
case Key::Right: vkey = VK_RIGHT; break;
case Key::Up: vkey = VK_UP; break;
case Key::Down: vkey = VK_DOWN; break;
case Key::Numpad0: vkey = VK_NUMPAD0; break;
case Key::Numpad1: vkey = VK_NUMPAD1; break;
case Key::Numpad2: vkey = VK_NUMPAD2; break;
case Key::Numpad3: vkey = VK_NUMPAD3; break;
case Key::Numpad4: vkey = VK_NUMPAD4; break;
case Key::Numpad5: vkey = VK_NUMPAD5; break;
case Key::Numpad6: vkey = VK_NUMPAD6; break;
case Key::Numpad7: vkey = VK_NUMPAD7; break;
case Key::Numpad8: vkey = VK_NUMPAD8; break;
case Key::Numpad9: vkey = VK_NUMPAD9; break;
case Key::F1: vkey = VK_F1; break;
case Key::F2: vkey = VK_F2; break;
case Key::F3: vkey = VK_F3; break;
case Key::F4: vkey = VK_F4; break;
case Key::F5: vkey = VK_F5; break;
case Key::F6: vkey = VK_F6; break;
case Key::F7: vkey = VK_F7; break;
case Key::F8: vkey = VK_F8; break;
case Key::F9: vkey = VK_F9; break;
case Key::F10: vkey = VK_F10; break;
case Key::F11: vkey = VK_F11; break;
case Key::F12: vkey = VK_F12; break;
case Key::F13: vkey = VK_F13; break;
case Key::F14: vkey = VK_F14; break;
case Key::F15: vkey = VK_F16; break;
case Key::Pause: vkey = VK_PAUSE; break;
default: vkey = 0; break;
}
return (GetAsyncKeyState(vkey) & 0x8000) != 0;
#elif CMD_LINUX
#error ...
#endif
}
namespace {
bool state = false;
} // anon
inline bool is_key_held(Key key) {
bool pressed = is_key_pressed(key);
bool held = false;
//Key is pressed
if(pressed && !state) {
held = false;
}
//Key is held down
if(pressed && state) {
held = true;
}
//Key is released
if(!pressed && state) {
held = false;
}
state = pressed;
return held;
}
inline bool is_key_released(Key key) {
bool pressed = is_key_pressed(key);
bool released = false;
//Key is pressed
if(pressed && !state) {
released = false;
}
//Key is held down
if(pressed && state) {
released = false;
}
//Key is released
if(!pressed && state) {
released = true;
}
state = pressed;
return released;
}
inline bool is_key_pressed_once(Key key) {
bool pressed = is_key_pressed(key);
bool once = false;
//Key is pressed
if(pressed && !state) {
once = true;
}
//Key is held down
if(pressed && state) {
once = false;
}
//Key is released
if(!pressed && state) {
once = false;
}
state = pressed;
return once;
}
} //namespace cmd
#endif //COMMAND_PROMPT_FUNCTIONS_HPP
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment