Описание функций Си

       

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; }



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