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


Реентерабельность и проблемы резидентных программ в DOS - часть 6



if((*PDOSBUSY==0) &#38&#38 (WAITDOS&#62 0))
//Если флаг занятости DOS сброшен, а наш флаг


{ // взведен, то сбрасываем свой флаг...


putstr(" ",0,1);
WAITDOS=0;
SAVE; PROCKEY(); RESTORE;
}
}
//---------------------------------------------------------------------------


void interrupt BIOSDISK(bp,di,si,ds,es,dx,cx,bx,ax,ip,cs,flgs)
{ //Обработка перехваченного прерывания INT 13h


DISKFLAG++; //Взводим признак занятости дисковой подсистемы


(*DISKSAV)(); //Вызываем прерывание по старому вектору


newscrit(); //Сохраняем флаги ...


ax=_AX; //... и регистры ...


cx=_CX;
dx=_DX;
flgs=cflag; //... возвращаем флаги.


DISKFLAG --; //Сбрасываем признак занятости дисковой подсистемы.


if (WAITDISK&#62 0) //Если наш флаг взведен, то сбрасываем его,


{
WAITDISK=0;
putstr(" ",20,1);
SAVE; PROCKEY(); RESTORE;
}
}
//----------------------------------------------------------------------------


void interrupt TIMER(bp,di,si,ds,es,dx,cx,bx,ax,ip,cs,flgs)
{ //Обработка перехваченного прерывания от таймера.


if (LEVEL==0)
{
SAVE; //Переключиться на внутренний стек


if (WAITBIOS&#62 0) //Если установлен флаг занятости BIOS, то сбрасываем его


{ // и пытаемся выполнить отложенные действия


putstr(" ",40,1);
WAITBIOS=0;
PROCKEY();
}
if ((WAITDOS&#62 0) &#38&#38 (*PDOSBUSY==0))
//Если взведен наш флаг занятости DOS, а


{ // системный флаг занятости DOS сброшен, то


putstr(" ",0,1);
WAITDOS=0; // сбрасываем свой флаг


PROCKEY(); // и пытаемся выполнить отложенные действия


}
RESTORE; //Восстанавливаем внешний стек.


}
(*TIMSAV)(); //Вызвать сохраненный обработчик прерывания от таймера.


}
//----------------------------------------------------------------------


void main()
{ int i; unsigned n , far *b; char sx[3];
if ((SP = new char[NSTACK])==NULL) goto fatal;
printf("Синхронизация DOS(y/n):"); scanf("%s",sx);
if (sx[0]!='y') WAITDOS=-1;
printf("Синхронизация DISK(y/n):"); scanf("%s",sx);



Начало  Назад  Вперед



Книжный магазин