view srogue/disply.c @ 239:837044d2c362

Merge the GCC5 and build fix branches. This fixes all warnings produced by GCC 5, except the ones related to system functions. Those could be fixed by including the proper headers, but it would be better to replace the system-dependent code with functions from mdport.c.
author John "Elwin" Edwards
date Fri, 11 Mar 2016 19:47:52 -0500
parents 94a0d9dd5ce1
children e52a8a7ad4c5
line wrap: on
line source

/*
 * various display routines and flag checking functions
 *
 * @(#)disply.c		9.0	(rdk)	 7/17/84
 *
 * Super-Rogue
 * Copyright (C) 1984 Robert D. Kindelberger
 * All rights reserved.
 *
 * See the file LICENSE.TXT for full copyright and licensing information.
 */

#include "rogue.h"
#include <ctype.h>
#include "rogue.ext"

/*
 * displevl:
 *	Display detailed level for wizard and scroll
 */
void
displevl(void)
{
	reg char ch, mch;
	reg int i,j;
	reg struct room *rp;

	for (rp = rooms; rp < &rooms[MAXROOMS]; rp++)
		rp->r_flags &= ~ISDARK;

	for (i = 0; i < LINES - 2; i++) {
		for (j = 0; j < COLS - 1; j++) {
			ch = mvinch(i,j);
			if (isatrap(ch)) {
				struct trap *what;

				what = trap_at(i, j);
				if (what != NULL)
					what->tr_flags |= ISFOUND;
			}
			else if (ch == SECRETDOOR) {
				ch = DOOR;
				mvaddch(i, j, ch);
			}
			else if (illeg_ch(ch)) {
				ch = FLOOR;
				mvaddch(i, j, ch);
			}
			if (mvwinch(mw, i, j) != ' ') {
				struct linked_list *what;
				struct thing *it;

				what = find_mons(i, j);
				if (what == NULL) {
					ch = FLOOR;
					mvaddch(i, j, ch);
				}
				else {
					it = THINGPTR(what);
					it->t_oldch = ch;
				}
			}
			mch = mvwinch(cw, i, j);
			if (isalpha(mch))
				ch = mch;
			mvwaddch(cw, i, j, ch);
		}
	}
	nochange = FALSE;	/* display status again */
	draw(cw);
}

/*
 * dispmons:
 *	Show monsters for wizard and potion
 */
void
dispmons(void)
{
	reg int ch, y, x;
	reg struct thing *it;
	reg struct linked_list *item;

	for (item = mlist; item != NULL; item = next(item)) {
		it = THINGPTR(item);
		y = it->t_pos.y;
		x = it->t_pos.x;
		mvwaddch(cw, y, x, it->t_type);
		it->t_flags |= ISFOUND;
		if (it->t_type == 'M')			/* if a mimic */
			it->t_disguise = 'M';		/* give it away */
	}
	draw(cw);
}

/*
 * winat:
 *	Get whatever character is at a location on the screen
 */
char
winat(int y, int x)
{
	reg char ch;

	if (mvwinch(mw,y,x) == ' ')
		ch = mvinch(y, x);			/* non-monsters */
	else
		ch = winch(mw);				/* monsters */
	return ch;
}

/*
 * cordok:
 *	Returns TRUE if coordinate is on usable screen
 */
bool
cordok(int y, int x)
{
	if (x < 0 || y < 0 || x >= COLS || y >= LINES - 1)
		return FALSE;
	return TRUE;
}

/*
 * pl_on:
 *	Returns TRUE if the player's flag is set
 */
bool
pl_on(long what)
{
	return (player.t_flags & what);
}


/*
 * pl_off:
 *	Returns TRUE when player's flag is reset
 */
bool
pl_off(long what)
{
	return (!(player.t_flags & what));
}


/*
 * o_on:
 *	Returns TRUE in the objects flag is set
 */
bool
o_on(struct object *what, long bit)
{
	reg int flag;

	flag = FALSE;
	if (what != NULL)
		flag = (what->o_flags & bit);
	return flag;
}


/*
 * o_off:
 *	Returns TRUE is the objects flag is reset
 */
bool
o_off(struct object *what, long bit)
{
	reg int flag;

	flag = FALSE;
	if (what != NULL)
		flag = !(what->o_flags & bit);
	return flag;
}


/*
 * setoflg:
 *	Set the specified flag for the object
 */
void
setoflg(struct object *what, long bit)
{
	what->o_flags |= bit;
}


/*
 * resoflg:
 *	Reset the specified flag for the object
 */
void
resoflg(struct object *what, long bit)
{
	what->o_flags &= ~bit;
}