Compare commits
	
		
			21 Commits
		
	
	
		
			a8-alt-sol
			...
			6a6fd9c37c
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 6a6fd9c37c | |||
| 112535e8e7 | |||
| 93635bc1d6 | |||
| 530ab9a135 | |||
| bea609e01c | |||
| 136a4fe960 | |||
| 123e0f56bc | |||
| e79158e3f1 | |||
| 73234d0764 | |||
| 0a18d16eb0 | |||
| 862af7192c | |||
| a62d97f575 | |||
| d81bbe423e | |||
| 9f9d7a1925 | |||
| 2769651fe1 | |||
| 3aa01cdc2b | |||
| 3aad46748a | |||
| 18669ebf1c | |||
| b95fd534fb | |||
| f049e8aeff | |||
| 025b2640fc | 
| @@ -57,10 +57,6 @@ void delete(DiskQueue *queue, DiskRequest request) { | |||||||
| 	exit(EXIT_FAILURE); | 	exit(EXIT_FAILURE); | ||||||
| } | } | ||||||
|  |  | ||||||
| DiskRequest peek(DiskQueue *queue) { |  | ||||||
| 	return *queue->head; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| DiskRequest *dequeue(DiskQueue *queue) { | DiskRequest *dequeue(DiskQueue *queue) { | ||||||
| 	DiskRequest *head = queue->head; | 	DiskRequest *head = queue->head; | ||||||
| 	queue->head = head->next; | 	queue->head = head->next; | ||||||
| @@ -79,6 +75,14 @@ void destroyDiskQueue(DiskQueue *queue) { | |||||||
| 	free(queue); | 	free(queue); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | int calcDistance(int position, int destination) { | ||||||
|  | 	if (position > destination) { | ||||||
|  | 		return destination + (9999 + 1 - position); | ||||||
|  | 	} else { | ||||||
|  | 		return destination - position; | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
| DiskRequest* findClosest(DiskQueue *queue, int position, double time) { | DiskRequest* findClosest(DiskQueue *queue, int position, double time) { | ||||||
| 	DiskRequest *current = queue->head; | 	DiskRequest *current = queue->head; | ||||||
| 	DiskRequest *closest = NULL; | 	DiskRequest *closest = NULL; | ||||||
| @@ -87,20 +91,14 @@ DiskRequest* findClosest(DiskQueue *queue, int position, double time) { | |||||||
| 			if (closest == NULL) { // If there is no closest yet, set it to the current | 			if (closest == NULL) { // If there is no closest yet, set it to the current | ||||||
| 				closest = current; | 				closest = current; | ||||||
| 			} else { | 			} else { | ||||||
| 				int closestDistance = closest->position - position; // Distance from the closest to the current position, negative means down (bad) | 				int closestDistance = calcDistance(position, closest->position); // Distance from the closest to the current position, negative means down (bad) | ||||||
| 				int currentDistance = current->position - position; // Distance from the current to the current position, negative means down (bad) | 				int currentDistance = calcDistance(position, current->position); // Distance from the current to the current position, negative means down (bad | ||||||
| 				if (currentDistance > 0) { // If the current is up | 				if (currentDistance < closestDistance) { // If the current is closer than the closest | ||||||
| 					if (currentDistance < closestDistance) { // If the current is closer than the closest | 					closest = current; | ||||||
| 						closest = current; |  | ||||||
| 					} |  | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 		current = current->next; | 		current = current->next; | ||||||
| 	} | 	} | ||||||
| 	// Bad |  | ||||||
| 	if (closest == NULL) { |  | ||||||
| 		return NULL; |  | ||||||
| 	} |  | ||||||
| 	return closest; | 	return closest; | ||||||
| } | } | ||||||
| @@ -21,10 +21,10 @@ void enqueue(DiskQueue *queue, int time, int position); | |||||||
|  |  | ||||||
| void delete(DiskQueue *queue, DiskRequest request); | void delete(DiskQueue *queue, DiskRequest request); | ||||||
|  |  | ||||||
| DiskRequest peek(DiskQueue *queue); |  | ||||||
|  |  | ||||||
| DiskRequest *dequeue(DiskQueue *queue); | DiskRequest *dequeue(DiskQueue *queue); | ||||||
|  |  | ||||||
| DiskRequest *findClosest(DiskQueue *queue, int position, double time); | DiskRequest *findClosest(DiskQueue *queue, int position, double time); | ||||||
|  |  | ||||||
| void destroyDiskQueue(DiskQueue *queue); | void destroyDiskQueue(DiskQueue *queue); | ||||||
|  |  | ||||||
|  | int calcDistance(int position, int destination); | ||||||
|   | |||||||
| @@ -68,7 +68,6 @@ void cscan(int start) { | |||||||
| 		if (request != NULL) { | 		if (request != NULL) { | ||||||
| 			delete(queue, *request); | 			delete(queue, *request); | ||||||
| 		} | 		} | ||||||
| 		//printf("Movement: %i Time:%.1lf\n", movement, seekTime); |  | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										8
									
								
								Assignment9/.idea/.gitignore
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								Assignment9/.idea/.gitignore
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | |||||||
|  | # Default ignored files | ||||||
|  | /shelf/ | ||||||
|  | /workspace.xml | ||||||
|  | # Editor-based HTTP Client requests | ||||||
|  | /httpRequests/ | ||||||
|  | # Datasource local storage ignored files | ||||||
|  | /dataSources/ | ||||||
|  | /dataSources.local.xml | ||||||
							
								
								
									
										2
									
								
								Assignment9/.idea/Assignment9.iml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								Assignment9/.idea/Assignment9.iml
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,2 @@ | |||||||
|  | <?xml version="1.0" encoding="UTF-8"?> | ||||||
|  | <module classpath="CMake" type="CPP_MODULE" version="4" /> | ||||||
							
								
								
									
										8
									
								
								Assignment9/.idea/cmake.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								Assignment9/.idea/cmake.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | |||||||
|  | <?xml version="1.0" encoding="UTF-8"?> | ||||||
|  | <project version="4"> | ||||||
|  |   <component name="CMakeSharedSettings"> | ||||||
|  |     <configurations> | ||||||
|  |       <configuration PROFILE_NAME="Debug" ENABLED="true" GENERATION_DIR="build" CONFIG_NAME="Debug" /> | ||||||
|  |     </configurations> | ||||||
|  |   </component> | ||||||
|  | </project> | ||||||
							
								
								
									
										4
									
								
								Assignment9/.idea/misc.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								Assignment9/.idea/misc.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,4 @@ | |||||||
|  | <?xml version="1.0" encoding="UTF-8"?> | ||||||
|  | <project version="4"> | ||||||
|  |   <component name="CMakeWorkspace" PROJECT_DIR="$PROJECT_DIR$" /> | ||||||
|  | </project> | ||||||
							
								
								
									
										8
									
								
								Assignment9/.idea/modules.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								Assignment9/.idea/modules.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | |||||||
|  | <?xml version="1.0" encoding="UTF-8"?> | ||||||
|  | <project version="4"> | ||||||
|  |   <component name="ProjectModuleManager"> | ||||||
|  |     <modules> | ||||||
|  |       <module fileurl="file://$PROJECT_DIR$/.idea/Assignment9.iml" filepath="$PROJECT_DIR$/.idea/Assignment9.iml" /> | ||||||
|  |     </modules> | ||||||
|  |   </component> | ||||||
|  | </project> | ||||||
							
								
								
									
										8
									
								
								Assignment9/.idea/runConfigurations/All_CTest.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								Assignment9/.idea/runConfigurations/All_CTest.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | |||||||
|  | <component name="ProjectRunConfigurationManager"> | ||||||
|  |   <configuration default="false" name="All CTest" type="CTestRunConfiguration" factoryName="CTestRun" PROGRAM_PARAMS="--extra-verbose" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" WORKING_DIR="file://$CMakeCurrentLocalGenerationDir$" PASS_PARENT_ENVS_2="true" CONFIG_NAME="Debug" RUN_PATH="$CTestCurrentExecutableName$" EXPLICIT_BUILD_TARGET_NAME="all" TEST_MODE="PATTERN"> | ||||||
|  |     <method v="2"> | ||||||
|  |       <option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" /> | ||||||
|  |       <option name="BeforeTestRunTask" enabled="true" /> | ||||||
|  |     </method> | ||||||
|  |   </configuration> | ||||||
|  | </component> | ||||||
							
								
								
									
										7
									
								
								Assignment9/.idea/runConfigurations/Assignment9.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								Assignment9/.idea/runConfigurations/Assignment9.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | |||||||
|  | <component name="ProjectRunConfigurationManager"> | ||||||
|  |   <configuration default="false" name="Assignment9" type="CMakeRunConfiguration" factoryName="Application" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="Assignment9" TARGET_NAME="Assignment9" CONFIG_NAME="Debug" RUN_TARGET_PROJECT_NAME="Assignment9" RUN_TARGET_NAME="Assignment9"> | ||||||
|  |     <method v="2"> | ||||||
|  |       <option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" /> | ||||||
|  |     </method> | ||||||
|  |   </configuration> | ||||||
|  | </component> | ||||||
							
								
								
									
										7
									
								
								Assignment9/.idea/runConfigurations/Test1.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								Assignment9/.idea/runConfigurations/Test1.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | |||||||
|  | <component name="ProjectRunConfigurationManager"> | ||||||
|  |   <configuration default="false" name="Test1" type="CMakeRunConfiguration" factoryName="Application" PROGRAM_PARAMS="../tests/test1.png" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="Assignment9" TARGET_NAME="Assignment9" CONFIG_NAME="Debug" RUN_TARGET_PROJECT_NAME="Assignment9" RUN_TARGET_NAME="Assignment9"> | ||||||
|  |     <method v="2"> | ||||||
|  |       <option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" /> | ||||||
|  |     </method> | ||||||
|  |   </configuration> | ||||||
|  | </component> | ||||||
							
								
								
									
										7
									
								
								Assignment9/.idea/runConfigurations/Test2.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								Assignment9/.idea/runConfigurations/Test2.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | |||||||
|  | <component name="ProjectRunConfigurationManager"> | ||||||
|  |   <configuration default="false" name="Test2" type="CMakeRunConfiguration" factoryName="Application" PROGRAM_PARAMS="../tests/test2.png" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="Assignment9" TARGET_NAME="Assignment9" CONFIG_NAME="Debug" RUN_TARGET_PROJECT_NAME="Assignment9" RUN_TARGET_NAME="Assignment9"> | ||||||
|  |     <method v="2"> | ||||||
|  |       <option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" /> | ||||||
|  |     </method> | ||||||
|  |   </configuration> | ||||||
|  | </component> | ||||||
							
								
								
									
										7
									
								
								Assignment9/.idea/runConfigurations/Test3.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								Assignment9/.idea/runConfigurations/Test3.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | |||||||
|  | <component name="ProjectRunConfigurationManager"> | ||||||
|  |   <configuration default="false" name="Test3" type="CMakeRunConfiguration" factoryName="Application" PROGRAM_PARAMS="../tests/test3.png" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="Assignment9" TARGET_NAME="Assignment9" CONFIG_NAME="Debug" RUN_TARGET_PROJECT_NAME="Assignment9" RUN_TARGET_NAME="Assignment9"> | ||||||
|  |     <method v="2"> | ||||||
|  |       <option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" /> | ||||||
|  |     </method> | ||||||
|  |   </configuration> | ||||||
|  | </component> | ||||||
							
								
								
									
										7
									
								
								Assignment9/.idea/runConfigurations/Test4.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								Assignment9/.idea/runConfigurations/Test4.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | |||||||
|  | <component name="ProjectRunConfigurationManager"> | ||||||
|  |   <configuration default="false" name="Test4" type="CMakeRunConfiguration" factoryName="Application" PROGRAM_PARAMS="../tests/test4.png" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="Assignment9" TARGET_NAME="Assignment9" CONFIG_NAME="Debug" RUN_TARGET_PROJECT_NAME="Assignment9" RUN_TARGET_NAME="Assignment9"> | ||||||
|  |     <method v="2"> | ||||||
|  |       <option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" /> | ||||||
|  |     </method> | ||||||
|  |   </configuration> | ||||||
|  | </component> | ||||||
							
								
								
									
										10
									
								
								Assignment9/.idea/runConfigurations/Test_All.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								Assignment9/.idea/runConfigurations/Test_All.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | |||||||
|  | <component name="ProjectRunConfigurationManager"> | ||||||
|  |   <configuration default="false" name="Test All" type="CMakeRunConfiguration" factoryName="Application" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="Assignment9" TARGET_NAME="Assignment9" CONFIG_NAME="Debug" RUN_TARGET_PROJECT_NAME="Assignment9" RUN_TARGET_NAME="Assignment9"> | ||||||
|  |     <method v="2"> | ||||||
|  |       <option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" /> | ||||||
|  |       <option name="RunConfigurationTask" enabled="false" run_configuration_name="Test1" run_configuration_type="CMakeRunConfiguration" /> | ||||||
|  |       <option name="RunConfigurationTask" enabled="true" run_configuration_name="Test3" run_configuration_type="CMakeRunConfiguration" /> | ||||||
|  |       <option name="RunConfigurationTask" enabled="true" run_configuration_name="Test4" run_configuration_type="CMakeRunConfiguration" /> | ||||||
|  |     </method> | ||||||
|  |   </configuration> | ||||||
|  | </component> | ||||||
							
								
								
									
										8
									
								
								Assignment9/.idea/runConfigurations/images.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								Assignment9/.idea/runConfigurations/images.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | |||||||
|  | <component name="ProjectRunConfigurationManager"> | ||||||
|  |   <configuration default="false" name="images" type="CTestRunConfiguration" factoryName="CTestRun" PROGRAM_PARAMS="--extra-verbose" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" WORKING_DIR="file://$CMakeCurrentLocalGenerationDir$" PASS_PARENT_ENVS_2="true" CONFIG_NAME="Debug" RUN_PATH="$CTestCurrentExecutableName$" EXPLICIT_BUILD_TARGET_NAME="all" TEST_METHOD="images" TEST_MODE="SUITE_TEST"> | ||||||
|  |     <method v="2"> | ||||||
|  |       <option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" /> | ||||||
|  |       <option name="BeforeTestRunTask" enabled="true" /> | ||||||
|  |     </method> | ||||||
|  |   </configuration> | ||||||
|  | </component> | ||||||
							
								
								
									
										8
									
								
								Assignment9/.idea/runConfigurations/output.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								Assignment9/.idea/runConfigurations/output.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | |||||||
|  | <component name="ProjectRunConfigurationManager"> | ||||||
|  |   <configuration default="false" name="output" type="CTestRunConfiguration" factoryName="CTestRun" PROGRAM_PARAMS="--extra-verbose" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" WORKING_DIR="file://$CMakeCurrentLocalGenerationDir$" PASS_PARENT_ENVS_2="true" CONFIG_NAME="Debug" RUN_PATH="$CTestCurrentExecutableName$" EXPLICIT_BUILD_TARGET_NAME="all" TEST_METHOD="output" TEST_MODE="SUITE_TEST"> | ||||||
|  |     <method v="2"> | ||||||
|  |       <option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" /> | ||||||
|  |       <option name="BeforeTestRunTask" enabled="true" /> | ||||||
|  |     </method> | ||||||
|  |   </configuration> | ||||||
|  | </component> | ||||||
							
								
								
									
										6
									
								
								Assignment9/.idea/vcs.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								Assignment9/.idea/vcs.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | |||||||
|  | <?xml version="1.0" encoding="UTF-8"?> | ||||||
|  | <project version="4"> | ||||||
|  |   <component name="VcsDirectoryMappings"> | ||||||
|  |     <mapping directory="$PROJECT_DIR$/.." vcs="Git" /> | ||||||
|  |   </component> | ||||||
|  | </project> | ||||||
							
								
								
									
										10
									
								
								Assignment9/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								Assignment9/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | |||||||
|  | cmake_minimum_required(VERSION 3.20) | ||||||
|  | project(Assignment9 C) | ||||||
|  | set(CMAKE_C_STANDARD 99) | ||||||
|  | add_executable(Assignment9 src/main.c | ||||||
|  |         src/png.c | ||||||
|  |         src/png.h) | ||||||
|  |  | ||||||
|  | enable_testing() | ||||||
|  | add_test(NAME output COMMAND test_text.sh WORKING_DIRECTORY ../tests) | ||||||
|  | add_test(NAME images COMMAND test_images.sh WORKING_DIRECTORY ../tests) | ||||||
							
								
								
									
										
											BIN
										
									
								
								Assignment9/documentation/Assignment 9.pdf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Assignment9/documentation/Assignment 9.pdf
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										68
									
								
								Assignment9/documentation/EndiannessAndHomework9.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								Assignment9/documentation/EndiannessAndHomework9.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,68 @@ | |||||||
|  | #include <stdio.h> | ||||||
|  | #include <stdlib.h> | ||||||
|  | #include <arpa/inet.h> | ||||||
|  | // FILE format is: 'header', then 2023 skipped bytes, then the number of interest | ||||||
|  | #define OURINT 1426915328 | ||||||
|  | #define OFFSETTODATA 2023 | ||||||
|  |  | ||||||
|  | int writeToFile(){ | ||||||
|  |  | ||||||
|  |     FILE* fp = fopen("toReadLater.txt","w+"); | ||||||
|  | 	char c = 'h'; | ||||||
|  |     fwrite(&c, sizeof(char), 1, fp); | ||||||
|  |     c = 'e'; | ||||||
|  |     fwrite(&c, sizeof(char), 1, fp); | ||||||
|  |     c = 'a'; | ||||||
|  |     fwrite(&c, sizeof(char), 1, fp); | ||||||
|  |     c = 'd'; | ||||||
|  |     fwrite(&c, sizeof(char), 1, fp); | ||||||
|  |     c = 'e'; | ||||||
|  |     fwrite(&c, sizeof(char), 1, fp); | ||||||
|  |     c = 'r'; | ||||||
|  |     fwrite(&c, sizeof(char), 1, fp); | ||||||
|  |     unsigned int buf = OFFSETTODATA; | ||||||
|  |     fwrite(&buf, sizeof(int), 1, fp); | ||||||
|  |     fseek(fp, OFFSETTODATA, SEEK_CUR); | ||||||
|  |  | ||||||
|  |     buf = OURINT; | ||||||
|  |     fwrite(&buf, sizeof(int), 1, fp); | ||||||
|  |     fclose(fp); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | int readFromFile(){ | ||||||
|  | 	FILE *fp = fopen("toReadLater.txt", "r+"); | ||||||
|  | 	fseek(fp, 6 , SEEK_SET); | ||||||
|  | 	int skip = 0; | ||||||
|  | 	fread(&skip, sizeof(int), 1, fp); | ||||||
|  |     // NOTE, in HW, the size of the section is a value in  | ||||||
|  |     // Big-Endian format, it will actually need conversion | ||||||
|  | 	fseek(fp, skip, SEEK_CUR); | ||||||
|  | 	unsigned int qBe = 0; | ||||||
|  | 	unsigned int qLe = 0; | ||||||
|  | 	int i; | ||||||
|  | 	unsigned char *c = (char *)(&qBe); | ||||||
|  | 	unsigned char *d = (char *)(&qLe); | ||||||
|  | 	for (i = 0; i < 4; i++) | ||||||
|  | 	{ | ||||||
|  | 		c[i] = getc(fp); | ||||||
|  | 		printf("Byte %i: %i %x\n",i, c[i], c[i]); | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  |     for (i = 0; i < 4; i++) | ||||||
|  | 	{ | ||||||
|  | 		d[4-i-1] = c[i]; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  |     printf("Translated using swapping the bytes order: %i\n", qLe); | ||||||
|  | 	qLe = ntohl(qBe); | ||||||
|  |     printf("Translated using ntohl: %i\n", qLe); | ||||||
|  |     fclose(fp); | ||||||
|  | } | ||||||
|  | int main (int argc, char** argv){ | ||||||
|  |     unsigned int wantToRead; | ||||||
|  | 	writeToFile(); | ||||||
|  | 	printf("Sizeof (int) is:%li\n", sizeof(unsigned int)); | ||||||
|  | 	readFromFile(); | ||||||
|  |  | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
							
								
								
									
										
											BIN
										
									
								
								Assignment9/documentation/tests.zip
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Assignment9/documentation/tests.zip
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										51
									
								
								Assignment9/src/main.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								Assignment9/src/main.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,51 @@ | |||||||
|  | #include <stdio.h> | ||||||
|  | #include <stdlib.h> | ||||||
|  | #include <limits.h> | ||||||
|  | #include <string.h> | ||||||
|  | #include <stdbool.h> | ||||||
|  | #include <unistd.h> | ||||||
|  | #include "png.h" | ||||||
|  |  | ||||||
|  | int main(int argc, char *argv[]) { | ||||||
|  | 	// Error handling | ||||||
|  | 	if (argc != 2) { | ||||||
|  | 		printf("Usage: %s <png file>\n", argv[0]); | ||||||
|  | 		exit(EXIT_FAILURE); | ||||||
|  | 	} | ||||||
|  | 	if (strlen(argv[1]) > PATH_MAX) { | ||||||
|  | 		printf("Path too long\n"); | ||||||
|  | 		exit(EXIT_FAILURE); | ||||||
|  | 	} | ||||||
|  | 	// Read file | ||||||
|  | 	char *path = argv[1]; | ||||||
|  | 	char *png_buffer = load_file(path); | ||||||
|  | 	if (!is_png(png_buffer)) { | ||||||
|  | 		printf("It's not a PNG file\n"); | ||||||
|  | 		exit(EXIT_FAILURE); | ||||||
|  | 	} else { | ||||||
|  | 		printf("It's a PNG file\n"); | ||||||
|  | 	} | ||||||
|  | 	png_chunk **chunks = get_png_chunks(png_buffer); | ||||||
|  | 	free(png_buffer); | ||||||
|  | 	// Done with buffer, as chunks are a structured way to access the data | ||||||
|  | 	// Iterate over chunks to display info and "decrypt" IDAT chunks | ||||||
|  | 	int size = get_number_of_chunks(chunks); | ||||||
|  | 	for (int i = 0; i < size; i++) { | ||||||
|  | 		// Check if header is IDAT or IEND | ||||||
|  | 		bool is_idat = memcmp(chunks[i]->type, "IDAT", 4) == 0; | ||||||
|  | 		bool is_iend = memcmp(chunks[i]->type, "IEND", 4) == 0; | ||||||
|  | 		if (is_idat || is_iend) { | ||||||
|  | 			printf("Found %.4s\n", chunks[i]->type); | ||||||
|  | 			if (is_idat) { | ||||||
|  | 				xor_data(chunks[i]); | ||||||
|  | 			} | ||||||
|  | 		} else { | ||||||
|  | 			printf("Found unknown: %.4s\n", chunks[i]->type); | ||||||
|  | 		} | ||||||
|  | 		printf("Chunk size is:%d\n", chunks[i]->length); | ||||||
|  | 	} | ||||||
|  | 	// Write file and free memory | ||||||
|  | 	write_png_chunks(path, chunks); | ||||||
|  | 	destroy_chunks(chunks); | ||||||
|  | 	return EXIT_SUCCESS; | ||||||
|  | } | ||||||
							
								
								
									
										159
									
								
								Assignment9/src/png.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										159
									
								
								Assignment9/src/png.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,159 @@ | |||||||
|  | /* | ||||||
|  |  * Copyright Notice | ||||||
|  |  * ---------------- | ||||||
|  |  * Copyright © 1998, 1999 by: Glenn Randers-Pehrson | ||||||
|  |  * This specification is a modification of the PNG 1.0 specification. It is being | ||||||
|  |  * provided by the copyright holder under the provisions of the 1996 MIT copyright and license: | ||||||
|  |  * Copyright © 1996 by: Massachusetts Institute of Technology (MIT) | ||||||
|  |  * This W3C specification is being provided by the copyright holders under | ||||||
|  |  * the following license. By obtaining, using and/or copying this specification, you | ||||||
|  |  * agree that you have read, understood, and will comply with the following terms | ||||||
|  |  * and conditions: | ||||||
|  |  * Permission to use, copy, and distribute this specification for any purpose | ||||||
|  |  * and without fee or royalty is hereby granted, provided that the full text of | ||||||
|  |  * this NOTICE appears on ALL copies of the specification or portions thereof, | ||||||
|  |  * including modifications, that you make. | ||||||
|  |  * THIS SPECIFICATION IS PROVIDED ”AS IS,” AND COPYRIGHT HOLD-ERS | ||||||
|  |  * MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR | ||||||
|  |  * IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, COPYRIGHT | ||||||
|  |  * HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES OF MERCHANTABILITY | ||||||
|  |  * OR FITNESS FOR ANY PARTICULAR PURPOSE OR | ||||||
|  |  * THAT THE USE OF THE SPECIFICATION WILL NOT INFRINGE ANY | ||||||
|  |  * THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER | ||||||
|  |  * RIGHTS. COPYRIGHT HOLDERS WILL BEAR NO LIABILITY FOR ANY | ||||||
|  |  * USE OF THIS SPECIFICATION. | ||||||
|  |  * The name and trademarks of copyright holders may NOT be used in | ||||||
|  |  * advertising or publicity pertaining to the specification without specific, written | ||||||
|  |  * prior permission. Title to copyright in this specification and any associated | ||||||
|  |  * documentation will at all times remain with copyright holders. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | #include <arpa/inet.h> | ||||||
|  | #include <stdio.h> | ||||||
|  | #include <stdlib.h> | ||||||
|  | #include <string.h> | ||||||
|  | #include <stdbool.h> | ||||||
|  | #include "png.h" | ||||||
|  |  | ||||||
|  | FILE *get_file(char *path) { | ||||||
|  | 	FILE *fp = fopen(path, "rb"); | ||||||
|  | 	if (fp == NULL) { | ||||||
|  | 		perror("fopen"); | ||||||
|  | 		exit(EXIT_FAILURE); | ||||||
|  | 	} | ||||||
|  | 	return fp; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | char *load_file(char *path) { | ||||||
|  | 	FILE *fp = get_file(path); | ||||||
|  | 	fseek(fp, 0, SEEK_END); | ||||||
|  | 	long size = ftell(fp); | ||||||
|  | 	rewind(fp); | ||||||
|  | 	char *buffer = malloc(size); | ||||||
|  | 	if (buffer == NULL) { | ||||||
|  | 		perror("malloc"); | ||||||
|  | 		exit(EXIT_FAILURE); | ||||||
|  | 	} | ||||||
|  | 	fread(buffer, 1, size, fp); | ||||||
|  | 	fclose(fp); | ||||||
|  | 	return buffer; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | int is_png(char *buffer) { | ||||||
|  | 	return memcmp(buffer, PNG_SIGNATURE, PNG_SIGNATURE_SIZE) == 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | png_chunk *get_png_chunk(char *buffer, unsigned int offset) { | ||||||
|  | 	png_chunk *chunk = malloc(sizeof(png_chunk)); | ||||||
|  | 	if (chunk == NULL) { | ||||||
|  | 		perror("malloc"); | ||||||
|  | 		exit(EXIT_FAILURE); | ||||||
|  | 	} | ||||||
|  | 	memcpy(&chunk->length, buffer + offset + 0, 4); | ||||||
|  | 	// Convert length to host byte order because PNG lengths is in network byte order/Big Endian | ||||||
|  | 	chunk->length = ntohl(chunk->length); | ||||||
|  | 	memcpy(&chunk->type, buffer + offset + 4, 4); | ||||||
|  | 	chunk->data = malloc(chunk->length); | ||||||
|  | 	if (chunk->data == NULL) { | ||||||
|  | 		perror("malloc"); | ||||||
|  | 		exit(EXIT_FAILURE); | ||||||
|  | 	} | ||||||
|  | 	memcpy(chunk->data, buffer + offset + 8, chunk->length); | ||||||
|  | 	memcpy(&chunk->crc, buffer + offset + 8 + chunk->length, 4); | ||||||
|  | 	return chunk; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | png_chunk **get_png_chunks(char *buffer) { | ||||||
|  | 	png_chunk **chunks = malloc(sizeof(png_chunk *)); | ||||||
|  | 	if (chunks == NULL) { | ||||||
|  | 		perror("malloc"); | ||||||
|  | 		exit(EXIT_FAILURE); | ||||||
|  | 	} | ||||||
|  | 	// Running offset of the buffer | ||||||
|  | 	unsigned int offset = PNG_SIGNATURE_SIZE; | ||||||
|  | 	// Index of the current chunk | ||||||
|  | 	int i = 0; | ||||||
|  | 	while (true) { | ||||||
|  | 		chunks[i] = get_png_chunk(buffer, offset); | ||||||
|  | 		// 12 = 4 (length) + 4 (type) + 4 (crc) | ||||||
|  | 		offset += 12 + chunks[i]->length; | ||||||
|  | 		if (memcmp(chunks[i]->type, "IEND", 4) == 0) { | ||||||
|  | 			break; | ||||||
|  | 		} | ||||||
|  | 		i++; | ||||||
|  | 		// Add one because realloc is 1-indexed when multiplying by sizeof | ||||||
|  | 		png_chunk **err_check = realloc(chunks, sizeof(png_chunk *) * (i + 1)); | ||||||
|  | 		if (err_check == NULL) { | ||||||
|  | 			destroy_chunks(chunks); | ||||||
|  | 			perror("realloc"); | ||||||
|  | 			exit(EXIT_FAILURE); | ||||||
|  | 		} | ||||||
|  | 		chunks = err_check; | ||||||
|  | 	} | ||||||
|  | 	return chunks; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | int get_number_of_chunks(png_chunk **chunks) { | ||||||
|  | 	int i = 0; | ||||||
|  | 	while (memcmp(chunks[i]->type, "IEND", 4) != 0) { | ||||||
|  | 		i++; | ||||||
|  | 	} | ||||||
|  | 	// Add one for the IEND chunk | ||||||
|  | 	return ++i; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void xor_data(png_chunk *chunk) { | ||||||
|  | 	for (int i = 0; i < chunk->length; i++) { | ||||||
|  | 		chunk->data[i] ^= KEY; | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void destroy_chunks(png_chunk **chunks) { | ||||||
|  | 	unsigned int size = get_number_of_chunks(chunks); | ||||||
|  | 	for (int i = 0; i < size; i++) { | ||||||
|  | 		free(chunks[i]->data); | ||||||
|  | 		free(chunks[i]); | ||||||
|  | 	} | ||||||
|  | 	free(chunks); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void write_png_chunks(char *path, png_chunk **chunks) { | ||||||
|  | 	FILE *fp = fopen(path, "wb"); | ||||||
|  | 	if (fp == NULL) { | ||||||
|  | 		perror("fopen"); | ||||||
|  | 		exit(EXIT_FAILURE); | ||||||
|  | 	} | ||||||
|  | 	fwrite(PNG_SIGNATURE, PNG_SIGNATURE_SIZE, 1, fp); | ||||||
|  | 	unsigned int size = get_number_of_chunks(chunks); | ||||||
|  | 	for (int i = 0; i < size; i++) { | ||||||
|  | 		// Convert length to network byte order for writing | ||||||
|  | 		chunks[i]->length = htonl(chunks[i]->length); | ||||||
|  | 		fwrite(&chunks[i]->length, 4, 1, fp); | ||||||
|  | 		fwrite(chunks[i]->type, 4, 1, fp); | ||||||
|  | 		// Convert back so we can accurately use it to write the length of the data | ||||||
|  | 		chunks[i]->length = ntohl(chunks[i]->length); | ||||||
|  | 		fwrite(chunks[i]->data, chunks[i]->length, 1, fp); | ||||||
|  | 		fwrite(&chunks[i]->crc, 4, 1, fp); | ||||||
|  | 	} | ||||||
|  | 	fclose(fp); | ||||||
|  | } | ||||||
							
								
								
									
										75
									
								
								Assignment9/src/png.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								Assignment9/src/png.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,75 @@ | |||||||
|  | /* | ||||||
|  |  * Copyright Notice | ||||||
|  |  * ---------------- | ||||||
|  |  * Copyright © 1998, 1999 by: Glenn Randers-Pehrson | ||||||
|  |  * This specification is a modification of the PNG 1.0 specification. It is being | ||||||
|  |  * provided by the copyright holder under the provisions of the 1996 MIT copyright and license: | ||||||
|  |  * Copyright © 1996 by: Massachusetts Institute of Technology (MIT) | ||||||
|  |  * This W3C specification is being provided by the copyright holders under | ||||||
|  |  * the following license. By obtaining, using and/or copying this specification, you | ||||||
|  |  * agree that you have read, understood, and will comply with the following terms | ||||||
|  |  * and conditions: | ||||||
|  |  * Permission to use, copy, and distribute this specification for any purpose | ||||||
|  |  * and without fee or royalty is hereby granted, provided that the full text of | ||||||
|  |  * this NOTICE appears on ALL copies of the specification or portions thereof, | ||||||
|  |  * including modifications, that you make. | ||||||
|  |  * THIS SPECIFICATION IS PROVIDED ”AS IS,” AND COPYRIGHT HOLD-ERS | ||||||
|  |  * MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR | ||||||
|  |  * IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, COPYRIGHT | ||||||
|  |  * HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES OF MERCHANTABILITY | ||||||
|  |  * OR FITNESS FOR ANY PARTICULAR PURPOSE OR | ||||||
|  |  * THAT THE USE OF THE SPECIFICATION WILL NOT INFRINGE ANY | ||||||
|  |  * THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER | ||||||
|  |  * RIGHTS. COPYRIGHT HOLDERS WILL BEAR NO LIABILITY FOR ANY | ||||||
|  |  * USE OF THIS SPECIFICATION. | ||||||
|  |  * The name and trademarks of copyright holders may NOT be used in | ||||||
|  |  * advertising or publicity pertaining to the specification without specific, written | ||||||
|  |  * prior permission. Title to copyright in this specification and any associated | ||||||
|  |  * documentation will at all times remain with copyright holders. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | #pragma once | ||||||
|  |  | ||||||
|  | // Needed for uint types | ||||||
|  | #include <arpa/inet.h> | ||||||
|  |  | ||||||
|  | // http://www.libpng.org/pub/png/spec/1.2/PNG-Rationale.html#R.PNG-file-signature | ||||||
|  | #define PNG_SIGNATURE "\211PNG\r\n\032\n" | ||||||
|  | #define PNG_SIGNATURE_SIZE 8 | ||||||
|  |  | ||||||
|  | // The key used to "encrypt/decrypt" the PNG chunks | ||||||
|  | #define KEY 42 | ||||||
|  |  | ||||||
|  | typedef struct png_chunk { | ||||||
|  | 	uint32_t length; | ||||||
|  | 	char type[4]; | ||||||
|  | 	char *data; | ||||||
|  | 	uint32_t crc; | ||||||
|  | } png_chunk; | ||||||
|  |  | ||||||
|  | // Get FILE from path | ||||||
|  | int get_fd(char *path); | ||||||
|  |  | ||||||
|  | // Store file in heap memory | ||||||
|  | char *load_file(char *path); | ||||||
|  |  | ||||||
|  | // Check if file is a PNG | ||||||
|  | int is_png(char *buffer); | ||||||
|  |  | ||||||
|  | // Get PNG chunk | ||||||
|  | png_chunk *get_png_chunk(char *buffer, unsigned int offset); | ||||||
|  |  | ||||||
|  | // Get all PNG chunks | ||||||
|  | png_chunk **get_png_chunks(char *buffer); | ||||||
|  |  | ||||||
|  | // Get number of chunks | ||||||
|  | int get_number_of_chunks(png_chunk **chunks); | ||||||
|  |  | ||||||
|  | // XOR chunk with key | ||||||
|  | void xor_data(png_chunk *chunk); | ||||||
|  |  | ||||||
|  | // Destroy all chunks | ||||||
|  | void destroy_chunks(png_chunk **chunks); | ||||||
|  |  | ||||||
|  | // Write PNG chunks to file | ||||||
|  | void write_png_chunks(char *path, png_chunk **chunks); | ||||||
							
								
								
									
										13
									
								
								Assignment9/tests/output1.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								Assignment9/tests/output1.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | |||||||
|  | It's a PNG file | ||||||
|  | Found unknown: IHDR | ||||||
|  | Chunk size is:13 | ||||||
|  | Found unknown: sRGB | ||||||
|  | Chunk size is:1 | ||||||
|  | Found unknown: gAMA | ||||||
|  | Chunk size is:4 | ||||||
|  | Found unknown: pHYs | ||||||
|  | Chunk size is:9 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:18944 | ||||||
|  | Found IEND | ||||||
|  | Chunk size is:0 | ||||||
							
								
								
									
										1
									
								
								Assignment9/tests/output2.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								Assignment9/tests/output2.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | |||||||
|  | It's not a PNG file | ||||||
							
								
								
									
										249
									
								
								Assignment9/tests/output3.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										249
									
								
								Assignment9/tests/output3.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,249 @@ | |||||||
|  | It's a PNG file | ||||||
|  | Found unknown: IHDR | ||||||
|  | Chunk size is:13 | ||||||
|  | Found unknown: sRGB | ||||||
|  | Chunk size is:1 | ||||||
|  | Found unknown: gAMA | ||||||
|  | Chunk size is:4 | ||||||
|  | Found unknown: pHYs | ||||||
|  | Chunk size is:9 | ||||||
|  | Found unknown: tEXt | ||||||
|  | Chunk size is:15 | ||||||
|  | Found unknown: tIME | ||||||
|  | Chunk size is:7 | ||||||
|  | Found unknown: tEXt | ||||||
|  | Chunk size is:32 | ||||||
|  | Found unknown: tEXt | ||||||
|  | Chunk size is:33 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65310 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:17176 | ||||||
|  | Found IEND | ||||||
|  | Chunk size is:0 | ||||||
							
								
								
									
										317
									
								
								Assignment9/tests/output4.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										317
									
								
								Assignment9/tests/output4.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,317 @@ | |||||||
|  | It's a PNG file | ||||||
|  | Found unknown: IHDR | ||||||
|  | Chunk size is:13 | ||||||
|  | Found unknown: sRGB | ||||||
|  | Chunk size is:1 | ||||||
|  | Found unknown: gAMA | ||||||
|  | Chunk size is:4 | ||||||
|  | Found unknown: pHYs | ||||||
|  | Chunk size is:9 | ||||||
|  | Found unknown: tEXt | ||||||
|  | Chunk size is:15 | ||||||
|  | Found unknown: tIME | ||||||
|  | Chunk size is:7 | ||||||
|  | Found unknown: tEXt | ||||||
|  | Chunk size is:32 | ||||||
|  | Found unknown: tEXt | ||||||
|  | Chunk size is:33 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65310 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:65524 | ||||||
|  | Found IDAT | ||||||
|  | Chunk size is:53390 | ||||||
|  | Found IEND | ||||||
|  | Chunk size is:0 | ||||||
							
								
								
									
										
											BIN
										
									
								
								Assignment9/tests/test1.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Assignment9/tests/test1.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 19 KiB | 
							
								
								
									
										
											BIN
										
									
								
								Assignment9/tests/test2.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Assignment9/tests/test2.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Assignment9/tests/test3.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Assignment9/tests/test3.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 7.1 MiB | 
							
								
								
									
										
											BIN
										
									
								
								Assignment9/tests/test4.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Assignment9/tests/test4.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 9.3 MiB | 
							
								
								
									
										22
									
								
								Assignment9/tests/test_images.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								Assignment9/tests/test_images.sh
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | |||||||
|  | #!/usr/bin/env bash | ||||||
|  |  | ||||||
|  | # Executable path | ||||||
|  | EXECUTABLE=../build/Assignment9 | ||||||
|  |  | ||||||
|  |  | ||||||
|  | test_reverse() { | ||||||
|  |     start=$(date +%s) | ||||||
|  |     cp "$1" in.png | ||||||
|  |     cp in.png out.png | ||||||
|  |     $EXECUTABLE out.png > /dev/null | ||||||
|  |     $EXECUTABLE out.png > /dev/null | ||||||
|  |     diff in.png out.png | ||||||
|  |     rm in.png out.png | ||||||
|  |     end=$(date +%s) | ||||||
|  |     echo "Test $1 took $((end - start)) seconds" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | test_reverse test1.png | ||||||
|  | # test_reverse test2.png # This png is invalid, so it will fail | ||||||
|  | test_reverse test3.png | ||||||
|  | test_reverse test4.png | ||||||
							
								
								
									
										18
									
								
								Assignment9/tests/test_text.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								Assignment9/tests/test_text.sh
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,18 @@ | |||||||
|  | #!/usr/bin/env bash | ||||||
|  |  | ||||||
|  | EXECUTABLE=../build/Assignment9 | ||||||
|  |  | ||||||
|  | # Test the text output | ||||||
|  | $EXECUTABLE test1.png | diff output1.txt - | ||||||
|  | $EXECUTABLE test2.png | diff output2.txt - | ||||||
|  | $EXECUTABLE test3.png | diff output3.txt - | ||||||
|  | $EXECUTABLE test4.png | diff output4.txt - | ||||||
|  |  | ||||||
|  |  | ||||||
|  | # Reverse the images | ||||||
|  | $EXECUTABLE test1.png > /dev/null | ||||||
|  | $EXECUTABLE test2.png > /dev/null | ||||||
|  | $EXECUTABLE test3.png > /dev/null | ||||||
|  | $EXECUTABLE test4.png > /dev/null | ||||||
|  |  | ||||||
|  | echo "If there is no diff output, then the test passed." | ||||||
		Reference in New Issue
	
	Block a user