+ if Offset is None:\r
+ OffsetStr = '????'\r
+ else:\r
+ OffsetStr = '0x%04X' % Offset\r
+\r
+ return "/** Offset %s\n%s%s**/\n %s%s%s;\n" % (OffsetStr, NameLine, HelpLine, Type, ' ' * Space1, Name,)\r
+\r
+ def PostProcessBody (self, TextBody):\r
+ NewTextBody = []\r
+ OldTextBody = []\r
+ IncludeLine = False\r
+ StructName = ''\r
+ VariableName = ''\r
+ for Line in TextBody:\r
+ Match = re.match("^/\*\sEMBED_STRUCT:(\w+):(\w+):(START|END)\s\*/\s([\s\S]*)", Line)\r
+ if Match:\r
+ Line = Match.group(4)\r
+\r
+ if Match and Match.group(3) == 'START':\r
+ NewTextBody.append ('typedef struct {\n')\r
+ StructName = Match.group(1)\r
+ VariableName = Match.group(2)\r
+ MatchOffset = re.search('/\*\*\sOffset\s0x([a-fA-F0-9]+)', Line)\r
+ if MatchOffset:\r
+ Offset = int(MatchOffset.group(1), 16)\r
+ else:\r
+ Offset = None\r
+ Line\r
+ IncludeLine = True\r
+ OldTextBody.append (self.CreateField (None, VariableName, 0, Offset, StructName, '', ''))\r
+ if IncludeLine:\r
+ NewTextBody.append (Line)\r
+ else:\r
+ OldTextBody.append (Line)\r
+\r
+ if Match and Match.group(3) == 'END': \r
+ if (StructName != Match.group(1)) or (VariableName != Match.group(2)):\r
+ print "Unmatched struct name '%s' and '%s' !" % (StructName, Match.group(1))\r
+ else:\r
+ NewTextBody.append ('} %s;\n\n' % StructName)\r
+ IncludeLine = False\r
+ NewTextBody.extend(OldTextBody)\r
+ return NewTextBody\r