Add Print Message interfaces to log the different message information for Error,...
authorlgao4 <lgao4@7335b38e-4728-0410-8992-fb3ffe349368>
Tue, 25 Sep 2007 08:10:34 +0000 (08:10 +0000)
committerlgao4 <lgao4@7335b38e-4728-0410-8992-fb3ffe349368>
Tue, 25 Sep 2007 08:10:34 +0000 (08:10 +0000)
git-svn-id: https://buildtools.tianocore.org/svn/buildtools/trunk/BaseTools@755 7335b38e-4728-0410-8992-fb3ffe349368

Source/C/Common/EfiUtilityMsgs.c
Source/C/Common/EfiUtilityMsgs.h

index be78dfc..e322440 100644 (file)
@@ -24,6 +24,7 @@ Abstract:
 #include <string.h>\r
 #include <ctype.h>\r
 #include <stdarg.h>\r
+#include <time.h>\r
 \r
 #include "EfiUtilityMsgs.h"\r
 \r
@@ -33,7 +34,7 @@ Abstract:
 //\r
 static STATUS mStatus                 = STATUS_SUCCESS;\r
 static CHAR8  mUtilityName[50]        = { 0 };\r
-static UINT32 mDebugMsgMask           = 0;\r
+static UINT32 mPrintLogLevel          = INFO_LOG_LEVEL;\r
 static CHAR8  *mSourceFileName        = NULL;\r
 static UINT32 mSourceFileLineNum      = 0;\r
 static UINT32 mErrorCount             = 0;\r
@@ -271,11 +272,11 @@ Returns:
   PrintMessage ("WARNING", mSourceFileName, mSourceFileLineNum, ErrorCode, OffendingText, MsgFmt, List);\r
   va_end (List);\r
   //\r
-  // Set status accordingly\r
+  // Don't set warning status accordingly\r
   //\r
-  if (mStatus < STATUS_WARNING) {\r
-    mStatus = STATUS_WARNING;\r
-  }\r
+  //  if (mStatus < STATUS_WARNING) {\r
+  //    mStatus = STATUS_WARNING;\r
+  //  }\r
 }\r
 \r
 void\r
