Created
July 3, 2012 01:07
-
-
Save solomon081/3036781 to your computer and use it in GitHub Desktop.
bashtocmd
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include "stdafx.h" | |
#include <iostream> | |
#include <string> | |
#include <regex> | |
#include <fstream> | |
#include <stdlib.h> | |
#include <time.h> | |
#include <conio.h> | |
using namespace std; | |
using namespace std::tr1; | |
class Parser | |
{ | |
regex ls_regex, mkdir_regex, sleep_regex, rand_regex, rm_regex, touch_regex, cat_regex, open_regex, cp_regex, lat_regex; | |
string touch_match, sleep_match, mkdir_match, ls_match, rm_match, open_match, cp_match; | |
public: | |
void SetRegexes(); | |
void RunCommand(string); | |
string ParseCommand(string); | |
}; | |
void Parser::SetRegexes() | |
{ | |
// Regex is the bash command, match is the cmd command | |
ls_regex = "^ls$"; | |
ls_match = "dir"; | |
mkdir_regex = "^mkdir"; | |
mkdir_match = "md"; | |
sleep_regex = "^sleep$"; | |
sleep_match = "pause"; | |
rand_regex = "^timerand$"; | |
rm_regex = "^rm"; | |
rm_match = "del"; | |
touch_regex = "^touch"; | |
cat_regex = "^cat"; | |
open_regex = "^open"; | |
open_match = "notepad"; | |
cp_regex = "^cp"; | |
cp_match = "copy"; | |
lat_regex = "^lat"; | |
} | |
string Parser::ParseCommand(string unparsed) | |
{ | |
// Checks if the regex can be found in the unparsed string | |
if (regex_search(unparsed, ls_regex)) | |
{ | |
// Unparsed now is actually parsed | |
unparsed = unparsed.replace(0, 3, ls_match); | |
} | |
else if (regex_search(unparsed, mkdir_regex)) | |
{ | |
unparsed = unparsed.replace(0, 5, mkdir_match); | |
} | |
else if (regex_search(unparsed, sleep_regex)) | |
{ | |
unparsed = unparsed.replace(0, 4, sleep_match); | |
} | |
else if (regex_search(unparsed, rand_regex)) | |
{ | |
srand(time(NULL)); | |
cout << rand() << endl; | |
return " "; | |
} | |
else if (regex_search(unparsed, rm_regex)) | |
{ | |
unparsed = unparsed.replace(0, 2, rm_match); | |
} | |
else if (regex_search(unparsed, touch_regex)) | |
{ | |
string tfile; | |
for (int i = 0; i < unparsed.length(); i++) | |
{ | |
if (i > 5) | |
{ | |
tfile += unparsed[i]; | |
} | |
} | |
ofstream create_file(tfile); | |
return " "; | |
} | |
else if (regex_search(unparsed, cat_regex)) | |
{ | |
string op_line; | |
string catfile; | |
for (int i = 0; i < unparsed.length(); i++) | |
{ | |
if (i > 3) | |
{ | |
catfile += unparsed[i]; | |
} | |
} | |
ifstream input_file(catfile); | |
while (input_file.good()) | |
{ | |
getline(input_file, op_line); | |
cout << op_line; | |
} | |
cout << endl; | |
return " "; | |
} | |
else if (regex_search(unparsed, open_regex)) | |
{ | |
unparsed = unparsed.replace(0, 5, open_match + " "); | |
} | |
else if (regex_search(unparsed, cp_regex)) | |
{ | |
unparsed = unparsed.replace(0, 4, cp_match + " "); | |
} | |
else if (regex_search(unparsed, lat_regex)) | |
{ | |
string latfile; | |
string op_line; | |
char holder; | |
for (int i = 0; i < unparsed.length(); i++) | |
{ | |
if (i > 3) | |
{ | |
latfile += unparsed[i]; | |
} | |
} | |
cout << latfile << endl << endl; | |
ifstream input_file(latfile); | |
while (input_file.good()) | |
{ | |
getline(input_file, op_line); | |
cout << op_line << endl; | |
holder = getch(); | |
} | |
return " "; | |
} | |
return unparsed; | |
} | |
void Parser::RunCommand(string parsed) | |
{ | |
// Converts to a different type so it can be used in the system method | |
const char *cparsed = parsed.c_str(); | |
system(cparsed); | |
} | |
void _tmain(int argc, _TCHAR* argv[]) | |
{ | |
string name; | |
int line_counter = 0; | |
Parser main_parser; | |
main_parser.SetRegexes(); | |
string command; | |
// Provides a never-ending command line interface | |
while (true) | |
{ | |
line_counter++; | |
cout << "<" << line_counter << name << "-> "; | |
//cin >> command; | |
getline(cin, command); | |
command = main_parser.ParseCommand(command); | |
main_parser.RunCommand(command); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment