Added Ansi/textfile collections
This commit is contained in:
@@ -1,15 +1,14 @@
|
|||||||
[?7h[255D[40m
|
[0;40;37m
|
||||||
[0;1m[5C[32m<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><> [30m<30> [32m<32><6D>
|
[5C[1;32m<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><> [30m<30> [32m<32><6D>
|
||||||
[5C[42m<EFBFBD><EFBFBD>[30;40m<EFBFBD><EFBFBD> [32;42m<EFBFBD><EFBFBD>[30;40m<EFBFBD><EFBFBD> [32;42m<EFBFBD><EFBFBD>[1C<EFBFBD><EFBFBD>[30;40m<EFBFBD> [32;42m<EFBFBD><EFBFBD>[1C<EFBFBD><EFBFBD>[1C<EFBFBD><EFBFBD>[30;40m<EFBFBD><EFBFBD> [32;42m<EFBFBD><EFBFBD>[2C<EFBFBD><EFBFBD>[30;40m<EFBFBD><EFBFBD> [32;42m<EFBFBD><EFBFBD>[30;40m<EFBFBD><EFBFBD> [32;42m<EFBFBD><EFBFBD>[1C<EFBFBD><EFBFBD>[0;32m<32><6D> [1m<31><6D> [42m<32><6D>[30;40m<EFBFBD><EFBFBD> [32;42m<EFBFBD><EFBFBD>[1C<EFBFBD><EFBFBD>[1C[30;40m<EFBFBD> [32;42m۲[40m
|
[0m[5C[1;42;32m<EFBFBD><EFBFBD>[40;30m<EFBFBD><EFBFBD> [42;32m<EFBFBD><EFBFBD>[40;30m<EFBFBD><EFBFBD> [42;32m<EFBFBD><EFBFBD>[0m [1;42;32m<EFBFBD><EFBFBD>[40;30m<EFBFBD> [42;32m<EFBFBD><EFBFBD>[0m [1;42;32m<32><6D>[0m [1;42;32m<EFBFBD><EFBFBD>[40;30m<EFBFBD><EFBFBD> [42;32m<EFBFBD><EFBFBD>[0m [1;42;32m<EFBFBD><EFBFBD>[40;30m<EFBFBD><EFBFBD> [42;32m<EFBFBD><EFBFBD>[40;30m<EFBFBD><EFBFBD> [42;32m<EFBFBD><EFBFBD>[0m [1;42;32m<EFBFBD><EFBFBD>[0;32m<32><6D> [1m<31><6D> [42m<32><6D>[40;30m<EFBFBD><EFBFBD> [42;32m<EFBFBD><EFBFBD>[0m [1;42;32m<32><6D>[0m [1;30m<EFBFBD> [42;32m۲[0m
|
||||||
[5C[42m<EFBFBD>[0;32m<32> [1;30m<30> [32;42m<EFBFBD>[0;32m<32> [1;30m<30> [32;42m<EFBFBD><EFBFBD>[1C<EFBFBD>[0;32m<32>[1m<31><6D><EFBFBD>[42m<32><6D>[1C<EFBFBD>[0;32m<32> [1;42m<32>[0;32m<32> [1;30m<30> [32;42m<EFBFBD><EFBFBD>[2C<EFBFBD>[0;32m<32> [1;30m<30> [32;42m<EFBFBD>[0;32m<32> [1;30m<30> [32;42m<EFBFBD><EFBFBD>[1C<EFBFBD>[0;32m<32><6D>[1;30m<30> [32;42m<EFBFBD><EFBFBD>[1C<EFBFBD>[0;32m<32> [1;30m<30> [32;42m<EFBFBD><EFBFBD>[1C<EFBFBD>[0;32m<32><6D>[1;30m<30> [32;42m<EFBFBD> [40m
|
[5C[1;42;32m<EFBFBD>[0;32m<32> [1;30m<30> [42;32m<EFBFBD>[0;32m<32> [1;30m<30> [42;32m<EFBFBD><EFBFBD>[0m [1;42;32m<EFBFBD>[0;32m<32>[1m<31><6D><EFBFBD>[42m<32><6D>[0m [1;42;32m<EFBFBD>[0;32m<32> [1;42m<32>[0;32m<32> [1;30m<30> [42;32m<EFBFBD><EFBFBD>[0m [1;42;32m<EFBFBD>[0;32m<32> [1;30m<30> [42;32m<EFBFBD>[0;32m<32> [1;30m<30> [42;32m<EFBFBD><EFBFBD>[0m [1;42;32m<EFBFBD>[0;32m<32><6D>[1;30m<30> [42;32m<EFBFBD><EFBFBD>[0m [1;42;32m<EFBFBD>[0;32m<32> [1;30m<30> [42;32m<EFBFBD><EFBFBD>[0m [1;42;32m<EFBFBD>[0;32m<32><6D>[1;30m<30> [42;32m<EFBFBD> [0m
|
||||||
[5C[0;32m<EFBFBD><EFBFBD> [1;30m<30> [0;32m<32><6D> [1;30m<30> [32;42m<EFBFBD>[0;32m<32> <20><> [1;30m<30> [32;42m<EFBFBD>[0;32m<32> <20><> <20><> [1;30m<30> [32;42m<EFBFBD>[0;32m<32> <20><> [1;30m<30> [0;32m<32><6D> [1;30m<30> [32;42m<EFBFBD>[0;32m<32> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> [1;30m<30> [32;42m<EFBFBD>[0;32m<32> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
[5C[32m<32><6D> [1;30m<30> [0;32m<32><6D> [1;30m<30> [42;32m<EFBFBD>[0;32m<32> <20><> [1;30m<30> [42;32m<EFBFBD>[0;32m<32> <20><> <20><> [1;30m<30> [42;32m<EFBFBD>[0;32m<32> <20><> [1;30m<30> [0;32m<32><6D> [1;30m<30> [42;32m<EFBFBD>[0;32m<32> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> [1;30m<30> [42;32m<EFBFBD>[0;32m<32> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
[1;30m<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>
|
[1;30m<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> [0;36mM. [1;37mMessage Areas[16C[30m<30> [0;36mL. [1;37mBBS List[22C[30m<30>
|
<20> [0;36mM. [1;37mMessage Areas[0m[16C[1;30m<EFBFBD> [0;36mL.[1;37m BBS List[0m[22C[1;30m<EFBFBD>
|
||||||
<20> T. File Areas[19C<EFBFBD> C. Chat System[19C<EFBFBD>
|
<20> T. File Areas[0m[19C[1;30m<30> [0;36mC.[1;30m [37mChat System[0m[19C[1;30m<EFBFBD>
|
||||||
<20> [0;36mB. [1;37mBulletins[20C[30m<30> [0;36mU. [1;37mUser List[21C[30m<30>
|
<20> [0;36mB. [1;37mBulletins[0m[20C[1;30m<EFBFBD> [0;36mU. [1;37mUser List[0m[21C[1;30m<EFBFBD>
|
||||||
<20> [0;36mD. [1;37mOnline Games[17C[30m<30> [0;36m1. [1;37mLast 10 Callers[15C[30m<30>
|
<20> [0;36mD. [1;37mDoor Games & Utilites[0m[8C[1;30m<EFBFBD> [0;36m1. [1;37mLast 10 Callers[0m[15C[1;30m<EFBFBD>
|
||||||
<20>[34C<EFBFBD>[35C<EFBFBD>
|
<20>[0m [36mA. [1;37mText/ANSI File Collection[0m [1;30m<30>[0m[35C[1;30m<EFBFBD>
|
||||||
<20>[34C<EFBFBD>[35C<EFBFBD>
|
<20>[0m[34C[1;30m<30>[0m[35C[1;30m<EFBFBD>
|
||||||
<20>[34C<EFBFBD> [0;36mG. [1;31mGoodbye [0;31m([1mLog Off[0;31m)[13C[1;30m<30>
|
<20>[0m[34C[1;30m<EFBFBD> [0;36mG. [1;31mGoodbye [0;31m([1mLog Off[0;31m)[37m[13C[1;30m<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>
|
||||||
[0m[255D
|
|
||||||
|
30
bbs.c
30
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]->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
8
bbs.h
@@ -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);
|
||||||
|
@@ -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
|
||||||
|
34
main_menu.c
34
main_menu.c
@@ -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);
|
||||||
|
Reference in New Issue
Block a user