From 31911a55fec1ed257cf12ef81749efd80fccec96 Mon Sep 17 00:00:00 2001 From: rswindell <> Date: Fri, 13 Dec 2002 01:51:47 +0000 Subject: [PATCH] scfg.colors (loaded from attr.cfg) is now a dynamically allocated array, allowing additional sysop-configurable color attribute definitions. --- src/sbbs3/load_cfg.c | 29 ++++++++++++++++++++++------- src/sbbs3/sbbsdefs.h | 3 ++- src/sbbs3/scfgdefs.h | 3 ++- 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/src/sbbs3/load_cfg.c b/src/sbbs3/load_cfg.c index aa57620b6e..f66ed1faaf 100644 --- a/src/sbbs3/load_cfg.c +++ b/src/sbbs3/load_cfg.c @@ -38,6 +38,8 @@ #include "sbbs.h" static void prep_cfg(scfg_t* cfg); +static void free_attr_cfg(scfg_t* cfg); + char * readtext(long *line, FILE *stream); int lprintf(char *fmt, ...); @@ -240,6 +242,7 @@ void DLLCALL free_cfg(scfg_t* cfg) free_file_cfg(cfg); free_chat_cfg(cfg); free_xtrn_cfg(cfg); + free_attr_cfg(cfg); } void DLLCALL free_text(char* text[]) @@ -404,8 +407,8 @@ char *readtext(long *line,FILE *stream) /****************************************************************************/ BOOL read_attr_cfg(scfg_t* cfg, char* error) { + char* p; char str[256],fname[13]; - int i; long offset=0; FILE *instream; @@ -415,19 +418,31 @@ BOOL read_attr_cfg(scfg_t* cfg, char* error) sprintf(error,"%d opening %s",errno,str); return(FALSE); } - for(i=0;i<TOTAL_COLORS && !feof(instream) && !ferror(instream);i++) { - readline(&offset,str,4,instream); - cfg->color[i]=attrstr(str); + FREE_AND_NULL(cfg->color); + for(cfg->total_colors=0;!feof(instream) && !ferror(instream);cfg->total_colors++) { + if(readline(&offset,str,4,instream)==NULL) + break; + if((p=realloc(cfg->color,cfg->total_colors+1))==NULL) + break; + cfg->color=p; + cfg->color[cfg->total_colors]=attrstr(str); } - if(i<TOTAL_COLORS) { - sprintf(error,"Less than TOTAL_COLORS (%u) defined in %s" - ,TOTAL_COLORS,fname); + if(cfg->total_colors<MIN_COLORS) { + sprintf(error,"Less than MIN_COLORS (%lu<%u) defined in %s" + ,cfg->total_colors,MIN_COLORS,fname); return(FALSE); } fclose(instream); return(TRUE); } +static void free_attr_cfg(scfg_t* cfg) +{ + if(cfg->color!=NULL) + FREE_AND_NULL(cfg->color); + cfg->total_colors=0; +} + char* DLLCALL prep_dir(char* base, char* path) { #ifdef __unix__ diff --git a/src/sbbs3/sbbsdefs.h b/src/sbbs3/sbbsdefs.h index 9ee8748cb0..50b7f2ef88 100644 --- a/src/sbbs3/sbbsdefs.h +++ b/src/sbbs3/sbbsdefs.h @@ -336,7 +336,8 @@ enum { ,clr_chatremote ,clr_multichat ,clr_external - ,TOTAL_COLORS }; + ,MIN_COLORS +}; enum { /* Values for xtrn_t.type */ XTRN_NONE /* No data file needed */ diff --git a/src/sbbs3/scfgdefs.h b/src/sbbs3/scfgdefs.h index 819d6bea3b..a3ff83fcbc 100644 --- a/src/sbbs3/scfgdefs.h +++ b/src/sbbs3/scfgdefs.h @@ -574,7 +574,8 @@ typedef struct ushort sec_warn; /* Seconds before inactivity warning */ ushort sec_hangup; /* Seconds before inactivity hang-up */ - char color[TOTAL_COLORS]; /* Different colors for the BBS */ + char* color; /* Different colors for the BBS */ + ulong total_colors; ulong ctrlkey_passthru; /* Bits represent control keys NOT handled by inkey() */ char wfc_cmd[10][LEN_CMD+1]; /* 0-9 WFC DOS commands */ -- GitLab