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;
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;
"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++)
{
{
initscr ();
cbreak ();
- echo ();
+ noecho ();
nonl ();
intrflush (stdscr, FALSE);
keypad (stdscr, TRUE);
refresh ();
- getnstr (user_buf, 20);
+ mygetnstr (user_buf, 20, 1);
if (user_buf && *user_buf == '\0')
return;
refresh ();
- noecho ();
- getnstr (pw_buf, 20);
- echo ();
+ mygetnstr (pw_buf, 20, 0);
if (passwordgood (pw_buf))
{
refresh ();
- getnstr (buf, 20);
+ mygetnstr (buf, 20, 1);
if (userexist (buf) == -1)
error = 0;
else
mvaddstr (10, 1, "=> ");
refresh ();
- getnstr (buf, 80);
+ mygetnstr (buf, 80, 1);
if (strchr (buf, ':') != NULL)
graceful_exit (113);
--- /dev/null
+/*
+ * 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
+ */