// -*- Mode: Eagle -*-
//
// Routines to implement a stack made from a string array.
//

//
// Constants
//
int END_OF_STACK = -1;

//
// Global variables
//
string g_stack[];
int g_stack_ndx = 0;
int g_fwd_iter = 0;
int g_rev_iter = 0;

//
// Module variables
//

//
// Functions
//
void stack_init() {
	g_stack_ndx = 0;
}

string stack_pop() {
	if (g_stack_ndx > 0) {
		return g_stack[--g_stack_ndx];
	}
	return "EMPTY-STACK";
}

void stack_push(string astring) {
	g_stack[g_stack_ndx++] = astring;
}

string stack_elem(int n) {
  return g_stack[n];
}

int stack_count() {
	return g_stack_ndx;
}

void stack_sort() {
	sort(stack_count(), g_stack);
}

int stack_fwd_iter() {
	g_fwd_iter = 0;
	return g_fwd_iter;
}

int stack_fwd_next() {
	if (g_fwd_iter == END_OF_STACK)
		return END_OF_STACK;
	if (g_fwd_iter < (g_stack_ndx - 1)) {
		return ++g_fwd_iter;
	}
	g_fwd_iter = END_OF_STACK;
	return END_OF_STACK;
}
