git-svn-id: https://buildtools.tianocore.org/svn/buildtools/trunk/BaseTools@189 7335b...
authorhche10x <hche10x@7335b38e-4728-0410-8992-fb3ffe349368>
Mon, 25 Jun 2007 09:01:53 +0000 (09:01 +0000)
committerhche10x <hche10x@7335b38e-4728-0410-8992-fb3ffe349368>
Mon, 25 Jun 2007 09:01:53 +0000 (09:01 +0000)
Source/Python/DataType.py
Source/Python/DscClassObject.py
Source/Python/StrGather.py
Source/Python/UniClassObject.py

index 84213e8..00760fa 100644 (file)
@@ -219,6 +219,9 @@ TAB_DSC_DEFINES_OUTPUT_DIRECTORY = 'OUTPUT_DIRECTORY'
 TAB_DSC_DEFINES_SUPPORTED_ARCHITECTURES = 'SUPPORTED_ARCHITECTURES'\r
 TAB_DSC_DEFINES_BUILD_TARGETS = 'BUILD_TARGETS'\r
 TAB_DSC_DEFINES_SKUID_IDENTIFIER = 'SKUID_IDENTIFIER'\r
+TAB_DSC_DEFINES_FLASH_DEFINITION = 'FLASH_DEFINITION'\r
+TAB_DSC_DEFINES_BUILD_NUMBER = 'BUILD_NUMBER'\r
+TAB_DSC_DEFINES_MAKEFILE_NAME = 'MAKEFILE_NAME'\r
 \r
 #TargetTxt Definitions\r
 TAB_TAT_DEFINES_ACTIVE_PLATFORM = 'ACTIVE_PLATFORM'\r
index 861724f..b6bcadf 100644 (file)
@@ -32,7 +32,10 @@ class DscDefines(DscObject):
             TAB_DSC_DEFINES_OUTPUT_DIRECTORY                      : [''],\r
             TAB_DSC_DEFINES_SUPPORTED_ARCHITECTURES               : [''],\r
             TAB_DSC_DEFINES_BUILD_TARGETS                         : [''],\r
-            TAB_DSC_DEFINES_SKUID_IDENTIFIER                      : ['']\r
+            TAB_DSC_DEFINES_SKUID_IDENTIFIER                      : [''],\r
+            TAB_DSC_DEFINES_FLASH_DEFINITION                      : [''],\r
+            TAB_DSC_DEFINES_BUILD_NUMBER                          : [''],\r
+            TAB_DSC_DEFINES_MAKEFILE_NAME                         : ['']                        \r
         }\r
 \r
 class DscSkuId(DscObject):\r
index 1238c10..c07473d 100644 (file)
@@ -14,6 +14,8 @@
 import EdkLogger\r
 from UniClassObject import *\r
 \r
+HexHeader = '0x'\r
+\r
 COMMENT = '// '\r
 DEFINE_STR = '#define'\r
 COMMENT_DEFINE_STR = COMMENT + DEFINE_STR\r
@@ -26,6 +28,9 @@ STRING = 'string'
 TO = 'to'\r
 STRING_TOKEN = 'STRING_TOKEN'\r
 \r
