home *** CD-ROM | disk | FTP | other *** search
/ ftp.wwiv.com / ftp.wwiv.com.zip / ftp.wwiv.com / pub / CEREBRUM / WAT9609.ZIP / SRC / NETBACK.C < prev    next >
Text File  |  1994-11-28  |  964b  |  48 lines

  1. #include <stdio.h>
  2. #include <dos.h>
  3. #include <tcp.h>
  4. #include <elib.h>
  5.  
  6. static char tempstack[ 4096 ];
  7. static int oldss, oldsp;
  8. static void interrupt (*oldinterrupt)(void);
  9. static void (*userroutine)(void) = NULL;
  10. static int inside = 0;
  11.  
  12. static void interrupt newinterrupt( void )
  13. {
  14.     (*oldinterrupt)();
  15.     disable();
  16.     if (!sem_up( &inside )) {
  17.         oldss = _SS;
  18.         oldsp = _SP;
  19.         _SP = FP_OFF( &tempstack[ sizeof( tempstack ) - 4 ] );
  20.         _SS = FP_SEG( tempstack );
  21.         enable();
  22.         if (userroutine) (*userroutine)();
  23.         tcp_tick( NULL );
  24.         disable();
  25.         _SP = oldsp;
  26.         _SS = oldss;
  27.         inside = 0;
  28.     }
  29.     enable();
  30. }
  31.  
  32. void backgroundon( void )
  33. {
  34.     oldinterrupt = getvect( 0x08 );
  35.     setvect( 0x08, newinterrupt );
  36. }
  37.  
  38. void backgroundoff( void )
  39. {
  40.     setvect( 0x08, oldinterrupt );
  41. }
  42.  
  43. void backgroundfn( void (*fn)(void) )
  44. {
  45.     userroutine = fn;
  46. }
  47.  
  48.