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.
getline.cpp@0:ec7de5c0199f, 2010-02-10 (annotated)
- Committer:
- bikeNomad
- Date:
- Wed Feb 10 15:34:58 2010 +0000
- Revision:
- 0:ec7de5c0199f
Who changed what in which revision?
User | Revision | Line number | New 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 | } |