Mercurial > hg > early-roguelike
view rogue4/list.c @ 76:ad2cb9a07aaa
arogue5: fix player's typed responses getting put at the wrong place.
Some sections of code that prompt the user for a string of input were
calling get_str() with cw (the player-visible screen containing the
map), which caused whatever the player typed to get printed starting at
cw's idea of the cursor position, which was usually the Rogue's @-sign.
This corrupted the map.
The problem has been fixed by passing msgw (the message line at the top
of the screen) to get_str(), so the player's typing appears where msgw
thinks the cursor should be, which is in the sensible place right after
the prompt. Some other get_str() invocations which used hw or stdscr
have been left unmodified.
author | John "Elwin" Edwards <elwin@sdf.org> |
---|---|
date | Sat, 08 Sep 2012 22:05:05 -0700 |
parents | 9535a08ddc39 |
children | 1b73a8641b37 |
line wrap: on
line source
/* * Functions for dealing with linked lists of goodies * * @(#)list.c 4.7 (Berkeley) 12/19/81 * * Rogue: Exploring the Dungeons of Doom * Copyright (C) 1980, 1981, 1982 Michael Toy, Ken Arnold and Glenn Wichman * All rights reserved. * * See the file LICENSE.TXT for full copyright and licensing information. */ #include <stdlib.h> #include <curses.h> #include "rogue.h" /* * detach: * Takes an item out of whatever linked list it might be in */ _detach(list, item) register THING **list, *item; { if (*list == item) *list = next(item); if (prev(item) != NULL) item->l_prev->l_next = next(item); if (next(item) != NULL) item->l_next->l_prev = prev(item); item->l_next = NULL; item->l_prev = NULL; } /* * _attach: * add an item to the head of a list */ _attach(list, item) register THING **list, *item; { if (*list != NULL) { item->l_next = *list; (*list)->l_prev = item; item->l_prev = NULL; } else { item->l_next = NULL; item->l_prev = NULL; } *list = item; } /* * _free_list: * Throw the whole blamed thing away */ _free_list(ptr) register THING **ptr; { register THING *item; while (*ptr != NULL) { item = *ptr; *ptr = next(item); discard(item); } } /* * discard: * Free up an item */ discard(item) register THING *item; { total--; free((char *) item); } /* * new_item * Get a new item with a specified size */ THING * new_item() { register THING *item; if ((item = calloc(1, sizeof *item)) == NULL) msg("ran out of memory after %d items", total); else total++; item->l_next = item->l_prev = NULL; return item; }