Select Git revision
Forked from
Peter Gerwinski / bs
Source project has a limited visibility.
fifo-1.c 1.10 KiB
#include <stdio.h>
#include <stdlib.h>
#define FIFO_SIZE 42
int fifo[FIFO_SIZE];
int fifo_pointer = 0;
void fatal_error (char *msg)
{
fprintf (stderr, "%s\n", msg);
exit (1);
}
void push (int x)
{
if (fifo_pointer < 0 || fifo_pointer >= FIFO_SIZE)
fatal_error ("fifo overflow");
else
fifo[fifo_pointer++] = x;
}
int pop (void)
{
if (fifo_pointer < 1 || fifo_pointer > FIFO_SIZE)
{
fatal_error ("fifo underflow");
return 0;
}
else
return fifo[--fifo_pointer];
}
void dump (void)
{
if (fifo_pointer < 0)
fatal_error ("fifo underflow");
else if (fifo_pointer >= FIFO_SIZE)
fatal_error ("fifo overflow");
else if (fifo_pointer == 0)
printf ("fifo is empty\n");
else
{
printf ("fifo:");
for (int i = 0; i < fifo_pointer; i++)
printf (" %d", fifo[i]);
printf ("\n");
}
}
int main (void)
{
dump ();
push (7);
dump ();
push (13);
dump ();
push (42);
dump ();
printf ("%d\n", pop ()); /* 42 */
dump ();
printf ("%d\n", pop ()); /* 13 */
dump ();
printf ("%d\n", pop ()); /* 7 */
dump ();
return 0;
}