home *** CD-ROM | disk | FTP | other *** search
/ gondwana.ecr.mu.oz.au/pub/ / Graphics.tar / Graphics / fermiVogle.tar.Z / fermiVogle.tar / devel / src / newtokens.c < prev    next >
C/C++ Source or Header  |  1996-02-07  |  814b  |  44 lines

  1. #include <stdio.h>
  2. #include "vogle.h"
  3.  
  4. static TokList        *current;
  5.  
  6. /*
  7.  * newtokens
  8.  *
  9.  *    returns the space for num tokens
  10.  */
  11. Token *
  12. newtokens(int num)
  13. {
  14.     TokList    *tl;
  15.     Token    *addr;
  16.     int    size;
  17.  
  18.     if (vdevice.tokens == (TokList *)NULL || num >= MAXTOKS - current->count) {
  19.         if ((tl = (TokList *)malloc(sizeof(TokList))) == (TokList *)NULL)
  20.             verror("newtokens: malloc returns NULL");
  21.  
  22.         if (vdevice.tokens != (TokList *)NULL)
  23.             current->next = tl;
  24.         else 
  25.             vdevice.tokens = tl;
  26.  
  27.         tl->count = 0;
  28.         tl->next = (TokList *)NULL;
  29.         if (num > MAXTOKS)
  30.             size = num;
  31.         else
  32.             size = MAXTOKS;
  33.         if ((tl->toks = (Token *)malloc(size * sizeof(Token))) == (Token *)NULL)
  34.             verror("newtokens: malloc returns NULL");
  35.  
  36.         current = tl;
  37.     }
  38.  
  39.     addr = ¤t->toks[current->count];
  40.     current->count += num;
  41.  
  42.     return(addr);
  43. }
  44.