CodeNet / Языки программирования / C / C++ / Руководства и справочные материалы по C/C++ / Справочники по функциям / Справочник по функциям C/C++
keep
keep
Функция Осуществляет выход в DOS из программы, оставляя, тем не менее еe резидентной. Синтаксис #include<dos.h> void keep(unsigned char status, unsigned size); Файл, содержащий dos.h прототип Описание Функция keep осуществляет выход в DOS со статусом выхода в переменной status. Текущая программа, тем не менее, остается резидентной. Длина программы устанавливается в size параграфов, и остаток памяти освобождается. Функция keep может быть использована для установки резидентных программ (TSR). Функция keep использует функцию DOS 0x31. Возвращаемое Нет. значение Переносимость Функция уникальна для DOS. Функция не совместима с Windows. Смотрите также abort, exit. Пример: /* ПРИМЕЧАНИЕ: Это программа обработки прерывания. Если вы попытаетесь откомпилировать ее с включенной проверкой переполнения стека, то вы не !!! получите правильно работающей программы. Формула использованая в этой функции, вычисляющая число параграфом не обязательно будет работать во всех случаях. Используйте с осторожностью! Резидентные программы являются довольно сложными продуктами, и для них не обеспечивается дополнительная поддержка. Дополнительную информацию вы найдете в технической документации по DOS */ #include<dos.h> /* прерывание по таймеру */ #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;