ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
Вспомогательные функцииВспомогательные функции выполняют сохранение и восстановление содержимого части экрана, перекрываемой меню, отображают строки меню и рисуют рамку вокруг пунктов меню. Функция save_video(), выполняющая сохранение части экрана, перекрываемой меню, в первых четырех параметрах получает информацию о той части области экрана, которая должна перекрываться. Пятый параметр – ссылка на буфер для сохранения кодов символов с аттрибутакми. void save_video(int startx, int endx, int starty, int endy, unsigned int *buf_ptr) { // startx, starty – координаты верхнего левого и // endx, endy – нижнего правого угла прямоугольника для сохранения // buf_ptr – ссылка на начало буфера для сохранения содержимого видеопамяти register int i,j; int k; register unsigned _es * work; // ES-базированный короткий указатель extern int vid_mem; _ES = FP_SEG(vid_mem); // загрузка регистра базовым адресом k = FP_OFF(vid_mem); //начальное смещение в k for(i = starty; i < endy; i++) for(j = startx; j < endx; j++) { work = (unsigned _es *)(j*160 + i*2 +k); * buf_ptr++ = *work++; // очистка окна * (work – 1) = (unsigned) ‘ ‘ | *(buf_ptr – 1) & 0xff00; } } В программе используются макрокоманды FP_SEG() и FP_OFF(), аргументом которых должен быть far-указатель. Макрокоманды возвращают в качестве результата, соответственно, значение базового адреса (параграфа) и смещение относительно базового адреса. Функция draw_border() выводит рамку на экран. Первые 2 параметра – координаты левого верхнего угла для вывода рамки, ограничивающей прямоугольник, следующие 2 параметра – координаты правого нижнего угла. Вначале пишется символ и затем атрибут, во все те адреса видеопамяти, которые соответствуют расположению рамки. Пересчёт координат делается аналогично тому, как это делается в save_video(). Коды символов необходимо подобрать из таблицы кодов ASCII. Например можно рисовать рамку точками. Другой вариант применить следующие коды: 179 – вертикальная линия, 196 – горизонтальная линия, 191, 192, 217, 218 – различные типы «углов» для рамки, - правого верхнего, левого нижнего, правого нижнего и левого верхнего, соответственно. Функция restore_video() «обратна» функции save_video() и копирует содержимое буфера, на который ссылается p в видеопамять. Функция write _string() выполняет вывод строки на экран (в видеобуфер) с заданным атрибутом. write_string(int x, int y, char *p, int attrib) // x, y – координаты вывода строки { register int i; int k; register unsigned _es *work; extern int vid_mem; _ES = FP_SEG(vid_mem); k = FP_OFF(vid_mem); work = k + (x*160)+y*2+k; for(i=y; *p; i++) *work++ = (unsigned)(attrib)|*p++; } Не нашли, что искали? Воспользуйтесь поиском:
|