Семейство Windows использует один общий стандарт icon для хранения файлов с заготовками рисунков курсоров и пиктограмм (значков). Спецификации файлов имеют тип (расширение) cur для курсоров и ico для пиктограмм.
К сожалению, автор не встречал точного описания структуры таких файлов, даже в справочнике Борна содержатся явные неточности. Если вам попадется описание стандарта icon для Windows, то ему не следует слепо доверять. Обязательно распечатайте дамп одного из доступных вам файлов и сравните распечатку с вариантом описания. В качестве эталона можно взять файл nc.ico, входящий в комплект Norton Commander. Для версии NC 5.0 он содержит заготовку рисунка капитанской фуражки с красными цифрами 5.0.
Стандартный файл формата icon состоит из четырех основных частей: заголовка, палитры цветов, заготовки рисунка и маски.
Первые восемь байтов заголовка содержат следующие данные:
Из других полей заголовка следует отметить слово с адресом 36 (24h), содержащее размер точки рисунка, выраженный в битах. Он равен 1 для черно-белых и 4 для цветных рисунков. Эта величина указывает способ распаковки рисунка и размер палитры.
Палитра используемых цветов располагается в файле, начиная с адреса ЗЕf. Она содержит 2 или 16 строк, в которых хранятся коды цветов в формате b, g, r, 0. Заметим, что в таком формате хранится палитра в вмр-файлах для Windows (см. приложение А). В зависимости от количества цветов палитра занимает 8 (2 цвета) или 64 (16 цветов) байта.
Сразу после палитры размещается образ рисунка. Адрес его начала зависит от размера палитры и равен 46h для черно-белых рисунков или 7Eh для 16-цветных. Количество точек в рисунке фиксировано и составляет 32-32 = = 1024 точки. Черно-белые рисунки упакованы по 8 точек в байте, а цветные — по 2 точки в байте. Соответственно, образ рисунка занимает в файле 128 или 512 байтов.
После образа рисунка располагается маска. Адрес ее начала сбь для черно-белых рисунков или 27Eh для цветных. Маска — это черно-белый рисунок, упакованный по 8 точек в байте и занимающий 128 байтов. Адрес ее начала отстоит от конца файла на 128 байтов.
Образ рисунка и маска хранятся в перевернутом виде: первой записана последняя строка, второй — предпоследняя и т. д., последней в файле хранится первая строка рисунка или маски. Такой способ хранения данных используется в файлах формата BMP (см. приложение А).
Дамп файла с рисунком курсора. В примере 6.1 приведена распечатка (дамп) файла ieft_00.cur, входящего в комплект Mouse Warp. Он содержит рисунок стрелки, наклоненной вправо (обычно стрелка наклонена влево). Распечатка приведена в общепринятой шестнадцатеричной форме, каждой строке предшествует адрес ее начала в файле.