Witam mam napisaną taką powłokę i potrzebuje dodać do niej jakieś własne polecenia.
Czy ktoś mógłby mi w tym pomóc i trochę zmodyfikować tą powłokę ? Tak aby były własne polecenia ?
#include <iostream>
#include <string>
#include <vector>
#include <stdio.h>
#include <unistd.h>
#include <sys/param.h>
#include <sys/types.h>
#include <dirent.h>
#include <fstream>
#include <sstream>
using namespace std;
string PobierzSciezke();
string polecenie;
string domowy = PobierzSciezke();
const char * domowyKatalog = domowy.c_str();
//*****************************************************************************************
string PobierzSciezke(){
//funkcja zmieniajaca getcwd z jezyka C
char *buffer = new char[256];
// na zabezpieczona przed przeciekami pamieci
getcwd(buffer,256);
if(buffer != NULL){
string ret(buffer);
delete[] buffer;
return ret;
}else{
delete[] buffer;
return string();
}
}
void pwd(){
//funkcja podajaca sciezke korzystajaca z PobierzSciezke
cout << PobierzSciezke() <<endl;
}
void wyswietl_historie(vector <string> & historia ){
for(unsigned int i = 0; i < (historia.size())-1; i++)
cout << historia[i] << " ";
cout <<endl;
}
void cd(string parametr2){
const char *par2=parametr2.c_str();
if (parametr2 == "")
chdir(domowyKatalog);
else{
chdir(par2);
}
}
void ls(){
DIR *dpdf;
struct dirent *epdf;
dpdf = opendir("./");
if (dpdf != NULL){
while (epdf = readdir(dpdf)){
cout << epdf->d_name << endl;
}
}
}
void kopiuj(string par2,string par3){
ifstream plik1 (par2.c_str(), fstream::binary);
if (!plik1.good() )
cout << "plik nie istnieje" <<endl;
else {
ofstream plik2 (par3.c_str(), fstream::trunc|fstream::binary);
if(!plik2.good())
cout << "Nie mozna otworzyc pliku do zapisu" << endl;
else{
plik2 << plik1.rdbuf ();
plik1.close();
plik2.close();
cout << " Wykonano " << endl;
}
}
}
void polacz(string in1,string in2,string out){
ifstream plik1 (in1.c_str(), fstream::binary);
ifstream plik2 (in2.c_str(), fstream::binary);
if (!plik1.good())
cout << "Plik "<< in1 << " nie istnieje lub nie można uzyskac dostepu "<< endl;
else if (!plik2.good())
cout << "Plik "<< in2 << " nie istnieje lub nie można uzyskac dostepu "<< endl;
else {
ofstream plik3 (out.c_str(), fstream::trunc|fstream::binary);
if(!plik3.good())
cout << "Nie mozna otworzyc pliku do zapisu" << endl;
else{
plik3 << plik1.rdbuf ();
plik3 << plik2.rdbuf();
plik1.close();
plik2.close();
plik3.close();
cout << " Wykonano " << endl;
}
}
}
void wypisz(string inp){
ifstream plik1 (inp.c_str(), fstream::in);
if (!plik1.good() )
cout << " Plik nie istnieje lub brak dostepu " <<endl;
else {
cout << plik1.rdbuf ();
cout<<endl;
plik1.close();
}
}
void help(){
cout << endl;
cout << " Możliwe polecenia : "<< endl;
cout << "'cd' 'ls' 'pwd' 'kopiuj' 'help' 'historia' 'polacz' 'wypisz' "<<endl;
cout << " <nazwa polecenia> --help (Wyswietla pomoc do danego polecenia)"<<endl;
cout << " exit -konczy dzialanie programu "<< endl;
cout << endl;
}
int main()
{
vector <string> historia;
help();
cout <<endl;
while((polecenie !="exit") && (polecenie !="EXIT")){
cout << PobierzSciezke() <<" -> ";
getline(cin,polecenie);
//###################################################
string parametr_1, parametr_2, parametr_3,parametr_4,parametr_5;
istringstream StrStream(polecenie);
StrStream >> parametr_1;
StrStream >> parametr_2;
StrStream >> parametr_3;
StrStream >> parametr_4;
StrStream >> parametr_5;
if (parametr_2 == "--help"){
if (parametr_1=="pwd")
cout << "Wyswietla aktualna sciezke "<<endl;
if (parametr_1=="ls")
cout << "Wyswietla listing biezacego katalogu "<< endl;
if (parametr_1=="help")
cout << "Wyswietla liste mozliwych komend " <<endl;
if (parametr_1=="historia")
cout << "Wyswietla historie wprowadzonych polecen"<< endl;
if (parametr_1=="cd")
cout << "cd <sciezka> -zmienia katalog roboczy. cd -zmienia na domowy."
" cd / -zmienia na glowny. cd .. -cofa "<< endl;
if (parametr_1=="kopiuj")
cout << " kopiuj <plik zrodlowy> <plik docelowy> " <<
"- Kopiuje plik zrodlowy pod nazwa zadana jako docelowy"<< endl;
if (parametr_1=="polacz")
cout<<"polacz <plik1> <plik2> <plik docelowy> - "<<
"Laczy dwa pliki i zapisuje go jako plik docelowy"<< endl;
if (parametr_1=="wypisz")
cout <<"wypisz <plik> - Wypisuje zawartosc pliku jako tekst"<<endl;
}
else {
if (parametr_1 == "historia"){
if (historia.size()>1){
wyswietl_historie(historia) ;
}else
cout <<"Historia jest pusta" <<endl;
}
if (parametr_1 == "pwd"){
pwd();
historia.push_back(polecenie);
}
if (parametr_1 == "cd"){
cd(parametr_2);
historia.push_back(polecenie);
}
if (parametr_1 == "ls"){
ls();
historia.push_back(polecenie);
}
if (parametr_1 == "kopiuj" && !parametr_2.empty() && !parametr_3.empty()){
kopiuj(parametr_2,parametr_3);
historia.push_back(polecenie);
}
if (parametr_1 == "help"){
help();
historia.push_back(polecenie);
}
if (parametr_1 == "polacz"&& !parametr_2.empty() && !parametr_3.empty()&& !parametr_4.empty()){
polacz(parametr_2,parametr_3,parametr_4);
historia.push_back(polecenie);
}
if (parametr_1 == "wypisz"){
wypisz(parametr_2);
historia.push_back(polecenie);
}
if (parametr_1 == "."){
}
}
}
return 0;
}