Показать сообщение отдельно
Старый 03.05.2009, 18:52   #1
wodewill
На доске почёта
Аватар для wodewill
OFFLINE
Регистрация: 07.02.2008
Возраст: 35
Сообщений: 0
Благодарностей:
1,331 всего
Мнения: + 3113
Репутация: 3487
Отправить сообщение для wodewill с помощью ICQ Отправить сообщение для wodewill с помощью Skype™

[Guilde] Создание структур


Краткий гайд по созданию структур для датедитора. Здесь рассмотрено общее построение структуры, её переменные и функции (наиболее используемые). Создание и построение структуры будет рассматриваться для файлов из клиента, поскольку именно в этих файлах используется наибольшее количество возможностей и типов данных.

Общая структура.

[Маска, по которой проходит поиск соответствующего файла для структуры]
[Структура первого уровня, которая содержит начальные данные по деревьям леса (количество блоков, строк и общий размер одного блока) и является родителем для структур третьего уровня]
[Структура второго уровня, которая отображает данные и их тип, что находятся в каждом блоке]

Пример:

Код:
[filemask="example.dat"] //указывает, что структура создана и используется для файла example.dat

struct ExampleFile //структруа первого уровня
{
u32 exampleblock;
u32 examplecolumn;
u32 examplesize;
child ExampleBlock [count=exampleblock]; // указывается, что есть дочерняя структура с названием ExampleBlock
}

struct ExampleBlock [preload=1] //структура второго уровня, в которой отображаются данные по каждому блоку
{
u32;
u32;
}
Список типов переменных, функции и общий синтаксис.

u32 - содержит только положительные десятичные значения. 4 байта.
i32 - может содержать как положительные так и отрицательные значения. 4 байта.
x32 - содержит hex значение. 4 байта.
u16 - содержит только положительные десятичные значения. 2 байта.
i16 - может содержать как положительные так и отрицательные значения. 2 байта.
x16 - содержит hex значение. 2 байта.
u8 - содержит только положительные десятичные значения. 1 байт.
i8 - может содержать как положительные так и отрицательные значения. 1 байт.
x8 - содержит hex значение. 1 байт.
float - содержит значения с плавающей точкой
str ( или cstr) [len=] - строка в ASCII кодировке
wstr [len=] - строка в Unicode кодировке
seek ( ) - пропуск определённого количества байт. В скобках указывается или количество байт, или формула, по которой это количество высчитывается.
repeat RepeatNum { } - повторяет написанные в фигурных скобках поля то количество раз, которое необходимо. RepeatNum - количество повторений

Синтаксис:

Код:
u32 Переменная; // Переменная - любое сочетании букв, в котором будут хранится данные строки
wstr [len=8] Переменная; // len=8 указывает, что поле занимает 8 байт. Может содержать любое число
Атрибуты.

Все атрибуты для каждого поля задаются в квадратных скобках [], через запятую
[filemask=" "] - задаётся маска, по которой ищется файл
hidden - прячет структуру или поле. Может принимать значения 0 и 1
preload - загрузка дерева структуры при открытии файла. Может принимать значения 0 и 1
tag="" - можно задать название строки
readonly - делает строку доступной только для просмотра, не меняя её типа. Может принимать значения 0 и 1
blob [len= ] - делает доступным просмотр hex кода без возможности редактирования. Обязательно указывать длину поля.
count= Переменная - задаёт количество, взяв его из указанной переменной. Актуально для указания количества блоков в структуре.
group="" - задаёт название группы для диапазона блоков в пределах одной структуры
offset - задаёт количество байт, которые пропускаются перед структурой или блоком
Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 1 сообщение(ий)):
У вас нет прав чтобы видеть скрытый текст, содержащейся здесь.
Чтобы его прочитать, вы должны заработать сообщения. Как это сделать бесплатно, описано в правилах форума. Как купить доступ, описано в Платных услугах.

Последний раз редактировалось wodewill; 20.07.2009 в 13:28.
 
Ответить с цитированием
Сказали спасибо:
Asher (04.01.2011), Enigmatis (19.03.2010), Lone (26.02.2010), Недоступно (20.11.2009), котопес (14.06.2009), traxinator (20.05.2009), RFbager (13.05.2009), Paladin (03.05.2009)