#include "pilhas.h"

Pilha *Pcria(void)

{
    return Lcria();
}


void Pdestroi(Pilha *p)

{
    Ldestroi(p);
}


Pilha *Pesvazia(Pilha *p)

{
    return Lesvazia(p);
}


unsigned long Pquantos(Pilha *p)

{
    return Ltamanho(p);
}


Pilha *Ppoe(Pilha *p, void *d)

{
    return LinsereInicio(p, d);
}


void *Ptira(Pilha *p)

{
    return LretiraInicio(p);
}


#ifdef TESTE

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

int main(void)

{
    Pilha *p;
    int val, *pval;
    
    p = Pcria();
    
    do
    {
	printf("Valor a inserir (0 para sair, negativo para retirar): ");
	if(scanf("%d", &val) != 1)
	    return EXIT_FAILURE;
	if(val < 0)
	{
	    printf("Retirando: ");
	    if((pval = Ptira(p)) == 0)
		puts("Pilha vazia!");
	    else
	    {
		printf("Retirei %d.\n", *pval);
		free(pval);
	    }
	}
	else if(val > 0)
	{
	    printf("Inserindo: ");
	    if((pval = malloc(sizeof(int))) == 0)
		return EXIT_FAILURE;
	    *pval = val;
	    if(Ppoe(p, pval) == 0)
		puts("pilha cheia!");
	    else
		printf("Inseri %d.\n", val);
	}
    }
    while(val != 0);

    if(Pquantos(p) != 0)
    {
	printf("Retirando:");
	while((pval = Ptira(p)) != 0)
	{
	    printf(" %d", *pval);
	    free(pval);
	}
	putchar('\n');
    }
    
    Pdestroi(p);

    return EXIT_SUCCESS;
}

#endif