/
umud/DOC/
umud/DOC/U/
umud/DOC/U/U-examples/
umud/DOC/internals/
umud/DOC/wizard/
umud/MISC/
umud/MISC/dbchk/
umud/RWHO/rwhod/
/*
	Copyright (C) 1991, Marcus J. Ranum. All rights reserved.
*/

#ifndef	lint
static	char	RCSid[] = "$Header: /home/mjr/hacks/umud/CMD/RCS/say.c,v 1.2 92/06/16 21:58:11 mjr Exp $";
#endif

/* configure all options BEFORE including system stuff. */
#include	"config.h"


#include	"mud.h"
#include	"vars.h"

/*
TinyMUD-like "say"
*/

/* ARGSUSED */
cmd_say(argc,argv,who,aswho)
int	argc;
char	*argv[];
char	*who;
char	*aswho;
{
	char	*un;
	char	nx[MAXOID];
	char	*room;
	char	*inroom;
	int	ax;

	room = ut_loc(run_actor());

	/* get list of who is in the room */
	inroom = ut_getatt(room,0,typ_list,var_ply,(char *)0);
	if(inroom == (char *)0) {
		/* We're not in a room, let's see if we're 'in' a player. */
		inroom = ut_getatt(room,0,typ_flag,var_isplay,(char *)0);
		if (inroom == (char *)0) {
			say(who,"You aren't anywhere.  Your voice falls flat.\n",(char *)0);
			return(UERR_NONE);
		}

		/* We're 'inside' a player. */
		/* set player's name */
		un = ut_name(run_actor());

		/* hack to handle empty statements */
		if(argc == 1)
			argv[1] = "";

		if(argc < 3) {
			say(room,un," says, \"",argv[1],"\"\n",(char *)0);
		} else {
			say(room,un," says, \"",(char *)0);
			for(ax = 1; ax < argc;) {
				say(room,argv[ax],(char *)0);
				if(++ax < argc)
					say(room," ",(char *)0);
			}
			say(room,"\"\n",(char *)0);
		}

		un = run_actor();

		/* now talk to ourself :) */
		if(argc < 3) {
			say(un,"You say, \"",argv[1],"\"\n",(char *)0);
		} else {
			say(un,"You say, \"",(char *)0);
			for(ax = 1; ax < argc;) {
				say(un,argv[ax],(char *)0);
				if(++ax < argc)
					say(un," ",(char *)0);
			}
			say(un,"\"\n",(char *)0);
		}
		return(UERR_NONE);
	}

	/* set player's name */
	un = ut_name(run_actor());

	/* hack to handle empty statements */
	if(argc == 1)
		argv[1] = "";

	/* iterate across list of people in the room - excluding ourself */
	while((inroom = lstnext(inroom,nx,sizeof(nx))) != (char *)0) {
		if(strcmp(nx,who)) {
			if(argc < 3) {
				say(nx,un," says, \"",argv[1],"\"\n",(char *)0);
			} else {
				say(nx,un," says, \"",(char *)0);
				for(ax = 1; ax < argc;) {
					say(nx,argv[ax],(char *)0);
					if(++ax < argc)
						say(nx," ",(char *)0);
				}
				say(nx,"\"\n",(char *)0);
			}
		}
	}

	un = run_actor();

	/* now talk to ourself :) */
	if(argc < 3) {
		say(un,"You say, \"",argv[1],"\"\n",(char *)0);
	} else {
		say(un,"You say, \"",(char *)0);
		for(ax = 1; ax < argc;) {
			say(un,argv[ax],(char *)0);
			if(++ax < argc)
				say(un," ",(char *)0);
		}
		say(un,"\"\n",(char *)0);
	}
	return(UERR_NONE);
}