home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The C Users' Group Library 1994 August
/
wc-cdrom-cusersgrouplibrary-1994-08.iso
/
listings
/
v_10_09
/
1009045a
< prev
next >
Wrap
Text File
|
1992-04-03
|
3KB
|
109 lines
/*** LISTING 3 ***/
/*** ***/
/*** vect.c ***/
/*** **************************************** ***/
/*** *** INITIALIZE SERIAL *** ***/
/*** **************************************** ***/
#include "serial.h"
extern int portbase;
void (interrupt far *oldvect)();
void InitSerial (int Com_Port)
{
Setvects(Com_Port);
EnableInt(Com_Port);
}
/*** ***************************************** ***/
/*** *** CLOSE SERIAL *** ***/
/*** ***************************************** ***/
void CloseSerial (int Com_Port)
{
DisableInt();
Resvects(Com_Port);
}
/*** **************************************** ***/
/*** *** SET INTERRUPT VECTORS *** ***/
/*** **************************************** ***/
void Setvects (int Com_Port)
{
switch (Com_Port)
{
case COM1: oldvect = getvect(0x0C);
setvect(0x0C,ReceiveData);
break;
case COM2: oldvect = getvect(0x0B);
setvect(0x0B,ReceiveData);
break;
case COM3: oldvect = getvect(0x0C);
setvect(0x0C,ReceiveData);
break;
case COM4: oldvect = getvect(0x0B);
setvect(0x0B,ReceiveData);
}
}
/*** **************************************** ***/
/*** *** RESET INTERRUPT VECTORS *** ***/
/*** **************************************** ***/
void Resvects (int Com_Port)
{
switch (Com_Port)
{
case COM1: setvect(0x0C,oldvect);
break;
case COM2: setvect(0x0B,oldvect);
break;
case COM3: setvect(0x0C,oldvect);
break;
case COM4: setvect(0x0B,oldvect);
}
}
/*** **************************************** ***/
/*** *** ENABLE INTERRUPTS *** ***/
/*** **************************************** ***/
void EnableInt (int Com_Port)
{
int New_Value;
New_Value = inp(portbase + MCR) | EN_INT;
outp(portbase + MCR,New_Value);
outp(portbase + IER,RX_INT);
if((Com_Port == COM1) || (Com_Port == COM3))
New_Value = inp(IMR) & IRQ4;
else if((Com_Port == COM2) || (Com_Port == COM4))
New_Value = inp(IMR) & IRQ3;
outp(IMR,New_Value);
}
/*** **************************************** ***/
/*** *** DISABLE INTERRUPTS *** ***/
/*** **************************************** ***/
void DisableInt (void)
{
int Old_Value;
Old_Value = inp(IMR) | ~IRQ3 | ~IRQ4;
outp(IMR,Old_Value);
outp(portbase + IER,0);
Old_Value = inp(portbase + MCR) & ~EN_INT;
outp(portbase + MCR,Old_Value);
}