@@ -313,6 +314,13 @@ Returns:
 --*/\r
 {\r
   va_list List;\r
+  \r
+  //\r
+  // Current Print Level not output warning information.\r
+  //\r
+  if (WARNING_LOG_LEVEL < mPrintLogLevel) {\r
+    return;\r
+  }\r
   //\r
   // If limits have been set, then check them\r
   //\r
@@ -341,19 +349,13 @@ Returns:
   va_start (List, MsgFmt);\r
   PrintMessage ("WARNING", FileName, LineNumber, MessageCode, Text, MsgFmt, List);\r
   va_end (List);\r
-  //\r
-  // Set status accordingly\r
-  //\r
-  if (mStatus < STATUS_WARNING) {\r
-    mStatus = STATUS_WARNING;\r
-  }\r
 }\r
 \r
 void\r
 DebugMsg (\r
   CHAR8   *FileName,\r
   UINT32  LineNumber,\r
-  UINT32  MsgMask,\r
+  UINT32  MsgLevel,\r
   CHAR8   *Text,\r
   CHAR8   *MsgFmt,\r
   ...\r
@@ -361,7 +363,7 @@ DebugMsg (
 /*++\r
 \r
 Routine Description:\r
-  Print a warning message.\r
+  Print a Debug message.\r
 \r
 Arguments:\r
   FileName    - typically the name of the utility printing the debug message, but\r
@@ -369,8 +371,7 @@ Arguments:
   \r
   LineNumber  - the line number in FileName (parsers) \r
                \r
-  MsgMask     - an application-specific bitmask that, in combination with mDebugMsgMask,\r
-                determines if the debug message gets printed.\r
+  MsgLevel    - Debug message print level (0~9)\r
 \r
   Text        - the text in question (parsers)\r
   \r
@@ -384,9 +385,9 @@ Returns:
 {\r
   va_list List;\r
   //\r
-  // If the debug mask is not applicable, then do nothing.\r
+  // If the debug level is less than current print level, then do nothing.\r
   //\r
-  if ((MsgMask != 0) && ((mDebugMsgMask & MsgMask) == 0)) {\r
+  if (MsgLevel < mPrintLogLevel) {\r
     return ;\r
   }\r
 \r
@@ -455,48 +456,124 @@ Notes:
 \r
 --*/\r
 {\r
-  CHAR8 Line[MAX_LINE_LEN];\r
-  CHAR8 Line2[MAX_LINE_LEN];\r
-  CHAR8 *Cptr;\r
+  CHAR8       Line[MAX_LINE_LEN];\r
+  CHAR8       Line2[MAX_LINE_LEN];\r
+  CHAR8       *Cptr;\r
+  struct tm   *NewTime;\r
+  time_t      CurrentTime;\r
+\r
+  //\r
+  // init local variable\r
+  //\r
+  Line[0] = '\0';\r
+  Line2[0] = '\0';\r
+  \r
   //\r
   // If given a filename, then add it (and the line number) to the string.\r
   // If there's no filename, then use the program name if provided.\r
   //\r
   if (FileName != NULL) {\r
     Cptr = FileName;\r
-  } else if (mUtilityName[0] != 0) {\r
-    Cptr = mUtilityName;\r
   } else {\r
-    Cptr = "Unknown utility";\r
+    Cptr = NULL;\r
   }\r
-\r
-  sprintf (Line, "(%s)", Cptr);\r
-  if (LineNumber != 0) {\r
-    sprintf (Line2, "(%d)", LineNumber);\r
-    strcat (Line, Line2);\r
+  \r
+  if (strcmp (Type, "DEBUG") == 0) {\r
+    //\r
+    // Debug Message requires current time.\r
+    //\r
+    time (&CurrentTime);\r
+    NewTime = localtime (&CurrentTime);\r
+    fprintf (stdout, "%04d-%02d-%02d %02d:%02d:%02d", \r
+                     NewTime->tm_year + 1900,\r
+                     NewTime->tm_mon + 1,\r
+                     NewTime->tm_mday,\r
+                     NewTime->tm_hour,\r
+                     NewTime->tm_min,\r
+                     NewTime->tm_sec\r
+                     );\r
+    if (Cptr != NULL) {\r
+      sprintf (Line, ": %s", Cptr);\r
+      if (LineNumber != 0) {\r
+        sprintf (Line2, "(%d)", LineNumber);\r
+        strcat (Line, Line2);\r
+      }\r
+    }\r
+  } else {\r
+    //\r
+    // Error and Warning Information.\r
+    //\r
+    if (Cptr != NULL) {\r
+      if (mUtilityName[0] != '\0') {\r
+        fprintf (stdout, "%s...\n", mUtilityName);\r
+      }\r
+      sprintf (Line, "%s", Cptr);\r
+      if (LineNumber != 0) {\r
+        sprintf (Line2, "(%d)", LineNumber);\r
+        strcat (Line, Line2);\r
+      }\r
+    } else {\r
+      if (mUtilityName[0] != '\0') {\r
+        sprintf (Line, "%s", mUtilityName);\r
+      }\r
+    }\r
   }\r
+\r
   //\r
   // Have to print an error code or Visual Studio won't find the\r
   // message for you. It has to be decimal digits too.\r
   //\r
-  sprintf (Line2, " %s: %c%04d", Type, toupper (Type[0]), MessageCode);\r
+  if (MessageCode != 0) {\r
+    sprintf (Line2, ": %s: %c%04d", Type, toupper (Type[0]), MessageCode);\r
+  } else {\r
+    sprintf (Line2, ": %s", Type);\r
+  }\r
   strcat (Line, Line2);\r
   fprintf (stdout, "%s", Line);\r
   //\r
   // If offending text was provided, then print it\r
   //\r
   if (Text != NULL) {\r
-    fprintf (stdout, ": %s ", Text);\r
+    fprintf (stdout, ": %s", Text);\r
   }\r
+  fprintf (stdout, "\n");\r
+\r
   //\r
   // Print formatted message if provided\r
   //\r
   if (MsgFmt != NULL) {\r
     vsprintf (Line2, MsgFmt, List);\r
-    fprintf (stdout, ": %s", Line2);\r
+    fprintf (stdout, "  %s\n", Line2);\r
   }\r
+}\r
 \r
-  fprintf (stdout, "\n");\r
+static\r
+void\r
+PrintSimpleMessage (\r
+  CHAR8   *MsgFmt,\r
+  va_list List\r
+  )\r
+/*++\r
+Routine Description:\r
+  Print message into stdout.\r
\r
+Arguments:\r
+  MsgFmt      - the format string for the message. Can contain formatting\r
+                controls for use with varargs.\r
+  List        - the variable list.\r
+           \r
+Returns:\r
+  None.\r
+--*/\r
+{\r
+  CHAR8       Line[MAX_LINE_LEN];\r
+  //\r
+  // Print formatted message if provided\r
+  //\r
+  if (MsgFmt != NULL) {\r
+    vsprintf (Line, MsgFmt, List);\r
+    fprintf (stdout, "%s\n", Line);\r
+  }\r
 }\r
 \r
 void\r
@@ -587,24 +664,123 @@ Returns:
 }\r
 \r
 void\r
-SetDebugMsgMask (\r
-  UINT32  DebugMask\r
+SetPrintLevel (\r
+  UINT32  LogLevel\r
   )\r
 /*++\r
 \r
 Routine Description:\r
-  Set the debug printing mask. This is used by the DebugMsg() function\r
-  to determine when/if a debug message should be printed.\r
+  Set the printing message Level. This is used by the PrintMsg() function\r
+  to determine when/if a message should be printed.\r
 \r
 Arguments:\r
-  DebugMask  - bitmask, specific to the calling application\r
+  LogLevel  - 0~50 to specify the different level message.\r
 \r
 Returns:\r
   NA\r
 \r
 --*/\r
 {\r
-  mDebugMsgMask = DebugMask;\r
+  mPrintLogLevel = LogLevel;\r
+}\r
+\r
+void\r
+VerboseMsg (\r
+  CHAR8   *MsgFmt,\r
+  ...\r
+  )\r
+/*++\r
+\r
+Routine Description:\r
+  Print a verbose level message.\r
+\r
+Arguments:\r
+  MsgFmt      - the format string for the message. Can contain formatting\r
+                controls for use with varargs.\r
+  List        - the variable list.\r
+\r
+Returns:\r
+  NA\r
+\r
+--*/\r
+{\r
+  va_list List;\r
+  //\r
+  // If the debug level is less than current print level, then do nothing.\r
+  //\r
+  if (VERBOSE_LOG_LEVEL < mPrintLogLevel) {\r
+    return ;\r
+  }\r
+\r
+  va_start (List, MsgFmt);\r
+  PrintSimpleMessage (MsgFmt, List);\r
+  va_end (List);\r
+}\r
+\r
+void\r
+NormalMsg (\r
+  CHAR8   *MsgFmt,\r
+  ...\r
+  )\r
+/*++\r
+\r
+Routine Description:\r
+  Print a default level message.\r
+\r
+Arguments:\r
+  MsgFmt      - the format string for the message. Can contain formatting\r
+                controls for use with varargs.\r
+  List        - the variable list.\r
+\r
+Returns:\r
+  NA\r
+\r
+--*/\r
+{\r
+  va_list List;\r
+  //\r
+  // If the debug level is less than current print level, then do nothing.\r
+  //\r
+  if (INFO_LOG_LEVEL < mPrintLogLevel) {\r
+    return ;\r
+  }\r
+\r
+  va_start (List, MsgFmt);\r
+  PrintSimpleMessage (MsgFmt, List);\r
+  va_end (List);\r
+}\r
+\r
+void\r
+KeyMsg (\r
+  CHAR8   *MsgFmt,\r
+  ...\r
+  )\r
+/*++\r
+\r
+Routine Description:\r
+  Print a key level message.\r
+\r
+Arguments:\r
+  MsgFmt      - the format string for the message. Can contain formatting\r
+                controls for use with varargs.\r
+  List        - the variable list.\r
+\r
+Returns:\r
+  NA\r
+\r
+--*/\r
+{\r
+  va_list List;\r
+  //\r
+  // If the debug level is less than current print level, then do nothing.\r
+  //\r
+  if (KEY_LOG_LEVEL < mPrintLogLevel) {\r
+    return ;\r
+  }\r
+\r
+  va_start (List, MsgFmt);\r
+  PrintSimpleMessage (MsgFmt, List);\r
+  va_end (List);\r
 }\r
 \r
 void\r
index b03ad4e..dcdcc09 100644 (file)
@@ -24,6 +24,15 @@ Abstract:
 \r
 #include <Common/UefiBaseTypes.h>\r
 \r
+//\r
+// Log message print Level\r
+//\r
+#define VERBOSE_LOG_LEVEL    15\r
+#define WARNING_LOG_LEVEL    15\r
+#define INFO_LOG_LEVEL       20\r
+#define KEY_LOG_LEVEL        40\r
+#define ERROR_LOG_LEVLE      50\r
+\r
 //\r
 // Status codes returned by EFI utility programs and functions\r
 //\r
@@ -76,7 +85,7 @@ void
 Warning (\r
   CHAR8   *FileName,\r
   UINT32  LineNumber,\r
-  UINT32  ErrorCode,\r
+  UINT32  WarningCode,\r
   CHAR8   *OffendingText,\r
   CHAR8   *MsgFmt,\r
   ...\r
@@ -95,10 +104,27 @@ DebugMsg (
 ;\r
 \r
 void\r
-SetDebugMsgMask (\r
-  UINT32    MsgMask\r
-  )\r
-;\r
+VerboseMsg (\r
+  CHAR8   *MsgFmt,\r
+  ...\r
+  );\r
+\r
+void\r
+NormalMsg (\r
+  CHAR8   *MsgFmt,\r
+  ...\r
+  );\r
+\r
+void\r
+KeyMsg (\r
+  CHAR8   *MsgFmt,\r
+  ...\r
+  );\r
+\r
+void\r
+SetPrintLevel (\r
+  UINT32  LogLevel\r
+  );\r
 \r
 void\r
 ParserSetPosition (\r