Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

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;

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог