objdictgen/node.py
changeset 453 c74a73474cce
parent 418 64a8c24b61a5
child 510 96d50ac2dea3
--- a/objdictgen/node.py	Tue Apr 29 13:50:56 2008 +0200
+++ b/objdictgen/node.py	Tue Apr 29 13:54:23 2008 +0200
@@ -753,10 +753,42 @@
                 return True
             elif 0 <= subIndex < len(self.UserMapping[index]["values"]) and values != None:
                 if "type" in values:
-                    if self.IsStringType(values["type"]) and not self.IsStringType(self.UserMapping[index]["values"][subIndex]["type"]):
-                        self.SetEntry(index, subIndex, "")
-                    elif not self.IsStringType(values["type"]) and self.IsStringType(self.UserMapping[index]["values"][subIndex]["type"]):
-                        self.SetEntry(index, subIndex, 0)
+                    if self.UserMapping[index]["struct"] & OD_IdenticalSubindexes:
+                        if self.IsStringType(self.UserMapping[index]["values"][subIndex]["type"]):
+                            if self.IsRealType(values["type"]):
+                                for i in xrange(len(self.Dictionary[index])):
+                                    self.SetEntry(index, i + 1, 0.)
+                            elif not self.IsStringType(values["type"]):
+                                for i in xrange(len(self.Dictionary[index])):
+                                    self.SetEntry(index, i + 1, 0)
+                        elif self.IsRealType(self.UserMapping[index]["values"][subIndex]["type"]):
+                            if self.IsStringType(values["type"]):
+                                for i in xrange(len(self.Dictionary[index])):
+                                    self.SetEntry(index, i + 1, "")
+                            elif not self.IsRealType(values["type"]):
+                                for i in xrange(len(self.Dictionary[index])):
+                                    self.SetEntry(index, i + 1, 0)
+                        elif self.IsStringType(values["type"]):
+                            for i in xrange(len(self.Dictionary[index])):
+                                self.SetEntry(index, i + 1, "")
+                        elif self.IsRealType(values["type"]):
+                            for i in xrange(len(self.Dictionary[index])):
+                                self.SetEntry(index, i + 1, 0.)                        
+                    else:
+                        if self.IsStringType(self.UserMapping[index]["values"][subIndex]["type"]):
+                            if self.IsRealType(values["type"]):
+                                self.SetEntry(index, subIndex, 0.)
+                            elif not self.IsStringType(values["type"]):
+                                self.SetEntry(index, subIndex, 0)
+                        elif self.IsRealType(self.UserMapping[index]["values"][subIndex]["type"]):
+                            if self.IsStringType(values["type"]):
+                                self.SetEntry(index, subIndex, "")
+                            elif not self.IsRealType(values["type"]):
+                                self.SetEntry(index, subIndex, 0)
+                        elif self.IsStringType(values["type"]):
+                            self.SetEntry(index, subIndex, "")
+                        elif self.IsRealType(values["type"]):
+                            self.SetEntry(index, subIndex, 0.)
                 self.UserMapping[index]["values"][subIndex].update(values)
                 return True
         return False
@@ -1006,6 +1038,15 @@
                 return True
         return False
 
+    def IsRealType(self, index):
+        if index in (0x8, 0x11):
+            return True
+        elif 0xA0 <= index < 0x100:
+            result = self.GetEntry(index, 1)
+            if result is not None and result in (0x8, 0x11):
+                return True
+        return False
+
 #-------------------------------------------------------------------------------
 #                            Type and Map Variable Lists
 #-------------------------------------------------------------------------------