home *** CD-ROM | disk | FTP | other *** search
/ ftp.wwiv.com / ftp.wwiv.com.zip / ftp.wwiv.com / pub / CEREBRUM / WAT9609.ZIP / SRC / WATTCPD.C < prev   
Text File  |  1994-11-28  |  1KB  |  53 lines

  1.  
  2. #include <stdlib.h>
  3. #include <wattcp.h>
  4.  
  5. extern void (*wattcpd)(void);
  6.  
  7. #define MAXD = 50;
  8.  
  9. static void (**backd)(void) = NULL;
  10. word lastd;             /* could be made static? */
  11.  
  12. static void dowattcpd( void )
  13. {
  14.     void (**p)(void) = backd;
  15.     int count = lastd;
  16.     do {
  17.         if ( *p ) (**p)();
  18.     } while ( count-- );
  19. }
  20.  
  21. int addwattcpd( void (*p)(void) )
  22. {
  23.     int i;
  24.     if ( wattcpd == NULL ) {
  25.         backd = calloc( MAXD, sizeof( void (*)()));
  26.         if ( backd ) wattcpd = dowattcpd;
  27.     }
  28.     for ( i = 0; i < MAXD ; ++i ) {
  29.         if ( backd[i] == NULL ) {
  30.             backd[i] = p;
  31.             break;
  32.         }
  33.     }
  34.     if ( i < MAXD ) {
  35.         if ( lastd <= i ) lastd = i+1;
  36.         return( 0 );
  37.     }
  38.     return( -1 );
  39. }
  40.  
  41. int delwattcpd( void (*p)(void) )
  42. {
  43.     int i, j;
  44.     for ( i = 0; i < MAXD; ++i )
  45.         if ( backd[i] == p ) {
  46.             backd[i] = NULL;
  47.             break;
  48.         }
  49.     for ( j = i+1 ; j < lastd ; ++j )
  50.         if ( backd[j] ) i = j;
  51.     lastd = i+1;
  52. }
  53.