          INTERPRETER PRIKAZOV
              (zadanie c.4)
          
          Henrich Neuschl
              5ZI033
            
ZADANIE
  Interpreter prikazov zadanie c.4
  
  Vytvorte jednoduchny itnerpreter prikazov, 
  ktory bude prechzanie suborovym systemom 
  prezentovat formou putovania hraca virtualnym svetom. 
  Jednotlive adrese predstavuju "dvere" miestnosti do ktorych sa da vojst. 
  Predmety (subory) sa daju ukladad do vaku a neskor 
  odkladad v inyh miestnostiach. 
  Prikazy, ktore interpreter prikazov nepozna, 
  spracuje pomocou zavolania interpretera prikazov bash.

Zoznam prikazov:
  * chod <nazov_miestnosti> - vojde do danej miestnosti  
  * zober <predmet> - zoberie predmet z danej miestnosti 
  * poloz <predmet> - ulozi predmet do aktualnej miestnosti 
  * obsahvaku - vypise obsah vaku\n
  * prezri - zobrazi zoznam predmetov v aktualnej miestnosti 
  * cesty - vypise zoznam miestnosti, kam mozeme z aktualnej miestnosti ist 
  * klonuj <predmet> - vytvori kopiu predmetu v danej miestnosti do vaku
  * zahod <predmet> - odstrani predmet z vaku
  * znic <predmet> - znici predmet v miestnosti
  * preskumaj <predmet> - popise dany predmet
  * koniec - ukonci cinnost interpretera prikazov
  
RIESENIE PROBLEMU
  
  Riesenie a priama implementacia problemu nebola velkym problemom, vacsinu casi mi zabralo osetrenie chyb, vstupov a vystupov interpretera.
  Po spusteni interpretera sa vytvori skrity priecinok ".VAK" v adresari kde je spusteny interpreter. PO ukonceni ostane priecinok vytvoreny.
  Na ptracu zo subormi a pricinkami som vyuzival metody
  - char *getcwd(char *buf, size_t size);
  - int mkdir(const char *pathname, mode_t mode);
  - int rename(const char *oldpath, const char *newpath);
  - int link(const char *oldpath, const char *newpath);
  - int stat(const char *path, struct stat *buf);
  
  Tak isto aj datove struktury ako
  - dirent
  - DIR
  - struct
  
    
POPIS JEDNOTLIVYCH METOD
    
__chod(char cmm[]);
  
  Metoda __chod(char cmm[]) vykona vstup do "miestnosti". Ak je zadana miestnost rovna tej v korej sa nachadzate metoda vykona "vystup z miestnosti". path vypisovany na obrazovke za START:~/.... nie je CWD(Current Working Directory), je postupne tvoreny v premennej path tak ako sa vchadza/vychadza z miestnoti. Tymto je zabezpecene ze sa budem pohybovat len v ramci hry.


__zober(char cmm[]);
  
  Metoda __zober(char cmm[]) zoberie predmet z danej miestnosti a ulozi ho do vaku. Zobratie predmetu sa rozumie operacia premiestnit na ktoru som pouzil prikaz rename(char* oldpath, char* newpath);

__poloz(char cmm[]);
  
  Metoda __poloz(char cmm[])ulozi predmet z vaku do aktualnej miestnosti. Na tuto operaciu je taktiez pouzita metoda rename.

  
__obsahvaku();
  
  Metoda __obsahvaku() vypise obsah vaku. Na vypisanie obsahu vaku, tak isto ako pri pri vypisovani ciest som pouzil premennu typu dirent a DIR, kde sa podtupne v cykle prezera priecinok a vypisuju subory(dirent->d_name). 


__prezri();
  Tak isto ako pri __obsahvaku() aj tu je pouzita rovnaka metoda vypisovania predmetov v miestnosti, no pri vypisovani sa vypisuje vsetko co je v danom adresari. Preto pomocou int stat(const char *restrict path, struct stat *restrict buf); zistime informacie o subore s coho vysudime ci je to regularny subor[S_ISREG(st_mode)] podla toho nechame vypisat len predmety.


__klonuj(char cmm[]);
  
  Metoda __klonuj(char cmm[]) pracuje rovnako ako zober. Rozdiel je len v tom ze pri klonovani sa predmet kopiruje, nie premiestnuje. To znamena ze som namiesto metody int rename(const char *oldpath, const char *newpath); pouzil metodu int link(const char *oldpath, const char *newpath); .


__cesty();        
  
  Metoda __cesty() je totozna s metodou __prezri(). Pri vypisovni ale testujeme ci je dany file priecinok [S_ISDIR(st_mode)].


__zahod(char cmm[]);
  
  Metoda __zahod(char cmm[]) zahodi predmet z vaku. Pod metodou zahod mozme rozumiet aj vymazanie. Pouzita metoda int remove(const char *pathname); .


__znic(char cmm[]);
  
  Metoda __znic(char cmm[]) je rovnaka ako __zahod(char cmm[]) no nevymazavam z vaku ale z aktualnej miestnosti.

    
__preskumaj(char cmm[]);

  Metoda __preskumaj(char cmm[]) vypiseinformacie o predmete ako velkost, pristupove prava, cas poslednej modifikacie. Informacie o predmete ziskavam pomocou metody int stat(const char *path, struct stat *buf);

ZAVER

  Na zaciatku prace som mal problemy zorientovat sa ako praca zo subormi funguje, no ako som postupoval v praci dalej, pozeral rozne manuali a tutoriali som sa naucil pracu zo subormi, editovanie a osetrovanie roznych chyb. Najvacsie problemi som mal pri prechadzani v miestnostiach, vracanie sa naspet a vyladenie aby som neusiel von z hry.