Listing 6

void push(stack *st, void *pvalue)
{
      if (st->stack_ptr == st->max stack)
             printf("Stack %s is full\n", st->stack_name);
      else
             switch (st->type) {

             case INT:
                    ((int *)st->pstack)[st->stack_ptr++] = *(int *)pvalue;
                    break;

             case LONG:
                    ((long *)st->pstack)[st->stack_ptr++] = *(long *)pvalue;
                    break;

             case DOUBLE:
                    ((double *)st->pstack)[st->stack_ptr++] = *(double *)pvalue;
                    break;
             }
}

void *pop(stack *st)
{
      if (st->stack_ptr == 0) {
             printf("Stack %s is empty\n", st->stack_name);
             return 0;
      }

      switch (st->type) {

      case INT:
             return &((int *)st->pstack)[-st->stack_ptr];
             break;

      case LONG:
             return &((long *)st->pstack)[-st->stack_ptr];
             break;

      case DOUBLE:
             return &((long *)st->pstack)[-st->stack_ptr];
             break;
      }
}

/* End of File */