Listing 6 (ring.c) Ring Buffer Routines
#include "char.h" /* * r_write() * * r_write() puts a byte in the buffer. when is the buffer full? * when writing 1 more byte would set the read and write indices * equal to each other (which means the buffer is empty!!). does * nothing but return if it can't write the byte without * overflowing the buffer... if this was a real multi-tasking * system, we could sleep until somebody reads a byte, which * would allow us to do our write, but it isn't, so... */ void r_write(c) char c; { if (((w_index + 1) & RLIMIT) == r_index) return; r_buf[ w_index++ ] = c; w_index &= RLIMIT; /* wrap the index around */ } /* * r_puti() * * r_puti() converts a small (0 - 99) decimal number into two * ASCII digits and put them in the ring buffer */ void r_puti(c) char c; { r_write((c / 10) + '0'); r_write((c % 10) + '0'); }