Если установлен флаг занятости DOS
PSPI=*PSPADR; // Запоминаем идентификатор процесса
// (PSP прерванного процесса).
*PSPADR=PSP; // Устанавливаем свой PSP
DTAI=getdta(); // Запоминаем DTA прерванного процесса.
setdta(DTA); // Устанавливаем свой DTA
old24=getvect(0x24); // Запоминаем 24h вектор (адрес подпрограммы )
// реакции на фатальную ошибку)
setvect(0x24,(void interrupt(far*)(...))newscrit);
// Ставим свой вектор
rg.x.ax=0x3300; // Проверить реакцию на CTRL/BREAK,
intdos(&rg,&rg); //
CtrlBrk=rg.h.dl; // и запомнить эту реакцию
rg.x.ax=0x3301; // Установить реакцию на CTRL/BREAK:
rg.h.dl=0; // запретить остановку программы по CTRL/BREAK.
intdos(&rg,&rg); //
}
void RESTORECONTEXT() //Восстановление контекста прерванной задачи
{
setdta(DTAI); //Восстановить DTA прерванной программы,
*PSPADR=PSPI; //PSP,
setvect(0x24,old24); //вектор 24h (реакция на фатальную ошибку),
rg.x.ax=0x3301; //восстановить реакцию на CTRL/BREAK.
rg.h.dl=CtrlBrk;
intdos(&rg,&rg);
}
void PROCESS1() // Пример процесса, создающего файл
{ // средствами DOS
int fd;
if((fd=_creat(fname,0)) == -1) return;
fname[0]++;
char *p="Это строка из резидента\n\r";
_write(fd,(void*)p,strlen(p+1));
_close(fd);
}
void PROCKEY() // Обработка горячих клавиш
{ // с проверкой всех возможных условий
if (NKEY==0) return; // Нет кода - нечего обрабатывать
if (FORKH) return; // Исключение повторного входа (с потеря запроса)
if (WAITDOS !=-1) // Проверка на занятость DOS
{
if (*PDOSBUSY) // Если установлен флаг занятости DOS ...
{ putstr("Wait DOS ",0,1);
WAITDOS=1; // Взводим свой флаг и выходим
return;
}
}
if (WAITDISK !=-1) // Проверка занятости диска по прерыванию 13h
{
if (DISKFLAG) // Если дисковая подсистема занята ...
{ putstr("Wait DISK",20,1);
WAITDISK=1; // Взводим свой флаг и выходим
return;
}
}
if (WAITBIOS !=-1) // Проверка занятости BIOS - прерывание
{ // основного процесса в сегменте BIOS
if ((CS & 0xFF00) >= 0xC000)
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий