// ******************** START OF CLASSIC.CPP ******************** // // #include #include "rs232.h" #include "pc8250.h" #include "_pc8250.h" #include "pcirq.h" #include "classic.h" void classic_isr( struct classic_data *isr_info ) { _enable(); int port = inp( isr_info->status_register ); port &= 7; if ( isr_info->data_pointers[ port ] ) isr_8250( isr_info->data_pointers[ port ] ); } ClassicHandler::ClassicHandler( irq_name irq_line, int status_register_address ) { int i; isr_info.status_register = status_register_address; for ( i = 0 ; i < 8 ; i++ ) isr_info.data_pointers[ i ] = 0; irq = irq_line; connected = ConnectToIrq( irq, &isr_info, (void (*)( void *)) classic_isr ); } ClassicHandler::~ClassicHandler( void ) { if ( connected == RS232_SUCCESS ) DisconnectFromIRQ( irq ); } RS232Error ClassicHandler::AddPort( RS232PortName port_name, struct isr_data_block *data ) { if ( connected != RS232_SUCCESS ) return connected; if ( isr_info.data_pointers[ port_name - COM5 ] ) return RS232_PORT_IN_USE; isr_info.data_pointers[ port_name - COM5 ] = data; return RS232_SUCCESS; } void ClassicHandler::DeletePort( RS232PortName port_name ) { isr_info.data_pointers[ port_name - COM5 ] = 0; } // ******************** END OF CLASSIC.CPP ********************