home *** CD-ROM | disk | FTP | other *** search
/ Gold Fish 2 / goldfish_vol2_cd1.bin / files / dev / c / curses / src / wgetstr.c < prev    next >
C/C++ Source or Header  |  1994-02-21  |  3KB  |  103 lines

  1. /* -*-C-*-
  2.  *
  3.  *
  4.  * Filename : wgetstr.c
  5.  *
  6.  * Author   : Simon J Raybould.    (sie@fulcrum.bt.co.uk).
  7.  *
  8.  * Date     : Friday 23rd August 1991.
  9.  *
  10.  * Desc     : Read a string from the keyboard, provide del facility.
  11.  *
  12.  *
  13.  * THIS CODE IS NOT PUBLIC DOMAIN
  14.  * ==============================
  15.  * 
  16.  * This code is copyright Simon J Raybould 1991, all rights are reserved.
  17.  * All code, ideas, data structures and algorithms remain the property of the
  18.  * author. Neither the whole nor sections of this code may be used as part
  19.  * of other code without the authors consent. If you wish to use some of this
  20.  * code then please email me at (sie@fulcrum.bt.co.uk).
  21.  *
  22.  * This source is not public domain, so you do not have any right to alter it
  23.  * or sell it for personal gain. The source is provided purely for reference
  24.  * purposes. You may re-compile the source with any compiler you choose.
  25.  * You must not distribute altered copies without the authors consent. My
  26.  * intention is that the source will help people isolate any bugs much more
  27.  * effectivly.
  28.  *
  29.  * Disclaimer
  30.  * ==========
  31.  *
  32.  * No implication is made as to this code being fit for any purpose at all.
  33.  * I (the author) shall not be held responsible for any loss of data or damage 
  34.  * to property that may result from its use or misuse.
  35.  *
  36.  *
  37.  * Revision History
  38.  * ================
  39.  *
  40.  * $Log: wgetstr.c,v $
  41.  * Revision 1.3  1993/05/17  23:33:10  sie
  42.  * Underscores added to names.
  43.  * Changes for version 2.10
  44.  *
  45.  * Revision 1.2  1992/06/10  23:45:00  sie
  46.  * Added serial support.
  47.  *
  48.  * Revision 1.1  91/09/07  11:50:18  sie
  49.  * Initial revision
  50.  * 
  51.  *
  52.  */
  53.  
  54. static char *rcsid = "$Header: /SRC/lib/curses/src/RCS/wgetstr.c,v 1.3 1993/05/17 23:33:10 sie Exp $";
  55.  
  56. #include "acurses.h"
  57.  
  58.  
  59. wgetstr(WINDOW *WinPtr, char *ptr)
  60. {
  61.   char done = FALSE, *BuffStart;
  62.   unsigned char CbreakSet;  /* Used to restore after */
  63.   
  64.   if(!(_CursesFlags & CFLAG_INITSCR))  /* Haven't called initscr() */
  65.     return ERR;
  66.   
  67.   BuffStart = ptr;
  68.   
  69.   /* Will need to be in CBREAK mode for this */
  70.   CbreakSet = _CursesFlags & CFLAG_CBREAK;
  71.   cbreak();
  72.   while(!done) {
  73.     switch(*ptr = wgetch(WinPtr)) {
  74.     case -1:  /* wgetch() returned ERROR */
  75.       *ptr = '\0';
  76.       if(!CbreakSet)        /* if wasn't set then unset cbreak */
  77.     nocbreak();
  78.       return -1;
  79.     case '\n':
  80.     case '\r':
  81.       *ptr = '\0';
  82.       done = TRUE;
  83.       break;
  84.     case '\b':
  85.       if(--ptr < BuffStart)  /* Don't move before start */
  86.     ptr = BuffStart;
  87.       else if(_CursesFlags & CFLAG_ECHO) {
  88.     /* Do BS SP BS processing */
  89.     mvcur(_CursorLine, _CursorCol, _CursorLine, _CursorCol - 1);  /* BS */
  90.     _DoEcho(WinPtr, ' ');          /* SP */
  91.     mvcur(_CursorLine, _CursorCol, _CursorLine, _CursorCol - 1);  /* BS */
  92.       }
  93.       break;
  94.     default:
  95.       ptr++;
  96.       break;
  97.     }
  98.   }
  99.   if(!CbreakSet)        /* if wasn't set then unset cbreak */
  100.     nocbreak();
  101.   return 0;
  102. }
  103.