void CALLBACK_HandlerObject::Set_RealVec(Bit8u vec){ if(!vectorhandler.installed) { vectorhandler.installed=true; vectorhandler.interrupt=vec; RealSetVec(vec,Get_RealPointer(),vectorhandler.old_vector); } else E_Exit ("double usage of vector handler"); }
CALLBACK_HandlerObject::~CALLBACK_HandlerObject() { if (!installed) return; if (m_type == CALLBACK_HandlerObject::SETUP) { if (vectorhandler.installed) { // See if we are the current handler. if so restore the old one if (RealGetVec(vectorhandler.interrupt) == Get_RealPointer()) RealSetVec(vectorhandler.interrupt, vectorhandler.old_vector); else LOG(LOG_MISC,LOG_WARN)("Interrupt vector changed on %X %s", vectorhandler.interrupt, CALLBACK_GetDescription(m_callback)); } CALLBACK_RemoveSetup(m_callback); } else if (m_type == CALLBACK_HandlerObject::SETUPAT) E_Exit("Callback: SETUP at not handled yet."); else if (m_type == CALLBACK_HandlerObject::NONE) { // Do nothing. Merely DeAllocate the callback } else E_Exit("What kind of callback is this!"); if (CallBack_Description[m_callback]) delete [] CallBack_Description[m_callback]; CallBack_Description[m_callback] = 0; CALLBACK_DeAllocate(m_callback); }