home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / INFO / C / DLIBSSRC.ZIP / GETLN.C < prev    next >
Encoding:
C/C++ Source or Header  |  1987-09-24  |  1020 b   |  48 lines

  1. #define    KEY_UNDO    0x1B        /* escape */
  2. #define    KEY_CR        0x0D
  3. #define    KEY_LF        0x0A
  4. #define    KEY_BS        0x08
  5. #define    KEY_DEL        0x7F
  6.  
  7. char *getln(ip, get, put, buffer, limit)
  8. char *ip;
  9. register int (*get)();
  10. register int (*put)();
  11. char *buffer;
  12. register int limit;
  13. /*
  14.  *    Get a line of input from the user.  Allow simple editing of the line
  15.  *    with BS/DEL, ESC, and CR/LF to terminate input.  Characters are
  16.  *    retreived by a (*get)(ip) and echoed with (*put)().  A pointer to
  17.  *    <buffer> is returned in any case.
  18.  */
  19. {
  20.     register char *bp = buffer;
  21.     register int c, i = 0;
  22.  
  23.     for(;;) {
  24.         c = (*get)(ip) & 0xFF;
  25.         if(c == KEY_UNDO) {
  26.             *(bp = buffer) = '\0';
  27.             i = 0;
  28.             break;
  29.         }
  30.         else if((c == KEY_CR) || (c == KEY_LF)) {
  31.             *bp = '\0';
  32.             break;
  33.         }
  34.         else if(((c == KEY_BS) || (c == KEY_DEL)) && (bp != buffer)) {
  35.             --bp;
  36.             (*put)('\b');
  37.             (*put)(' ');
  38.             (*put)('\b');
  39.             --i;
  40.         }
  41.         else if((c >= ' ') && (i < limit)) {
  42.             (*put)(*bp++ = c);
  43.             ++i;
  44.         }
  45.     }
  46.     return(buffer);
  47. }
  48.