From 7c344319ea3e816727c563fe3b4c23d54bd8f576 Mon Sep 17 00:00:00 2001 From: Andrew Pamment Date: Sun, 27 Mar 2016 10:33:43 +1000 Subject: [PATCH] Added Ansi/textfile collections --- ansis_default/mainmenu.ans | 25 ++++++++++++------------- bbs.c | 30 ++++++++++++++++++++++++++++++ bbs.h | 8 ++++++++ config_default/bbs.ini | 3 +++ main_menu.c | 34 ++++++++++++++++++++++++++++++++++ 5 files changed, 87 insertions(+), 13 deletions(-) diff --git a/ansis_default/mainmenu.ans b/ansis_default/mainmenu.ans index d1e1c8c..14f102c 100644 --- a/ansis_default/mainmenu.ans +++ b/ansis_default/mainmenu.ans @@ -1,15 +1,14 @@ -[?7h -ÜÜÜÜÜÜÜÜÜÜÜ ÜÜÜÜÜÜ ÜÜ ÜÜÜÜÜÜ ÜÜÜÜÜÜÜÜÜÜÜ ÜÜÜÜÜÜÜ ÜÜÜÜÜÜ ÜÜ Ü ÜÜ -²ß°Ü ²ß°Ü ²Û²ß° ²ÛÛÛ²ß°Ü ²Û²ß°Ü ²ß°Ü ²Û²ßÜÜ ßß ²ß°Ü ²Û²ßÛ Û² -°² ² °² ² ±ß°²ßß߲߱² °² ² ±ß°² ² °² ² ±ß±²Ü° ²ß°² ² ±ß°²Üß ²  -ßß ß ßß ß °Û ßß ß °Û ßß ßß ß °Û ßß ß ßß ß °Û ßßßßßß ßß ß °Û ßßßßßß + +ÜÜÜÜÜÜÜÜÜÜÜ ÜÜÜÜÜÜ ÜÜ ÜÜÜÜÜÜ ÜÜÜÜÜÜÜÜÜÜÜ ÜÜÜÜÜÜÜ ÜÜÜÜÜÜ ÜÜ Ü ÜÜ +²ß°Ü ²ß°Ü ²Û ²ß° ²Û ÛÛ ²ß°Ü ²Û ²ß°Ü ²ß°Ü ²Û ²ßÜÜ ßß ²ß°Ü ²Û ²ß Û Û² +°² ² °² ² ±ß °²ßßß±ß ²² °² ² ±ß °² ² °² ² ±ß ±²Ü° ²ß °² ² ±ß °²Üß ²  +ßß ß ßß ß °Û ßß ß °Û ßß ßß ß °Û ßß ß ßß ß °Û ßßßßßß ßß ß °Û ßßßßßß ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ - ³ M. Message Areas³ L. BBS List³ - ³ T. File Areas³ C. Chat System³ - ³ B. Bulletins³ U. User List³ - ³ D. Online Games³ 1. Last 10 Callers³ - ³³³ - ³³³ - ³³ G. Goodbye (Log Off)³ + ³ M. Message Areas³ L. BBS List³ + ³ T. File Areas³ C. Chat System³ + ³ B. Bulletins³ U. User List³ + ³ D. Door Games & Utilites³ 1. Last 10 Callers³ + ³ A. Text/ANSI File Collection ³³ + ³³³ + ³³ G. Goodbye (Log Off)³ ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ - diff --git a/bbs.c b/bbs.c index 8eed978..ad9fd15 100644 --- a/bbs.c +++ b/bbs.c @@ -326,6 +326,18 @@ static int handler(void* user, const char* section, const char* name, conf->file_directories[conf->file_directory_count]->path = strdup(value); conf->file_directories[conf->file_directory_count]->file_sub_count = 0; conf->file_directory_count++; + } else if (strcasecmp(section, "text files") == 0) { + if (conf->text_file_count == 0) { + conf->text_files = (struct text_file **)malloc(sizeof(struct text_file *)); + } else { + conf->text_files = (struct text_file **)realloc(conf->text_files, sizeof(struct text_file *) * (conf->text_file_count + 1)); + } + + conf->text_files[conf->text_file_count] = (struct text_file *)malloc(sizeof(struct text_file)); + conf->text_files[conf->text_file_count]->name = strdup(name); + conf->text_files[conf->text_file_count]->path = strdup(value); + conf->text_file_count++; + } return 1; @@ -339,6 +351,23 @@ void s_putstring(int socket, char *c) { write(socket, c, strlen(c)); } +void s_displayansi_p(int socket, char *file) { + FILE *fptr; + char c; + + fptr = fopen(file, "r"); + if (!fptr) { + return; + } + c = fgetc(fptr); + while (!feof(fptr)) { + s_putchar(socket, c); + c = fgetc(fptr); + } + fclose(fptr); +} + + void s_displayansi(int socket, char *file) { FILE *fptr; char c; @@ -577,6 +606,7 @@ void runbbs(int socket, char *config_path) { conf.file_directory_count = 0; conf.irc_server = NULL; conf.irc_port = 6667; + conf.text_file_count = 0; // Load BBS data if (ini_parse(config_path, handler, &conf) <0) { diff --git a/bbs.h b/bbs.h index cbe3b95..c0d1228 100644 --- a/bbs.h +++ b/bbs.h @@ -26,6 +26,11 @@ struct last10_callers { time_t time; }__attribute__((packed)); +struct text_file { + char *name; + char *path; +}; + struct door_config { char *name; char key; @@ -88,6 +93,8 @@ struct bbs_config { struct door_config **doors; int file_directory_count; struct file_directory **file_directories; + int text_file_count; + struct text_file **text_files; }; struct sec_level_t { @@ -118,6 +125,7 @@ extern void runbbs(int sock, char *config); extern struct fido_addr *parse_fido_addr(const char *str); extern void s_putchar(int socket, char c); extern void s_putstring(int socket, char *c); +extern void s_displayansi_p(int socket, char *file); extern void s_displayansi(int socket, char *file); extern char s_getchar(int socket); extern void s_readstring(int socket, char *buffer, int max); diff --git a/config_default/bbs.ini b/config_default/bbs.ini index ab95753..39e0bbd 100644 --- a/config_default/bbs.ini +++ b/config_default/bbs.ini @@ -18,3 +18,6 @@ IllusionNet = config/illusionnet.ini [file directories] General Files = config/filesgen.ini + +[text files] +Warning = ansis/bulletin0.ans diff --git a/main_menu.c b/main_menu.c index 11cbc79..638be62 100644 --- a/main_menu.c +++ b/main_menu.c @@ -1,5 +1,6 @@ #include #include +#include #include #include #include "bbs.h" @@ -23,6 +24,39 @@ void main_menu(int socket, struct user_record *user) { c = s_getc(socket); switch(tolower(c)) { + case 'a': + { + if (conf.text_file_count > 0) { + + while(1) { + s_putstring(socket, "\r\n\e[1;32mText Files Collection\r\n"); + s_putstring(socket, "\e[1;30m-------------------------------------------------------------------------------\e[0m\r\n"); + + for (i=0;iname); + s_putstring(socket, buffer); + } + s_putstring(socket, "\e[1;30m-------------------------------------------------------------------------------\e[0m\r\n"); + s_putstring(socket, "Enter the number of a text file to display or Q to quit: "); + s_readstring(socket, buffer, 4); + if (tolower(buffer[0]) != 'q') { + i = atoi(buffer); + if (i >= 0 && i < conf.text_file_count) { + s_displayansi_p(socket, conf.text_files[i]->path); + s_putstring(socket, "Press any key to continue...\r\n"); + s_getc(socket); + } + } else { + break; + } + } + } else { + s_putstring(socket, "\r\nSorry, there are no text files to display\r\n"); + s_putstring(socket, "Press any key to continue...\r\n"); + s_getc(socket); + } + } + break; case 'c': { chat_system(socket, user);