WebstuFF/
/*  Playground+ - web.c
 * 
 *  Some basic stuff for putting talker info on the talker's webpage. Assuming, of course, that
 *  your talker and your webpage are in the same account ;)
 *
 * Copyright (c) 2001 Will Fischer (stratocaster)
 *-------------------------------------------------------------------------------------------------
 */

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <ctype.h>
#include <sys/socket.h>

#include "include/autoconfig.h"
#include "include/config.h"
#include "include/player.h"
#include "include/proto.h"

#define PATH "../web"		/* where do we want this file to go? */
#define FILENAME "who.html"	/* what do we want the file to be called? */
#define ZONE "GMT"		/* timezone your talker is in... */
#define BGCOLOR "#BEC0C8"
#define TEXT "#213963"
#define LINK "#330099"
#define VLINK "#3333CC"

void html_who(void)
{
  FILE *fp;
  char *fname;
  char string[560];
  player *scan;

  fname = malloc(strlen(string) + 15);
  if (!fname)
  {
    LOGF("error", "no memory to malloc in html_who (web.c)");
    return;
  }

  sprintf(fname, "%s/%s", PATH, FILENAME);

  fp = fopen(fname, "w+");
  if (!fp)
  {
    LOGF("error", "can't send text to '%s' in html_who (web.c)", fname);
    free(fname);
    return;
  }

  fprintf(fp, "<html>\n");
  fprintf(fp, "<body bgcolor = \"%s\" text = \"%s\" link = \"%s\" vlink = \"%s\">\n",
	  BGCOLOR, TEXT, LINK, VLINK);
  fprintf(fp, "<center>Currently logged onto %s, as of %s (%s)</center>\n", 
 	  get_config_msg("talker_name"), sys_time(), ZONE);
  fprintf(fp, "<br>\n");
  fprintf(fp, "<table border=\"1\" align=\"center\" cellspacing=\"2\" cellpadding=\"2\">\n");
  fprintf(fp, "<tr><td><center><font size=6>Name</center></td><td><center><font size=6>URL</center></td>"
	  "<td><center><font size=6>ICQ number</center></td><td><center><font size=6>AIM "
	  "name</center></td></tr></font>");

  for (scan = flatlist_start; scan; scan = scan->flat_next)
  {
    if (scan->alt_email[0] && scan->icq && scan->aim[0])
    {
      if (!strstr(scan->alt_email, "http://"))
        sprintf(string, "<tr><td><center>%s</center></td>"
		"<td><center><a href=\"http://%s\">http://%s</a></center></td><td><center>%d</center></td>"
                "<td><center><a href=\"aim:addbuddy?screenname=%s\">%s</a></center></td></tr>",
	        scan->name, scan->alt_email, scan->alt_email, scan->icq, scan->aim, scan->aim);
      else
        sprintf(string, "<tr><td><center>%s</center></td>"
		"<td><center><a href=\"%s\">%s</a></center></td><td><center>%d</center></td>"
                "<td><center><a href=\"aim:addbuddy?screenname=%s\">%s</a></center></td></tr>",
	        scan->name, scan->alt_email, scan->alt_email, scan->icq, scan->aim, scan->aim);
    }
    else if (scan->alt_email[0] && scan->icq)
    {
      if (!strstr(scan->alt_email, "http://"))
        sprintf(string, "<tr><td><center>%s</center></td>"
		"<td><center><a href=\"http://%s\">%s</a></center></td><td><center>%d</center></td>"
                "<td><center>-</center></td></tr>",
	        scan->name, scan->alt_email, scan->alt_email, scan->icq);
      else
        sprintf(string, "<tr><td><center>%s</center></td>"
		"<td><center><a href=\"%s\">%s</a></center></td><td><center>%d</center></td>"
                "<td><center>-</center></td></tr>",
	        scan->name, scan->alt_email, scan->alt_email, scan->icq);
    }
    else if (scan->alt_email[0] && scan->aim[0])
    {
      if (!strstr(scan->alt_email, "http://"))
        sprintf(string, "<tr><td><center>%s</center></td>"
		"<td><center><a href=\"http://%s\">%s</a></center></td><td><center>-</center></td>"
                "<td><center><a href=\"aim:addbuddy?screenname=%s\">%s</a></center></td></tr>",
	        scan->name, scan->alt_email, scan->alt_email, scan->aim, scan->aim);
      else
        sprintf(string, "<tr><td><center>%s</center></td><td><center>"
		"<a href=\"%s\">%s</a></center></td><td><center>-</center></td>"
                "<td><center><a href=\"aim:addbuddy?screenname=%s\">%s</a></center></td></tr>",
	        scan->name, scan->alt_email, scan->alt_email, scan->aim, scan->aim);
    }
    else if (scan->icq && scan->aim[0])
    {
        sprintf(string, "<tr><td><center>%s</center></td><td><center>-</center></td>"
		"<td><center>%d</center></td>"
                "<td><center><a href=\"aim:addbuddy?screenname=%s\">%s</a></center></td></tr>",
	        scan->name, scan->icq, scan->aim, scan->aim);
    }
    else if (scan->alt_email[0])
    {
      if (!strstr(scan->alt_email, "http://"))
        sprintf(string, "<tr><td><center>%s</center></td>"
		"<td><center><a href=\"http://%s\">http://%s</a></center></td>"
		"<td><center>-</center></td><td><center>-</center></td></tr>",
	        scan->name, scan->alt_email, scan->alt_email);
      else
        sprintf(string, "<tr><td><center>%s</center></td><td><center><a href=\"%s\">%s</a></center></td>"
		"<td><center>-</center></td><td><center>-</center></td></tr>",
	        scan->name, scan->alt_email, scan->alt_email);
    }
    else if (scan->icq)
    {
        sprintf(string, "<tr><td><center>%s</center></td><td><center>-</center></td>"
		"<td><center>%d</center></td><td><center>-</center></td></tr>",
	        scan->name, scan->icq);
    }
    else if (scan->aim[0])
    {
        sprintf(string, "<tr><td><center>%s</center></td><td><center>-</center></td>"
                "<td><center>-</center></td>"
                "<td><center><a href=\"aim:addbuddy?screenname=%s\">%s</a></center></td></tr>",
                scan->name, scan->aim, scan->aim);
    }
    else
    {
	sprintf(string, "<tr><td><center>%s</center></td><td><center>-</center></td>"
		"<td><center>-</center></td><td><center>-</center></td></tr>", scan->name);
    }
    fprintf(fp, "%s\n", string);
  }

  fprintf(fp, "</table>\n");
  fprintf(fp, "<center>Note: Clicking a person's AIM name will add them to your buddy list,"
	  " if you have AOL Instant Messenger.</center>");
  fprintf(fp, "</html>\n");

  fclose(fp);
  free(fname);
}

