home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1996 September / pcwk_09_96.iso / demo / wgelectr / pk51demo / files.2 / EXAMPLES / MEASURE / GETLINE.C < prev    next >
C/C++ Source or Header  |  1995-06-08  |  2KB  |  42 lines

  1. /*------------------------------------------------------------------------------
  2. GETLINE.C:  Line Edited Character Input
  3.  
  4. Copyright 1995 KEIL Software, Inc.
  5. ------------------------------------------------------------------------------*/
  6.  
  7. #include <stdio.h>
  8.  
  9. #define CNTLQ      0x11
  10. #define CNTLS      0x13
  11. #define DEL        0x7F
  12. #define BACKSPACE  0x08
  13. #define CR         0x0D
  14. #define LF         0x0A
  15.  
  16. /***************/
  17. /* Line Editor */
  18. /***************/
  19. void getline (char idata *line, unsigned char n)  {
  20.   unsigned char cnt = 0;
  21.   char c;
  22.  
  23.   do  {
  24.     if ((c = _getkey ()) == CR)  c = LF;    /* read character                 */
  25.     if (c == BACKSPACE  ||  c == DEL)  {    /* process backspace              */
  26.       if (cnt != 0)  {            
  27.         cnt--;                              /* decrement count                */
  28.         line--;                             /* and line pointer               */
  29.         putchar (0x08);                     /* echo backspace                 */
  30.         putchar (' ');
  31.         putchar (0x08);
  32.       }
  33.     }
  34.     else if (c != CNTLQ && c != CNTLS)  {   /* ignore Control S/Q             */
  35.       putchar (*line = c);                  /* echo and store character       */
  36.       line++;                               /* increment line pointer         */
  37.       cnt++;                                /* and count                      */
  38.     }
  39.   }  while (cnt < n - 1  &&  c != LF);      /* check limit and line feed      */
  40.   *line = 0;                                /* mark end of string             */
  41. }
  42.