.p The commands can be divided into page commands and line commands. The page commands are those whose primary impact is on how a page (a collection of lines) is formatted. The line commands are those whose primary impact is on how a line is formatted. The other commands would be the line commands (note: this list is for discussion purposes. If you feel that another command should be a page command, you are more than welcome to included it as such for your program). .p When breaking down your program into multiple source code files, you need to come up with some method of organizing the functions within each source code file. For example, each source code file should contain functions that are somehow related. One way fo first do this is to divide the page command functions and the line command functions. Note each source code file should have relatively the same number of lines. Since there are more line command functions, perhaps you will need two source code files to hold all of these functions. .p When a page command is encountered and we are currently in the middle of a page (after the first word has been encountered that will go on the page), the affects of the page command will take effect at the start of the next page. Line commands are to work in a similar manner. Note that a number of commands force the end of the current page or line, but a new page or line doesn't start until the first word of text for that page or line is encountered. .p For justification, each word on a line in the output is to be separated by a single space character. Note that white space characters (spaces, tabs and newlines) between words of text in the input file are to be counted as a single space character in the output. So you will have to remove any extra white space characters (similar to the way HTML removes such characters). Once there are enough words to fill up the current line, the justification must occur. .bb If the line is to left justified, the line is to be printed with any extra space at the end of the line. .be .nl .bb If the line is to right justified, the current line is to be printed with any extra space at the beginning of the line. .be .nl .bb If the line is to centered, the current line is to be printed with half of the extra space at the beginning of the line (use a divide by two operation rounded down, 3 extra spaces has 1 space at the beginning of the line). .be .nl .bb If the line is to fully justified, extra spaces are needed to be placed between the words. An extra space is to first be inserted between the last two words on the line, then between the third to last and second to last words, then between the fourth to last and third to last words, etc. If more spaces are needed after an extra space has been placed between each word on a line, then repeat the process placing three spaces between the words (starting with the last two words). If three spaces between words does not fill up then line, then place four spaces, then five spaces, until the line is filled. For example if a line has 17 words (separated by 16 spaces) and there are 6 extra spaces at the end of the line, the first ten words would be followed by one space and the next 6 words would be followed by 2 spaces. If a line has 5 words (separated by 4 spaces) and there are 10 extra spaces at the end of the line, the first two words would be followed by 3 spaces and the next 2 words would be followed by 4 spaces. .be .nl .p Your program must be written in good programming style. This includes (but is not limited to) meaningful identifier names, a file header at the beginning of each source code file, a function header at the beginning of the function, proper use of blank lines and indentation to aide in the reading of your code, explanatory "value-added" in-line comments, etc. .p The work you turn in must be 100% your own. You are not allowed to share code with any other person (inside this class or not). You may discuss the project with other persons; however, you may not show any code you write to another person nor may you look at any other person's written code. .p You are also to write a one to two page program description. This write up must be submitted with your program and be in ASCII text format (perhaps you can use this program to format your program description!!). This description is to explain your internal data structures, code structures and the algorithms used in your program. Remember, this program description will be read by another student when the critiques are done for this assignment. Often the title of "readme" is used for these types of documents. .p You are to submit this project using the EECS Department's UNIX machine's turnin command. The project name for this assignment is mp1. Be sure to submit all source code and header files as well as your makefile and program description. Failure to turnin all required pieces will result in a lower grade for the assignment.