www.pudn.com > TRAFFIC.rar > GETLINE.C


/******************************************************************************/ 
/*                                                                            */ 
/*      GETLINE.C:  Line Edited Character Input                               */ 
/*                                                                            */ 
/******************************************************************************/ 
 
#include  
 
#define CNTLQ      0x11 
#define CNTLS      0x13 
#define DEL        0x7F 
#define BACKSPACE  0x08 
#define CR         0x0D 
#define LF         0x0A 
 
/***************/ 
/* Line Editor */ 
/***************/ 
void getline (char idata *line, unsigned char n)  { 
  unsigned char cnt = 0; 
  char c; 
 
  do  { 
    if ((c = _getkey ()) == CR)  c = LF;    /* read character                 */ 
    if (c == BACKSPACE  ||  c == DEL)  {    /* process backspace              */ 
      if (cnt != 0)  {             
        cnt--;                              /* decrement count                */ 
        line--;                             /* and line pointer               */ 
        putchar (0x08);                     /* echo backspace                 */ 
        putchar (' '); 
        putchar (0x08); 
      } 
    } 
    else if (c != CNTLQ && c != CNTLS)  {   /* ignore Control S/Q             */ 
      putchar (*line = c);                  /* echo and store character       */ 
      line++;                               /* increment line pointer         */ 
      cnt++;                                /* and count                      */ 
    } 
  }  while (cnt < n - 1  &&  c != LF);      /* check limit and line feed      */ 
  *line = 0;                                /* mark end of string             */ 
}