void set_aim(player * p, char *str)
{  
  
  if (!*str)
  {
    TELLPLAYER(p, " You set your AIM name to... erm... nothing!\n");
    strcpy(p->aim, "");
    return;
  }

  if (p->system_flags & NO_MSGS)
  {
    TELLPLAYER(p, " Sorry, but you have been prevented from changing this.\n");
    return;
  }

  if (contains_dynatext(p, str) || strstr(str, "^"))
  {
    TELLPLAYER(p, " You may not have colour or dynatext in your AIM name.\n");
    return;
  }

  strncpy(p->aim, str, MAX_SPODCLASS - 3);
  TELLPLAYER(p, " You set your AIM name to '%s'\n", p->aim);
}

void view_player_aim(player * p, char *str)
{

  player *scan, *start;
  int pages = 1, page, line;
  char *oldstack, middle[80];

  oldstack = stack;

  if (true_strlen(str) < 1)
    page = 1;
  else
    page = atoi(str);

  if (page < 1)
  {
    tell_player(p, " Usage : list_aim [<pagenumber>]\n");
    return;
  }
  scan = flatlist_start;
  start = NULL;

  line = 0;

  for (scan = flatlist_start; scan; scan = scan->flat_next)
  {
    if (pages <= page && line == 0)
      start = scan;

    if (scan->aim[0] != 0)
      line++;

    if (line > TERM_LINES - 2)
    {
      line = 0;
      pages++;
    }
  }

  if (page > pages)
    page = pages;

  pstack_mid("Listing of all active players' AIM names");

  line = 0;
  for (; start; start = start->flat_next)
  {
    if (line > TERM_LINES)
      break;

    if (start->aim[0] != 0)
    {
      sprintf(stack, "%-19s *", start->name);
      stack = strchr(stack, 0);

      strcpy(stack, start->aim);

      stack = strchr(stack, 0);
      *stack++ = '\n';

      line++;
    }
  }

  sprintf(middle, "Page %d of %d", page, pages);
  pstack_mid(middle);
  *stack++ = 0;
  tell_player(p, oldstack);
  stack = oldstack;
  return;
}


void webstuff_version(void)
{
  stack += sprintf(stack, " -=*> WebstuFF (by stratocaster) installed.\n");
}