/* help.c */
#include "copyright.h"
#include "config.h"
#include <stdio.h>
#include <sys/types.h>
#include <sys/param.h>
#include <sys/stat.h>
#include "teeny.h"
#include "case.h"
#ifndef MAXPATHLEN		/* SysV */
#define MAXPATHLEN 20
#endif				/* MAXPATHLEN */
/*
 * This file contains a fairly simple help and news system.
 */
#ifdef HELPSYSTEM
voidfunc        do_help(player, arg)
  int             player;
  char           *arg;
{
  extern char     cmdwork[];
  char            file[MAXPATHLEN + 1];
  char           *p, *q;
  FILE           *f;
  if (!arg || !*arg) {
    spit_file(player, HELP_FILE);
    return;
  }
  for (p = cmdwork, q = arg; *q && (p - cmdwork) < BUFFSIZ;) {
    if (*q != '/')
      *p++ = DOWNCASE(*q);
    q++;
  }
  *p = '\0';
  strcpy(file, HELP_PATH);
  p = file + strlen(HELP_PATH);
  for (q = cmdwork; *q && (p - file) < MAXPATHLEN; *p++ = *q++);
  *p = '\0';
  if ((f = fopen(file, "r")) == NULL) {
    notify_player(player, "Help on subject \"");
    notify_player(player, arg);
    notify_player(player, "\" does not exist.\r\n");
    notify_player(player, "Type \"help\" for a list of subjects available.\r\n");
    return;
  }
  notify_player(player, "-----\r\nHelp on subject: ");
  notify_player(player, arg);
  notify_player(player, "\r\n-----\r\n");
  while ((fgets(cmdwork, BUFFSIZ - 1, f)) != NULL) {
    fix_newline(cmdwork);
    notify_player(player, cmdwork);
  }
  notify_player(player, "-----\r\n");
  (void) fclose(f);
}
#else				/* HELPSYSTEM */
voidfunc
                do_help(player);
int             player;
{
  spit_file(player, HELP_FILE);
}
#endif				/* HELPSYSTEM */
#ifdef NEWSSYSTEM
voidfunc        do_news(player, arg)
  int             player;
  char           *arg;
{
  extern char     cmdwork[];
  char            file[MAXPATHLEN + 1];
  char           *p, *q;
  FILE           *f;
  struct stat     sbuf;
  extern char    *ctime();
  if (!arg || !*arg) {
    spit_file(player, NEWS_FILE);
    return;
  }
  for (p = cmdwork, q = arg; *q && (p - cmdwork) < BUFFSIZ;) {
    if (*q != '/')
      *p++ = DOWNCASE(*q);
    q++;
  }
  *p = '\0';
  strcpy(file, NEWS_PATH);
  p = file + strlen(NEWS_PATH);
  for (q = cmdwork; *q && (p - file) < MAXPATHLEN; *p++ = *q++);
  *p = '\0';
  if ((f = fopen(file, "r")) == NULL) {
    notify_player(player, "News article \"");
    notify_player(player, arg);
    notify_player(player, "\" does not exist.\r\n");
    notify_player(player, "Type \"news\" for a list of articles available.\r\n");
    return;
  }
  (void) stat(file, &sbuf);
  notify_player(player, "-----\r\nNews article: ");
  notify_player(player, arg);
  notify_player(player, "\r\nLast updated: ");
  notify_player(player, ctime(&sbuf.st_mtime));
  notify_player(player, "-----\r\n");
  while ((fgets(cmdwork, BUFFSIZ - 1, f)) != NULL) {
    fix_newline(cmdwork);
    notify_player(player, cmdwork);
  }
  notify_player(player, "-----\r\n");
  (void) fclose(f);
}
#else				/* NEWSSYSTEM */
voidfunc        do_news(player)
  int             player;
{
  spit_file(player, NEWS_FILE);
}
#endif				/* NEWSSYSTEM */
void            check_news(player)
  int             player;
{
  struct stat     sbuf;
  extern char     cmdwork[];
  (void) stat(NEWS_FILE, &sbuf);
  (void) strcpy(cmdwork, "News file last updated ");
  (void) strcat(cmdwork, ctime(&sbuf.st_mtime));
  cmdwork[strlen(cmdwork) - 1] = 0;
  (void) strcat(cmdwork, "\r\n");
  notify_player(player, cmdwork);
}
/* this is here to save space elsewhere */
int             filesize(name)
  char           *name;
{
  struct stat     sbuf;
  if (stat(name, &sbuf) != 0)
    return -1;
  return sbuf.st_size;
}