e r r : = I O r e s u l t ;
i f e r r < > 0 t h e n R e w r i t e ( r f , 1 )
e l s e S e e k ( r f , F i l e S i z e ( r f ) ) ;
G e t M e m ( b u f , a r s i z e ) ;
l o n g : = F i l e S i z e f a f ) ;
R e c . F i l e N a m e : = A d d F i l e N a m e ;
R e c . l D : = R e s S i g n a t u r e ;
R e c . F O f s : = F i l e S i z e f r f ) + t s i z e ;
R e c . F S i z e s = l o n g ;
b l o c k w r i t e f r f , R e c , t s i z e , d ) ;
r e p e a t
i f l o n g < a r s i z e t h e n c o u n t : = l o n g
e l s e c o u n t ; = a r s i z e ;
b l o c k r e a d f a f , b u f A , c o u n t , d ) ;
b l o c k w r i t e f r f , b u f * , c o u n t , d ) ;
l o n g : = l o n g — d ;
u n t i l l o n g < = 0 ;
C l o s e ( a f ) ;
C l o s e ( r f ) ;
F r e e M e m f b u f , a r s i z e ) ;
e n d ;
e n d .
Вот, собственно, и весь модуль. Осталось написать программу
добавления файла в ресурс. Состоит она из проверки количество
указанных параметров в командной строке. Первым параметром
должно идти имя ресурсного файла, например m y d a ta . r es, а
вторым — имя добавляемого файла, например
M Y F Q N T 1 . F N T .
Если указано два параметра, то выполняется функция добавления,
и вся основная работа ложится на модуль.
P r o g r a m A d d R e s ;
U s e s R e s F i l e s ;
b e g i n
i f P a r a m C o u n t < 2 t h e n b e g i n
w r i t e l n f ' R e s o u r c e f i l e c r e a t o r ' ) ;
w r i t e l n f 'U s a g e ; a d d r e s .e x e [ r e s o u r c e f i l e ] [ f i l e f o r a d d ] ' ) ;
h a l t ;
e n d ;
i f A d d F i l e T o R e s o u r c e ( P a r a m S t r ( 1 ) , P a r a m S t r ( 2 ) ) < > 0
t h e n w r i t e l n ( ' A d d i d i n g e r r o r . ' ) ;
e n d .
Перед рассмотрением следующей и последней на этот раз
программы взываю к вашей памяти и прошу припомнить одну из
предыдущих статей из данного цикла под названием «Работаем
с текстовым режимом». В ней шла речь о текстовых режимах
дисплея, в частности упоминалось о том, как при помощи функции
i n s t a l l F o n t модуля VESACRT.PAS устанавливать собственные
шрифты для отображения текста на экране.
Так вот, сейчас я продемонстрирую, как подгружать и устанавливать
шрифты из ресурсного файла. Для начала следует создать ресурсный
файл, например с именем
f o n t s . r e s , и добавить в него пять шрифтов,
имена которых специально перечислены в константе
F o n t , чтобы
затем поименно их загружать по очереди. Ранее, я уже рассказывал,
где можно взять такие шрифты. Собственно, единственное
существенное изменение претерпела функция
I n s t a l l F o n t , которая
теперь будет называться
i n s t a l l F o n t F r o m R e s o u r c e , где вместо
обращений к обычному файлу шрифта применен способ загрузки
его из ресурса
R e s '1. Следует заметить, что в вызовах методов r A s -
s i g n , r R e s e t , r S e e k , r B l o c k r e a d и r C l o s e указана обычная файловая
переменная, объявленная с идентификатором стандартного типа
F i l e . Это вполне допустимо, так как в данном случае файловая
переменная используется только для доступа к вложению и не может
служить для получения информации о файле через обращение к
полям данной структуры. Как это может быть, вопреки всем правилам?
Пускай это останется моим маленьким секретом ©.
Вначале главного блока программы проводится проверка
наличия загруженного XMS-драйвера. Затем выполняется строка
N e w f R e s , C r e a t e f ' f o n t s . r e s ' , r t X M S ) ) , создающая экземпляр
объекта
R e s для работы с ресурсным файлом и выполняющая
одновременную загрузку оного из файла fonts.res в XMS, так как
указана константа
r t X M S в качестве второго параметра.
U s e s V e s a C r t , K e y b o a r d , R e s F i l e s , X M S ;
c o n s t M a x F o n t = 4 ;
F o n t : a r r a y [ 0 . . M a x F o n t ] o f s t r i n g =
( ' l a t r u s 1 . f n t ' , ' l a t r u s 2 . f n t ' ,
' v g . f n t ' , ' l a t r u s 4 . f n t ' , ' y e a r 2 0 0 0 . f n t ' ) ;
v a r d , m o d e , k e y . F o n t I n d e x : w o r d ;
R e s : AT R e s o u r c e ;
A F i l e : T F i l e ;
p r o c e d u r e G e tM e m f v a r p ; S i z e : w o r d ) ;
v a r P P : p o i n t e r a b s o l u t e p ;
b e g i n
P P : = n i l ;
i f M a x A v a i l < S i z e t h e n e x i t ;
S y s t e m . G e t M e m f P P , S i z e ) ;
e n d ;
f u n c t i o n I n s t a l l F o n t F r o m R e s o u r c e ( F i l e N a m e : s t r i n g ;
F i r s t C h a r , C h a r C o u n t , B y t e P e r C h a r : w o r d ) : w o r d ;
t y p e T B u f = a r r a y [ 0 . . 2 0 * 2 5 6 ] o f b y t e ;
v a r B u f , B u f 2 : AT B u f ;
f : f i l e ;
d , j ; w o r d ;
k : r e a l ;
b e g i n
I n s t a l l F o n t F r o m R e s o u r c e : = 0 ;
G e t M e m f B u f , 2 5 6 * B y t e P e r C h a r ) ;
i f B u f = n i l t h e n b e g i n
I n s t a l l F o n t F r o m R e s o u r c e : = 2 0 3 ; e x i t ; e n d ;
G e t M e m f B u f 2 , 2 5 6 * S c r e e n . C h a r B y t e s ) ;
i f B u f 2 = n i l t h e n b e g i n
I n s t a l l F o n t F r o m R e s o u r c e : = 2 0 3 ;
F r e e M e m f B u f , 2 5 6 * B y t e P e r C h a r ) ;
e x i t ;
e n d ;
R e s A . r A s s i g n ( f , F i l e N a m e ) ;
R e s A . r R e s e t ( f
) ;
d : = R e s A . r I O R e s u l t ;
i f d < > 0 t h e n b e g i n
I n s t a l l F o n t F r o m R e s o u r c e : = d ;
F r e e M e m f B u f 2 , 2 5 6 * S c r e e n . C h a r B y t e s ) ;
F r e e M e m f B u f , 2 5 6 * B y t e P e r C h a r ) ;
e x i t ;
e n d ;
R e s A . r S e e k ( f , 2 ) ;
R e s A . r B l o c k r e a d ( f , B u f A , 2 5 6 * B y t e P e r C h a r , d ) ;
R e s A . r C l o s e ( f
) ;
i f S c r e e n . C h a r B y t e s - B y t e P e r C h a r t h e n
S e t C h a r T a b l e f B u f A [ F i r s t C h a r * B y t e P e r C h a r ] ,
F i r s t C h a r , C h a r C o u n t , S c r e e n . C h a r B y t e s )
e l s e b e g i n
k : = B y t e P e r C h a r / ( S c r e e n . C h a r B y t e s - 1 ) ;
А
Окончание.
Начало на стр. 36
спроектировал сайт, поправ стандар-
ты, то чья это проблема — моя или его?
Э то его проблема, и проблема заказ-
чиков сайта.
Но что я хочу от разработчиков, ес-
ли их собственные сайты — вопиющие
образцы отклонения от стандартов! Гля-
дя на исходники их \меЬ-страниц, просто
диву даешься, как вообще такая ересь
допустима. В итоге создоющая сайты
контора штампует один за другим сай-
ты и дает посетителям советы, в чем луч-
ше эти сайты посещать (хорошо хоть не
требуют смокинг или вечернее платье).
Так что же, спросит читатель, разра-
ботчикам сайтов следует затачивать свои
изделия под все существующие на пла-
нете и в параллельных мирах браузе-
ры? Д о нет же! Достаточно лишь при-
держиваться при разработке не «доки»,
но стандарта от \МЗС. На самом деле
это очень просто. И сайт, разработан-
ный по стандарту, будет правильно ра-
ботать под любым браузером, который
тоже следует стандарту.
Думаю, ситуация будет меняться. Про-
цесс уже начался. С о временем все web-
разработчики перейдут на XHTML и бу-
дут строго блюсти стандарт, потому что
XHTML будет наиболее распространен-
ным языком разметки как среди компью-
терных браузеров, так и среди тех, что
встраиваются в мобильные телефоны. Уже
сейчас в последних предпочтение отда-
ется, наряду с W M L, также и XHTML. И
гегемонии «плохого» HTM L придет конец.
№ 45/320 08 ноября-15 ноября 2004
предыдущая страница 38 Мой Компьютер 2004 45 читать онлайн следующая страница 40 Мой Компьютер 2004 45 читать онлайн Домой Выключить/включить текст