mirror of
https://github.com/paxed/dgamelaunch.git
synced 2025-07-29 00:25:03 +02:00
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)
|
CFLAGS = -g3 $(optimize) -Wall -Wno-unused $(DEFS)
|
||||||
INSTALL = install -c
|
INSTALL = install -c
|
||||||
DEFS = -DVERSION=\"$(VERSION)\"
|
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)
|
OBJS = $(SRCS:.c=.o)
|
||||||
LIBS = -lncurses -lcrypt -lutil -ll
|
LIBS = -lncurses -lcrypt -lutil -ll
|
||||||
|
|
||||||
|
@ -586,9 +586,7 @@ changepw ()
|
|||||||
|
|
||||||
refresh ();
|
refresh ();
|
||||||
|
|
||||||
noecho ();
|
mygetnstr (buf, 20, 0);
|
||||||
getnstr (buf, 20);
|
|
||||||
echo (); /* Putting echo back on just for safety and because it can't hurt. */
|
|
||||||
|
|
||||||
if (buf && *buf == '\0')
|
if (buf && *buf == '\0')
|
||||||
return 0;
|
return 0;
|
||||||
@ -599,9 +597,7 @@ changepw ()
|
|||||||
mvaddstr (12, 1, "And again:");
|
mvaddstr (12, 1, "And again:");
|
||||||
mvaddstr (13, 1, "=> ");
|
mvaddstr (13, 1, "=> ");
|
||||||
|
|
||||||
noecho ();
|
mygetnstr (repeatbuf, 20, 0);
|
||||||
getnstr (repeatbuf, 20);
|
|
||||||
echo (); /* Here is the important echo(); if the former is removed. */
|
|
||||||
|
|
||||||
if (!strcmp (buf, repeatbuf))
|
if (!strcmp (buf, repeatbuf))
|
||||||
error = 0;
|
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.");
|
"Enter your message here. It is to be one line only and 80 characters or less.");
|
||||||
mvaddstr (7, 1, "=> ");
|
mvaddstr (7, 1, "=> ");
|
||||||
|
|
||||||
getnstr (message, 80);
|
mygetnstr (message, 80, 1);
|
||||||
|
|
||||||
for (i = 0; i < strlen (message); i++)
|
for (i = 0; i < strlen (message); i++)
|
||||||
{
|
{
|
||||||
@ -775,7 +771,7 @@ initncurses ()
|
|||||||
{
|
{
|
||||||
initscr ();
|
initscr ();
|
||||||
cbreak ();
|
cbreak ();
|
||||||
echo ();
|
noecho ();
|
||||||
nonl ();
|
nonl ();
|
||||||
intrflush (stdscr, FALSE);
|
intrflush (stdscr, FALSE);
|
||||||
keypad (stdscr, TRUE);
|
keypad (stdscr, TRUE);
|
||||||
@ -823,7 +819,7 @@ loginprompt ()
|
|||||||
|
|
||||||
refresh ();
|
refresh ();
|
||||||
|
|
||||||
getnstr (user_buf, 20);
|
mygetnstr (user_buf, 20, 1);
|
||||||
|
|
||||||
if (user_buf && *user_buf == '\0')
|
if (user_buf && *user_buf == '\0')
|
||||||
return;
|
return;
|
||||||
@ -846,9 +842,7 @@ loginprompt ()
|
|||||||
|
|
||||||
refresh ();
|
refresh ();
|
||||||
|
|
||||||
noecho ();
|
mygetnstr (pw_buf, 20, 0);
|
||||||
getnstr (pw_buf, 20);
|
|
||||||
echo ();
|
|
||||||
|
|
||||||
if (passwordgood (pw_buf))
|
if (passwordgood (pw_buf))
|
||||||
{
|
{
|
||||||
@ -893,7 +887,7 @@ newuser ()
|
|||||||
|
|
||||||
refresh ();
|
refresh ();
|
||||||
|
|
||||||
getnstr (buf, 20);
|
mygetnstr (buf, 20, 1);
|
||||||
if (userexist (buf) == -1)
|
if (userexist (buf) == -1)
|
||||||
error = 0;
|
error = 0;
|
||||||
else
|
else
|
||||||
@ -944,7 +938,7 @@ newuser ()
|
|||||||
mvaddstr (10, 1, "=> ");
|
mvaddstr (10, 1, "=> ");
|
||||||
|
|
||||||
refresh ();
|
refresh ();
|
||||||
getnstr (buf, 80);
|
mygetnstr (buf, 80, 1);
|
||||||
|
|
||||||
if (strchr (buf, ':') != NULL)
|
if (strchr (buf, ':') != NULL)
|
||||||
graceful_exit (113);
|
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 strlcpy (char *dst, const char *src, size_t siz);
|
||||||
extern size_t strlcat (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
|
#endif
|
||||||
|
91
mygetnstr.c
Normal file
91
mygetnstr.c
Normal file
@ -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…
x
Reference in New Issue
Block a user