Применяемая здесь функция входа в TSR-программу является более сложной, чем при использовании прерывания по печати экрана. Первым делом она должна сформировать прерывание 60, для того чтобы ввод с клавиатуры осуществлялся стандартной программой ввода. Большинство компиляторов Си имеют функцию генерации прерывания. В Турбо Си это функция geninterrupt(), параметром которой является номер того прерывания, которое вы хотите вызвать. После возврата из прерывания 60 ваша функция должна проверить содержимое очереди, адресуемое с помощью указателя начала, на предмет того, не была ли нажата "горячая клавиша". Для представленной здесь программы "горячими" являются клавиши F2 и F3 с позиционными кодами 60 и 61 соответственно. Нажатие "горячей клавиши" должно быть обнаружено прежде, чем управление будет передано прикладной части программы. Глобальная переменная busy используется для того, чтобы предотвратить одновременное использование обеих прикладных частей программы, поскольку большинство компиляторов Си не позволяют создавать повторно-входимые программы. Если одна из прикладных частей активна, то другой части активация в этот момент запрещена. Функция tsr_ap() приводится ниже.
/* Точка входа в прикладную часть TSR-программы */
void interrupt tsr_ap()
char far *t = (char far *) 1050; /* адрес указателя заголовка *
geninterrupt(60);
if(*t != *(t+2)) /* если не пустой */
t += *t - 30 + 5; /* перейти к позиции символа */
if(*t == 60 || *t == 61)
bioskey(0); /* сбросить клавиши F2/F5 */
if(!busy)
busy = !busy;
Следует отметить, что параметром функции window_main() является позиционный код "горячей клавиши", для того, чтобы она могла осуществить выбор соответствующей прикладной части.
/* создать окно */
window_main(which)
int which;
union inkey
char ch[2];
int i;
c;
int i;
char ch;
/* во-первых, создать рамку окна */
make_window(0," Notepad [F1 to exit] ", 5, 20, 17, 60, BORDER);