Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Fortran для персонального компьютера

..pdf
Скачиваний:
22
Добавлен:
15.11.2022
Размер:
12.5 Mб
Скачать

Процедура moveto принимает координаты элементов изображения в качестве параметров. Эти координаты опреде­ ляют верхний левый угол первого символа в строке.

6.3.5Программа отображения текста

сиспользованием шрифтов

INCLUDE ’FGRAPH.FI’

INCLUDE ’FGRAPH.FD’

INTEGERS NFONTS

INTEGERS dummy, i, iend

CHARACTER*30 list

CHARACTERS fontpath

RECORD /videoconfig/ vc

RECORD /xycoord/ xy

PARAMETER( NFONTS=6)

CHARACTER* 7 TEXT(2 * NFONTS) /

"COURIER", "courier”, "HELV" , "helv” ,

"TMS RMN", "tms rmn", "MODERN", "modern" "SCRIPT", "script",

"ROMAN", "roman" / CHARACTER* 10 option (NFONTS) /

*"t’courier’", "t’helv'" , "t’tms rmn’", "t’modem”’ ,

*"t’seript”' , "t’roman”' /

СОпределение полных имен .FON файлов

СРегистрация шрифтов.

IF( registerfonts( ’*.FON’ ).LT. 0) THEN

WRITE (*, ’(A /)’) ’Enter directory for .FON files:’ READ (* ,’(A )’) fontpath

iend = INDEX( fontpath, ’ ’ ) fontpath(iend:iend + 5) = ’\*.FON’

IF( registerfonts( fontpath ) .LT. 0) * STOP ’Error: cannot find font files’ ENDIF

СУстановка графического режима

IF( setvideomode( $MAXRESMODE) .EQ. 0)

*STOP ’Error: cannot set graphics mode’

СОпределение видеоконфигурации

CALL getvideoconfig( vc) С Отображение текста

DO i =l , NFONTS

list = option(i) / / ’h30w24b’ IF( setfont( list) .EQ. 0) THEN

dummy = setcolor( INT4( i )) CALL moveto(0,

*(i - 1) * vc.numypixels / NFONTS, xy) CALL outgtext ( text((i - 2) - 1))

CALL moveto( vc.numxpixels/2,

*(i - 1) * vc.numxpixels / NFONTS, x y )

