/* Copyright (C) 1991, Marcus J. Ranum. All rights reserved. */ /* configure all options BEFORE including system stuff. */ #include "config.h" #include "mud.h" #include "vars.h" /* TinyMUD-like "say" */ /* ARGSUSED */ int cmd_say (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); }