/* 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;
}