Fix minor generation bug, reformat CLI parsing.
diff --git a/generator/cper-generate-cli.c b/generator/cper-generate-cli.c
index 5d9c01e..0f0399b 100644
--- a/generator/cper-generate-cli.c
+++ b/generator/cper-generate-cli.c
@@ -5,6 +5,7 @@
  **/
 
 #include <stdio.h>
+#include <stdlib.h>
 #include <string.h>
 #include "../edk/Cper.h"
 #include "cper-generate.h"
@@ -19,24 +20,51 @@
 		return 0;
 	}
 
-	//Ensure the minimum number of arguments.
-	if (argc < 5) {
-		printf("Insufficient number of arguments. See 'cper-generate --help' for command information.\n");
+	//Parse the command line arguments.
+	char *out_file = NULL;
+	char **sections = NULL;
+	UINT16 num_sections = 0;
+	for (int i = 1; i < argc; i++) {
+		if (strcmp(argv[i], "--out") == 0 && i < argc - 1) {
+			out_file = argv[i + 1];
+			i++;
+		} else if (strcmp(argv[i], "--sections") == 0 && i < argc - 1) {
+			//All arguments after this must be section names.
+			num_sections = argc - i - 1;
+			sections = malloc(sizeof(char *) * num_sections);
+			i++;
+			
+			for (int j = i; j < argc; j++)
+				sections[j - i] = argv[j];
+			break;
+		} else {
+			printf("Unrecognised argument '%s'. For command information, refer to 'cper-generate --help'.\n",
+			       argv[i]);
+			return -1;
+		}
+	}
+
+	//If no output file passed as argument, exit.
+	if (out_file == NULL) {
+		printf("No output file provided. For command information, refer to 'cper-generate --help'.\n");
 		return -1;
 	}
 
 	//Open a file handle to write output.
-	FILE *cper_file = fopen(argv[2], "w");
+	FILE *cper_file = fopen(out_file, "w");
 	if (cper_file == NULL) {
 		printf("Could not get a handle for output file '%s', file handle returned null.\n",
-		       argv[2]);
+		       out_file);
 		return -1;
 	}
 
 	//Generate the record. Type names start from argv[4].
-	UINT16 num_sections = argc - 4;
-	generate_cper_record(argv + 4, num_sections, cper_file);
+	generate_cper_record(sections, num_sections, cper_file);
+
+	//Close & free remaining resources.
 	fclose(cper_file);
+	if (sections != NULL)
+		free(sections);
 }
 
 //Prints command help for this CPER generator.