Создание парсера
Необходимо создать парсер на пхп под достаточно редкий формат файла.. есть немного инфы о формате..
PHP код:
DWORD mesh_count
:FOREACH( mesh_count )
ZSTR path
:ENDFOR
DWORD material_count
:FOREACH( material_count )
ZSTR path
WORD rotation
WORD alpha_enabled
WORD two_sided
WORD alpha_test_enabled
WORD alpha_ref_enabled
WORD z_write_enabled
WORD z_test_enabled
WORD blending_mode
WORD specular_enabled
FLOAT alpha
WORD glow_type
FLOAT red
FLOAT green
FLOAT blue
:ENDFOR
DWORD effect_count
:FOREACH( effect_count )
ZSTR path
:ENDFOR
DWORD object_count
:FOREACH( object_count )
DWORD unk1
DWORD unk2
DWORD unk3
DWORD mesh_count
:IF( mesh_count > 0 )
:FOREACH( mesh_count )
DWORD mesh_id
DWORD material_id
:WHILE( true )
BYTE flag_id
:IF( flag_id == 0 ) BREAK //Leave the WHILE(true) loop
BYTE flag_size
BYTE[flag_size] data
:WEND
:ENDFOR
WORD object2_count
:FOREACH( object2_count )
DWORD mesh_id
DWORD material_id
:WHILE( true )
BYTE flag_id
:IF( flag_id == 0 ) BREAK //Leave the WHILE(true) loop
BYTE flag_size
BYTE[flag_size] data
:WEND
:ENDFOR
//These are for Bounding Box
FLOAT minX
FLOAT minY
FLOAT minZ
FLOAT maxX
FLOAT maxY
FLOAT maxZ
:ENDIF
:ENDFOR
возможно есть ошибки.. это сейчас не критично.
когда начал писать парсер столкнулся с проблемой..
как можно реализовать на пхп ZSTR?
с DWORD и WORD проблем у меня не возникло..
PHP код:
function getWord($file) {
$ret = unpack("S", fread($file, 2));
return $ret[1];
}
function getDword($file) {
$ret = unpack("L", fread($file, 4));
return $ret[1];
}
а вот как сделать ZSTR (читать строку до пустого байта)
PS:ранее мне не когда не приходилось сталкиваться с подобной работой.. по этому опыта мало,вот и прошу помощи =)
|