/* remote command */

void remote(player *p,char *str)
{
    char *msg,*pstring,*final;
    char *oldstack;
    player **list,**step;
    int i,n;

    command_type=PERSONAL|SEE_ERROR;

    if (p->saved_flags&BLOCK_TELLS) {
	tell_player(p,"You can't remote to other people when you yourself are blocking tells.\n");
	return;
    }  

    oldstack=stack;
    align(stack);
    list=(player **)stack;

    msg=next_space(str);
    if (!*msg) { 
	tell_player(p,"Format : remote <player(s)> <msg>\n");
	stack=oldstack;
	return;
    }
    *msg++=0;
    command_type|=SORE;
    n=global_tag(p,str);
    if (!n) {
	stack=oldstack;
	return;
    }
    for(step=list,i=0;i<n;i++,step++) 
	if (*step!=p) {
	    final=stack;
	    if (*msg=='\'')
		sprintf(stack,"%s%s\n",p->name,msg);
	    else
		sprintf(stack,"%s %s\n",p->name,msg);
	    stack=end_string(stack);
	    tell_player(*step,final);
	    stack=final;
	}

    if (sys_flags&EVERYONE_TAG || !(sys_flags&FAILED_COMMAND)) {
	pstring=tag_string(p,list,n);
	final=stack;
	if (*msg==39)
	    sprintf(stack,"You emote '%s%s' to %s.\n",p->name,msg,pstring);
	else
	    sprintf(stack,"You emote '%s %s' to %s.\n",p->name,msg,pstring);
	stack=strchr(stack,0);
	if (idlingstring(p,list,n))
	    strcpy(stack,idlingstring(p,list,n));
	stack=end_string(stack);
	tell_player(p,final);
    }
    cleanup_tag(list,n);
    stack=oldstack;
}