#include <8052.h>

unsigned char __idata ReceiveBuffer[0x20];

void ReceiveString (void)
{
  unsigned char __idata *rptr = ReceiveBuffer;
  unsigned char c;

  do
    {
      do
        {
          while (!RI)           // wait until character received
            ;
          c = SBUF;
          RI = 0;
        }
      while (c & 0x80);         // if unprintable (>= 80h), ignore it

      SBUF = c;                 // echo it

      if (c < 0x20)             // ctrl char?
        {
          if (c == 0x08 && rptr != ReceiveBuffer)
            rptr--;             // if BackSpace, eat last character from buffer
        }
      else
          *rptr++ = c;          // put it into buffer

      if (rptr == &ReceiveBuffer[sizeof ReceiveBuffer - 1] + 1) // not in original code
        rptr = &ReceiveBuffer[sizeof ReceiveBuffer - 1];        // prevent buffer overflow
    }
  while (c != 0x13);

  *rptr = 0;                    // end of string, not in original code
}
