rem: register int k,m;
add: register int k;
context: void DoForRangeSL(SkipList l, void *key, int (*compare)(), int (*func)(),          void *arg){  register int k,m;  SLNode update[MaxNumberOfLevels];  register SLNode p,q;  void (*freeitem)() = l->freeitem;  int  ret;  p = l->header;  for(k=l->level-1; k >= 0; k--)   {     while((q = p->forward[k]) && (*compare)(q->key, key) < 0)    p = q;     update[k] = p;   }  p = p->forward[0];  if (p == NULL || (*compare)(p->key, key) != 0)   /* then nothing matched */    return;  do   {     q = p->forward[0];            /* save next pointer */     ret = (*func)(p->key, arg);          if (ret & SL_DELETE)      {    for(k=0; k < l->level && update[k] && update[k]->forward[k] == p; k++)      update[k]->forward[k] = p->forward[k];    l->count--;         /* decrement the count of items */        if (freeitem)      (*freeitem)(p->key, arg);    free(p);      }          if (ret & SL_QUIT)       break;     p = q;    /* advance to the next one */   }  while(p != NULL && (*compare)(p->key, key) == 0);}