Jan. 5th, 2010

frob: (Default)
Всё-тки FH удивительно извращенский формат. Если из 11-ой версии сохранить пустой файл в 11-ой, 10-ой и 9-ой. То мало того, что в каждом из них окажется изрядный набор всякого мусора, так ещё и одни и те же вещи зафайлены с использованием разных чанков. Поскольку длина чанка явным образом из его названия не следует, в стандартной позиции не присутствует и окончание (или начало) чанка никак не обозначено, то в сочетании со стремление насохранять разного мусора в файл можно непредсказуемо обломаться с открытием даже самого простого (в т.ч. пустого) файла. Придумывать по такому незначительному поводу какой-нибудь ИИ выглядит накладным, но кое-какие меры предпринять можно.
Например, у чанка UString второе слово должно быть не больше удвоенного значения первого слова и может быть не больше чем на 4 меньше его. Аналогично с MName, но в силу однобайтности надо использовать учетверённое значение первого слова.
Для AGDFont, VMpObj, TextColumn и VDict характерен повтор первого слова в четвёртом (кроме того их значениями пока были только 0xa, 0x19, 0x31 и 0x42, из них AGDFont и VDict использовали только второе). Для списковых чанков (*List) характерен повтор первого слова в третьем (попадались нули, 0x6 и 0xa).Несколько типов всегда начинаются со слова указывающего на другой (всегда предшествующий в пределах нескольких десятков) чанк. Другие часто указывают на один или несколько (что можно определить по второму слову) предыдущих чанков в конце. Кроме того есть типы списковых чанков указывающих на конкретные другие типы чанков или на конкретные комбинации других типов. В общем при обнаружении ранее неизвестного типа можно попробовать примерить на него что-нибудь из следующего:
- чётные размеры от 4х до 12 байт,
- [00xx 00yy 00xx] + несколько байт определяемых версией файла и значением "yy"
- [00xx 00yy 00zz 00xx] + структура записей, количество которых определяется "zz", а перед ними возможно наличие некоторого количества "неподходящих" байт

Не все из имеющихся чанков соответствуют данным вариантам, так что в случае можно попробовать раздвигать рамки байт эдак до 80, если следующий чанк по списку имеет обнаружимые особенности (как UString), чтобы можно было проверить получается ли что-нибудь.

Про другое вкусное: в буриме надо добавить возможность установления ограничений. Например: "в строфах (не) должны использоваться буквы .....". Или "первая строка должна начинаться с буквы ..., а вторая -- ..." (при этом буквы берутся из дополнительной строки указанной водящим). Или скажем "все слова должны начинаться (не) на букву(ы) ..."

Интересно, а бывает ли музыкальное буриме? И если нет, то как это могло бы выглядеть...
frob: (Default)

Вот примерно так оно сейчас выглядит:

fhre screenshot

Profile

frob: (Default)
frob

April 2019

S M T W T F S
 123456
78910111213
14151617181920
21222324252627
282930    

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 29th, 2025 12:58 pm
Powered by Dreamwidth Studios