wattcpd.c

来自「开放源码的编译器open watcom 1.6.0版的源代码」· C语言 代码 · 共 77 行

C
77
字号
/*
 *  Waterloo "background" daemon processes.
 *  Called from tcp retransmitter at each timer tick.
 *
 *  E. Engelke
 */

#include <stdio.h>
#include <stdlib.h>

#include "wattcp.h"
#include "pctcp.h"

#define MAX_DAEMONS  50

void (*wattcpd) (void) = NULL;

static void (**backd)(void) = NULL;
static int   lastd;

static void dowattcpd (void)
{
  void (**p)(void) = backd;
  int   count = lastd;
  do
  {
    if (*p)
      (**p)();
  }
  while (count--);
}

int addwattcpd (void (*p)())
{
  int i;

  if (!wattcpd)
  {
    backd = (void(**)()) calloc (MAX_DAEMONS, sizeof(void(*)()));
    if (backd)
       wattcpd = dowattcpd;
  }
  for (i = 0; i < MAX_DAEMONS; i++)
      if (!backd[i])
      {
        backd[i] = p;
        break;
      }

  if (i < MAX_DAEMONS)
  {
    if (lastd <= i)
        lastd = ++i;
    return (0);
  }
  return (-1);
}

int delwattcpd (void (*p)())
{
  int i, j;

  for (i = 0; i < MAX_DAEMONS; i++)
      if (backd[i] == p)
      {
        backd[i] = NULL;
        break;
      }

  for (j = i + 1; j < lastd; j++)
      if (backd[j])
         i = j;
  lastd = i + 1;
  return (0);
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?