| plen, mx, my : LongInt; { размер плоскости }
Рис. 22.14
- 526 -
| BEGIN
| mx := GetMaxX+1;
| my := GetMaxY+1;
| { размеры плоскости }
| if GetGraphMode = CGAHi { размер буфера: }
| then
| plen := mx*my div 8 + 384 { один бит на точку }
| else { или }
| plen := mx*my div 4 + 384; { два бита на точку }
| GetMem( scr_buf, plen ); { выделение памяти }
| Assign( image_file, file_name ); { связь файлов }
| Rewrite( image_file, plen ); { открытие файла }
| Move( scr_addr, scr_buf^, plen ); { экран – в буфер }
| BlockWrite(image_file,scr_buf^,1); { запись его в файл }
| Close( image_file ); { закрытие файла }
| FreeMem( scr_buf, plen ) { удаление буфера }
| END;
| { Процедура чтения изображения с диска и вывода его на }
| { экран для адаптеров, работающих в режиме CGA }
| PROCEDURE LoadCGAScr(file_name:String );
| {полное имя файла }
| VAR
| image_file : File;
| scr_buf : Pointer; { ссылка на буфер }
| scr_addr:g_plan absolute $8800:0; { память адаптера }
| plen,mx,my: LongInt; { размер плоскости }
| BEGIN
| mx := GetMaxX+1;
| my := GetMaxY+1; { размеры плоскости }
| if GetGraphMode = CGAHi { размер буфера: }
| then
| plen := mx*my div 8 + 384 { один бит на точку }
| else { или }
| plen := mx*my div 4 + 384; { два бита на точку }
| GetMem( scr_buf, plen ); { отводится память }
| Assign( image_file, file_name ); { связь файлов }
| Reset( image_file, plen ); { открытие файла }
| BlockRead(image_file,scr_buf^,1); { чтение картинки }
| Close( image.file ); { закрытие файла }
| Move(scr_buf^,scr_addr, plen); { буфер – на экран }
| FreeMem( scr buf, plen ) { удаление буфера }
| END;
Рис. 22.14 (окончание)
Подобный способ хранения изображений используется в некоторых графических пакетах программ (PBrush, DrHALO). Однако формат записи, используемый в них, другой. Поэтому они не совместимы ни между собой, ни с другими графическими пакетами.
- 527 -
ПРИЛОЖЕНИЕ 1
Сообщения и коды ошибок, генерируемые компилятором
При обнаружении ошибки компилятор Турбо Паскаля интегрированной среды программирования автоматически загружает исходный файл программы и помещает курсор около ошибки. Компилятор ТРС.ЕХЕ выводит на экран сообщение об ошибке, номер и исходную строку, используя для указания места ошибки символ «^». Учтите, что некоторые ошибки в исходном тексте до определенного времени не обнаруживаются. Если около курсора нет очевидной ошибки, ищите ее слева от курсора или в предыдущем тексте. После выдачи кода ошибки в интегрированной среде нажатие клавиши F1 выдаст комментарий к этому коду.
Ниже даны комментированные коды и сообщения компилятора.
1 Out of memory (выход за границы памяти)
Данная ошибка появляется, если компилятором уже израсходована вся свободная память. Имеется ряд возможных решений этой проблемы:
— если в меню Compile/Destination (Компиляция/Направление) установлено значение Memory (память), измените его на Disk (диск);
— если для параметра Link Buffer в меню Option/Linker (Опция/Редактор связей) в интегрированной среде установлено значение Memory, измените его на Disk; другой путь состоит в размещении директивы {$L-} в начале программы; при работе с транслятором ТРС используйте опцию /L;
— удалите из памяти резидентные программы, в использовании которых нет крайней необходимости;
— если работа осуществляется в среде, попробуйте заменить ее компилятором ТРС.ЕХЕ: он занимает меньше памяти.
Если ни одна из рекомендаций не помогает, то, возможно, программа (модуль) просто слишком велика, чтобы компилировать ее в таком объеме памяти. В этом случае следует разбить ее на два или более программных модуля.
2 Identifier expected (ожидается идентификатор)