#ifndef lint
static char *RCSid = "$Header: /usr/brule/guest/empire/empire/emprcs/lib/commands/sect.c,v 2.0 1995/01/25 19:23:25 empire Exp $";
#endif

/*
 * sect.c
 *
 * show sectors in map-like format with conditionals.  All sectors
 * matching are shown as caps.
 *
 * Dave Pare, 1986
 */

#include "misc.h"
#include "player.h"
#include "var.h"
#include "xy.h"
#include "sect.h"
#include "nsc.h"
#include "com.h"
#include "nat.h"
#include "file.h"
#include "map.h"
#include "deity.h"

sct()
{
	struct	nstr_sect ns;
	struct	sctstr sect;
	struct	nscstr cond[NS_NCOND];
	struct	range range;
	struct	natstr *np;
	s_char	map[WORLD_Y][MAPWIDTH(1)];
	int	ncond;
	int     nsect;
	s_char	*ptr;
	coord	y, yval;
	int	i;
	s_char	what[64];
	s_char	*str;
	s_char	buf[1024];

	nsect = 0;
	if(player->argp[1] == (s_char *) 0) {
		if ((str = getstring("(sects)? ", buf)) == 0)
			return RET_SYN;
	}
	else {
		str = player->argp[1];
	}

	if(*str == '*') {
		sprintf(what, "%d:%d,%d:%d",
			-WORLD_X/2, WORLD_X/2-1,
			-WORLD_Y/2, WORLD_Y/2-1);
		if (!snxtsct(&ns, what))
			return RET_FAIL;
	}
	else
	if (!snxtsct(&ns, str))
		return RET_SYN;
	np = getnatp(player->cnum);
	ncond = ns.ncond;
	bcopy((s_char *)ns.cond, (s_char *)cond, sizeof(*cond) * ncond);
	ns.ncond = 0;
	xyrelrange(getnatp(player->cnum), &ns.range, &range);
	border(&range, "    ", "");
	blankfill((s_char *)map, &ns.range, 1);
	while (nxtsct(&ns, &sect)) {
		if (!player->owner)
			continue;
		ptr = &map[ns.dy][ns.dx];
		*ptr = dchr[sect.sct_type].d_mnem;
		if (nstr_exec(cond, ncond, (s_char *)&sect, EF_SECTOR)) {
			++nsect;
			*ptr |= 0x80;
		}
	}
	for (i=0,y=ns.range.ly; i < ns.range.height; y++,i++) {
		yval = yrel(np, y);
		pr("%3d %s %-3d\n", yval, map[i], yval);
		if (y >= WORLD_Y)
			y -= WORLD_Y;
	}
	border(&range, "    ", "");
	if (nsect == 0) {
		if (player->argp[1])
			pr("%s: No sector(s)\n", player->argp[1]);
		else
			pr("%s: No sector(s)\n", "");
		return RET_FAIL;
	}else
		pr("%d sector%s\n", nsect, splur(nsect));
	return RET_OK;
}
