]> skyeroc.xyz Git - dgamelaunch/commitdiff
Own version of getnstr() that always recognizes ^H and ^?; now always noecho(); myget...
authorJilles Tjoelker <jilles@stack.nl>
Mon, 19 Jan 2004 11:58:31 +0000 (11:58 +0000)
committerJilles Tjoelker <jilles@stack.nl>
Mon, 19 Jan 2004 11:58:31 +0000 (11:58 +0000)
git-svn-id: svn://katsu.triplehelix.org/dgamelaunch/trunk@128 db0b04b0-f4d1-0310-9a6d-de3e77497b0e

Makefile
dgamelaunch.c
dgamelaunch.h
mygetnstr.c [new file with mode: 0644]

index 6ebdeefdbc3ca1bb712a8cc05c2314f471b3866e..7299eda8aea416d2a87c6646c834a4bdad46d138 100644 (file)
--- a/Makefile
+++ b/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
 
index 36ce7c450aaa9a08c28f59998c92d7a599166f9a..f65f90ef8f944ac1bcd1438c6a427ce33625c954 100644 (file)
@@ -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);
index 73eb67657c436e4e24a3ca0236790a8fa378627d..672dfa381c64925075a87559a187ccebd5c79cf7 100644 (file)
@@ -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
diff --git a/mygetnstr.c b/mygetnstr.c
new file mode 100644 (file)
index 0000000..3450f74
--- /dev/null
@@ -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
+ */