78ea4f3564
Blender FLT I/O scripts have been updated to have more features.In addition several utility scripts/applets have been added to aid in working with FLT databases within Blender. Documentation can be found here: http://wiki.blender.org/index.php/Scripts/Manual/Import/openflight_flt http://wiki.blender.org/index.php/Scripts/Manual/Export/openflight_flt http://wiki.blender.org/index.php/Scripts/Manual/FLTools
620 lines
13 KiB
Python
620 lines
13 KiB
Python
#!BPY
|
|
# flt_properties.py. For setting default OpenFLight ID property types
|
|
# Copyright (C) 2007 Blender Foundation
|
|
#
|
|
# This program is free software; you can redistribute it and/or
|
|
# modify it under the terms of the GNU General Public License
|
|
# as published by the Free Software Foundation; either version 2
|
|
# of the License, or (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program; if not, write to the Free Software
|
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
|
|
__bpydoc__ ="""\
|
|
Utility functions and data defintions used by OpenFlight I/O and tool scripts. OpenFlight is a
|
|
registered trademark of MultiGen-Paradigm, Inc.
|
|
"""
|
|
|
|
|
|
import struct
|
|
|
|
bitsLSB = [2147483648]
|
|
for i in xrange(31):
|
|
bitsLSB.append(bitsLSB[-1]/2)
|
|
bitsRSB = bitsLSB[:]
|
|
bitsRSB.reverse()
|
|
|
|
def pack_color(col):
|
|
return struct.pack('>B',col[3]) + struct.pack('>B',col[2]) + struct.pack('>B',col[1]) + struct.pack('>B',col[0])
|
|
|
|
def unpack_color(col):
|
|
string = struct.pack('>I', col)
|
|
r = struct.unpack('>B',string[3:4])
|
|
g = struct.unpack('>B',string[2:3])
|
|
b = struct.unpack('>B',string[1:2])
|
|
a = struct.unpack('>B',string[0:1])
|
|
return [r,g,b,a]
|
|
|
|
def reverse_bits(len,num):
|
|
bitbucket = list()
|
|
rval = 0
|
|
|
|
for i in xrange(len):
|
|
if num & bitsRSB[i]:
|
|
bitbucket.append(1)
|
|
else:
|
|
bitbucket.append(0)
|
|
|
|
bitbucket.reverse()
|
|
|
|
for i, bit in enumerate(bitbucket):
|
|
if bit:
|
|
rval |= bitsLSB[i]
|
|
|
|
return rval
|
|
|
|
|
|
opcode_name = { 0: 'db',
|
|
1: 'head',
|
|
2: 'grp',
|
|
4: 'obj',
|
|
5: 'face',
|
|
10: 'push',
|
|
11: 'pop',
|
|
14: 'dof',
|
|
19: 'push sub',
|
|
20: 'pop sub',
|
|
21: 'push ext',
|
|
22: 'pop ext',
|
|
23: 'cont',
|
|
31: 'comment',
|
|
32: 'color pal',
|
|
33: 'long id',
|
|
49: 'matrix',
|
|
50: 'vector',
|
|
52: 'multi-tex',
|
|
53: 'uv lst',
|
|
55: 'bsp',
|
|
60: 'rep',
|
|
61: 'inst ref',
|
|
62: 'inst def',
|
|
63: 'ext ref',
|
|
64: 'tex pal',
|
|
67: 'vert pal',
|
|
68: 'vert w col',
|
|
69: 'vert w col & norm',
|
|
70: 'vert w col, norm & uv',
|
|
71: 'vert w col & uv',
|
|
72: 'vert lst',
|
|
73: 'lod',
|
|
74: 'bndin box',
|
|
76: 'rot edge',
|
|
78: 'trans',
|
|
79: 'scl',
|
|
80: 'rot pnt',
|
|
81: 'rot and/or scale pnt',
|
|
82: 'put',
|
|
83: 'eyepoint & trackplane pal',
|
|
84: 'mesh',
|
|
85: 'local vert pool',
|
|
86: 'mesh prim',
|
|
87: 'road seg',
|
|
88: 'road zone',
|
|
89: 'morph vert lst',
|
|
90: 'link pal',
|
|
91: 'snd',
|
|
92: 'rd path',
|
|
93: 'snd pal',
|
|
94: 'gen matrix',
|
|
95: 'txt',
|
|
96: 'sw',
|
|
97: 'line styl pal',
|
|
98: 'clip reg',
|
|
100: 'ext',
|
|
101: 'light src',
|
|
102: 'light src pal',
|
|
103: 'reserved',
|
|
104: 'reserved',
|
|
105: 'bndin sph',
|
|
106: 'bndin cyl',
|
|
107: 'bndin hull',
|
|
108: 'bndin vol cntr',
|
|
109: 'bndin vol orient',
|
|
110: 'rsrvd',
|
|
111: 'light pnt',
|
|
112: 'tex map pal',
|
|
113: 'mat pal',
|
|
114: 'name tab',
|
|
115: 'cat',
|
|
116: 'cat dat',
|
|
117: 'rsrvd',
|
|
118: 'rsrvd',
|
|
119: 'bounding hist',
|
|
120: 'rsrvd',
|
|
121: 'rsrvd',
|
|
122: 'push attrib',
|
|
123: 'pop attrib',
|
|
124: 'rsrvd',
|
|
125: 'rsrvd',
|
|
126: 'curv',
|
|
127: 'road const',
|
|
128: 'light pnt appear pal',
|
|
129: 'light pnt anim pal',
|
|
130: 'indexed lp',
|
|
131: 'lp sys',
|
|
132: 'indx str',
|
|
133: 'shdr pal'}
|
|
|
|
|
|
typecodes = ['c','C','s','S','i','I','f','d','t']
|
|
|
|
FLT_GRP = 2
|
|
FLT_OBJ = 4
|
|
FLT_LOD = 73
|
|
FLT_XRF = 63
|
|
FLT_DOF = 14
|
|
FLT_ILP = 111
|
|
FLT_DB = 1
|
|
FLT_FCE = 5
|
|
|
|
#not actual opcodes
|
|
FLT_NUL = 0
|
|
FLT_EXP = -1
|
|
|
|
#valid childtypes for each FLT node type
|
|
FLT_CHILDTYPES = {
|
|
FLT_GRP : [111,2,73,4,14,63],
|
|
FLT_OBJ : [111],
|
|
FLT_LOD : [111,2,73,4,14,63],
|
|
FLT_XRF : [],
|
|
FLT_DOF : [111,2,73,4,14,63],
|
|
FLT_ILP : []
|
|
}
|
|
|
|
#List of nodes that can have faces as children
|
|
FLT_FACETYPES = [
|
|
FLT_GRP,
|
|
FLT_OBJ,
|
|
FLT_LOD,
|
|
FLT_DOF
|
|
]
|
|
|
|
def write_prop(fw,type,value,length):
|
|
if type == 'c':
|
|
fw.write_char(value)
|
|
elif type == 'C':
|
|
fw.write_uchar(value)
|
|
elif type == 's':
|
|
fw.write_short(value)
|
|
elif type == 'S':
|
|
fw.write_ushort(value)
|
|
elif type == 'i':
|
|
fw.write_int(value)
|
|
elif type == 'I':
|
|
fw.write_uint(value)
|
|
elif type == 'd':
|
|
fw.write_double(value)
|
|
elif type == 'f':
|
|
fw.write_float(value)
|
|
elif type == 't':
|
|
fw.write_string(value,length)
|
|
|
|
def read_prop(fw,type,length):
|
|
rval = None
|
|
if type == 'c':
|
|
rval = fw.read_char()
|
|
elif type == 'C':
|
|
rval = fw.read_uchar()
|
|
elif type == 's':
|
|
rval = fw.read_short()
|
|
elif type == 'S':
|
|
rval = fw.read_ushort()
|
|
elif type == 'i':
|
|
rval = fw.read_int()
|
|
elif type == 'I':
|
|
rval = fw.read_uint()
|
|
elif type == 'd':
|
|
rval = fw.read_double()
|
|
elif type == 'f':
|
|
rval = fw.read_float()
|
|
elif type == 't':
|
|
rval = fw.read_string(length)
|
|
return rval
|
|
|
|
FLTGroup = {
|
|
'3t8!id' : 'G',
|
|
'4s!priority' : 0,
|
|
'5s!reserved1' : 0,
|
|
'6i!flags' : 0,
|
|
'7s!special1' : 0,
|
|
'8s!special2' : 0,
|
|
'9s!significance' : 0,
|
|
'10c!layer code' : 0,
|
|
'11c!reserved2' : 0,
|
|
'12i!reserved3' : 0,
|
|
'13i!loop count' : 0,
|
|
'14f!loop duration' : 0,
|
|
'15f!last frame duration' : 0
|
|
}
|
|
FLTGroupDisplay = [5,11,12]
|
|
|
|
FLTObject = {
|
|
'3t8!id' : 'O',
|
|
'4I!flags' : 0,
|
|
'5s!priority' : 0,
|
|
'6S!transp' : 0,
|
|
'7s!SFX1' : 0,
|
|
'8s!SFX2' : 0,
|
|
'9s!significance' : 0,
|
|
'10s!reserved' : 0
|
|
}
|
|
FLTObjectDisplay = [10]
|
|
|
|
FLTLOD = {
|
|
'3t8!id' : 'L',
|
|
'4i!reserved' : 0,
|
|
'5d!switch in' : 0,
|
|
'6d!switch out' : 0,
|
|
'7s!sfx ID1' : 0,
|
|
'8s!sfx ID2' : 0,
|
|
'9I!flags' : 0,
|
|
'10d!X co' : 0,
|
|
'11d!Y co' : 0,
|
|
'12d!Z co' : 0,
|
|
'13d!Transition' : 0,
|
|
'14d!Sig Size' : 0
|
|
}
|
|
FLTLODDisplay = [4]
|
|
|
|
FLTInlineLP = {
|
|
'3t8!id' : 'Lp',
|
|
'4s!smc' : 0,
|
|
'5s!fid' : 0,
|
|
'6C!back color: a' : 255,
|
|
'7C!back color: b' : 255,
|
|
'8C!back color: g' : 255,
|
|
'9C!back color: r' : 255,
|
|
'10i!display mode' : 255,
|
|
'11f!intensity' : 1.0,
|
|
'12f!back intensity' : 0.0,
|
|
'13f!minimum defocus' : 0.0,
|
|
'14f!maximum defocus' : 1.0,
|
|
'15i!fading mode' : 0,
|
|
'16i!fog punch mode' : 0,
|
|
'17i!directional mode' : 1,
|
|
'18i!range mode' : 0,
|
|
'19f!min pixel size' : 1.0,
|
|
'20f!max pixel size' : 1024,
|
|
'21f!actual size' : 0.25,
|
|
'22f!trans falloff pixel size' : 0.25,
|
|
'23f!trans falloff exponent' : 1.0,
|
|
'24f!trans falloff scalar' : 1.0,
|
|
'25f!trans falloff clamp' : 1.0,
|
|
'26f!fog scalar' : 0.25,
|
|
'27f!fog intensity' : 1.0,
|
|
'28f!size threshold' : 0.1,
|
|
'29i!directionality' : 0,
|
|
'30f!horizontal lobe angle' : 180.0,
|
|
'31f!vertical lobe angle' : 180.0,
|
|
'32f!lobe roll angle' : 0.0,
|
|
'33f!dir falloff exponent' : 1.0,
|
|
'34f!dir ambient intensity' : 0.1,
|
|
'35f!anim period' : 0,
|
|
'36f!anim phase' : 0,
|
|
'37f!anim enabled' : 0,
|
|
'38f!significance' : 0.0,
|
|
'39i!draw order' : 0,
|
|
'40I!flags' : 813875616,
|
|
'41f!roti' : 0,
|
|
'42f!rotj' : 0,
|
|
'43f!rotk' : 0
|
|
}
|
|
|
|
FLTInlineLPDisplay = [35,36,37,41,42,43]
|
|
|
|
FLTXRef = {
|
|
'3t200!filename' : '', #we dont actually use this value on export
|
|
'4i!reserved' : 0,
|
|
'5I!flag' : -478150656,
|
|
'6s!bbox' : 0,
|
|
'7s!reserved' : 0
|
|
}
|
|
|
|
FLTXRefDisplay = [4,7,3]
|
|
|
|
FLTDOF = {
|
|
'3t8!id' : 'D',
|
|
'4i!reserved' : 0,
|
|
'5d!ORIGX' : 0.0,
|
|
'6d!ORIGY' : 0.0,
|
|
'7d!ORIGZ' : 0.0,
|
|
'8d!XAXIS-X' : 10.0,
|
|
'9d!XAXIS-Y' : 0.0,
|
|
'10d!XAXIS-Z' : 0.0,
|
|
'11d!XYPLANE-X' : 0.0,
|
|
'12d!XYPLANE-Y' : 10.0,
|
|
'13d!XZPLANE-Z' : 0.0,
|
|
'14d!ZMIN' : 0.0,
|
|
'15d!ZMAX' : 0.0,
|
|
'16d!ZCUR' : 0.0,
|
|
'17d!ZSTEP' : 0.0,
|
|
'18d!YMIN' : 0.0,
|
|
'19d!YMAX' : 0.0,
|
|
'20d!YCUR' : 0.0,
|
|
'21d!YSTEP' : 0.0,
|
|
'22d!XMIN' : 0.0,
|
|
'23d!XMAX' : 0.0,
|
|
'24d!XCUR' : 0.0,
|
|
'25d!XSTEP' : 0.0,
|
|
'26d!PITCH-MIN' : 0.0,
|
|
'27d!PITCH-MAX' : 0.0,
|
|
'28d!PITCH-CUR' : 0.0,
|
|
'29d!PITCH-STEP' : 0.0,
|
|
'30d!ROLL-MIN' : 0.0,
|
|
'31d!ROLL-MAX' : 0.0,
|
|
'32d!ROLL-CUR' : 0.0,
|
|
'33d!ROLL-STEP' : 0.0,
|
|
'34d!YAW-MIN' : 0.0,
|
|
'35d!YAW-MAX' : 0.0,
|
|
'36d!YAW-CUR' : 0.0,
|
|
'37d!YAW-STEP' : 0.0,
|
|
'38d!ZSIZE-MIN' : 0.0,
|
|
'39d!ZSIZE-MAX' : 0.0,
|
|
'40d!ZSIZE-CUR' : 1.0,
|
|
'41d!ZSIZE-STEP' : 0.0,
|
|
'42d!YSIZE-MIN' : 0.0,
|
|
'43d!YSIZE-MAX' : 0.0,
|
|
'44d!YSIZE-CUR' : 1.0,
|
|
'45d!YSIZE-STEP' : 0.0,
|
|
'46d!XSIZE-MIN' : 0.0,
|
|
'47d!XSIZE-MAX' : 0.0,
|
|
'48d!XSIZE-CUR' : 1.0,
|
|
'49d!XSIZE-STEP' : 0.0,
|
|
'50I!FLAG' : 1897582,
|
|
'51i!reserved2' : 0
|
|
}
|
|
|
|
FLTDOFDisplay = [4]
|
|
|
|
FLTImage = {
|
|
'3i!RealU Direction' : 0,
|
|
'4i!RealV Direction' : 0,
|
|
'5i!UpX' : 0,
|
|
'6i!UpY' : 0,
|
|
'7i!File Format' : 0,
|
|
'8i!Min Filter' : 1,
|
|
'9i!Mag Filter' : 1,
|
|
'10i!Wrap' : 0,
|
|
'11i!WrapU' : 0,
|
|
'12i!WrapV' : 0,
|
|
'13i!Modified' : 0,
|
|
'14i!PivotX' : 0,
|
|
'15i!PivotY' : 0,
|
|
'16i!Enviorment' : 0,
|
|
'17i!WhiteAlpha' : 0,
|
|
'18i!reserved1' : 0,
|
|
'19i!reserved2' : 0,
|
|
'20i!reserved3' : 0,
|
|
'21i!reserved4' : 0,
|
|
'22i!reserved5' : 0,
|
|
'23i!reserved6' : 0,
|
|
'24i!reserved7' : 0,
|
|
'25i!reserved8' : 0,
|
|
'26i!reserved9' : 0,
|
|
'27d!RealU Direction' : 0,
|
|
'28d!RealV Direction' : 0,
|
|
'29i!Origin' : 0,
|
|
'30i!Kernel no.' : 0,
|
|
'31i!Internal Format' : 0,
|
|
'32i!External Format' : 0,
|
|
'33i!MipMap Filter?' : 0,
|
|
'34f!MMF1' : 0.0,
|
|
'35f!MMF2' : 0.0,
|
|
'36f!MMF3' : 0.0,
|
|
'37f!MMF4' : 0.0,
|
|
'38f!MMF5' : 0.0,
|
|
'39f!MMF6' : 0.0,
|
|
'40f!MMF7' : 0.0,
|
|
'41f!MMF8' : 0.0,
|
|
'42i!Tex CPs?' : 0,
|
|
'43f!LOD0 CP' : 0.0,
|
|
'44f!Scale0 CP' : 0.0,
|
|
'45f!LOD1 CP' : 0.0,
|
|
'46f!Scale1 CP' : 0.0,
|
|
'47f!LOD2 CP' : 0.0,
|
|
'48f!Scale2 CP' : 0.0,
|
|
'49f!LOD3 CP' : 0.0,
|
|
'50f!Scale3 CP' : 0.0,
|
|
'51f!LOD4 CP' : 0.0,
|
|
'52f!Scale4 CP' : 0.0,
|
|
'53f!LOD5 CP' : 0.0,
|
|
'54f!Scale5 CP' : 0.0,
|
|
'55f!LOD6 CP' : 0.0,
|
|
'56f!Scale6 CP' : 0.0,
|
|
'57f!LOD7 CP' : 0.0,
|
|
'58f!Scale7 CP' : 0.0,
|
|
'59f!Control Clamp' : 0.0,
|
|
'60i!Mag Alpha Filter' : 0,
|
|
'61i!Mag Color Filter' : 0,
|
|
'62f!reserved10' : 0,
|
|
'63f!reserved11' : 0,
|
|
'64f!reserved12' : 0,
|
|
'65f!reserved13' : 0,
|
|
'66f!reserved14' : 0,
|
|
'67f!reserved15' : 0,
|
|
'68f!reserved16' : 0,
|
|
'69f!reserved17' : 0,
|
|
'70f!reserved18' : 0,
|
|
'71d!Lambert Central' : 0.0,
|
|
'72d!Lambert Upper' : 0.0,
|
|
'73d!Lambert Lower' : 0.0,
|
|
'74d!reserved19' : 0,
|
|
'75f!reserved20' : 0,
|
|
'76f!reserved21' : 0,
|
|
'77f!reserved22' : 0,
|
|
'78f!reserved23' : 0,
|
|
'79f!reserved24' : 0,
|
|
'80i!Tex Detail?' : 0,
|
|
'81i!Tex J' : 0,
|
|
'82i!Tex K' : 0,
|
|
'83i!Tex M' : 0,
|
|
'84i!Tex N' : 0,
|
|
'85i!Tex Scramble' : 0,
|
|
'86i!Tex Tile?' : 0,
|
|
'87f!Tex Tile LLU' : 0.0,
|
|
'88f!Tex Tile LLV' : 0.0,
|
|
'89f!Tex Tile URU' : 0.0,
|
|
'90f!Tex Tile URV' : 0.0,
|
|
'91i!Projection' : 0,
|
|
'92i!Earth Model' : 0,
|
|
'93i!reserved25' : 0,
|
|
'94i!UTM Zone' : 0,
|
|
'95i!Image Origin' : 0,
|
|
'96i!GPU' : 0,
|
|
'97i!reserved26' : 0,
|
|
'98i!reserved27' : 0,
|
|
'99i!GPU Hemi' : 0,
|
|
'100i!reserved41' : 0,
|
|
'101i!reserved42' : 0,
|
|
'102i!reserved43' : 0,
|
|
'103i!Cubemap' : 0,
|
|
'104t588!reserved44' : '',
|
|
'105t512!Comments' : '',
|
|
'106i!reserved28' : 0,
|
|
'107i!reserved29' : 0,
|
|
'108i!reserved30' : 0,
|
|
'109i!reserved31' : 0,
|
|
'110i!reserved32' : 0,
|
|
'111i!reserved33' : 0,
|
|
'112i!reserved34' : 0,
|
|
'113i!reserved35' : 0,
|
|
'114i!reserved36' : 0,
|
|
'115i!reserved37' : 0,
|
|
'116i!reserved38' : 0,
|
|
'117i!reserved39' : 0,
|
|
'118i!reserved40' : 0,
|
|
'119i!reserved45' : 0,
|
|
'120i!Format Version' : 0,
|
|
'121i!GPU num' : 0,
|
|
}
|
|
|
|
FLTImageDisplay = [18,19,29,21,22,23,24,25,26,62,63,64,65,66,67,68,69,70,74,75,76,77,78,79,93,97,98,102,114]
|
|
|
|
FLTHeader = {
|
|
'3t8!id' : 'db',
|
|
'4i!version' : 1620,
|
|
'5i!editversion' : 0,
|
|
'6t32!date' : 0,
|
|
'7s!NGID' : 0,
|
|
'8s!NLID' : 0,
|
|
'9s!NOID' : 0,
|
|
'10s!NFID' : 0,
|
|
'11s!UMULT' : 1,
|
|
'12c!units' : 0,
|
|
'13c!set white' : 0,
|
|
'14I!flags' : 0x80000000,
|
|
'15i!reserved1' : 0,
|
|
'16i!reserved2' : 0,
|
|
'17i!reserved3' : 0,
|
|
'18i!reserved4' : 0,
|
|
'19i!reserved5' : 0,
|
|
'20i!reserved6' : 0,
|
|
'21i!projection type' : 0,
|
|
'22i!reserved7' : 0,
|
|
'23i!reserved8' : 0,
|
|
'24i!reserved9' : 0,
|
|
'25i!reserved10' : 0,
|
|
'26i!reserved11' : 0,
|
|
'27i!reserved12' : 0,
|
|
'28i!reserved13' : 0,
|
|
'29s!NDID' : 0,
|
|
'30s!vstore' : 1,
|
|
'31i!origin' : 0,
|
|
'32d!sw x' : 0,
|
|
'33d!sw y' : 0,
|
|
'34d!dx' : 0,
|
|
'35d!dy' : 0,
|
|
'36s!NSID' : 0,
|
|
'37s!NPID' : 0,
|
|
'38i!reserved14' : 0,
|
|
'39i!reserved15' : 0,
|
|
'40s!NCID' : 0,
|
|
'41s!NTID' : 0,
|
|
'42s!NBID' : 0,
|
|
'43s!NWID' : 0,
|
|
'44i!reserved14' : 0,
|
|
'45d!sw lat' : 0,
|
|
'46d!sw lon' : 0,
|
|
'47d!ne lat' : 0,
|
|
'48d!ne lon' : 0,
|
|
'49d!origin lat' : 0,
|
|
'50d!origin lon' : 0,
|
|
'51d!lambert lat1' : 0,
|
|
'52d!lambert lat2' : 0,
|
|
'53s!NLSID' : 0,
|
|
'54s!NLPID' : 0,
|
|
'55s!NRID' : 0,
|
|
'56s!NCATID' : 0,
|
|
'57s!reserved15' : 0,
|
|
'58s!reserved16' : 0,
|
|
'59s!reserved17' : 0,
|
|
'60s!reserved18' : 0,
|
|
'61i!ellipsoid model' : 1,
|
|
'62s!NAID' : 0,
|
|
'63s!NCVID' : 0,
|
|
'64s!utm zone' : 0,
|
|
'65t6!reserved19' : 0,
|
|
'66d!dz' : 0,
|
|
'67d!radius' : 0,
|
|
'68S!NMID' : 0,
|
|
'69S!NLPSID' : 0,
|
|
'70i!reserved20' : 0,
|
|
'71d!major axis' : 0,
|
|
'72d!minor axis' : 0,
|
|
}
|
|
|
|
FLT_Records = {
|
|
2 : FLTGroup,
|
|
4 : FLTObject,
|
|
73 : FLTLOD,
|
|
63 : FLTXRef,
|
|
14 : FLTDOF,
|
|
1 : FLTHeader,
|
|
111 : FLTInlineLP,
|
|
'Image' : FLTImage
|
|
}
|
|
|
|
def process_recordDefs():
|
|
records = dict()
|
|
for record in FLT_Records:
|
|
props = dict()
|
|
for prop in FLT_Records[record]:
|
|
position = ''
|
|
slice = 0
|
|
(format,name) = prop.split('!')
|
|
for i in format:
|
|
if i not in typecodes:
|
|
position = position + i
|
|
slice = slice + 1
|
|
else:
|
|
break
|
|
type = format[slice:]
|
|
length = type[1:]
|
|
if len(length) == 0:
|
|
length = 1
|
|
else:
|
|
type = type[0]
|
|
length = int(length)
|
|
|
|
props[int(position)] = (type,length,prop)
|
|
records[record] = props
|
|
return records
|
|
|
|
|