This is stack.c in view mode; [Download] [Up]
#include <stdio.h>
#include "enum.h"
#include "ooglutil.h"
#define CHUNKSIZE 10000
typedef struct entry {char word[MAXDEPTH]; } entry;
static entry *stack = NULL, *old, *oldtop, *oldbase, *new;
static int numchunks = 1;
/* new points to the next empty space in the stack */
/* old points to the first non-empty space in the stack */
init_stack()
{
if (stack) OOGLFree(stack);
stack = OOGLNewN(entry, CHUNKSIZE);
if (stack == NULL) exit(fprintf(stderr,"init_stack: no space\n"));
old = oldbase = new = stack;
oldtop = stack - 1;
}
make_new_old()
{
/* oldbase and oldtop are inclusive limits if non-empty words */
oldbase = oldtop+1;
old = oldtop = new-1;
}
char *
pop_old_stack()
{
if (old >= oldbase) return((old--)->word);
else return(NULL);
}
push_new_stack(word)
char *word;
{
entry * oldstack;
if (new >= stack + numchunks * CHUNKSIZE)
{
oldstack = stack;
numchunks *= 2;
if ((stack = OOGLRenewN(entry, stack, numchunks * CHUNKSIZE )) == (entry *) NULL) return (0);
new = (entry *) stack + (new - oldstack);
old = (entry *) stack + (old - oldstack);
oldtop = (entry *) stack + (oldtop - oldstack);
oldbase = (entry *) stack + (oldbase - oldstack);
if (stack == NULL)
exit(fprintf(stderr,"push_new_stack: no space\n"));
}
strcpy(new->word, word);
new++;
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.