+LENGTH_EFI_HII_STRING_PACK_HEADER = 22\r
+LENGTH_STRING_OFFSET = 4\r
+\r
 H_C_FILE_HEADER = ['//', \\r
                    '//  DO NOT EDIT -- auto-generated file', \\r
                    '//', \\r
@@ -35,15 +40,12 @@ LANGUAGE_NAME_STRING_NAME = '$LANGUAGE_NAME'
 PRINTABLE_LANGUAGE_NAME_STRING_NAME = '$PRINTABLE_LANGUAGE_NAME'\r
 \r
 def DecToHexStr(Dec):\r
-    HexHeader = '0x'\r
-    if Dec < 16:\r
-        return HexHeader + '000' + hex(Dec)[2:].upper()\r
-    elif Dec < 256:\r
-        return HexHeader + '00' + hex(Dec)[2:].upper()\r
-    elif Dec < 4096:\r
-        return HexHeader + '0' + hex(Dec)[2:].upper()\r
-    else:\r
-        return HexHeader + hex(Dec)\r
+    return '0x%04X' % int(Dec)\r
+\r
+def DecToHexList(Dec):\r
+    Hex = "%04X" % int(Dec)\r
+    List = [HexHeader + Hex[2:4], HexHeader + Hex[0:2]]\r
+    return List\r
 \r
 def CreateHFileHeader(BaseName):\r
     Str = ''\r
@@ -62,9 +64,9 @@ def CreateHFileContent(UniObjectClass):
             StringItem = UniObjectClass.StringList[Name]\r
             Line = ''\r
             if StringItem.Referenced == True:\r
-                Line = DEFINE_STR + Name + ' ' * (ValueStartPtr - len(DEFINE_STR + Name)) + DecToHexStr(StringItem.Token)\r
+                Line = DEFINE_STR + ' ' + Name + ' ' * (ValueStartPtr - len(DEFINE_STR + Name)) + DecToHexStr(StringItem.Token)\r
             else:\r
-                Line = COMMENT_DEFINE_STR + Name + ' ' * (ValueStartPtr - len(DEFINE_STR + Name)) + DecToHexStr(StringItem.Token) + COMMENT_NOT_REFERENCED\r
+                Line = COMMENT_DEFINE_STR + ' ' + Name + ' ' * (ValueStartPtr - len(DEFINE_STR + Name)) + DecToHexStr(StringItem.Token) + COMMENT_NOT_REFERENCED\r
             Str = WriteLine(Str, Line)\r
     return Str\r
 \r
@@ -87,6 +89,7 @@ def CreateArrayItem(Value):
     Line = '  '\r
     ArrayItem = ''\r
     \r
+    Value = Value + UniToHexList(u'\x00')\r
     for Item in Value:\r
         if Index < MaxLength:\r
             Line = Line + Item + ', '\r
@@ -106,31 +109,55 @@ def CreateCFileLanguageHeader(Name, PrintableName, Offset):
     Str = WriteLine(Str, CreateArrayItem(PrintableName + UniToHexList(u'\x00')))\r
     \r
     return Str\r
+\r
+def CreateCFileStringDef(Name, Offset, Token):\r
+    Str = Write('  ', CreateArrayItem(DecToHexList(Offset)) + COMMENT + ' offset to string ' + Name + ' (' + DecToHexStr(Token) + ')')\r
+\r
+    return Str\r
     \r
 def CreateCFileStringValue(Name, Language, Value, Offset):\r
-    Str = WriteLine('  ', COMMENT + STRING + ' ' + UniToStr(Name) + ' ' + OFFSET + ' ' + Offset)\r
+    Str = WriteLine('  ', COMMENT + STRING + ' ' + Name + ' ' + OFFSET + ' ' + str(Offset))\r
     Str = WriteLine(Str, CreateArrayItem(Value))\r
     \r
     return Str\r
 \r
 def CreateCFileContent(BaseName, UniObjectClass):\r
     Str = ''\r
-    Str = WriteLine(Str, CHAR_ARRAY_DEFIN + BaseName + COMMON_FILE_NAME + '[] = {')\r
+    StrStringDef = ''\r
+    StrStringValue = ''\r
+    Offset = 428\r
+    Str = WriteLine(Str, CHAR_ARRAY_DEFIN + BaseName + COMMON_FILE_NAME + '[] = {\n' )\r
     for Language in UniObjectClass.LanguageDef:        \r
+        Str = WriteLine(Str, '//******************************************************************************')\r
+        Str = WriteLine(Str, COMMENT + 'Start of string definitions for ' + Language + '/' + '')\r
         Str = Write(Str, CreateCFileLanguageHeader(Language, UniObjectClass.LanguageDef[Language], '0x00001'))\r
         for Index in range(2, len(UniObjectClass.StringList)):\r
             Name = UniObjectClass.FindStringObjectNameByToken(Index)\r
             if Name != None:\r
+                UniString = UniObjectClass.StringList[Name]\r
                 #print Language\r
                 #print Name\r
                 #print UniObjectClass.StringList[Name].StringValue\r
-                if Language in UniObjectClass.StringList[Name].StringValue.keys():\r
-                    Str = Write(Str, CreateCFileStringValue(Name, Language, UniObjectClass.StringList[Name].StringValue[Language], '0x000000'))\r
+                if UniString.Referenced:\r
+                    if Language in UniString.StringValue.keys():\r
+                        StrStringDef = WriteLine(StrStringDef, CreateCFileStringDef(Name, Offset, UniString.Token))\r
+                        StrStringValue = Write(StrStringValue, CreateCFileStringValue(Name, Language, UniString.StringValue[Language], Offset))\r
+                        Offset = Offset + len(UniString.StringValue[Language])\r
+    Str = WriteLine(Str, StrStringDef)\r
+    Str = WriteLine(Str, StrStringValue)\r
+    return Str\r
+\r
+def CreateCFileEnd():\r
+    Str = WriteLine('  ', '// strings terminator pack')\r
+    Str = WriteLine(Str, '  ' + '0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ')\r
+    Str = WriteLine(Str, '  ' + '0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ')\r
+    Str = Write(Str, '  ' + '};')\r
     return Str\r
 \r
 def CreateCFile(BaseName, UniObjectClass):\r
     CFile = WriteLine('', CreateCFileHeader())\r
     CFile = WriteLine(CFile, CreateCFileContent(BaseName, UniObjectClass))\r
+    CFile = WriteLine(CFile, CreateCFileEnd())\r
     return CFile\r
 \r
 def GetFileList(IncludeList, SkipList):\r
@@ -219,5 +246,9 @@ if __name__ == '__main__':
     SkipList = ['.inf', '.uni']\r
     BaseName = 'DriverSample'\r
     (s, e, h, c) = GetStringFiles(UniFileList, IncludeList, SkipList, BaseName)\r
-    print h\r
-    print c\r
+    hfile = open('C:\string.h', 'w')\r
+    cfile = open('C:\string.c', 'w')\r
+    hfile.write(h)\r
+    cfile.write(c)\r
+    #print h\r
+    #print c\r
index ef67d6f..dd7bcaa 100644 (file)
@@ -27,24 +27,8 @@ def UniToStr(Uni):
 \r
 def UniToHexList(Uni):\r
     List = []\r
-    HexNullStr = '0x00'\r
     for Item in Uni:\r
-        DecNum = ord(Item)\r
-        if DecNum < 16:\r
-            HexStr = '0x0' + hex(DecNum)[2:].upper()\r
-            List.append(HexStr)\r
-            List.append(HexNullStr)\r
-        elif DecNum < 256:\r
-            HexStr = hex(DecNum).upper().replace('X' ,'x')\r
-            List.append(HexStr)\r
-            List.append(HexNullStr)\r
-        elif DecNum < 4096:\r
-            HexStr = hex(ord(Item))[2:].upper()\r
-            List.append('0x'.join(HexStr[1:]))\r
-            List.append('0x0'.join(HexStr[0:1]))\r
-        else:\r
-            HexStr = hex(DecNum).upper().replace('X' ,'x')\r
-            List.append(HexStr)\r
+        List.append('0x%02X' % ord(Item))\r
     return List\r
 \r
 class StringDefinitionClassObject(object):\r
@@ -93,6 +77,12 @@ class UniFileClassObject(object):
         LangName = Line[Line.find(u'#langdef ') + len(u'#langdef ') : Line.find(u' ', len(u'#langdef '))]\r
         LangPrintName = Line[Line.find(u'\"') + len(u'\"') : Line.rfind(u'\"')]\r
         self.LanguageDef[LangName] = UniToHexList(LangPrintName)\r
+        \r
+        #\r
+        # Add default string\r
+        #\r
+        self.AddStringToList(u'$LANGUAGE_NAME', LangName, LangName, 0)\r
+        self.AddStringToList(u'$PRINTABLE_LANGUAGE_NAME', LangPrintName, LangPrintName, 1)  \r
 \r
         return True\r
         \r
@@ -204,14 +194,7 @@ class UniFileClassObject(object):
                                 StringItem = StringItem + Lines[IndexJ]\r
                             elif Lines[IndexJ].find(u'\"') >= 2:\r
                                 StringItem = StringItem[ : StringItem.rfind(u'\"')] + Lines[IndexJ][Lines[IndexJ].find(u'\"') + len(u'\"') : ]\r
-                        self.GetStringObject(StringItem)\r
-                \r
-                #\r
-                # Add default string\r
-                #\r
-                for Language in self.LanguageDef.keys():\r
-                    self.AddStringToList(u'$LANGUAGE_NAME', Language, Language, 0)\r
-                    self.AddStringToList(u'$PRINTABLE_LANGUAGE_NAME', Language, self.LanguageDef[Language], 1)                \r
+                        self.GetStringObject(StringItem)              \r
 \r
     def LoadUniFiles(self, FileList = []):\r
         if len(FileList) > 0:\r