 <font face="courier new">

/* ////////////////////////////////////////////////////////////////////////////
                               Names for Numbers
//////////////////////////////////////////////////////////////////////////// */

#define RX_BUFF_SIZE    10              /* Must be less than 256 */

/* ////////////////////////////////////////////////////////////////////////////
                               Module Variables
//////////////////////////////////////////////////////////////////////////// */

char            rx_buff[RX_BUFF_SIZE];  /* Circular UART receive buffer */
unsigned char   rx_in;                  /* Next emtpy spot in rx_buff[] */
unsigned char   rx_out;                 /* Oldest byte in rx_buff[] */

/* ////////////////////////////////////////////////////////////////////////////
                               serial_handler()
///////////////////////////////////////////////////////////////////////////////
DESCRIPTION:    This is the interrupt handler for the on-board serial port.

REVISIONS:      19 APR 98 - RAC - Lifted from the DART II Code
//////////////////////////////////////////////////////////////////////////// */

interrupt [0x23] void serial_handler() {
    if (RI0) {                                  /* It's a receive interrupt */
        RI0 = 0;                                /* Clear the interrupt */
        rx_buff[rx_in++] = SBUF0;               /* Put new byte in buffer */
        if (rx_in == RX_BUFF_SIZE) {            /* Just reached buffer end */
            rx_in = 0;                          /* Wrap to the beginning */
            }                                   /* End 'reached buffer end' */
        }                                       /* End 'receive interrupt' */
    }                                           /* End serial_handler() */

/* ////////////////////////////////////////////////////////////////////////////
                                    kbhit()
                                    getch()
///////////////////////////////////////////////////////////////////////////////
DESCRIPTION:    kbhit() indicates whether or not unread data has accumulated in
                the serial input buffer.  getch() waits for such data and
                returns the oldest character in the buffer.

REVISIONS:      19 APR 98 - RAC - Adapted from the DART II code.
//////////////////////////////////////////////////////////////////////////// */

char kbhit() {                                  /* The buffer contains data */
    return (rx_in != rx_out);                   /*  if the in and out */
    }                                           /*  indexes are different */

/* ///////////////////////////////////////////////////////////////////////// */

char getch() {

    char        rv;                             /* Put return character here */

    while (!kbhit()) ;                          /* Wait for a character */
    rv = rx_buff[rx_out++];                     /* Grab byte from rx buffer */
    if (rx_out == RX_BUFF_SIZE) {               /* Just reached buffer end */
        rx_out = 0;                             /* Wrap to the beginning */
        }                                       /* End 'reached buffer end' */
    return rv;                                  /* The answer */
    }                                           /* End getch() */

</font> 