Keep
keep
Функция Осуществляет выход в DOS из программы, оставляя, тем не менее еe резидентной.
Синтаксис #include
void keep(unsigned char status, unsigned size);
Файл, содержащий dos.h прототип
Описание Функция keep осуществляет выход в DOS со статусом выхода в переменной status. Текущая программа, тем не менее, остается резидентной. Длина прог- раммы устанавливается в size параграфов, и оста- ток памяти освобождается. Функция keep может быть использована для установки резидентных программ (TSR). Функция keep использует функцию DOS 0x31.
Возвращаемое Отсутствует. значение
Переносимость Функция уникальна для DOS.
Смотрите также
Пример:
/* ПРИМЕЧАНИЕ: Это программа обработки прерывания. Если вы попытаетесь откомпилировать ее с включенной проверкой переполнения стека, то вы не !!! получите правильно работающей прог- раммы. Формула использованая в этой функции, вычисляю- щая число параграфом не обязательно будет работать во всех случаях. Используйте с осторожностью! Резидентные программы являются довольно сложными продуктами, и для них не обеспечивается дополнительная поддержка. Допол- нительную информацию вы найдете в технической докумен- тации по DOS */
#include
/* прерывание по таймеру */ #define INTR 0x1c /* атрибут экрана (голубой или серый) */ #define ATTR 0x7900 /* уменьшить размер стека и локальной памяти, чтобы сделать программу меньше */ extern unsigned _heaplen = 1024; extern unsigned _stklen = 512;
void interrupt (*oldhandler)();
void interrupt handler(void) { unsigned int (far *screen)[80]; static int count; /* для цветного адаптера адрес видеопамяти B800:0000, для монохромного B000:0000 */ screen = MK_FP(0x8000,0); /* увеличить счетчик, и взять его по модклю 10 */ count++; count %= 10; /* вывести число на экран */ screen[0][79] = count+'0'+ATTR; /* вызвать старую функцию обработки прерывания */ oldhandler(); } int main(void) { /* получить адрес текущей программы обработки прерываний по таймеру */ oldhandler = getvect(INTR); /* установить свою программу обработки прерывания */ setvect(INTR,handler); /* _psp содержит начальный адрес области памяти, в которой расположена ваша программа. Вершина стека определяет конец вашей программы. _SS и SP вместе дают конец стека. Возможно вам будет нужно добавить локальную память для собственных нужд, что делается следующим образом: (_SS + ((_SP + локальная память)/16) - _psp) */
keep(0,_SS+(_SP/16)-_psp); return 0; }