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

#define STACK_MAX  20               /* ????????????????????? */
#define STACK_OK   0x8000           /* ???????????????????????¨???????????? */
#define STACK_FULL STACK_OK + 1     /* ?????????????????????????¶?????????¨??????????????? */
#define STACK_END  STACK_OK + 2     /* ?????????????????????????????¨???????????? */
/* ??¢??°???????????????????????£?¨? */
int     push(int);          /* ???????????????????????????????????¢??° */
int     pop(void);          /* ????????????????????????????????????????????¢??° */
void    print_stack(void);  /* ???????????????????????????????????¨???????????¢??° */
/* ??°?????????????????° */
int     stack[STACK_MAX];   /* ?????????????????? [0] - [19] */
int     stack_pointer = 0;  /* ???????????????????????? */

void main(void)
{
    int     data[10] = { 1,2,3,4,5,6,7,8,9,10 };
    int     x, n;
    char    buff[80];

    for(x = 0; x < 10; ++x){
        printf("%d??´??°????????????????????????\n", data[x]);
        push(data[x]);      /* ????????????????????????????????? */
        print_stack();
        printf("Hit RETURN key ");
        gets(buff);
    }
    while(1){
        n = pop();          /* ?????????????????????????????? */
        if(n == STACK_END){
            printf("??????????????????????????? \n");
            break;
        }
        printf("%d ", n);
    }
    printf("\n");
}
int push(int d)
{
    if(stack_pointer >= STACK_MAX)  /* ????????????????????????????????§ */
        return(STACK_FULL);         /* STACK_FULL????????? */
    stack[stack_pointer] = d;       /* ????????????????????????????´? */
    ++stack_pointer;                /* ???????????????????????????1?????? */
    return(STACK_OK);               /* STACK_OK????????? */
}
int pop(void)
{
    if(stack_pointer == 0)          /* ???????????????????????????0 */
        return(STACK_END);          /* STACK_END????????? */
    --stack_pointer;                /* ??????????????????????????????1?????? */
    return(stack[stack_pointer]);   /* ????????????????????????????????? */
}
void print_stack(void)
{
    int     i;

    for(i = stack_pointer - 1; i >= 0; --i)
        printf("%4d", stack[i]);
    printf("\n");
}