Esempio n. 1
0
void UIServer::slotJobCanceled(ProgressItem *item)
{
    kdDebug(7024) << "UIServer::slotJobCanceled appid=" << item->appId() << " jobid=" << item->jobId() << endl;
    // kill the corresponding job
    killJob(item->appId(), item->jobId());

    // KIO::Job, when killed, should call back jobFinished(), but we can't
    // really rely on that - the app may have crashed
    delete item;
}
Esempio n. 2
0
void UIServer::slotCancelCurrent()
{
    QListViewItemIterator it(listProgress);
    ProgressItem *item;

    // kill selected jobs
    for(; it.current(); ++it)
    {
        if(it.current()->isSelected())
        {
            item = (ProgressItem *)it.current();
            killJob(item->appId(), item->jobId());
            return;
        }
    }
}
Esempio n. 3
0
void KRPleaseWaitHandler::startWaiting(QString msg, int count , bool cancel)
{
    if (dlg == 0) {
        dlg = new KRPleaseWait(msg , _parentWindow, count, cancel);
        connect(dlg, SIGNAL(canceled()), this, SLOT(killJob()));
    }
    incMutex = cycleMutex = _wasCancelled = false;
    dlg->setValue(0);

    dlg->setLabelText(msg);
    if (count == 0) {
        dlg->setMaximum(10);
        cycle = true ;
        cycleProgress();
    } else {
        dlg->setMaximum(count);
        cycle = false;
    }
}
Esempio n. 4
0
int checkBuiltInCommands()
{
        if (strcmp("exit", commandArgv[0]) == 0) {
                puts("\nExiting. Thanks for using myShell!\n");
		exit(EXIT_SUCCESS);
        }
        if (strcmp("cd", commandArgv[0]) == 0) {
		//add_command_to_history(commandArgv[0]);
                changeDirectory();
                return 1;
        }
       /* if (strcmp("in", commandArgv[0]) == 0) {
                launchJob(commandArgv + 2, *(commandArgv + 1), STDIN, FOREGROUND);
                return 1;
        }
        if (strcmp("out", commandArgv[0]) == 0) {
                launchJob(commandArgv + 2, *(commandArgv + 1), STDOUT, FOREGROUND);
                return 1;
        }*/
        if (strcmp("bg", commandArgv[0]) == 0) {
                //add_command_to_history(commandArgv[0]);

		if (commandArgv[1] == NULL)
                        return 0;
                /*if (strcmp("in", commandArgv[1]) == 0)
                        launchJob(commandArgv + 3, *(commandArgv + 2), STDIN, BACKGROUND);
                else if (strcmp("out", commandArgv[1]) == 0)
                        launchJob(commandArgv + 3, *(commandArgv + 2), STDOUT, BACKGROUND);
                else
                        launchJob(commandArgv + 1, "STANDARD", 0, BACKGROUND);*/
		int jobId = (int) atoi(commandArgv[1]);
		t_job* job = getJob(jobId, BY_JOB_ID);
		if(job == NULL)
			return 0;
		if(job->status == SUSPENDED){
			fprintf(stdout, "converting program from suspended to background wait status: ");
			puts(job->name);
			putJobBackground(job, TRUE);
			//launchJob(job->name, "STANDARD", 0, BACKGROUND);
		}
		else{
			putJobBackground(job, FALSE);
			fprintf(stdout, "program already in a wait status.");
		}
		return 1;
        }
	if (strcmp("&", commandArgv[commandArgc-1]) == 0){ // commandArgv[1] for bg after file

		//printf("%s", commandArgv[0]);
		if (strcmp("&", commandArgv[0]) == 0) // commandArgv[0] for bg after file
			return 0;
		else{
			//puts(commandArgv);
			//printf("commandArgv:  %p\n", commandArgv);
			launchJob(commandArgv, "STANDARD", 0, BACKGROUND); // ommandArgv for bg after file
		}
		return 1;
	}
	else{
		//printf("%s", commandArgv[0]);
	}
       if (strcmp("fg", commandArgv[0]) == 0) {
                //add_command_to_history(commandArgv[0]);

		if (commandArgv[1] == NULL)
                        return 0;
                int jobId = (int) atoi(commandArgv[1]);
                t_job* job = getJob(jobId, BY_JOB_ID);
                if (job == NULL)
                        return 0;
                if (job->status == SUSPENDED || job->status == WAITING_INPUT){
                        fprintf(stdout, "bringing program from background to run: ");
			puts(job->name);
			putJobForeground(job, TRUE);
		}
                else                               // status = BACKGROUND
                        putJobForeground(job, FALSE);
                return 1;
        }
        if (strcmp("jobs", commandArgv[0]) == 0) {
                //add_command_to_history(commandArgv[0]);

		printJobs();
                return 1;
        }
        if (strcmp("kill", commandArgv[0]) == 0)
        {
                //add_command_to_history(commandArgv[0]);

				if (commandArgv[1] == NULL)
                        return 0;

				char *nextCharPtr;
				char testString[10];

				strcpy(testString, commandArgv[1]);
				char *test = testString;
				if(strncmp("%", test, 1) == 0)
				{
					nextCharPtr = strtok(testString, "%");
					killJob((atoi(nextCharPtr)));
					return 1;
				}
				else{
					killJobCredit((atoi(commandArgv[1])));
					return 1;
				}
        }
	/*if(strcmp("!1", commandArgv[0]) == 0){
		char *cP;
		int number;
		cP = strtok(commandArgv[0], "!");
		number = atoi(cP)-1;
		char historyPoint[60];
		char *hisString;
		char *newCommand[10];

		int i;
		for(i = 0; i < 60; i++){
			historyPoint[i] = (char)history[number][i];
		}

		hisString = strtok(historyPoint, "");
		printf("%s\n", hisString);

		//historyPoint = history[number];
		//printf("%s\n", historyPoint);
		newCommand[0] = hisString;
		//printf("commandArgv: %s\n", commandArgv[0]);
		commandArgv[0] = newCommand[0];
		//printf("new commandArgv: %s\n", commandArgv[0]);
		//printf("%s\n", newCommand[0]);
		//launchJob(newCommand[0], "STANDARD", 0, FOREGROUND);
		//executeCommand(commandArgv[0], "STANDARD", 0, FOREGROUND);
		return 1;
	}*/
	if(strcmp("history", commandArgv[0]) == 0)
	{
		int index;
		int column;
		int count = 1;
		printf("Command History List\n");
		printf("%d:  ", count);
		for(index = 0; index < 10; index++){
			for(column = 0; column < 55; column++){
				fprintf(stdout, "%c", history[index][column]);
			}
			count++;
			//printf("%d:  ", count);
			if(count <= 10){
				printf("\n");
				printf("%d:  ", count);
			}
			if(count == 11)
				printf("\n");
			//count++;
		}
		return 1;

	}
	if(strcmp("help", commandArgv[0]) == 0)
	{

		printf("Help Menu\n");
		printf("The functionality of this shell is as follows:\n\n");
		printf("The execution of simple normal shell operations such as cat, more, echo, any user-defined program, etc. will\n");
		printf("operate exactly as they would in the bash shell.\n");
		printf("The built-in commands ls, cd, ps and pwd will operate just as they would in the bash shell as well.\n");
		printf("To start a program in the background simply append the & symbol such as, ./program &\n");
		printf("The command jobs can be used to list the processes that are currently running in the background of your shell.\n");
		printf("If a program has been suspended, such as the user entering CTRL-Z, you can background the job to wait status using\n");
		printf("the command bg <job number> e.g. bg 1\n");
		printf("If a job is in the background, either in wait-status or suspended, it can be brought to the foreground by using the\n");
		printf("command fg <job number> e.g. fg 1\n");
		printf("A job can be killed using the command kill %<job number> such as kill %1 or using the pid number, kill <pid number>\n");
		printf("You can obtain the pid number of a job from the jobs list or the ps command.\n");
		printf("Simple input/output redirection is accomplished as follows:\n");
		printf("./a.out < input  --  would run program a.out with input from file input and would write all output to stdout\n");
		printf("./a.out > output  --  would run program a.out with output of program sent to the created file output\n");
		printf("./a.out < input > output  --  would run program a.out with input from file input and would write output to the created file output.\n");
		printf("./a.out >> output  --  would run program a.out with output of program appended to the end of the previously created file output.\n");
		printf("./a.out < input >> output  --  would run program a.out with input from file input and append output to the end of the previously\n");
		printf("created file output.\n");
		printf("Simple pipe functionality has also been implemented in this shell.  An example is as follows:\n");
		printf("who | wc  --  would run command who and pipe output to the word count process\n");
		printf("To see a list of previously entered commands type history at the shell prompt, only ten commands are held in history per shell execution.\n");
		printf("To execute a previous command listed in history type !<command number> e.g. !1 at the shell prompt.");
		printf("To exit the shell program type exit at the shell prompt.\n\n");
		printf("End of Help Menu\n");
		return 1;

	}
        //int i;
        ////for( i=0;i<=commandArgc;i++)
        //{
        //char *str;
        //strcpy(str,commandArgv);
        if( commandArgc == 3 )
        {
		if(strcmp("|", commandArgv[1]) == 0  )
            	{
            		pipelining(2);
            		return 1;
           	}
		else if(strcmp("<", commandArgv[commandArgc-2]) == 0){
			int in;
			int i = 0;
			i = fork();
			if(i == 0){
				in = open(commandArgv[2], O_RDONLY);
				dup2(in, 0);
				close(in);
				executeCommand(commandArgv, "STANDARD", 0, FOREGROUND);
				//puts("test statement 1");
				dup2(0, 0);
				//printf("test statement 2");
			}else{
				waitpid(getpid(), NULL, 0);
				close(in);
			}
			return 1;
		}
		else if(strcmp(">", commandArgv[commandArgc-2]) == 0){
			int out;
			int i = 0;
			i = fork();
			if(i == 0){
				out = open(commandArgv[2], O_WRONLY | O_TRUNC | O_CREAT, S_IRUSR | S_IRGRP | S_IWGRP | S_IWUSR);
				dup2(out, 1);
				close(out);
				executeCommand(commandArgv, "STANDARD", 0, FOREGROUND);
				//printf("test statement 3");
				dup2(1, 1);
				//printf("test statement 4");
			}else{
				waitpid(getpid(), NULL, 0);
				close(out);
			}
			return 1;
		}
		else if(strcmp(">>", commandArgv[commandArgc-2]) == 0){
			int out;
			int i = 0;
			int offset;

			i = fork();
			if(i == 0){
				out = open(commandArgv[2], O_WRONLY | O_APPEND);

				offset = lseek(out, 1, SEEK_END);

				dup2(out, 1);
				close(out);

				executeCommandAppend(commandArgv, "STANDARD", 0, FOREGROUND);

				dup2(1, 1);

			}else{
				waitpid(getpid(), NULL, 0);
				close(out);
			}
			return 1;

		}

        }
	if( commandArgc > 3 )
	{
		if(strcmp(">", commandArgv[commandArgc-2]) == 0){
			int in;
			int out;
			int i = 0;
			i = fork();
			if(i == 0){
				in = open(commandArgv[2], O_RDONLY);
				out = open(commandArgv[4], O_WRONLY | O_TRUNC | O_CREAT, S_IRUSR | S_IRGRP | S_IWGRP | S_IWUSR);

				dup2(in, 0);
				dup2(out, 1);

				close(in);
				close(out);

				executeCommand(commandArgv, "STANDARD", 0, FOREGROUND);
				dup2(0, 0);
				dup2(1, 1);
			}else{
				waitpid(getpid(), NULL, 0);
				close(in);
				close(out);
			}

			return 1;

		}
		else if(strcmp("|", commandArgv[commandArgc-2]) == 0 )
		{
			//puts("works");
			//printf("%d",commandArgc);
			pipelining(commandArgc-1);
			return 1;
		}
		else if(strcmp(">>", commandArgv[commandArgc-2]) == 0){
			int in;
			int out;
			int offset;
			int i = 0;

			i = fork();
			if(i == 0){
				in = open(commandArgv[2], O_RDONLY);
				out = open(commandArgv[4], O_WRONLY |  O_APPEND);

				offset = lseek(out, 1, SEEK_END);


				dup2(in, 0);
				dup2(out, 1);

				close(in);
				close(out);

				executeCommandAppend(commandArgv, "STANDARD", 0, FOREGROUND);
				dup2(0, 0);
				dup2(1, 1);
			}else{
				waitpid(getpid(), NULL, 0);
				close(in);
				close(out);
			}

			return 1;

		}
	}
        //break;
        //}



        return 0;
}
Esempio n. 5
0
/**
 * built-in commands: exit, in, out, bg, fg, jobs, kill
 * returns 	1 if a built-in command is executed,
 * 			0 otherwise
 */