CALL outgtext ( text( i * 2) ELSE

dummy = setvideomode ( $DEFAULTMODE ) STOP Error: cannot set font’

END IF END DO READ (*,*>

dummy = setvideomode( $DEFAULTMODE) С Освобождение памяти

CALL unregisterfontsO END

Вэтой программе, для спецификации способа начер­ тания шрифтов задаются высота (30 пикселов) и ширина (24 пиксела) символа. Затем процедура moveto задает начальную точку для каждой строки текста. Процедура outgtext выводит на экран сообщение в текущем шрифте.

Вцелях обеспечения эффективности работы со шриф­ тами следует придерживаться рекомендаций:

—видеорежим устанавливается только один раз. Если пользователь создает графический образ и предполагает соп­

роводить его текстом, не следует переустанавливать видео­ режим, прежде чем будут вызваны процедуры работы со шрифтами;

—функция setfont выполняет чтение заданного .FON-фай- ла для получения данных текущего шрифта. При каждом вы­ зове этой процедуры данные шрифта заменяются в памяти. Минимизация обращений к процедуре setfont сокращает вре­ мя, требуемое для выполнения операций ввода/вывода;

—после завершения работы с библиотекой шрифтов можно освободить память, которую занимал регистрационный спи­ сок. Для этого следует вызвать процедуру unregisterfonts.

ГЛАВА 7

ГРАФИЧЕСКИЕ ФУНКЦИИ

В данном разделе приводится детальное описание про­ цедур, реализованных в графической библиотеке GRAPHICS.LIB, компилятора языка ФОРТРАН фирмы Microsoft. Описания процедур даны в алфавитном порядке.

Имя каждой процедуры указывается в начале ее описания. Описание интерфейса можно найти во включаемом файле FGRAPH.FI. Приводится необходимая дополнительная информация, в частности, список процедур, взаимосвязанных сданной.

7.1Рисование эллиптических дуг. ARC,ARC_W

СИНТАКСИС

dummy = агс( xl, у1, х2, у2, хЗ, уЗ, х4, у4 )

ДЕЙСТВИЕ

Процедуры arc, arc_w выполняют рисование эллипти­ ческих дуг.

ЗАМЕЧАНИЕ

Процедура arc использует систему '’координат порта просмотра". Центр дуги есть центр ограничивающего прямоу­ гольника, определяемого точками (xLy 1) для левого верхнего угла и (х2,у2) для правого нижнего. Дуга начинается в точке ее пересечения с вектором, определяемым точкой (хЗ,уЗ) и заканчивается в точке, пересечения с вектором, определяе­ мым точкой (х4,у4).

Процедура arc_w использует систему "оконнных коор­ динат". Вызов"процедуры и описание параметров аналогичны

описанию arc.

В обоих случаях дуга рисуется с использованием теку­ щего цвета. Поскольку дуга не определяет замкнутую область, то она нс заполняется"цветом.

Процедуры arc и arc_w возвращают ненулевое значение, если процедура рисования дуги выполняется успешно; в про­ тивном случае возвращается значение 0.

СМ. ТАКЖЕ

ellipse, lineto, pie, rectangle, setcolor

7.2Очистка экрана. CLEARSCREEN

СИНТАКСИС CALLcIearscreen( area)

ДЕЙСТВИЕ

Процедура clearscreen очищает область, заполняя ее те­ кущим цветом фона.

ЗАМЕЧАНИЕ

Параметр area может быть одной из следующих символических констант (определенных в файле FGRAPH.FD):-

$GCLEARSCREEN — Очистка и заполнение цветом всего экрана

$GVIEWPORT — Очистка только текущей области прос­ мотра

$GWI NDOW — Очистка только текущего текстового окна Возвращаемое значение отсутствует.

СМ. ТАКЖЕ

getbkcolor, setbkcolor.

7.3 Включение/выключение курсора. DISPLAYCURSOR

СИНТАКСИС

dummy = displaycursor( toggle )

ДЕЙСТВИЕ При входе в каждую графическую процедуру экранный

курсор становится невидимым. Функция displaycursor опреде­ ляет, должен ли курсор снова стать видимым при выходе из графической процедуры.

ЗАМЕЧАНИЕ

Если параметр toggle установлен в значение $GCURSORON, то курсор при выходе из процедуры будет восстановлен* если параметр установлен в "значение $GCURSOROFF, то курсор остается невидимым.

Возвращается предыдущее значение параметра toggle.

СМ. ТАКЖЕ

gettexteursor, settexteursor.

7.4Рисование эллипса. ELLIPSE, ELLIPSE_W

СИНТАКСИС

dummy = elJipse( control, xl, yl, x2, y2 )

ДЕЙСТВИЕ

Функция ellipse выполняет процедуру рисования эллипса."

ЗАМЕЧАНИЕ Ограничивающая линия отображается текущим цветом.

Центр эллипса есть центр ограничивающего прямоугольника, определяемого точками (xl,yl) и (х2,у2) "координат порта просмотра"

Функция ellipse^w выполняет рисование эллипса в "оконных координатах'?Параметры аналогичны.

Если ограничивающий прямоугольник вырождается в

точку, вертикальную или горизонтальную линию, то фигура не изображается.

ДЕЙСТВИЕ

Процедура getimage сохраняет экранный образ, определяемый ограничивающим прямоугольником в координатах порта просмотра парами (xl,yl) и (х2,у2), в буфере.

Процедура getimage_w выполняет аналогичные действия при использовании оконных координат.

ЗАМЕЧАНИЕ

Буфер должен иметь размер, достаточный для разме­ щения графического образа. Размер образа определяется пу­ тем вызова функции imagesize во время этапа исполнения, либо путем использования формулы, приведенной в описании процедуры imagesize.

Возвращаемое значение отсутствует.

СМ. ТАКЖЕ

imagesize, putimage.

7.14 Получение маски линии. GETLINESTYLE

СИНТАКСИС

CALL getlinestvle( mask)

ДЕЙСТВИЕ Тип или способ изображения линии в графических про­

цедурах может контролироваться при помощи текущей маски. Процедура getlinestyle возвращает текущий номер мас­

ки.

ЗАМЕЧАНИЕ Маска представляет собой 16-и разрядный массив, в ко­

тором каждый бит представляет элемент изображения в рису­ емой линии. Если разряд установлен в значение 1, то соответ­ ствующий элемент изображения устанавливается в цвет линии (текущий цвет). Если бит равен 0, элемент изобра­ жения остается без изменений. Маска действительна по всей длине линии. По умолчанию принимается маска #FFFF (сплошная линия). *

Если маска установлена, возвращается номер текущей маски. Если маска не установлена, процедура getlinestyle воз­ вращает маску, принимаемую по умолчанию.

СМ. ТАКЖЕ

lineto, pie, setlinestyle.

7.15 Преобразование координат текущей точки. GETPHYSCOORD

СИНТАКСИС

CALLgetphyscoorcK xy.xcoord, xy.ycoord, ху )

ДЕЙСТВИЕ

Процедура getphyscoord выполняет операцию приведе­ ния координат порта просмотра в точке (х,у) в физические координаты, возвращая их в структуру xycoord, которая опре­ делена в файле FuRAPH.FD.