Changeset 0516fd7 in mainline for tools/xstruct.py
- Timestamp:
- 2008-08-09T23:46:00Z (16 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 8f2a852
- Parents:
- 838e14e2
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
tools/xstruct.py
r838e14e2 r0516fd7 27 27 # 28 28 """ 29 Convert descriptive structure definitions to struct formats29 Convert descriptive structure definitions to structure object 30 30 """ 31 31 32 32 import struct 33 33 34 def convert(definition): 35 "Convert structure defition to struct format" 34 class Struct: 35 def size(self): 36 return struct.calcsize(self._format_) 37 38 def pack(self): 39 list = [] 40 for variable in self._list_: 41 list.append(self.__dict__[variable]) 42 43 return struct.pack(self._format_, *list) 44 45 def create(definition): 46 "Create structure object" 36 47 37 48 tokens = definition.split(None) 38 49 39 50 # Initial byte order tag 40 struct = {51 format = { 41 52 "little:": lambda: "<", 42 53 "big:": lambda: ">", 43 54 "network:": lambda: "!" 44 55 }[tokens[0]]() 56 inst = Struct() 57 list = [] 45 58 46 59 # Member tags 47 48 60 comment = False 61 variable = False 49 62 for token in tokens[1:]: 50 63 if (comment): … … 53 66 continue 54 67 68 if (variable): 69 inst.__dict__[token] = None 70 list.append(token) 71 variable = False 72 continue 73 55 74 if (token == "/*"): 56 75 comment = True 76 elif (token[0:8] == "padding["): 77 size = token[8:].split("]")[0] 78 format += "%dx" % int(size) 57 79 elif (token[0:5] == "char["): 58 80 size = token[5:].split("]")[0] 59 struct += ("%d" % int(size)) + "s" 81 format += "%ds" % int(size) 82 variable = True 60 83 else: 61 struct += {84 format += { 62 85 "uint8_t": lambda: "B", 63 86 "uint16_t": lambda: "H", … … 70 93 "int64_t": lambda: "q" 71 94 }[token]() 95 variable = True 72 96 73 return struct 74 75 def little_string(string): 76 return struct.pack("<" + ("%d" % len(string)) + "s", string) 77 78 def little_padding(length): 79 return struct.pack("<" + ("%d" % length) + "x") 97 inst.__dict__['_format_'] = format 98 inst.__dict__['_list_'] = list 99 return inst
Note:
See TracChangeset
for help on using the changeset viewer.