int checkBuiltInCommands()
{
	if (strcmp("history", commandArgv[0]) == 0) {
		ReversePrint();
	}
	if (strcmp("alias", commandArgv[0]) == 0) {
		return 0;	
	}	
	if(strcmp("which", commandArgv[0]) == 0) {
		if (commandArgv[1] == NULL) {
			printf("R-Shell: Missing Parameters\n");
		}
		else {		
			printwhich();
		}
		return 1;
	}
	if(strcmp("where", commandArgv[0]) == 0) {
		if (commandArgv[1] == NULL) {
			printf("R-Shell: Missing Parameters\n");
		}
		else {		
			printwhere();
		}
		return 1;
	}
	if(strcmp("setenv", commandArgv[0]) == 0) {
		envset();
		return 1;
	}
	if(strcmp("printenv", commandArgv[0]) == 0) {
		envprint();
		return 1;			
	}
	if (strcmp("pid", commandArgv[0]) == 0) {
		printpid();
		return 1;	
	}
	if (strcmp("pwd", commandArgv[0]) == 0) {
		printpwd();
		return 1;
	}
	if (strcmp("prompt", commandArgv[0]) == 0) {
		promptCmd();
		return 1;
	}
        if (strcmp("exit", commandArgv[0]) == 0) {
                exit(EXIT_SUCCESS);
        }
        if (strcmp("cd", commandArgv[0]) == 0) {
                changeDirectory();
                return 1;
        }
        if (strcmp("kill", commandArgv[0]) == 0) {
                if (commandArgv[1] == NULL)
                        return 0;
                killJob(atoi(commandArgv[1]));
                return 1;
        }
	if (strcmp("ls", commandArgv[0]) == 0) {
		return 0;
	}
	if (strcmp("cd", commandArgv[0]) == 0) {
		return 0;	
	}
        return 0;
}