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 >
Text File  |  1992-04-03  |  3KB  |  109 lines

  1. /***                 LISTING 3                ***/
  2. /***                                          ***/
  3. /***                  vect.c                  ***/
  4. /*** **************************************** ***/
  5. /*** ***        INITIALIZE SERIAL         *** ***/
  6. /*** **************************************** ***/
  7. #include "serial.h"
  8.  
  9. extern  int portbase;
  10.  
  11. void (interrupt far *oldvect)();
  12.  
  13. void InitSerial (int Com_Port)
  14. {
  15.   Setvects(Com_Port);
  16.   EnableInt(Com_Port);
  17. }
  18.  
  19. /*** ***************************************** ***/
  20. /*** ***           CLOSE SERIAL            *** ***/
  21. /*** ***************************************** ***/
  22. void CloseSerial (int Com_Port)
  23. {
  24.   DisableInt();
  25.   Resvects(Com_Port);
  26. }
  27.  
  28. /*** **************************************** ***/
  29. /*** ***      SET INTERRUPT VECTORS       *** ***/
  30. /*** **************************************** ***/
  31. void Setvects (int Com_Port)
  32.   {
  33.     switch (Com_Port)
  34.     {
  35.      case COM1:   oldvect = getvect(0x0C);
  36.           setvect(0x0C,ReceiveData);
  37.           break;
  38.  
  39.      case COM2:   oldvect = getvect(0x0B);
  40.           setvect(0x0B,ReceiveData);
  41.           break;
  42.  
  43.      case COM3:   oldvect = getvect(0x0C);
  44.           setvect(0x0C,ReceiveData);
  45.           break;
  46.  
  47.      case COM4:   oldvect = getvect(0x0B);
  48.           setvect(0x0B,ReceiveData);
  49.     }
  50. }
  51.  
  52. /*** **************************************** ***/
  53. /*** ***      RESET INTERRUPT VECTORS     *** ***/
  54. /*** **************************************** ***/
  55. void Resvects (int Com_Port)
  56. {
  57.   switch (Com_Port)
  58.     {
  59.        case COM1:    setvect(0x0C,oldvect);
  60.              break;
  61.  
  62.        case COM2:    setvect(0x0B,oldvect);
  63.              break;
  64.  
  65.        case COM3:    setvect(0x0C,oldvect);
  66.              break;
  67.  
  68.        case COM4:    setvect(0x0B,oldvect);
  69.      }
  70. }
  71.  
  72. /*** **************************************** ***/
  73. /*** ***        ENABLE INTERRUPTS         *** ***/
  74. /*** **************************************** ***/
  75. void EnableInt (int Com_Port)
  76. {
  77.   int New_Value;
  78.  
  79.   New_Value = inp(portbase + MCR) | EN_INT;
  80.   outp(portbase + MCR,New_Value);
  81.  
  82.   outp(portbase + IER,RX_INT);
  83.  
  84.   if((Com_Port == COM1) || (Com_Port == COM3))
  85.      New_Value = inp(IMR) & IRQ4;
  86.  
  87.   else if((Com_Port == COM2) || (Com_Port == COM4))
  88.      New_Value = inp(IMR) & IRQ3;
  89.  
  90.   outp(IMR,New_Value);
  91. }
  92.  
  93. /*** **************************************** ***/
  94. /*** ***       DISABLE INTERRUPTS         *** ***/
  95. /*** **************************************** ***/
  96. void DisableInt (void)
  97. {
  98.   int Old_Value;
  99.  
  100.    Old_Value = inp(IMR) | ~IRQ3 | ~IRQ4;
  101.    outp(IMR,Old_Value);
  102.    outp(portbase + IER,0);
  103.  
  104.    Old_Value = inp(portbase + MCR) & ~EN_INT;
  105.    outp(portbase + MCR,Old_Value);
  106. }
  107.  
  108.  
  109.