Annotation of dgamelaunch-openbsd/mygetnstr.c, Revision 1.1
1.1 ! rubenllo 1: /*
! 2: * Copyright (c) 2004, Jilles Tjoelker
! 3: * All rights reserved.
! 4: *
! 5: * Redistribution and use in source and binary forms, with
! 6: * or without modification, are permitted provided that the
! 7: * following conditions are met:
! 8: *
! 9: * 1. Redistributions of source code must retain the above
! 10: * copyright notice, this list of conditions and the
! 11: * following disclaimer.
! 12: * 2. Redistributions in binary form must reproduce the
! 13: * above copyright notice, this list of conditions and
! 14: * the following disclaimer in the documentation and/or
! 15: * other materials provided with the distribution.
! 16: *
! 17: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
! 18: * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
! 19: * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
! 20: * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
! 21: * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
! 22: * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY
! 23: * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
! 24: * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
! 25: * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
! 26: * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
! 27: * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
! 28: * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
! 29: * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
! 30: * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
! 31: * OF SUCH DAMAGE.
! 32: */
! 33:
! 34: #include <curses.h>
! 35:
! 36: /* Assumes noecho(). */
! 37: /* As with getnstr(), maxlen does not include the '\0' character. */
! 38:
! 39: int
! 40: mygetnstr(char *buf, int maxlen, int doecho)
! 41: {
! 42: int c, i;
! 43:
! 44: i = 0;
! 45: for (;;)
! 46: {
! 47: c = getch();
! 48: if (c == 8 || c == 127 || c == KEY_BACKSPACE || c == KEY_DC ||
! 49: c == KEY_LEFT)
! 50: {
! 51: if (i > 0)
! 52: {
! 53: i--;
! 54: if (doecho)
! 55: addstr("\010 \010");
! 56: }
! 57: else
! 58: beep();
! 59: }
! 60: else if (c == 21 || c == 24 || c == KEY_DL) /* ^U/^X */
! 61: {
! 62: while (i > 0)
! 63: {
! 64: i--;
! 65: if (doecho)
! 66: addstr("\010 \010");
! 67: }
! 68: }
! 69: else if (c == 23) /* ^W */
! 70: {
! 71: while (i > 0 && buf[i - 1] == ' ')
! 72: {
! 73: i--;
! 74: if (doecho)
! 75: addstr("\010 \010");
! 76: }
! 77: while (i > 0 && buf[i - 1] != ' ')
! 78: {
! 79: i--;
! 80: if (doecho)
! 81: addstr("\010 \010");
! 82: }
! 83: }
! 84: else if ((c >= ' ' && c <= '~'))
! 85: {
! 86: if (i < maxlen)
! 87: {
! 88: buf[i] = c;
! 89: i++;
! 90: if (doecho)
! 91: addch(c);
! 92: }
! 93: else
! 94: beep();
! 95: }
! 96: else if (c == 10 || c == 13 || c == KEY_ENTER || c == KEY_RESIZE)
! 97: break;
! 98: else if (c == ERR)
! 99: {
! 100: buf[i] = 0;
! 101: return ERR;
! 102: }
! 103: else
! 104: beep();
! 105: }
! 106: buf[i] = 0;
! 107: return OK;
! 108: }
! 109:
! 110: /* vim:ts=8:cin:sw=4
! 111: */
CVSweb