Функция инициализации.
Для прикладной 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-программы эти адреса будут совпадать, а после запуска они будут различны.