/* semplici primitive per la gestione di uno stack utilizzando un array. Il
 * tipo di dati gestito e' definito in stack.h */

#include<stdio.h>
#include<stdlib.h>
#include"stack.h"

#define ERR 1
#define OK 0

static stack_type *st;
static unsigned int numel=0, max;

/* inizializzazione */
int initSTACK(unsigned int nmax){
 max=nmax;
 return (st=malloc(sizeof(stack_type)*nmax))==NULL?-ERR:OK;
}

/* controlla se e' vuoto */
unsigned int isSTACKempty(void){
 return !numel;
}

/* controlla se e' pieno */
unsigned int isSTACKfull(void){
 return numel==max;
}

/* preleva un elemento dallo stack */
stack_type popSTACK(void){
  return st[--numel];
}

/* mette un elemento in cima allo stack */
void pushSTACK(stack_type a){
 st[numel++]=a;
}

void destroySTACK(void){
   free(st);
   }