rem: register SLNode p,q, fix; register int k,m, ret;
add: register SLNode p, q, fix; register int k, ret;
context: void DoForSL(SkipList l, int (*function)(), void *arg){  register SLNode p,q, fix;  register int k,m, ret;  SLNode save[MaxNumberOfLevels], who[MaxNumberOfLevels];  void (*freeitem)() = l->freeitem;    if (l == NULL || l->header == NULL || function == NULL)    return;  p = l->header;       /* skip header node because it isn't a real node */  /* Save the initial header info   */  for(k=0; k < l->level; k++)   {     save[k] = p->forward[k];     who[k]  = p;   }  p = p->forward[0];      /* skip to the first data node */  while (p != NULL)   {     q = p->forward[0];     ret = (*function)(p->key, arg);     if (ret & SL_DELETE)      {    k = 0;    while(save[k] == p)     {       fix = who[k];       fix->forward[k] = p->forward[k];       save[k] = p->forward[k];       k++;     }    l->count--;         /* decrement the count of items */        if (freeitem)      (*freeitem)(p->key, arg);    free(p);      }     else      {    k = 0;    while(save[k] == p)     {       save[k] = p->forward[k];       who[k]  = p;       k++;     }      }          if (ret & SL_QUIT)       break;     p = q;    /* advance to the next one */   }}