После того как файл открыт, в буфер обмена считываются его заголовок и палитра используемых цветов. В разделе мы условились, что сегмент, содержащий буфер обмена, хранится в переменной swpseg, а смешение в нем — в переменной swpoffs. Чтение порции данных в буфер обмена выполняет подпрограмма Readf, описанная в примере 3.23. Она располагает считанные данные в сегменте swpseg, начиная с адреса (смешения), указанного з Swpoffs. Чтение заголовка и палитры производится в два приема.
Шаг 1. Считываем из файла первые 16 байтов и располагаем их в начале буфера обмена, начиная с адреса о. Проверяем содержимое двух первых байтов буфера. В них должны находиться коды заглавных латинских букв вм 42h и 4оь). Если это не так, то файл не соответствует стандарту BMP и его обработка не имеет смысла.
Если в начале файла находятся буквы вм, то слово 10 (DAh) указывает сме-щение образа рисунка от начала файла (bioffBits). Напомним, что образ рисунка расположен после палитры, поэтому значение, указанное в сло-вe 10, можно использовать для вычисления размера второй порции данных.
Шаг 2. Читаем следующие 16 байтов (bioffBits) и располагаем их в буфере обмена начиная с 16-го байта (счет начинается с нуля), т. е. сразу после данных, прочитанных на первом шаге. После чтения в буфере находятся заголовок файла и палитра. В зависимости от принадлежности файла стандарту Windows или OS/2, размер и структура заголовка соответствуют табл. А.1 или А.2.
Программная реализация двух описанных шагов показана в примере А.2. Это начало большой подпрограммы, которую мы будем описывать по частям, входные параметры у нее отсутствуют, но перед обращением должен быть покрыт файл, содержащий выбранный вами рисунок, а его идентификатор помещен в переменную handle, которая используется в подпрограмме Readf.