#include <string.h>
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

#define MCL 512  //max command (with arguments) length

int main(void)
{
    char prikaz[MCL];
    char *args[MCL/2+1];
    unsigned int i,j,a,isarg;
    pid_t pid;

    printf("exit - ukončení programu\n");
    do {
        printf("# ");
        if(!fgets(prikaz,MCL-1,stdin))
            break;
        if(!strcmp("exit\n",prikaz))
            break;
        /************ parsovani prikazu a argumentu prikazu ************/
        a = 0;
        j = strlen(prikaz);
        isarg = 0;
        for(i = 0; i < j; i++)
        {
            if(isspace(prikaz[i])) {
                if(isarg) {
                    prikaz[i] = '\0';
                    a++;
                    isarg = 0;
                }
            }
            else {
                if(!isarg) {
                    isarg = 1;
                    args[a] =  prikaz+i;
                }
            }
        }
        args[a] = NULL;

        /********* spusteni procesu a cekani na jeho ukonceni ***********/
        if(args[0] != NULL)
        {
           if(pid = fork())
           {
                if(pid > 0) {
                    i= 1;
                    waitpid(pid,&i,0);
                    if(WEXITSTATUS(i))
                        printf("Program failed!\n");
                }
           }
           else {
               execvp(args[0],args);
               printf("Exec failed!\n");
               exit(1);
           }
        }
        /*****************************************************************/
    } while (1);

    printf("Nashledanou!\n");
    return 0;
}

