talker/
talker/bin/
talker/files/whois/
talker/update/
talker/update/bin/
/*
 * shortcut.c  -- includes all our fun shortcut commands 
 */

#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
#include <string.h>

#include "config.h"
#include "player.h"

/* and those joyous externs, dont you love em? */

extern char 	*end_string();
extern void 	log(char *, char *), tell_player(player *, char *), 
	        su_wall(char *), au_wall(char *), su_wall_but(player *, char *), 
                au_wall_but(player *, char *), tell_room(room *, char *),
		tell_room_but2(player *, room *, char *);


/* experimental printf clone for log -- if it works, we'll add it for
   tell_player and su_wall too -- cuz its easier to debug one error than
   100000 */

void LOGF(char *file, char *format, ...)
{
   va_list argum;
   char *oldstack;

   oldstack = stack;
   va_start(argum, format);
   vsprintf(stack, format, argum);
   va_end(argum);
   stack = end_string(stack);
   log(file, oldstack);
   stack = oldstack;
}

void TELLPLAYER(player *pl, char *format, ...)
{
   va_list argum;
   char *oldstack;

   oldstack = stack;
   va_start(argum, format);
   vsprintf(stack, format, argum);
   va_end(argum);
   stack = end_string(stack);
   tell_player(pl, oldstack);
   stack = oldstack;
}

void SUWALL(char *format, ...)
{
   va_list argum;
   char *oldstack;

   oldstack = stack;
   va_start(argum, format);
   vsprintf(stack, format, argum);
   va_end(argum);
   stack = end_string(stack);
   su_wall(oldstack);
   stack = oldstack;
}

void AUWALL(char *format, ...)
{
   va_list argum;
   char *oldstack;

   oldstack = stack;
   va_start(argum, format);
   vsprintf(stack, format, argum);
   va_end(argum);
   stack = end_string(stack);
   au_wall(oldstack);
   stack = oldstack;
}

void SW_BUT(player *but, char *format, ...)
{
   va_list argum;
   char *oldstack;

   oldstack = stack;
   va_start(argum, format);
   vsprintf(stack, format, argum);
   va_end(argum);
   stack = end_string(stack);
   su_wall_but(but, oldstack);
   stack = oldstack;
}

void AW_BUT(player *but, char *format, ...)
{
   va_list argum;
   char *oldstack;

   oldstack = stack;
   va_start(argum, format);
   vsprintf(stack, format, argum);
   va_end(argum);
   stack = end_string(stack);
   au_wall_but(but, oldstack);
   stack = oldstack;
}
void TELLROOM(room *here, char *format, ...)
{
   va_list argum;
   char *oldstack;

   oldstack = stack;
   va_start(argum, format);
   vsprintf(stack, format, argum);
   va_end(argum);
   stack = end_string(stack);
   tell_room(here, oldstack);
   stack = oldstack;
}
void TELLROOM_BUT(player * p, room *here, char *format, ...)
{
   va_list argum;
   char *oldstack;

   oldstack = stack;
   va_start(argum, format);
   vsprintf(stack, format, argum);
   va_end(argum);
   stack = end_string(stack);
   tell_room_but2(p, here, oldstack);
   stack = oldstack;
}
/* these two are a bit different, no? Well, um.. yeah, kinda... */

void ADDSTACK(char *format, ...)
{
   va_list argum;

   va_start(argum, format);
   vsprintf(stack, format, argum);
   va_end(argum);
   stack = strchr(stack, 0);
}

void ENDSTACK(char *format, ...)
{
   va_list argum;

   va_start(argum, format);
   vsprintf(stack, format, argum);
   va_end(argum);
   stack = end_string(stack);
}