Own version of getnstr() that always recognizes ^H and ^?; now always noecho(); mygetnstr() echoes if necessary.
git-svn-id: svn://katsu.triplehelix.org/dgamelaunch/trunk@128 db0b04b0-f4d1-0310-9a6d-de3e77497b0e
This commit is contained in:
parent
e61edfe9ee
commit
2e89c7c3be
2
Makefile
2
Makefile
|
@ -13,7 +13,7 @@ LDFLAGS =
|
|||
CFLAGS = -g3 $(optimize) -Wall -Wno-unused $(DEFS)
|
||||
INSTALL = install -c
|
||||
DEFS = -DVERSION=\"$(VERSION)\"
|
||||
SRCS = virus.c ttyrec.c dgamelaunch.c io.c ttyplay.c stripgfx.c strlcpy.c strlcat.c y.tab.c lex.yy.c
|
||||
SRCS = virus.c ttyrec.c dgamelaunch.c io.c ttyplay.c mygetnstr.c stripgfx.c strlcpy.c strlcat.c y.tab.c lex.yy.c
|
||||
OBJS = $(SRCS:.c=.o)
|
||||
LIBS = -lncurses -lcrypt -lutil -ll
|
||||
|
||||
|
|
|
@ -586,9 +586,7 @@ changepw ()
|
|||
|
||||
refresh ();
|
||||
|
||||
noecho ();
|
||||
getnstr (buf, 20);
|
||||
echo (); /* Putting echo back on just for safety and because it can't hurt. */
|
||||
mygetnstr (buf, 20, 0);
|
||||
|
||||
if (buf && *buf == '\0')
|
||||
return 0;
|
||||
|
@ -599,9 +597,7 @@ changepw ()
|
|||
mvaddstr (12, 1, "And again:");
|
||||
mvaddstr (13, 1, "=> ");
|
||||
|
||||
noecho ();
|
||||
getnstr (repeatbuf, 20);
|
||||
echo (); /* Here is the important echo(); if the former is removed. */
|
||||
mygetnstr (repeatbuf, 20, 0);
|
||||
|
||||
if (!strcmp (buf, repeatbuf))
|
||||
error = 0;
|
||||
|
@ -646,7 +642,7 @@ domailuser (char *username)
|
|||
"Enter your message here. It is to be one line only and 80 characters or less.");
|
||||
mvaddstr (7, 1, "=> ");
|
||||
|
||||
getnstr (message, 80);
|
||||
mygetnstr (message, 80, 1);
|
||||
|
||||
for (i = 0; i < strlen (message); i++)
|
||||
{
|
||||
|
@ -775,7 +771,7 @@ initncurses ()
|
|||
{
|
||||
initscr ();
|
||||
cbreak ();
|
||||
echo ();
|
||||
noecho ();
|
||||
nonl ();
|
||||
intrflush (stdscr, FALSE);
|
||||
keypad (stdscr, TRUE);
|
||||
|
@ -823,7 +819,7 @@ loginprompt ()
|
|||
|
||||
refresh ();
|
||||
|
||||
getnstr (user_buf, 20);
|
||||
mygetnstr (user_buf, 20, 1);
|
||||
|
||||
if (user_buf && *user_buf == '\0')
|
||||
return;
|
||||
|
@ -846,9 +842,7 @@ loginprompt ()
|
|||
|
||||
refresh ();
|
||||
|
||||
noecho ();
|
||||
getnstr (pw_buf, 20);
|
||||
echo ();
|
||||
mygetnstr (pw_buf, 20, 0);
|
||||
|
||||
if (passwordgood (pw_buf))
|
||||
{
|
||||
|
@ -893,7 +887,7 @@ newuser ()
|
|||
|
||||
refresh ();
|
||||
|
||||
getnstr (buf, 20);
|
||||
mygetnstr (buf, 20, 1);
|
||||
if (userexist (buf) == -1)
|
||||
error = 0;
|
||||
else
|
||||
|
@ -944,7 +938,7 @@ newuser ()
|
|||
mvaddstr (10, 1, "=> ");
|
||||
|
||||
refresh ();
|
||||
getnstr (buf, 80);
|
||||
mygetnstr (buf, 80, 1);
|
||||
|
||||
if (strchr (buf, ':') != NULL)
|
||||
graceful_exit (113);
|
||||
|
|
|
@ -83,4 +83,7 @@ extern void graceful_exit (int status);
|
|||
extern size_t strlcpy (char *dst, const char *src, size_t siz);
|
||||
extern size_t strlcat (char *dst, const char *src, size_t siz);
|
||||
|
||||
/* mygetnstr.c */
|
||||
extern int mygetnstr(char *buf, int maxlen, int doecho);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -0,0 +1,91 @@
|
|||
/*
|
||||
* Copyright (c) 2004, Jilles Tjoelker
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with
|
||||
* or without modification, are permitted provided that the
|
||||
* following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above
|
||||
* copyright notice, this list of conditions and the
|
||||
* following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the
|
||||
* above copyright notice, this list of conditions and
|
||||
* the following disclaimer in the documentation and/or
|
||||
* other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
||||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
||||
* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY
|
||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
||||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
|
||||
* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <ncurses.h>
|
||||
|
||||
/* Assumes noecho(). */
|
||||
/* As with getnstr(), maxlen does not include the '\0' character. */
|
||||
|
||||
int
|
||||
mygetnstr(char *buf, int maxlen, int doecho)
|
||||
{
|
||||
int c, i;
|
||||
|
||||
i = 0;
|
||||
for (;;)
|
||||
{
|
||||
c = getch();
|
||||
if (c == 8 || c == 127 || c == KEY_BACKSPACE || c == KEY_DC ||
|
||||
c == KEY_LEFT)
|
||||
{
|
||||
if (i > 0)
|
||||
{
|
||||
i--;
|
||||
if (doecho)
|
||||
addstr("\010 \010");
|
||||
}
|
||||
else
|
||||
beep();
|
||||
}
|
||||
else if (c == 21 || c == 24 || c == KEY_DL)
|
||||
{
|
||||
while (i > 0)
|
||||
{
|
||||
i--;
|
||||
if (doecho)
|
||||
addstr("\010 \010");
|
||||
}
|
||||
}
|
||||
else if ((c >= ' ' && c <= '~') || (c >= 0xA0 && c <= 0xFF))
|
||||
{
|
||||
if (i < maxlen)
|
||||
{
|
||||
buf[i] = c;
|
||||
i++;
|
||||
if (doecho)
|
||||
addch(c);
|
||||
}
|
||||
else
|
||||
beep();
|
||||
}
|
||||
else if (c == 10 || c == 13 || c == KEY_ENTER)
|
||||
break;
|
||||
else
|
||||
beep();
|
||||
}
|
||||
buf[i] = 0;
|
||||
return OK;
|
||||
}
|
||||
|
||||
/* vim:ts=8:cin:sw=4
|
||||
*/
|
Loading…
Reference in New Issue