#define _CRT_SECURE_NO_WARNINGS
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
// Help fonksiyonunu çalıştırmak için
void help()
{
printf("Help\n");
}
// Ekranı temizlemek için
void clear()
{
system("cls");
}
// Ekrana bir metni yazdırmak için
void echo(const char* buffer)
{
printf("%s\n", buffer);
}
// Fonksiyon yapısını oluştur
struct Func_Yapisi
{
const char* name;
void (*func)();
};
// Fonksiyon varsa çalıştıracak ( Parametresiz olması lazım void asd() )
Func_Yapisi function_map[] =
{
{ "help", help },
{ "clear", clear }
};
// Komutu çalıştır
int run_command(char* name)
{
// Echo yazısını kontrol et
if ((name[0] == 'e' || name[0] == 'E') && (name[1] == 'c' || name[1] == 'C') && (name[2] == 'h' || name[2] == 'H') && (name[3] == 'o' || name[3] == 'O'))
{
// Sadece echo mu yazdı ?
if (strlen(name) == 4)
{
printf("Kullanim: echo yazi\n");
return 0;
}
// Echo yazısından sonra boşluk var mı kontrol et
if (name[4] == ' ')
{
// Metnin devamı boş mu kontrol edecek
int total = 0;
// Boşluktan sonra tüm metin boş mu kontrol et
for (int i = 5, j = 0; i != strlen(name); i++, j++)
{
if (name[i] == ' ')
{
total++;
}
}
// Tüm metin boşsa
if (total == (strlen(name) - 5))
{
printf("echo yazisinin devami bulunmuyor.\n");
return 0;
}
// Metnin uzunluğunu hesapla
int len = strlen(name) - 5;
// Yeni bir dize oluştur
char* icerik = (char*)malloc(sizeof(char) * len + 1);
// Echo dan sonraki metni kopyala
for (int i = 5, j = 0; i != strlen(name); i++, j++)
{
icerik[j] = name[i];
}
// Son satırı bitir
icerik[len] = 0;
// Ekrana yazdır
echo(icerik);
}
else
{
// boşluk yoksa bilgi ver
printf("Hatali komut girdiniz: %s\n", name);
}
}
else
{
// Döngü yardımı ile fonksiyon var mı kontrol et
for (int i = 0; i < sizeof(function_map) / sizeof(function_map[0]); i++)
{
// Komut varsa çalıştır
if (!strcmp(function_map[i].name, name))
{
function_map[i].func();
return 1;
}
}
// Fonksiyon yoksa hata ver
printf("Hatali komut girdiniz: %s\n", name);
}
return 0;
}
int main()
{
char* token;
char shell_buffer[] = "echoecho selam;echo burak;help;help;test";
token = strtok(shell_buffer, ";");
while (token != NULL)
{
run_command(token);
token = strtok(NULL, ";");
}
return 0;
}