WeightName[ext] относительный вес шрифта (жирность). Для векторных шрифтов может обозначать темность или светлось (параметр ext)
Slant[ext] напрвление шрифта (roman, italic, oblique, …) для векторных шрифтов параметр задает наклов в угловых единицах.
SetwithName ширина юнита (сжатый или растянутый)
AddStyleName[ext] название для уникальной идентификации шрифта (serife, cursive, …) В векторных шрифтах определят степень поворота или зеркальность шрифта.
PixelSize[ext] высота шрифта в пикселях. Для векторных шрифтов параметр указывает дополнительную растяжку по горизонтали.
PointSize[ext] размер кубика в поинтах.
ResolutionX Разрешение (горизонтальное и вертикальное) шрифта в
ResolutionY пикселях на инч. Если не указано сервер выбирает сам в зависимости от разрешения дистплея.
Spacing расстояние между юнитами в шрифте. (М – фиксированное,
Р – пропорциональное)
AverageWidth Cредняя ширина шрифта
CharacterSetRegistry имя закрепленное X консорциумом за CharacterSetEncoding
CharacterSetEncoding определяет кодировку
Файл font.dir
Этот файл находится в каталогах файлов фонтов, он создается либо при инсталяции системы либо после выполнения команды mkfontdir для растровых или stmkdirs для векторных шрифтов. Он содержит в первой строчке количество шрифтов в директории а в последующих XLFD названия шрифтов.
Файл font.alias
Этот файл так же как и font.dir содержится в каталогах шрифтов и служит для лиасинга
длинных имен шрифтов в короткие которые затем легче использовать. После правки этого файла обязательно нужно выполнять команду
xset fp rehash
а также рестартовывать по сигналу SIGUSR1 фонт сервер.
Администрирование растровых шрифтов.
Для добавления растрового шрифта в систему нужно выполнить следующие действия:
· Если шрифт не в .pcf формате сконвеертировать его с помощью программы bdftopcf
· Скомпрессировать шрифт утилитой compress
· Скопировать в нужную директорию
· Запустить mkfontdir для модификации fonts.dir файла.
· Если директория со шрифтами используется только Х сервером то выполнить xset fp rehash , если она используется еще и фонт сервером то рестартовывать по сигналу SIGUSR1 фонт сервер.
Для удаления растрового шрифта из системы Х11 необходимо:
· Удалить фонт файл.
· Запустить mkfontdir для модификации fonts.dir файла.
· Если директория со шрифтами используется только Х сервером то выполнить xset fp rehash , если она используется еще и фонт сервером то рестартовывать по сигналу SIGUSR1 фонт сервер.
Для создания fonts.dir файла достаточно запустить mkfontdir указав ей в качестве аргумента директорию со шрифтами.
Компилирование .BDF шрифтов в .PCF шрифты.
Растровые шрифты в системе Х11 могут быть представлены в нескольких формах:
· .pcf Переносимый бинарный формат описания шрифта
· .pcf.Z компрессированный .pcf
· .bdf текстовый формат
· .bdf.Z компрессированный .bdf
· .bcf компрессированный .bdf
· .snf не переносимый бинарный формат шрифта (использовался до X11R5)
· .snf.Z компрессированный .snf (использовался до X11R5)
· .scf компрессированный .snf (использовался до X11R5)
·
Предпочтительным форматом для Х сервера является компрессированый .pcf.
Для конвертации .bdf в .pcf с одновременной компрессией можно воспользоваться командой:
bdftopcf font_file.bdf | compress > font_file.pcf.Z
Для создания выполняемых програм, нужно скомпилировать исходный код где содержиться главная програма.
Расмотрим пример компиляции.
$ cc –Aa myprog.c
Процес компиляции покадет все сообщения (статус,предупреждения, ошибки) на стандартный поток вывода ошибок (stderr). После этого компилятор создаст файл a.out который уже можно запускать. Аналогично можно скомпиларовать Фортрановскую прогамму командой f77. Если програма состоит из несколько файлов, то омпиляция будет выглядет следующем образом:
$ cc –Aa main.c myfunc.c
main.c:
myfunc.c:
после этого можно будет запускать a.out.
Можно сказать что процес компиляции похожий как на рисунке:
На самом деле процесс компиляции намноого сложнее. Этот процес компиляции занимает несколько этапов.
1) Для каждого исходного файла запускаеться компилятор который создает обьектный файл (если исходные коды написаны на разных языках програмирования, то для каждого запускаеться тот соотвествующий компилятор)
2) После компиляция (этап создания) обьектных файлов запускаеться линковщик (HP-UX linker (ld))
На картинке можете увидеть более детальный процес компиляции:
Для более детального просмтотра этапов прохождения компиляции, можно посмотреть задав опцию –v (verbose)
$ cc -Aa -v main.c myfunc.c
cc: CCOPTS is not set.
main.c:
/opt/langtools/lbin/cpp.ansi main.c /var/tmp/ctmAAAa16327 -D__hp9000s700 -D__hp9000s800 -D__hppa -D__hpux -D__unix -D_PA_RISC1_1
cc: Entering Preprocessor.
/opt/ansic/lbin/ccom /var/tmp/ctmAAAa16327 main.o -Oq00,al,ag,cn,Lm,sz,Ic,vo,lc,mf,Po,es,rs,sp,in,vc,pi,fa,pe,Rr,Fl,pv,pa,nf,cp,lx,st,ap,Pg,ug,lu,dp,fs,bp,wp! -Aa
myfunc.c:
/opt/langtools/lbin/cpp.ansi myfunc.c /var/tmp/ctmAAAa16327 -D__hp9000s700 -D__hp9000s800 -D__hppa -D__hpux -D__unix -D_PA_RISC1_1
cc: Entering Preprocessor.
/opt/ansic/lbin/ccom /var/tmp/ctmAAAa16327 myfunc.o -Oq00,al,ag,cn,Lm,sz,Ic,vo,lc,mf,Po,es,rs,sp,in,vc,pi,fa,pe,Rr,Fl,pv,pa,nf,cp,lx,st,ap,Pg,ug,lu,dp,fs,bp,wp! -Aa
cc: LPATH is /usr/lib/pa1.1:/usr/lib:/opt/langtools/lib:
/usr/ccs/bin/ld /opt/langtools/lib/crt0.o -u main main.o myfunc.o -lc
cc: Entering Link editor.
Из этого примера можно посмотреть такие этапы
cpp.ansiэто С препроцесор после этого запускаеться /lib/ccom – эта програма(компилятор) уже создает .о файлы. Последний этап это этап создания исполняемого кода, это Линкер, которые связывает все обьекты .
Что такое Обьектный файл ?
Обьектный файл содержет машиные инструкции а данные с которых линкеровщик создает исполняемую програму. Каждий обьектный файл содержит НАЗВАНИЕ (symbol name) и ссылку на это название.
Названия делятся на 3 категории:
1) Локальные обьявления (local definition) – это коды или данные которые могут использоваться только в том обьектном файле где они обьявленые.
2) Глобальные обьявления (global definition) – это обьявления прорцедур,функций,данных котоые могут быть доступны из других обьектных файлов
3) Внешние ссылки (extern references) – это обьявления которые глобальный инаходяться в других обьектных файлах.
Для просмотра обявлений успользуеться програма nm.
Линкирование это последний этап создания запускания файлов, он в включает в a.out файл все ссылки обьявлений и их реализации , которые встречаються в програме. Если например есть сылка а нет реализаци то линкировщик скажет что не находит внешнего обявления и выдаст следюющее:
$ cc main.c
/bin/ld: Unsatisfied symbol:
my_func (code)
Очень полезным средсвом для хранения сылски реализаций внешних обьявлений есть библиотеки. Стандартная библиотека libc которая содержит «основные» функции для C,Fortran
Библиотеки называються libname.sfx
Name – название библиотеки, которая идентефецирует библиотеку
Sfx - если .а – архив, .sl – общедоступная библиотека.
Для того что б указать компилятору библиотеку то указываеться через опцию –l. Например
--lm (подключает стандартну математическую библиотеку libm.a).
По умолчанию подключаються библиотеки libcl,libisamstub,libc.
По умолчанию библиотеки ищатся по путям /lib,/usr/lib,lib/libp. Можно задать пути где искать:
1) Переменой коружения LPATH
2) Опция линкера -L
Также для каждой програмы входит обьектный файл /lib/crt0.oВ этом файле содержаться таочки входа в програму,простомтр аргументов и прочее.
Можна прочитать о фунциях которые есть в стандартных библиотеках исполюзую man-page
Вызовы (функции) описываються следующим образом
Name(nL)
Name – название
N – 2-системные вызовы, 3-другие библиотеки
L – буква которая означает к которой библиотеке вызов относиться
Вот примеры:
Група | Описание |
(2) | Системные вызовы, низкоуровневый доступ до системных ресурсов. (работа с файлами,сигналы,управление процесами). Все вызовы содержаться в libc |
(3C) | Стандартные С вызовы . Находяться в libc |
(3S) | Стандартные вызова input/output (stdio(3S)) Находяться в libc |
(3M) | Математические фунции. Для подключения используеться –lm или -lM |
(3G) | Графические фунции |
(3I) | Библиотека инструментариев |
(3X) | Разные специализированые библиотеки |
Сравнительные оценки Архивных и Общедоступных библиотек | ||
Расширение | .a | .sl |
Обьектный код | Делаеться с обьектного кода | Делаеться с независимо-позиционого (PIC) обьектного кода.Делаеться компилятором с опцией +z или +Z. |
Создание | Составляеться обьектные файлы ar командой | Составляеться PIC обьекты с ld командой |
Связывание адресса вызова | Адресс определяется при линкировании програмы | Адресс определяеться при выполнении програмы |
a.out | Содержит в себе все вызовы и даные | Содержит только таблицу где где содержаться адреса иназвание библитек |
При запуске | Каждая програма содержит собственую копию библиотеки | Все програмы используют одну бублиотеку, которая в памяти присутствующая только один раз |
Опции компилятора cc
cс [option] files
· -Amode
· mode=c По умолчанию, стандартный компилятор С (по Керниган, Риттчи)
· mode=a ANSI C (ISO 9899:1990)
· mode=e Расшириное ANSI C
· -c Отменить фазу редактирования связей и создавать об'ектный файл даже в случае программы, состоящей только из одного модуля.
· -p Сгенерировать дополнительные команды для подсчета числа обращений к каждой функции. Кроме того, если имеет место фаза редактирования связей, стандартная подпрограмма инициализации заменяется на такую, которая автоматически вызывает функцию monitor(3C) и обеспечивает запись файла mount.out при нормальном завершении об'ектной программы. Профиль выполнения программы может быть затем получен при помощи команды prof(1).