Added Ansi/textfile collections

This commit is contained in:
Andrew Pamment
2016-03-27 10:33:43 +10:00
parent 2373391b2e
commit 7c344319ea
5 changed files with 87 additions and 13 deletions

View File

@@ -1,15 +1,14 @@
[?7h 
<32><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <30> <32><6D> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <30> <32><6D>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><32><6D> <31><6D> <32><6D><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ۲ <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <32><6D> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><32><6D> <31><6D> <32><6D><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <32><6D> <EFBFBD> ۲
<EFBFBD><32> <30> <EFBFBD><32> <30> <EFBFBD><EFBFBD><EFBFBD><32><31><6D><EFBFBD><32><6D><EFBFBD><32> <32><32> <30> <EFBFBD><EFBFBD><EFBFBD><32> <30> <EFBFBD><32> <30> <EFBFBD><EFBFBD><EFBFBD><32><6D><30> <EFBFBD><EFBFBD><EFBFBD><32> <30> <EFBFBD><EFBFBD><EFBFBD><32><6D><30> <EFBFBD>  <EFBFBD><32> <30> <EFBFBD><32> <30> <EFBFBD><EFBFBD> <EFBFBD><32><31><6D><EFBFBD><32><6D> <EFBFBD><32> <32><32> <30> <EFBFBD><EFBFBD> <EFBFBD><32> <30> <EFBFBD><32> <30> <EFBFBD><EFBFBD> <EFBFBD><32><6D><30> <EFBFBD><EFBFBD> <EFBFBD><32> <30> <EFBFBD><EFBFBD> <EFBFBD><32><6D><30> <EFBFBD> 
<EFBFBD><EFBFBD> <30> <32><6D> <30> <EFBFBD><32> <20><> <30> <EFBFBD><32> <20><> <20><> <30> <EFBFBD><32> <20><> <30> <32><6D> <30> <EFBFBD><32> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <30> <EFBFBD><32> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <32><6D> <30> <32><6D> <30> <EFBFBD><32> <20><> <30> <EFBFBD><32> <20><> <20><> <30> <EFBFBD><32> <20><> <30> <32><6D> <30> <EFBFBD><32> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <30> <EFBFBD><32> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<30><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <30><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<20> M. Message Areas<30> L. BBS List<30> <20> M. Message Areas<EFBFBD> L. BBS List<EFBFBD>
<20> T. File Areas<EFBFBD> C. Chat System<EFBFBD> <20> T. File Areas<30> C. Chat System<EFBFBD>
<20> B. Bulletins<30> U. User List<30> <20> B. Bulletins<EFBFBD> U. User List<EFBFBD>
<20> D. Online Games<30> 1. Last 10 Callers<30> <20> D. Door Games & Utilites<EFBFBD> 1. Last 10 Callers<EFBFBD>
<20><EFBFBD><EFBFBD> <20> A. Text/ANSI File Collection <30><EFBFBD>
<20><EFBFBD><EFBFBD> <20><30><EFBFBD>
<20><EFBFBD> G. Goodbye (Log Off)<30> <20><EFBFBD> G. Goodbye (Log Off)<30>
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>


30
bbs.c
View File

@@ -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]->path = strdup(value);
conf->file_directories[conf->file_directory_count]->file_sub_count = 0; conf->file_directories[conf->file_directory_count]->file_sub_count = 0;
conf->file_directory_count++; 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; return 1;
@@ -339,6 +351,23 @@ void s_putstring(int socket, char *c) {
write(socket, c, strlen(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) { void s_displayansi(int socket, char *file) {
FILE *fptr; FILE *fptr;
char c; char c;
@@ -577,6 +606,7 @@ void runbbs(int socket, char *config_path) {
conf.file_directory_count = 0; conf.file_directory_count = 0;
conf.irc_server = NULL; conf.irc_server = NULL;
conf.irc_port = 6667; conf.irc_port = 6667;
conf.text_file_count = 0;
// Load BBS data // Load BBS data
if (ini_parse(config_path, handler, &conf) <0) { if (ini_parse(config_path, handler, &conf) <0) {

8
bbs.h
View File

@@ -26,6 +26,11 @@ struct last10_callers {
time_t time; time_t time;
}__attribute__((packed)); }__attribute__((packed));
struct text_file {
char *name;
char *path;
};
struct door_config { struct door_config {
char *name; char *name;
char key; char key;
@@ -88,6 +93,8 @@ struct bbs_config {
struct door_config **doors; struct door_config **doors;
int file_directory_count; int file_directory_count;
struct file_directory **file_directories; struct file_directory **file_directories;
int text_file_count;
struct text_file **text_files;
}; };
struct sec_level_t { 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 struct fido_addr *parse_fido_addr(const char *str);
extern void s_putchar(int socket, char c); extern void s_putchar(int socket, char c);
extern void s_putstring(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 void s_displayansi(int socket, char *file);
extern char s_getchar(int socket); extern char s_getchar(int socket);
extern void s_readstring(int socket, char *buffer, int max); extern void s_readstring(int socket, char *buffer, int max);

View File

@@ -18,3 +18,6 @@ IllusionNet = config/illusionnet.ini
[file directories] [file directories]
General Files = config/filesgen.ini General Files = config/filesgen.ini
[text files]
Warning = ansis/bulletin0.ans

View File

@@ -1,5 +1,6 @@
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include <stdlib.h>
#include <ctype.h> #include <ctype.h>
#include <sys/stat.h> #include <sys/stat.h>
#include "bbs.h" #include "bbs.h"
@@ -23,6 +24,39 @@ void main_menu(int socket, struct user_record *user) {
c = s_getc(socket); c = s_getc(socket);
switch(tolower(c)) { 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;i<conf.text_file_count;i++) {
sprintf(buffer, "\e[1;30m[\e[1;34m%3d\e[1;30m] \e[1;37m%s\r\n", i, conf.text_files[i]->name);
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': case 'c':
{ {
chat_system(socket, user); chat_system(socket, user);