A1CIS*3110 Assignment 1 Viewing file contents Due date: Monday, February 6, 11:59pm Weight: 20% 1. Description Write a C program that will interactively display text file contents in...

see attached


A1 CIS*3110 Assignment 1 Viewing file contents Due date: Monday, February 6, 11:59pm Weight: 20% 1. Description Write a C program that will interactively display text file contents in either ASCII or hexadecimal (hex) mode. It will essentially be a combination of the Unix command line utilities cat and hexdump (in simplified form), but with a basic user menu. Use this as a reference for the ASCII table: https://www.asciitable.com/ Note that this assignment uses the standard C notation for hexadecimal numbers. For example, 0x9 is the hex number with the decimal value 9, and 0x1F - hex number with the decimal value 31. 
 
 ASCII mode
 In ASCII mode, the program will simply display the contents. However, not all ASCII characters are visible - some are (or used to be) used for various control sequences - so your program must replace them with a blank space in the displayed output. 
 
 Specifically, do the following replacements when displaying the file contents: - replace the characters in the range 0x0 - 0x9, 0xB - 0x1F with space (ASCII code 0x20) - replace the characters in the range 0x7F and greater with the character ? (ASCII code 0x3F) Since you will not be replacing 0xA (Line Feed, or LF), the newlines will be displayed as usual, and the file should look the same as if you display it with the cat command. 
 
 HEX mode
 In hex mode, your output will match how hd (hexdump -C) displays the file contents, 16 characters at a time, though we will make a simplifying change: - The first 7 chars will display the character index in hex - 0000000 for the first line - i.e. first 16 characters - 0000010 for the second line - i.e. the next set of up to 16 characters. Since we're starting with character number 16 (0x10), the line number is 0000010. - The characters will be displayed one at a time, with a space after each character, and two spaces after the first eight characters. Unlike hd, you do not need to display the ASCII version of these characters incased in ||. - The very last line is always the index of last character+1 - e.g. 0x1f, or 31 in the example below. 1 https://www.asciitable.com/ For example, given a sample file stuff.txt in the assignment description, the output of your program should be:
 
 ASCII mode:
 1234567789 ABCDEFGhijklmn 11111 HEX mode: 00000000 31 32 33 34 35 36 37 37 38 39 0a 41 42 43 44 45 00000010 46 47 68 69 6a 6b 6c 6d 6e 0a 31 31 31 31 31 0000001f Program execution
 Your program will run interactively as follows. It will start in ASCII mode by default and will prompt the user with a main menu that displays the following options: - Clearly display the current output mode (ASCII or hex) and asking the user to press - "o" to enter a file name, - "d" to select display mode - "x" exit - If the user presses "d", ask them to enter the mode - "a" for ASCII, "h" for hex - and display the main menu - If the user presses "o", ask for the file name, read it in, then try to open it and do the following: - Read the entire file into a memory using the Unix open and read system calls. The buffer must be dynamically allocated with malloc. - If the file cannot be opened, print "cannot open file X" (X being the file name) and display the main menu - Display file contents according to the current mode, as described above. - After displaying the contents ask the user for input: - "m" to return to the main menu. Remember to close the file descriptor. - "x" to exit - In either menu, if the user presses "x", exit the program. Make sure all file descriptors are closed and all memory has been freed when you exit. - Make sure you always check for invalid input. If the user enters an invalid key in any menu, display "invalid input" and re-display the menu. 2. Evaluation
 Your code must compile, run, and have all of the specified functionality implemented. Any compiler errors will result in the automatic grade of zero for the assignment.
 2 Your code will be tested with several text files. Marks will be deducted for: - Incorrect and missing functionality - Deviations from the assignment requirements - File descriptions that you opened yourself and that are still open when your program terminates - valgrind will be used for checking this - Run-time errors, including infinite loops, crashes, etc. - Compiler warnings - Failure to follow submission instructions For A1, you will not be penalized for memory leaks and other memory errors reported by valgrind. However, future assignments will include such penalties. It is strongly recommended that you test your A1 using valgrind as you develop it, so you learn how to use valgrind and understand its output. 3. Submission Call your file A1.c and the assignment using Moodle. Submit only the source code in a Zip archive. The assignment will be marked using the standard CIS*3110 Docker image provided on the course website and discussed in class. We will download and install a fresh image, create a container, and use Docker to run and grade your code. Your code will be compiled with the flags -Wall -g -std=c11. Make sure you test your code accordingly. This assignment is individual work and is subject to the University Academic Misconduct Policy. See course outline for details. 3
Feb 06, 2023
SOLUTION.PDF

Get Answer To This Question

Related Questions & Answers

More Questions »

Submit New Assignment

Copy and Paste Your Assignment Here