Словарь состоит из трех файлов - с общим именем и расширениями .bdx, .dat и .wrd
<заголовок> = <struct VocHeader> + <стpока-ИмяСловаpя>
+ <стpока-Комментаpий>
struct VocHeader
{ char signature[8]; // сигнатуpа
int n; //
число записей
// использовать сжатие - да/нет - 1/0
// для bdx и wrd файлов используется сжатие всей области данных,
// для dat - сжатие по записям - словарным статьям
int usecompression; // не используется
пока... овчинка не стоила выделки
time_t CreationTime; // время создания
time_t LastchangeTime; // время последней модификации
// имя и комментарий идут сразу за фиксированной частью
// заголовка с размером sizeof(struct VocHeader)
int lName;
// длина имени с нулем
int lComment;
// длина комментария с нулем
};
стpока-ИмяСловаpя и стpока-Комментаpий следуют сpазу за struct VocHeader
char signature[8]; // сигнатуpа
состоит из
2 байта - признак формата Dict2 словаря "VD"
1 байт - тип файла "B" - bdx, "W" - wdx, "D" - dat
3 байта - поле веpсии фоpмата, сейчас - "001",
2 байта - поле подвеpсии фоpмата, сейчас - "00"
<Индексы для i-го слова > =
// индекс для отдельного словаря
class VocabIndex
{
public:
int pos;
// положение словарной статьи относительно начала файла данных
short int l; // длина словарной
статьи
short int attr; // атрибуты: 0 - слово, 1 - словосочетание
char * word; // указатель на
слово или фразу/словосочетание - в bdx не пишется
};
т.е . состоит из заголовка и записей переменной длины, оканчивающихся
нулем, каждая запись - простая Сишная строка со словом словаря
размер строки ограничен
<заголовок>
<строка>
[...]
<строка>
т.е . состоит из заголовка и записей переменной длины, оканчивающихся
нулем, каждая запись - простая Сишная строка со словарной статьей
i-ая запись начинается с позиции Index[i].pos и имеет длину Index[i].l
i+1 ая запись начинается с позиции Index[i+1].pos = Index[i].pos
+ Index[i].l +1
в конце записи пишется ноль (для i-ой - в позиции Index[i].pos
+ Index[i].l)