С для профессиональных программистов

       

Функция инициализации.


Для прикладной TSR-программы, представленной в данном разделе, требуется небольшая по объему программа инициализации. Она оформлена в виде функции main(), которая приводится ниже.

main()

struct address

char far *p;

 temp;

/* указатель вектора прерывания 9 */

struct address far *addr = (struct address far *) 36;

/* указатель вектора прерывания 60 */

struct address far *int9 = (struct address far *) 240;

/* Поместить адрес обработки прерывания от клавиатуры

в вектор прерывания 60. Если вектора прерываний 60 и

61 содержат одинаковые адреса, то TSR-программа не

была запущена.

*/

if(int9->p == (int9+1)->p)

int9->p = addr->p;

addr->p = (char far *) tsr_ap;

printf("tsr installed - F2 for note pad, F3 for calculator ");

 else

printf ("tsr application already initialized\n ");

exit(1);



 

set_vid_mem();

tsr(2000);

Следует отметить, что данная версия программы не допускает, чтобы ее запускали более одного раза в течение одного сеанса работы. Это связано с тем, что повторный запуск программы приведет к записи адреса точки входа в TSR-программу в таблицу векторов по адресу 60-го прерывания, а содержавшийся там адрес программы реакции на нажатие клавиши будет запорчен. Во время работы функции проверяется, совпадает ли содержимое таблицы векторов, соответствующее прерываниям 60 и 61. (Прерывание 61 также не используется DOS). DOS обрабатывает все неиспользуемые ею прерывания одной и той же программой обработки недопустимого прерывания. Следовательно, перед запуском TSR-программы эти адреса будут совпадать, а после запуска они будут различны.



Содержание раздела