Информатика и технология программирования


           

Если установлен флаг занятости 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(&#38rg,&#38rg); //

CtrlBrk=rg.h.dl; // и запомнить эту реакцию

rg.x.ax=0x3301; // Установить реакцию на CTRL/BREAK:

rg.h.dl=0; // запретить остановку программы по CTRL/BREAK.

intdos(&#38rg,&#38rg); //

}

void RESTORECONTEXT() //Восстановление контекста прерванной задачи

{
setdta(DTAI); //Восстановить DTA прерванной программы,

*PSPADR=PSPI; //PSP,

setvect(0x24,old24); //вектор 24h (реакция на фатальную ошибку),

rg.x.ax=0x3301; //восстановить реакцию на CTRL/BREAK.

rg.h.dl=CtrlBrk;
intdos(&#38rg,&#38rg);
}

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 &#38 0xFF00) &#62= 0xC000)

Содержание  Назад  Вперед





Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий