"Вы что будете: водку или самогон?"
Jan. 5th, 2010 10:14 amВсё-тки 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), чтобы можно было проверить получается ли что-нибудь.
Про другое вкусное: в буриме надо добавить возможность установления ограничений. Например: "в строфах (не) должны использоваться буквы .....". Или "первая строка должна начинаться с буквы ..., а вторая -- ..." (при этом буквы берутся из дополнительной строки указанной водящим). Или скажем "все слова должны начинаться (не) на букву(ы) ..."
Интересно, а бывает ли музыкальное буриме? И если нет, то как это могло бы выглядеть...
Например, у чанка 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), чтобы можно было проверить получается ли что-нибудь.
Про другое вкусное: в буриме надо добавить возможность установления ограничений. Например: "в строфах (не) должны использоваться буквы .....". Или "первая строка должна начинаться с буквы ..., а вторая -- ..." (при этом буквы берутся из дополнительной строки указанной водящим). Или скажем "все слова должны начинаться (не) на букву(ы) ..."
Интересно, а бывает ли музыкальное буриме? И если нет, то как это могло бы выглядеть...