72 size = max(size, len(item)) |
72 size = max(size, len(item)) |
73 typeinfos = ("UNS8", size, "domain", False) |
73 typeinfos = ("UNS8", size, "domain", False) |
74 elif values[0] == "BOOLEAN": |
74 elif values[0] == "BOOLEAN": |
75 typeinfos = ("UNS8", None, "boolean", False) |
75 typeinfos = ("UNS8", None, "boolean", False) |
76 else: |
76 else: |
77 raise ValueError, """!!! %s isn't a valid type for CanFestival."""%typename |
77 raise ValueError, _("""!!! %s isn't a valid type for CanFestival.""")%typename |
78 if typeinfos[2] not in ["visible_string", "domain"]: |
78 if typeinfos[2] not in ["visible_string", "domain"]: |
79 internal_types[typename] = typeinfos |
79 internal_types[typename] = typeinfos |
80 else: |
80 else: |
81 raise ValueError, """!!! %s isn't a valid type for CanFestival."""%typename |
81 raise ValueError, _("""!!! %s isn't a valid type for CanFestival.""")%typename |
82 return typeinfos |
82 return typeinfos |
83 |
83 |
84 def ComputeValue(type, value): |
84 def ComputeValue(type, value): |
85 if type == "visible_string": |
85 if type == "visible_string": |
86 return "\"%s\""%value, "" |
86 return "\"%s\""%value, "" |
93 |
93 |
94 def WriteFile(filepath, content): |
94 def WriteFile(filepath, content): |
95 cfile = open(filepath,"w") |
95 cfile = open(filepath,"w") |
96 cfile.write(content) |
96 cfile.write(content) |
97 cfile.close() |
97 cfile.close() |
|
98 |
|
99 def GetTypeName(Node, typenumber): |
|
100 typename = Node.GetTypeName(typenumber) |
|
101 if typename is None: |
|
102 raise ValueError, _("""!!! Datatype with value "0x%4.4X" isn't defined in CanFestival.""")%typenumber |
|
103 return typename |
98 |
104 |
99 def GenerateFileContent(Node, headerfilepath, pointers_dict = {}): |
105 def GenerateFileContent(Node, headerfilepath, pointers_dict = {}): |
100 """ |
106 """ |
101 pointers_dict = {(Idx,Sidx):"VariableName",...} |
107 pointers_dict = {(Idx,Sidx):"VariableName",...} |
102 """ |
108 """ |
184 strIndex += "\n/* index 0x%(index)04X : %(EntryName)s. */\n"%texts |
190 strIndex += "\n/* index 0x%(index)04X : %(EntryName)s. */\n"%texts |
185 |
191 |
186 # Entry type is VAR |
192 # Entry type is VAR |
187 if not isinstance(values, ListType): |
193 if not isinstance(values, ListType): |
188 subentry_infos = Node.GetSubentryInfos(index, 0) |
194 subentry_infos = Node.GetSubentryInfos(index, 0) |
189 typename = Node.GetTypeName(subentry_infos["type"]) |
195 typename = GetTypeName(Node, subentry_infos["type"]) |
190 typeinfos = GetValidTypeInfos(typename, [values]) |
196 typeinfos = GetValidTypeInfos(typename, [values]) |
191 if typename is "DOMAIN" and index in variablelist: |
197 if typename is "DOMAIN" and index in variablelist: |
192 if not typeinfos[1]: |
198 if not typeinfos[1]: |
193 raise ValueError("\nDomain variable not initialized\nindex : 0x%04X\nsubindex 0x00"%index) |
199 raise ValueError, _("\nDomain variable not initialized\nindex : 0x%04X\nsubindex : 0x00")%index |
194 texts["subIndexType"] = typeinfos[0] |
200 texts["subIndexType"] = typeinfos[0] |
195 if typeinfos[1] is not None: |
201 if typeinfos[1] is not None: |
196 texts["suffixe"] = "[%d]"%typeinfos[1] |
202 texts["suffixe"] = "[%d]"%typeinfos[1] |
197 else: |
203 else: |
198 texts["suffixe"] = "" |
204 texts["suffixe"] = "" |
204 else: |
210 else: |
205 strIndex += " %(subIndexType)s %(NodeName)s_obj%(index)04X%(suffixe)s = %(value)s;%(comment)s\n"%texts |
211 strIndex += " %(subIndexType)s %(NodeName)s_obj%(index)04X%(suffixe)s = %(value)s;%(comment)s\n"%texts |
206 values = [values] |
212 values = [values] |
207 else: |
213 else: |
208 subentry_infos = Node.GetSubentryInfos(index, 0) |
214 subentry_infos = Node.GetSubentryInfos(index, 0) |
209 typename = Node.GetTypeName(subentry_infos["type"]) |
215 typename = GetTypeName(Node, subentry_infos["type"]) |
210 typeinfos = GetValidTypeInfos(typename) |
216 typeinfos = GetValidTypeInfos(typename) |
211 if index == 0x1003: |
217 if index == 0x1003: |
212 texts["value"] = 0 |
218 texts["value"] = 0 |
213 else: |
219 else: |
214 texts["value"] = values[0] |
220 texts["value"] = values[0] |
238 if subIndex > 0: |
244 if subIndex > 0: |
239 if subIndex == len(values)-1: |
245 if subIndex == len(values)-1: |
240 sep = "" |
246 sep = "" |
241 value, comment = ComputeValue(typeinfos[2], value) |
247 value, comment = ComputeValue(typeinfos[2], value) |
242 if len(value) is 2 and typename is "DOMAIN": |
248 if len(value) is 2 and typename is "DOMAIN": |
243 raise ValueError("\nDomain variable not initialized\nindex : 0x%04X\nsubindex 0x%02X"%(index, subIndex)) |
249 raise ValueError("\nDomain variable not initialized\nindex : 0x%04X\nsubindex : 0x%02X"%(index, subIndex)) |
244 mappedVariableContent += " %s%s%s\n"%(value, sep, comment) |
250 mappedVariableContent += " %s%s%s\n"%(value, sep, comment) |
245 mappedVariableContent += " };\n" |
251 mappedVariableContent += " };\n" |
246 else: |
252 else: |
247 strIndex += " %(subIndexType)s%(type_suffixe)s %(NodeName)s_obj%(index)04X[] = \n {\n"%texts |
253 strIndex += " %(subIndexType)s%(type_suffixe)s %(NodeName)s_obj%(index)04X[] = \n {\n"%texts |
248 for subIndex, value in enumerate(values): |
254 for subIndex, value in enumerate(values): |
259 # Entry type is ARRAY |
265 # Entry type is ARRAY |
260 for subIndex, value in enumerate(values): |
266 for subIndex, value in enumerate(values): |
261 texts["subIndex"] = subIndex |
267 texts["subIndex"] = subIndex |
262 if subIndex > 0: |
268 if subIndex > 0: |
263 subentry_infos = Node.GetSubentryInfos(index, subIndex) |
269 subentry_infos = Node.GetSubentryInfos(index, subIndex) |
264 typename = Node.GetTypeName(subentry_infos["type"]) |
270 typename = GetTypeName(Node, subentry_infos["type"]) |
265 typeinfos = GetValidTypeInfos(typename, [values[subIndex]]) |
271 typeinfos = GetValidTypeInfos(typename, [values[subIndex]]) |
266 texts["subIndexType"] = typeinfos[0] |
272 texts["subIndexType"] = typeinfos[0] |
267 if typeinfos[1] is not None: |
273 if typeinfos[1] is not None: |
268 texts["suffixe"] = "[%d]"%typeinfos[1] |
274 texts["suffixe"] = "[%d]"%typeinfos[1] |
269 else: |
275 else: |
570 content, header = GenerateFileContent(node, os.path.split(headerfilepath)[1], pointers_dict) |
576 content, header = GenerateFileContent(node, os.path.split(headerfilepath)[1], pointers_dict) |
571 WriteFile(filepath, content) |
577 WriteFile(filepath, content) |
572 WriteFile(headerfilepath, header) |
578 WriteFile(headerfilepath, header) |
573 return None |
579 return None |
574 except ValueError, message: |
580 except ValueError, message: |
575 return "Unable to Generate C File\n%s"%message |
581 return _("Unable to Generate C File\n%s")%message |
576 |
582 |