From 0345fc52fca6594e800a72ea171008059a3dc735 Mon Sep 17 00:00:00 2001 From: Shreejan Date: Tue, 27 Sep 2022 14:02:08 +0530 Subject: [PATCH] Fixed some bugs --- .vscode/settings.json | 11 +- CommandConsole.exe | Bin 208486 -> 207822 bytes MainCommands.hpp | 514 +-------------------------------------- README.md | 2 +- main.cpp | 7 +- maincommands.cpp | 542 ++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 562 insertions(+), 514 deletions(-) create mode 100644 maincommands.cpp diff --git a/.vscode/settings.json b/.vscode/settings.json index 2871110..7a51e41 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -3,6 +3,15 @@ "html": "html", "chrono": "cpp", "iosfwd": "cpp", - "iostream": "cpp" + "iostream": "cpp", + "*.tcc": "cpp", + "ctime": "cpp", + "iomanip": "cpp", + "limits": "cpp", + "streambuf": "cpp", + "tuple": "cpp", + "type_traits": "cpp", + "utility": "cpp", + "string": "cpp" } } \ No newline at end of file diff --git a/CommandConsole.exe b/CommandConsole.exe index 60ee2a51fa1c6d5fc5faaf855cd452835f739dbc..5de3d75065ca5e9a009269f43f8d0cfffebd686a 100644 GIT binary patch delta 48182 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
  • )ecWyZVIsui)5-0PSXPszRkj=EIs5Wd+n7T}J4*ECZ zU^LDDDf%`7<;|tnbP=AW59L%ms~|q5;JJcw?=$K_%SbUruE#XtEj-ruNkC4GFGL7qX<2 z^j%|8S8%yv^&Iz9(yGPOQXgxbV%{p14#~ZnC{_Y@;@PS#gKWNbFs73FzIHXHCVqSU zGN!s(Rtp&#UFKXDiiTSVxe||i4rmEO>sPM}FW8v)j(x+PG$+({K#9S*Qay-v?bxltk>D3msE@E0WLmRGrXUdum`>G*udG=Aj zAj_fYaBmNo;6}950iXPcnvM$SYu+|po4ow7iA~eqPZ@3+HZA>pN{lHqa|$-cgS3U> zqF_0T9#X%7b`I{2BRk8{De2KGgM4dU!8SDismVV4VO%pT`+jsX1!G@P@L1#kt^T~r zPVYO}k_?zOwjpQ3AbmB3qCw8>zL3B@x6ePQsE<`eTs=)i4hgorze zpW5?iYTV*`8*xtdBL~hZO<FrrS@qf*E9<6jlO;O1^j0IEZx-1?BZ1Bw_F0y)FsLH>{R@y zqa9rpEiSUN&OWW3TGPzbVy~vIt!7PXi*w-NA*#XUUtRCgUF_a%TC=rpnOe5hCan$k z@4N@4Yq@-nws~!pN>};p(;X1>Wx~ z52^CSE+jMc>n=&R^Q@~+;N1FLY(%&Wd^%R!vwlFxkxkq%uIl`jA*39T7=U?2lrHGy zSxcYL!auKBZW?JNbtr2;g@*xfvlE-$;7#e{KmXWlYJXIF@>MHSxuaU+P06N&BihML zHPjy3{Y~8}wZW&Eq;EZKL2w-nZDvpW$DZ`8i_0=}tJZsSi|SRkDoWSHGhLFt@0fJe z9?%Z&FkR>ZgP(k{SN#+T?u@p3^A8mtzG786fC|)`(n$!(tU8T zM*aP9z3!5DDQ=JFqBeeOeg9uEvq`5sceM3e-}c`^oo_v>(tp_+s5;idf<6)~mUOP9 z6C@ohX*Wq*N!mctU`b0#`U*D&uXDqmkplU`UTCh_|qgQJL@}^ zEyt#pI0L66?K|_25T^trWTJ<&DehgWx#jPH*dD{6X?G^_$HU@P97xWQq#Q|H*2zNo zG(pcbqjESsmBjDjNs>bnyoWB7E36{y0>`3Kh1v{)j%x#Uy<_@I)7Y-ypzjUdT)0bf zi62o!Xy5Is;HW8#-88b#IG>nG*`w=3R}7AZelpQP!?e4+@^=lU9l+;&#@~tY%FA%M zb$m}=1=j%NuF|q{#we5-UxR`NO^sKWPC-7 z++EghIxJMfSZx>V=WKiM*?Q8(J)!k%oEIkX0rzW)IGo{YjM|<8; zt7=F0RCLUNu3fzFhGm)I8L#(U{iy!i38O5C@0jGqQvJI*jqAFnCuvHJfAXy`F;P3n zin1VHSWS6HSXGuNX}FW~M)2TxAdnPzZ;*Hb#zTGywR=?sz`dpD5$3z2$@a*Sf_Z

    G|pF6;=vF}YaP3yX^u6jkAxi6yB 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 ahq-oS=$!V@l+d{Fu)w3kBgTYwM*I&N!Y8i) diff --git a/MainCommands.hpp b/MainCommands.hpp index 801dad0..83e074d 100644 --- a/MainCommands.hpp +++ b/MainCommands.hpp @@ -4,10 +4,12 @@ #include #include #include +#include +#include + #pragma once using namespace std; -int SIZE = 260; int BUFFER_SIZE = 4096; class MainCommands @@ -28,7 +30,7 @@ int BUFFER_SIZE = 4096; void list(); void ccwd(); void clearScreen(); - void date(); + void gettime(); void make(); void wrte(); void wrta(); @@ -46,510 +48,4 @@ int BUFFER_SIZE = 4096; void getf(); void findf(); void calc(); -}; - -void MainCommands::rootChange() -{ - string username, password, expassword, expasspath = "root/userdetails/passwd.txt"; - ifstream exPass(expasspath); - - getline(exPass, expassword); - - cout << "You are going to change your root details.\nEnter your existing password - "; - getline(cin, password); - - if (password == expassword) - { - string decision; - cout << "What do you want to change - username(u) / password(p) / both(b) ?\n"; - getline(cin, decision); - - if (decision == "u") - { - string userpath = "root/userdetails/user.txt", newUsername; - ofstream userFile(userpath); - userFile.clear(); - - cout << "Type your new usernmae - "; - getline(cin, newUsername); - - userFile << newUsername; - userFile.close(); - } - - else if (decision == "p") - { - string passpath = "root/userdetails/passwd.txt", newPasswd; - ofstream passFile(passpath); - passFile.clear(); - - cout << "Type your new password - "; - getline(cin, newPasswd); - - passFile << newPasswd; - passFile.close(); - } - - else if (decision == "b") - { - string passpath = "root/userdetails/passwd.txt", newPasswd, userpath = "root/userdetails/user.txt", newUsername; - ofstream passFile(passpath); - passFile.clear(); - ofstream userFile(userpath); - userFile.clear(); - - cout << "Type your new usernmae - "; - getline(cin, newUsername); - cout << "Type your new password - "; - getline(cin, newPasswd); - - userFile << newUsername; - passFile << newPasswd; - userFile.close(); - passFile.close(); - } - - else - cout << "Try again next time\n"; - } - else - { - cout << "OOPS ! Password didn't match try again.\n"; - } - exPass.close(); -} - -void MainCommands::help() -{ - printf("For extra information read the README.md file\n"); - printf("\tIn all the cases first write the command hit enter and then give the arguements\n\n"); - - printf(">>calc - This command open a terminal calculator and you can do simple calculator operation in this.\n\tThe operaation are - (+, -, * , /, ^(Power of. Ex- 3^2 = 9)\n\tFirst number (operation) Second Number\n\tFor doing operation in decimal give d and for integer give i\n\n\n"); - printf(">>date - This command prints the current date and time\n\n"); - printf(">>make - This command will make a file for you and you need to give command which type of extension do you want.\n\n"); - printf(">>remo - This command will remove a file\n\n"); - printf(">>list - This will print the files and folders in your directory\n\n"); - printf(">>wrte - This will write in the file you will give. Start writing the text with a space.\n\n"); - printf(">>wrta - This will append in your file. Start writing the text with a space and tehn write all the things which you want.\nFor example - Suppose there is hello initially written. So you want write hi with a space between hello and hi,\n so you should give two spaces before writing in the terminal\n\n"); - printf(">>quit - write quit and hit enter to exit the terminal\n\n"); - printf(">>pcwd - Print Current Working Directory\n\n"); - printf(">>ccwd - Change Current Working Directory\n\n"); - printf(">>mkdr - This will make a folder in the current directory\n\n"); - printf(">>rmdr - This will remove a folder in the current directory\n\n"); - printf(">>info - This will show you the details of the STerminal\n\n"); - printf(">>clr - This will clear the screen of the terminal\n\n"); - printf(">>read - This will print the content of the file.\n\n"); - printf(">>cnge - This will change your username and password\n\n"); - printf(">>cfile - This will copy the contents of one file to another file.\n\n"); - printf(">>sys - This will print the information of your OS.\n\n"); - printf(">>echo - This will print anything which you have given. After writing echo press enter then write whatever you want and press enter.\n\n"); - printf(">>root - This will print the username and password\n\n"); - printf(">>rfile - This will rename the file with the name you want.\n\n"); - printf(">>rdr - This will rename the folder with the name you want.\n\n"); - printf(">>getf - This will confirm you that the fille or folder name you have given is present in the directory that you specified.\n\n"); - printf(">>findf - This will find the specified word in a given file and print the line where it is located.\n\n"); - printf(">>hist - This will print all the commands which you have written\n\n"); - printf(">>game - This will start a cricket game.\n\n"); - printf(">>ipad - This will show the IPv4 address.\n\n"); -} - -char *MainCommands::pcd() -{ - char *tmp = new char[256]; - getcwd(tmp, 256); - return tmp; -} - -void MainCommands::list() -{ - DIR *dir = opendir("."); - if (dir == NULL) - { - printf("Nothing in this directory\n\n"); - } - - struct dirent *entity; - entity = readdir(dir); - while (entity != NULL) - { - printf("%s\n", entity->d_name); - entity = readdir(dir); - } - printf("\n\n"); - closedir(dir); -} - -void MainCommands::ccwd() -{ - char nwd[256]; - cout << "Give the path of the new directory - "; - cin.sync(); - cin.getline(nwd, 256); - - if (chdir(nwd) == 0) - printf("successfully changed\n"); - else - printf("cannot change directory\n"); -} - -void MainCommands::clearScreen() -{ -#if defined(__linux__) || defined(__unix__) || defined(__APPLE__) - system("clear"); -#endif - -#if defined(_WIN32) || defined(_WIN64) - system("cls"); -#endif -} - - -void MainCommands::date () -{ - // variable to get the time - // this is going to print - // the date only🙃 - time_t now = time(0); - tm *ltm = localtime(&now); - cout << "Format - DD.MM.YYYY"<tm_mday << "." << ltm->tm_mon << "." << 1900+ltm->tm_year << endl; -} - -void MainCommands::make() -{ - fstream file; - cout << "Enter a new filename with its file extension - "; - getline(cin, filename); - - file.open(filename, ios::out); - - if (!file) - cout << "error\n"; - else - cout << "File created\n"; - file.close(); -} - -void MainCommands::wrte() -{ - string text; - cout << "Enter the filename or file path to write in it - "; - getline(cin, filename); - ofstream writeFile(filename); - - cout << "Enter the text which is to be written in the file - " << endl; - getline(cin, text); - writeFile<d_name, reciepent)) - printf("%s is present in the folder %s\n", dirp->d_name, foldername); - } - } - closedir(dp); -} - -void MainCommands::findf() -{ - char word[SIZE]; - FILE *fptr; - - int i = 0, line = 1; - int confirm; - int linearray[1000]; - - char filename[SIZE]; - printf("Enter filename: "); - cin.sync(); - cin.getline(filename, SIZE); - - char str[BUFFER_SIZE]; - - fptr = fopen(filename, "r"); - if (fptr == NULL) - { - printf("Cannot open file.\n"); - } - else - { - printf("Enter the word to find: "); - cin.sync(); - cin.getline(word, SIZE); - printf("The word is find in line number:- \n"); - while (fgets(str, BUFFER_SIZE, fptr) != NULL) - { - if (strstr(str, word)) - { - linearray[i] = line; - confirm = 1; - printf("%d\n", linearray[i]); - } - else - { - if (confirm != 1) - { - confirm = 0; - } - } - i++; - line++; - } - if (confirm == 0) - { - printf("Actually! eh word is not present.\n"); - } - } - fclose(fptr); -} - - -void MainCommands::calc() -{ - char type; - printf("Enter d for decimal operations and i for integer operation: "); - cin.sync(); - cin >> type; - if (type == 'i') - { - cin.sync(); - int a, b; - printf("Enter first number: "); - cin>>a; - printf("Enter second number: "); - cin.sync(); - cin>>b; - char o; - printf("Enter operation(+, -, /, *): "); - cin.sync(); - cin>>o; - if (o == '+') - { - printf("%d\n\n", a + b); - } - else if (o == '-') - { - printf("%d\n\n", a - b); - } - else if (o == '*') - { - printf("%d\n\n", a * b); - } - else if (o == '/') - { - printf("%d\n\n", a / b); - } - } - else - { - cin.sync(); - float x, y; - printf("Enter first number: "); - cin>>x; - printf("Enter second number: "); - cin.sync(); - cin>>y; - char o; - printf("Enter operation(+, -, /, *): "); - cin.sync(); - cin>>o; - if (o == '+') - { - printf("%.2f\n\n", x + y); - } - else if (o == '-') - { - printf("%.2f\n\n", x - y); - } - else if (o == '*') - { - printf("%.2f\n\n", x * y); - } - else if (o == '/') - { - printf("%.2f\n\n", x / y); - } - } -} \ No newline at end of file +}; \ No newline at end of file diff --git a/README.md b/README.md index 5dacbec..2dba913 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ The main program is written in the main.cpp file and the functions written there - Calculator: calc - Change Current Working Directory: ccwd - Clear the Screen: clr -- Show the date: date +- Show the time: time - Make new directory: mkdr - Help(which show all the function to be run): help - List all the files and directories: list diff --git a/main.cpp b/main.cpp index 48fb227..67d7f95 100644 --- a/main.cpp +++ b/main.cpp @@ -5,6 +5,7 @@ #include #include #include "MainCommands.hpp" +#include "maincommands.cpp" #include "Others/cricket.hpp" #include "internetthings.hpp" @@ -203,10 +204,10 @@ void CClass::cmdTake() MC.ccwd(); } - else if (cmdStr == "date") + else if (cmdStr == "time") { - Q.push("date"); - MC.date(); + Q.push("time"); + MC.gettime(); } else if (cmdStr == "make") diff --git a/maincommands.cpp b/maincommands.cpp new file mode 100644 index 0000000..ff4ef53 --- /dev/null +++ b/maincommands.cpp @@ -0,0 +1,542 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include "MainCommands.hpp" + +void MainCommands::rootChange() +{ + string username, password, expassword, expasspath = "root/userdetails/passwd.txt"; + ifstream exPass(expasspath); + + getline(exPass, expassword); + + cout << "You are going to change your root details.\nEnter your existing password - "; + getline(cin, password); + + if (password == expassword) + { + string decision; + cout << "What do you want to change - username(u) / password(p) / both(b) ?\n"; + getline(cin, decision); + + if (decision == "u") + { + string userpath = "root/userdetails/user.txt", newUsername; + ofstream userFile(userpath); + userFile.clear(); + + cout << "Type your new usernmae - "; + getline(cin, newUsername); + + userFile << newUsername; + userFile.close(); + } + + else if (decision == "p") + { + string passpath = "root/userdetails/passwd.txt", newPasswd; + ofstream passFile(passpath); + passFile.clear(); + + cout << "Type your new password - "; + getline(cin, newPasswd); + + passFile << newPasswd; + passFile.close(); + } + + else if (decision == "b") + { + string passpath = "root/userdetails/passwd.txt", newPasswd, userpath = "root/userdetails/user.txt", newUsername; + ofstream passFile(passpath); + passFile.clear(); + ofstream userFile(userpath); + userFile.clear(); + + cout << "Type your new usernmae - "; + getline(cin, newUsername); + cout << "Type your new password - "; + getline(cin, newPasswd); + + userFile << newUsername; + passFile << newPasswd; + userFile.close(); + passFile.close(); + } + + else + cout << "Try again next time\n"; + } + else + { + cout << "OOPS ! Password didn't match try again.\n"; + } + exPass.close(); +} + +void MainCommands::help() +{ + printf("For extra information read the README.md file\n"); + printf("\tIn all the cases first write the command hit enter and then give the arguements\n\n"); + + printf(">>calc - This command open a terminal calculator and you can do simple calculator operation in this.\n\tThe operaation are - (+, -, * , /, ^(Power of. Ex- 3^2 = 9)\n\tFirst number (operation) Second Number\n\tFor doing operation in decimal give d and for integer give i\n\n\n"); + printf(">>time - This command prints the current date and time\n\n"); + printf(">>make - This command will make a file for you and you need to give command which type of extension do you want.\n\n"); + printf(">>remo - This command will remove a file\n\n"); + printf(">>list - This will print the files and folders in your directory\n\n"); + printf(">>wrte - This will write in the file you will give. Start writing the text with a space.\n\n"); + printf(">>wrta - This will append in your file. Start writing the text with a space and tehn write all the things which you want.\nFor example - Suppose there is hello initially written. So you want write hi with a space between hello and hi,\n so you should give two spaces before writing in the terminal\n\n"); + printf(">>quit - write quit and hit enter to exit the terminal\n\n"); + printf(">>pcwd - Print Current Working Directory\n\n"); + printf(">>ccwd - Change Current Working Directory\n\n"); + printf(">>mkdr - This will make a folder in the current directory\n\n"); + printf(">>rmdr - This will remove a folder in the current directory\n\n"); + printf(">>info - This will show you the details of the STerminal\n\n"); + printf(">>clr - This will clear the screen of the terminal\n\n"); + printf(">>read - This will print the content of the file.\n\n"); + printf(">>cnge - This will change your username and password\n\n"); + printf(">>cfile - This will copy the contents of one file to another file.\n\n"); + printf(">>sys - This will print the information of your OS.\n\n"); + printf(">>echo - This will print anything which you have given. After writing echo press enter then write whatever you want and press enter.\n\n"); + printf(">>root - This will print the username and password\n\n"); + printf(">>rfile - This will rename the file with the name you want.\n\n"); + printf(">>rdr - This will rename the folder with the name you want.\n\n"); + printf(">>getf - This will confirm you that the fille or folder name you have given is present in the directory that you specified.\n\n"); + printf(">>findf - This will find the specified word in a given file and print the line where it is located.\n\n"); + printf(">>hist - This will print all the commands which you have written\n\n"); + printf(">>game - This will start a cricket game.\n\n"); + printf(">>ipad - This will show the IPv4 address.\n\n"); +} + +char *MainCommands::pcd() +{ + char *tmp = new char[256]; + getcwd(tmp, 256); + return tmp; +} + +void MainCommands::list() +{ + DIR *dir = opendir("."); + if (dir == NULL) + { + printf("Nothing in this directory\n\n"); + } + + struct dirent *entity; + entity = readdir(dir); + while (entity != NULL) + { + printf("%s\n", entity->d_name); + entity = readdir(dir); + } + printf("\n\n"); + closedir(dir); +} + +void MainCommands::ccwd() +{ + char nwd[256]; + cout << "Give the path of the new directory - "; + cin.sync(); + cin.getline(nwd, 256); + + if (chdir(nwd) == 0) + printf("successfully changed\n"); + else + printf("cannot change directory\n"); +} + +void MainCommands::clearScreen() +{ +#if defined(__linux__) || defined(__unix__) || defined(__APPLE__) + cout << "\033[2J\033[1;1H"; +#endif + +#if defined(_WIN32) || defined(_WIN64) + system("cls"); +#endif +} + +void MainCommands::gettime() +{ + // variable to get the time + // this is going to print + // the date only🙃 + time_t ltime = time(NULL); + cout << ctime(<ime) << endl; +} + +void MainCommands::make() +{ + fstream file; + cout << "Enter a new filename with its file extension - "; + getline(cin, filename); + + file.open(filename, ios::out); + + if (!file) + cout << "error\n"; + else + cout << "File created\n"; + file.close(); +} + +void MainCommands::wrte() +{ + string text; + cout << "Enter the filename or file path to write in it - "; + getline(cin, filename); + ofstream writeFile(filename); + + cout << "Enter the text which is to be written in the file - " << endl; + getline(cin, text); + writeFile << text; + writeFile.close(); +} + +void MainCommands::wrta() +{ + string text; + cout << "Enter the filename or file path to append something in it - "; + getline(cin, filename); + ofstream appendFile; + appendFile.open(filename, ios_base::app); + + cout << "Enter the text to append in the file - " << endl; + getline(cin, text); + appendFile << text << endl; + appendFile.close(); +} + +void MainCommands::remo() +{ + char fremove[20]; + cout << "Enter the filename or file path to remove - "; + cin.sync(); + cin.getline(fremove, 20); + if (remove(fremove) == 0) + { + cout << "Successfully deleted" << endl; + } + else + cout << "Cannot delete" << endl; +} + +void MainCommands::mkdr() +{ + cout << "Enter the name of the folder or a new path - "; + getcwd(dirname, 260); + if (mkdir(dirname) == -1) + { + cout << "Cannot create directory\n"; + } + else + cout << "Directory created\n"; +} + +void MainCommands::rmdr() +{ + cout << "Enter the name of the folder or a path to delete - "; + cin.sync(); + cin.getline(dirname, 260); + if (rmdir(dirname) == 1) + cout << "Directory deleted\n"; + else + cout << "Cannot delete directory\n"; +} + +void MainCommands::info() +{ + cout << "Command Console is a fast, light-weight and secure shell.\nIt can run cross-platform - wndows, macOS and linux.\nType help to know about the commands.\nFor any query write us email - dolaishreejan@gmail.com\n\n"; +} + +void MainCommands::read() +{ + string text; + cout << "Enter a filename or its path to read it - "; + getline(cin, filename); + + ifstream readFile(filename); + getline(readFile, text); + cout << text << endl; + readFile.close(); +} + +void MainCommands::copyfile() +{ + string mfname, cfname, ctext; + cout << "Enter the filename or specify to file path that is to be copied - "; + getline(cin, mfname); + cout << "Now enter the the name of the file in which the contents of " << mfname << " to be copied - \n"; + getline(cin, cfname); + + ofstream copiedfile; + copiedfile.open(cfname, ios_base::app); + ifstream readFile(mfname); + getline(readFile, ctext); + copiedfile << ctext << endl; + readFile.close(); + copiedfile.close(); +} + +int MainCommands::info_system() +{ +#if defined(__linux__) || defined(__unix__) || defined(__APPLE__) +#include + char CPUBrandString[0x40]; + unsigned int CPUInfo[4] = {0, 0, 0, 0}; + + __cpuid(0x80000000, CPUInfo[0], CPUInfo[1], CPUInfo[2], CPUInfo[3]); + unsigned int nExIds = CPUInfo[0]; + + memset(CPUBrandString, 0, sizeof(CPUBrandString)); + + for (unsigned int i = 0x80000000; i <= nExIds; ++i) + { + __cpuid(i, CPUInfo[0], CPUInfo[1], CPUInfo[2], CPUInfo[3]); + + if (i == 0x80000002) + memcpy(CPUBrandString, CPUInfo, sizeof(CPUInfo)); + else if (i == 0x80000003) + memcpy(CPUBrandString + 16, CPUInfo, sizeof(CPUInfo)); + else if (i == 0x80000004) + memcpy(CPUBrandString + 32, CPUInfo, sizeof(CPUInfo)); + } + + cout << "CPU Type: " << CPUBrandString << endl; +#endif + +#if defined(__WIN32) || defined(__WIN64) + SYSTEM_INFO siSysInfo; + + // Copy the hardware information to the SYSTEM_INFO structure. + + GetSystemInfo(&siSysInfo); + printf("Hardware information: \n"); + printf(" OEM ID: %u\n", siSysInfo.dwOemId); + printf(" Number of processors: %u\n", + siSysInfo.dwNumberOfProcessors); + printf(" PAGE size: %u\n", siSysInfo.dwPageSize); + printf(" Processor type: %u\n", siSysInfo.dwProcessorType); + printf(" Minimum application address: %lx\n", + siSysInfo.lpMinimumApplicationAddress); + printf(" Maximum application address: %lx\n", + siSysInfo.lpMaximumApplicationAddress); + printf(" Active processor mask: %u\n", + siSysInfo.dwActiveProcessorMask); +#endif + return 0; +} + +void MainCommands::echo() +{ + string text; + getline(cin, text); + cout << text << endl; +} + +void MainCommands::rootDisplay() +{ + string passwd, expasswd, expasspath = "root/userdetails/passwd.txt"; + ifstream exPasswordFile(expasspath); + getline(exPasswordFile, expasswd); + cout << "Enter the password - "; + getline(cin, passwd); + if (passwd == expasswd) + { + string userpath = "root/userdetails/user.txt", username; + ifstream userFile(userpath); + getline(userFile, username); + cout << "Username:- " << username << endl; + cout << "Password:- " << expasswd << endl; + userFile.close(); + } + else + cout << "OOPS! Password is wrong. Try again next time\n"; + exPasswordFile.close(); +} + +void MainCommands::renameFile() +{ + char ofile[260], nfile[260]; + cout << "Enter the name of the file which you want to rename - "; + cin.sync(); + cin.getline(ofile, 260); + cout << "Enter the new name - "; + cin.sync(); + cin.getline(nfile, 260); + if (!(rename(ofile, nfile))) + cout << "Successfully changed\n"; + else + cout << "Error\n"; +} + +void MainCommands::renameDir() +{ + char odir[260], ndir[260]; + cout << "Enter the name of the folder/directory which you want to rename - "; + cin.sync(); + cin.getline(odir, 260); + cout << "Enter the new name - "; + cin.sync(); + cin.getline(ndir, 260); + if (!(rename(odir, ndir))) + cout << "Successfully changed\n"; + else + cout << "Error\n"; +} + +void MainCommands::getf() +{ + char foldername[260]; + printf("Enter the name of the folder or directory first: "); + cin.sync(); + cin.getline(foldername, 260); + DIR *dp; + struct dirent *dirp; + + if ((dp = opendir(foldername)) == NULL) + { + printf("can't find %s\n", foldername); + } + else + { + char reciepent[260]; + printf("Enter the filename or foldername to find: "); + cin.sync(); + cin.getline(reciepent, 260); + while ((dirp = readdir(dp)) != NULL) + { + if (!strcmp(dirp->d_name, reciepent)) + printf("%s is present in the folder %s\n", dirp->d_name, foldername); + } + } + closedir(dp); +} + +void MainCommands::findf() +{ + char word[260]; + FILE *fptr; + + int i = 0, line = 1; + int confirm; + int linearray[1000]; + + char filename[260]; + printf("Enter filename: "); + cin.sync(); + cin.getline(filename, 260); + + char str[BUFFER_SIZE]; + + fptr = fopen(filename, "r"); + if (fptr == NULL) + { + printf("Cannot open file.\n"); + } + else + { + printf("Enter the word to find: "); + cin.sync(); + cin.getline(word, 260); + printf("The word is find in line number:- \n"); + while (fgets(str, BUFFER_SIZE, fptr) != NULL) + { + if (strstr(str, word)) + { + linearray[i] = line; + confirm = 1; + printf("%d\n", linearray[i]); + } + else + { + if (confirm != 1) + { + confirm = 0; + } + } + i++; + line++; + } + if (confirm == 0) + { + printf("Actually! eh word is not present.\n"); + } + } + fclose(fptr); +} + +void MainCommands::calc() +{ + char type; + printf("Enter d for decimal operations and i for integer operation: "); + cin.sync(); + cin >> type; + if (type == 'i') + { + cin.sync(); + int a, b; + printf("Enter first number: "); + cin >> a; + printf("Enter second number: "); + cin.sync(); + cin >> b; + char o; + printf("Enter operation(+, -, /, *): "); + cin.sync(); + cin >> o; + if (o == '+') + { + printf("%d\n\n", a + b); + } + else if (o == '-') + { + printf("%d\n\n", a - b); + } + else if (o == '*') + { + printf("%d\n\n", a * b); + } + else if (o == '/') + { + printf("%d\n\n", a / b); + } + } + else + { + cin.sync(); + float x, y; + printf("Enter first number: "); + cin >> x; + printf("Enter second number: "); + cin.sync(); + cin >> y; + char o; + printf("Enter operation(+, -, /, *): "); + cin.sync(); + cin >> o; + if (o == '+') + { + printf("%.2f\n\n", x + y); + } + else if (o == '-') + { + printf("%.2f\n\n", x - y); + } + else if (o == '*') + { + printf("%.2f\n\n", x * y); + } + else if (o == '/') + { + printf("%.2f\n\n", x / y); + } + } +} \ No newline at end of file