CS-PROJECTS / job_control / README.txt
README.txt
Raw
Student Information
-------------------
prestonv, Preston Verling
jordanha23, Jordan Harrington

How to execute the shell
------------------------

1) After navigating to the posix_spawn/ directory, type "make" then press enter
2) Naviagte to the src/ directory and type "make" then press enter 
3) Type "./cush" and press enter to run the shell

Important Notes
----------------

All basic and additional functionality tests pass. To access additional functionaility tests, see the /tests/custom
directory. In regards to advanced testing, we were unable to implement the ability to process multiple sets of 
pipes in addition to stderr redirection while piping. This causes us to fail a few of the advanced tests. 

Description of Base Functionality
---------------------------------

Our shell has support for the following: jobs, fg, bg, kill, stop, CTRL-C, CTRL-Z, exit

	'jobs' : displays a list of the currently running and stopped jobs
	 'fg'  : brings a job from the background or stopped state to the foreground		
	 'bg'  : continues a stopped job in the background					
	'kill' : kills a job						
	'stop' : stops a job	
	'exit' : exits the cush shell						
	CTRL-C : interrupts the job in the forground		
	CTRL-Z : stops the job in the forground

NOTE: 'fg' 'bg' 'kill' and 'stop' take JIDs (JOB IDs) as arguments.  If no argument
is provided, they will alter the most recent addition to the jobs list.			

Description of Extended Functionality
-------------------------------------

	1) I/O Redirection: changes the stdin/stdout source to or from a file. 
	
	Description:
			
		[JOB] > [filename]  : Redirects [JOB] output from stdout to the file specified by
				      [FILENAME] overwriting the contents of that file if the file exists.
			
		[JOB] < [filename]  : Redirects the input to [JOB] from stdin to the file specified by [FILENAME].
		
		[JOB] >> [filename] : Redirects [JOB] output from stdout to the file specified by
				      [FILENAME] and appends to the file.	

	2) Exclusive Access: provided programs that require exclusive access to the terminal (vim and nano)
	   with said exclusive access.

	3) Pipes: directs the stdout of a process to the stdin of another, effectively allowing different 
	   processes to communicate. As mentioned above, we are unable to handle multiple sets of pipes
	   and redirecting stderr while piping. 

List of Additional Builtins Implemented
---------------------------------------

Written by Us:

	1) Additional Builtin: CD
	
	Description:

		<cd> <[PATH]> : changes the cwd to the directory specified by [PATH]. [PATH] defaults to the
				user's home direcotry if not specified. 

	2) Additional Builtin: Command-line history
	
	Description:

		<history> <#> : Outputs the last # commands from the command history. Outputs the 
				entire history if no # is specified.

		<!!>	      : Displays and executes the previous command from the command history.
		
		<!#>	      :	Displays and executes the command specified by # which is its number 
				from the command history. 
		
		<![STRING]>   : Displays and executes the most recent command where the user inputted 
				[STRING] is a substring of that command.
		
		Additionally, our implementation provides functionality for up/down arrow key navigation for 
		previous commands. 

	3) Additional Builtin: Custom prompt

	Description:
	
				Displays the name of the current host, user, cwd, and 
				the command count of the cush session.