Enhanced version of Simon Ford's RPC demo program allowing command-line editing and providing interactive help. Includes Stream (Serial, etc.) line editing routine in separate files.

Dependencies:   mbed

Committer:
bikeNomad
Date:
Wed Feb 10 15:34:58 2010 +0000
Revision:
0:ec7de5c0199f

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bikeNomad 0:ec7de5c0199f 1 #include "mbed.h"
bikeNomad 0:ec7de5c0199f 2 // receive a line from a stream, allowing backspace editing,
bikeNomad 0:ec7de5c0199f 3 // and checking for buffer overflow. Terminates on either a \n or \r.
bikeNomad 0:ec7de5c0199f 4 size_t getline(Stream &s, char *buf, size_t bufsize)
bikeNomad 0:ec7de5c0199f 5 {
bikeNomad 0:ec7de5c0199f 6 char c;
bikeNomad 0:ec7de5c0199f 7 size_t receivedChars = 0;
bikeNomad 0:ec7de5c0199f 8 for(;;)
bikeNomad 0:ec7de5c0199f 9 {
bikeNomad 0:ec7de5c0199f 10 c = s.getc();
bikeNomad 0:ec7de5c0199f 11 if (c == '\r' || c == '\n')
bikeNomad 0:ec7de5c0199f 12 break;
bikeNomad 0:ec7de5c0199f 13 s.putc(c);
bikeNomad 0:ec7de5c0199f 14 if (c == '\b')
bikeNomad 0:ec7de5c0199f 15 {
bikeNomad 0:ec7de5c0199f 16 if (receivedChars > 0)
bikeNomad 0:ec7de5c0199f 17 {
bikeNomad 0:ec7de5c0199f 18 buf--;
bikeNomad 0:ec7de5c0199f 19 receivedChars--;
bikeNomad 0:ec7de5c0199f 20 }
bikeNomad 0:ec7de5c0199f 21 }
bikeNomad 0:ec7de5c0199f 22 else if (receivedChars < bufsize - 1)
bikeNomad 0:ec7de5c0199f 23 {
bikeNomad 0:ec7de5c0199f 24 *buf++ = c;
bikeNomad 0:ec7de5c0199f 25 receivedChars++;
bikeNomad 0:ec7de5c0199f 26 }
bikeNomad 0:ec7de5c0199f 27 }
bikeNomad 0:ec7de5c0199f 28 *buf++ = 0;
bikeNomad 0:ec7de5c0199f 29 s.putc('\n');
bikeNomad 0:ec7de5c0199f 30 s.putc('\r');
bikeNomad 0:ec7de5c0199f 31 return receivedChars;
bikeNomad 0:ec7de5c0199f 32 }