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