]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/CCode/Source/CreateMtFile/CreateMtFile.c
File modified to add usage information and implement minor corrections.
[mirror_edk2.git] / Tools / CCode / Source / CreateMtFile / CreateMtFile.c
index 1c17b3de23342db897695777e540883be22d8b8d..7d6d2d95bd8ac93e814c5d510eebe83b8b3f28dc 100644 (file)
@@ -26,7 +26,9 @@ Abstract:
 \r
 #include <Common/UefiBaseTypes.h>\r
 \r
-#define PROGRAM_NAME  "CreateMtFile"\r
+#define UTILITY_NAME "CreateMtFile"\r
+#define UTILITY_MAJOR_VERSION 1\r
+#define UTILITY_MINOR_VERSION 1\r
 \r
 typedef struct {\r
   INT8    *OutFileName;\r
@@ -44,7 +46,13 @@ ProcessArgs (
 \r
 static\r
 void\r
-Usage (\r
+CMFUsage (\r
+  VOID\r
+  );\r
+\r
+static\r
+void\r
+CMFVersion (\r
   VOID\r
   );\r
 \r
@@ -86,11 +94,7 @@ Returns:
   // Open the output file\r
   //\r
   if ((OutFptr = fopen (Options.OutFileName, "wb")) == NULL) {\r
-    fprintf (\r
-      stdout,\r
-      PROGRAM_NAME " ERROR: Could not open output file '%s' for writing\n",\r
-      Options.OutFileName\r
-      );\r
+      printf (" ERROR: Could not open output file '%s' for writing\n", Options.OutFileName);\r
     return EFI_DEVICE_ERROR;\r
   }\r
   //\r
@@ -99,7 +103,7 @@ Returns:
   while (Options.FileSize > 0) {\r
     if (fwrite (&Options.ByteValue, 1, 1, OutFptr) != 1) {\r
       fclose (OutFptr);\r
-      fprintf (stdout, PROGRAM_NAME " ERROR: Failed to write to output file\n");\r
+      printf (" ERROR: Failed to write to output file\n");\r
       return EFI_DEVICE_ERROR;\r
     }\r
 \r
@@ -151,15 +155,32 @@ Returns:
   //\r
   Argv++;\r
   Argc--;\r
+  \r
+  if (Argc < 1) {\r
+    CMFUsage();\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+  \r
+  if ((strcmp(Argv[0], "-h") == 0) || (strcmp(Argv[0], "--help") == 0) ||\r
+      (strcmp(Argv[0], "-?") == 0) || (strcmp(Argv[0], "/?") == 0)) {\r
+    CMFUsage();\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+  \r
+  if ((strcmp(Argv[0], "-V") == 0) || (strcmp(Argv[0], "--version") == 0)) {\r
+    CMFVersion();\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
\r
   if (Argc < 2) {\r
-    Usage ();\r
+    CMFUsage ();\r
     return EFI_INVALID_PARAMETER;\r
   }\r
   //\r
   // If first arg is dash-option, then print usage.\r
   //\r
   if (Argv[0][0] == '-') {\r
-    Usage ();\r
+    CMFUsage ();\r
     return EFI_INVALID_PARAMETER;\r
   }\r
   //\r
@@ -176,13 +197,22 @@ Returns:
   if ((Argv[0][strlen (Argv[0]) - 1] == 'k') || (Argv[0][strlen (Argv[0]) - 1] == 'K')) {\r
     Multiplier = 1024;\r
   }\r
+  \r
+  //\r
+  // Check for negtive size\r
+  //\r
+  if (Argv[0][0] == '-') {\r
+    printf("ERROR: File size should be non-negtive.\n");\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+  \r
   //\r
   // Look for 0x prefix on file size\r
   //\r
   if ((Argv[0][0] == '0') && ((Argv[0][1] == 'x') || (Argv[0][1] == 'X'))) {\r
     if (sscanf (Argv[0], "%x", &Options->FileSize) != 1) {\r
-      fprintf (stdout, PROGRAM_NAME " ERROR: Invalid file size '%s'\n", Argv[0]);\r
-      Usage ();\r
+      printf ("ERROR: Invalid file size '%s'\n", Argv[0]);\r
+      CMFUsage ();\r
       return EFI_INVALID_PARAMETER;\r
     }\r
     //\r
@@ -190,12 +220,12 @@ Returns:
     //\r
   } else {\r
     if (sscanf (Argv[0], "%d", &Options->FileSize) != 1) {\r
-      fprintf (stdout, PROGRAM_NAME " ERROR: Invalid file size '%s'\n", Argv[0]);\r
-      Usage ();\r
+      printf ("ERROR: Invalid file size '%s'\n", Argv[0]);\r
+      CMFUsage ();\r
       return EFI_INVALID_PARAMETER;\r
     }\r
   }\r
-\r
+  \r
   Options->FileSize *= Multiplier;\r
   //\r
   // Assume byte value of 0xff\r
@@ -203,12 +233,39 @@ Returns:
   Options->ByteValue = (INT8) (UINT8) 0xFF;\r
   return EFI_SUCCESS;\r
 }\r
+\r
+\r
+static\r
+void \r
+CMFVersion(\r
+  void\r
+  )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+  Print out version information for Strip.\r
+\r
+Arguments:\r
+\r
+  None\r
+  \r
+Returns:\r
+\r
+  None\r
+  \r
+--*/ \r
+{\r
+  printf ("%s v%d.%d -EDK utility to create a pad file containing fixed data\n", UTILITY_NAME, UTILITY_MAJOR_VERSION, UTILITY_MINOR_VERSION);\r
+  printf ("Copyright (c) 1999-2006 Intel Corporation. All rights reserved.\n");\r
+}\r
+\r
 //\r
 // Print utility usage info\r
 //\r
 static\r
 void\r
-Usage (\r
+CMFUsage (\r
   VOID\r
   )\r
 /*++\r
@@ -226,22 +283,15 @@ Returns:
   GC_TODO: add return values\r
 \r
 --*/\r
-{\r
-  UINT32            Index;\r
-  static const INT8 *Text[] = {\r
-    " ",\r
-    "Usage:  "PROGRAM_NAME " OutFileName FileSize",\r
-    "  where:",\r
-    "    OutFileName is the name of the output file to generate",\r
-    "    FileSize is the size of the file to create",\r
-    "  Examples:",\r
-    "    "PROGRAM_NAME " OutFile.bin 32K",\r
-    "    "PROGRAM_NAME " OutFile.bin 0x1000",\r
-    " ",\r
-    NULL\r
-  };\r
-\r
-  for (Index = 0; Text[Index] != NULL; Index++) {\r
-    fprintf (stdout, "%s\n", Text[Index]);\r
-  }\r
-}\r
+{ \r
+  CMFVersion();\r
+  \r
+  printf ("\n  Usage: %s OutFileName FileSize \n\\r
+      where: \n\\r
+        OutFileName is the name of the output file to generate \n\\r
+        FileSize is the size of the file to create \n\\r
+      Examples: \n\\r
+        %s OutFile.bin 32K \n\\r
+        %s OutFile.bin 0x1000 \n",UTILITY_NAME, UTILITY_NAME, UTILITY_NAME);\r
+} \r
+\r