Skip to content
Snippets Groups Projects
Commit 19f5b5fb authored by deuce's avatar deuce
Browse files

Switch to using a string for the font in the dialing directory.

Load up user-selected fonts at startup, and allow to be chosen as a BBS
default font.
parent 412fe5ee
No related branches found
No related tags found
No related merge requests found
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#include <ini_file.h> #include <ini_file.h>
#include <uifc.h> #include <uifc.h>
#include "filepick.h" #include "filepick.h"
#include "allfonts.h"
#include "syncterm.h" #include "syncterm.h"
#include "bbslist.h" #include "bbslist.h"
...@@ -103,7 +104,7 @@ void read_item(FILE *listfile, struct bbslist *entry, char *bbsname, int id, int ...@@ -103,7 +104,7 @@ void read_item(FILE *listfile, struct bbslist *entry, char *bbsname, int id, int
entry->loglevel=iniReadInteger(listfile,bbsname,"LogLevel",LOG_INFO); entry->loglevel=iniReadInteger(listfile,bbsname,"LogLevel",LOG_INFO);
entry->bpsrate=iniReadInteger(listfile,bbsname,"BPSRate",0); entry->bpsrate=iniReadInteger(listfile,bbsname,"BPSRate",0);
entry->music=iniReadInteger(listfile,bbsname,"ANSIMusic",CTERM_MUSIC_BANSI); entry->music=iniReadInteger(listfile,bbsname,"ANSIMusic",CTERM_MUSIC_BANSI);
entry->font=iniReadInteger(listfile,bbsname,"Font",default_font); iniReadString(listfile,bbsname,"Font","Codepage 437 English",entry->font);
entry->type=type; entry->type=type;
} }
...@@ -191,7 +192,7 @@ int edit_list(struct bbslist *item,char *listpath,int isdefault) ...@@ -191,7 +192,7 @@ int edit_list(struct bbslist *item,char *listpath,int isdefault)
sprintf(opt[i++],"Log Level %s",log_levels[item->loglevel]); sprintf(opt[i++],"Log Level %s",log_levels[item->loglevel]);
sprintf(opt[i++],"Simulated BPS %s",rate_names[get_rate_num(item->bpsrate)]); sprintf(opt[i++],"Simulated BPS %s",rate_names[get_rate_num(item->bpsrate)]);
sprintf(opt[i++],"ANSI Music %s",music_names[item->music]); sprintf(opt[i++],"ANSI Music %s",music_names[item->music]);
sprintf(opt[i++],"Font %s",font_names[item->font]); sprintf(opt[i++],"Font %s",item->font);
opt[i++][0]=0; opt[i++][0]=0;
uifc.changes=0; uifc.changes=0;
...@@ -418,11 +419,11 @@ int edit_list(struct bbslist *item,char *listpath,int isdefault) ...@@ -418,11 +419,11 @@ int edit_list(struct bbslist *item,char *listpath,int isdefault)
"Select the desired font for this connection.\n\n" "Select the desired font for this connection.\n\n"
"Some fonts do not allow some modes. When this is the case, 80x25 will be" "Some fonts do not allow some modes. When this is the case, 80x25 will be"
"forced.\n"; "forced.\n";
i=item->font; i=j=find_font_id(item->font);
uifc.list(WIN_SAV,0,0,0,&i,NULL,"Font",font_names); uifc.list(WIN_SAV,0,0,0,&i,&j,"Font",font_names);
if(i != item->font) { if(i!=find_font_id(item->font)) {
item->font=i; strcpy(item->font,font_names[i]);
iniSetInteger(&inifile,itemname,"Font",item->font,&ini_style); iniSetString(&inifile,itemname,"Font",item->font,&ini_style);
changed=1; changed=1;
} }
break; break;
...@@ -464,7 +465,7 @@ void add_bbs(char *listpath, struct bbslist *bbs) ...@@ -464,7 +465,7 @@ void add_bbs(char *listpath, struct bbslist *bbs)
iniSetInteger(&inifile,bbs->name,"LogLevel",bbs->loglevel,&ini_style); iniSetInteger(&inifile,bbs->name,"LogLevel",bbs->loglevel,&ini_style);
iniSetInteger(&inifile,bbs->name,"BPSRate",bbs->bpsrate,&ini_style); iniSetInteger(&inifile,bbs->name,"BPSRate",bbs->bpsrate,&ini_style);
iniSetInteger(&inifile,bbs->name,"ANSIMusic",bbs->music,&ini_style); iniSetInteger(&inifile,bbs->name,"ANSIMusic",bbs->music,&ini_style);
iniSetInteger(&inifile,bbs->name,"Font",bbs->font,&ini_style); iniSetString(&inifile,bbs->name,"Font",bbs->font,&ini_style);
if((listfile=fopen(listpath,"w"))!=NULL) { if((listfile=fopen(listpath,"w"))!=NULL) {
iniWriteFile(listfile,inifile); iniWriteFile(listfile,inifile);
fclose(listfile); fclose(listfile);
...@@ -489,13 +490,6 @@ void del_bbs(char *listpath, struct bbslist *bbs) ...@@ -489,13 +490,6 @@ void del_bbs(char *listpath, struct bbslist *bbs)
} }
} }
struct font_files {
char *name;
char *path8x8;
char *path8x14;
char *path8x16;
};
void free_font_files(struct font_files *ff) void free_font_files(struct font_files *ff)
{ {
int i; int i;
...@@ -600,6 +594,93 @@ struct font_files *read_font_files(int *count) ...@@ -600,6 +594,93 @@ struct font_files *read_font_files(int *count)
return(ret); return(ret);
} }
void load_font_files(void)
{
int count=0;
int i;
int nextfont=CONIO_FIRST_FREE_FONT;
struct font_files *ff;
FILE *fontfile;
char *fontdata;
ff=read_font_files(&count);
for(i=0; i<count; i++) {
if(conio_fontdata[nextfont].eight_by_sixteen)
FREE_AND_NULL(conio_fontdata[nextfont].eight_by_sixteen);
if(conio_fontdata[nextfont].eight_by_fourteen)
FREE_AND_NULL(conio_fontdata[nextfont].eight_by_fourteen);
if(conio_fontdata[nextfont].eight_by_sixteen)
FREE_AND_NULL(conio_fontdata[nextfont].eight_by_eight);
if(conio_fontdata[nextfont].desc)
FREE_AND_NULL(conio_fontdata[nextfont].desc);
if(ff[i].name)
conio_fontdata[nextfont].desc=strdup(ff[i].name);
else
continue;
if(ff[i].path8x8) {
if((fontfile=fopen(ff[i].path8x8,"r"))!=NULL) {
if((fontdata=(char *)malloc(2048))!=NULL) {
if(fread(fontdata, 1, 2048, fontfile)==2048) {
conio_fontdata[nextfont].eight_by_eight=fontdata;
}
else {
free(fontdata);
}
}
}
}
if(ff[i].path8x14) {
if((fontfile=fopen(ff[i].path8x14,"r"))!=NULL) {
if((fontdata=(char *)malloc(3584))!=NULL) {
if(fread(fontdata, 1, 3584, fontfile)==3584) {
conio_fontdata[nextfont].eight_by_fourteen=fontdata;
}
else {
free(fontdata);
}
}
}
}
if(ff[i].path8x16) {
if((fontfile=fopen(ff[i].path8x16,"r"))!=NULL) {
if((fontdata=(char *)malloc(4096))!=NULL) {
if(fread(fontdata, 1, 4096, fontfile)==4096) {
conio_fontdata[nextfont].eight_by_sixteen=fontdata;
}
else {
free(fontdata);
}
}
}
}
nextfont++;
}
free_font_files(ff);
for(i=0; conio_fontdata[i].desc != NULL; i++) {
font_names[i]=conio_fontdata[i].desc;
if(!strcmp(conio_fontdata[i].desc,"Codepage 437 English")) {
default_font=i;
}
}
font_names[i]="";
}
int find_font_id(char *name)
{
int ret=0;
int i;
for(i=0; i<256; i++) {
if(!conio_fontdata[i].desc)
continue;
if(!strcmp(conio_fontdata[i].desc,name)) {
ret=i;
break;
}
}
}
void font_management(void) void font_management(void)
{ {
int i,j; int i,j;
......
...@@ -55,7 +55,14 @@ struct bbslist { ...@@ -55,7 +55,14 @@ struct bbslist {
int loglevel; int loglevel;
int bpsrate; int bpsrate;
int music; int music;
int font; char font[80];
};
struct font_files {
char *name;
char *path8x8;
char *path8x14;
char *path8x16;
}; };
struct bbslist *show_bbslist(int mode); struct bbslist *show_bbslist(int mode);
...@@ -67,5 +74,10 @@ void read_list(char *listpath, struct bbslist **list, struct bbslist *defaults, ...@@ -67,5 +74,10 @@ void read_list(char *listpath, struct bbslist **list, struct bbslist *defaults,
void free_list(struct bbslist **list, int listcount); void free_list(struct bbslist **list, int listcount);
void add_bbs(char *listpath, struct bbslist *bbs); void add_bbs(char *listpath, struct bbslist *bbs);
int get_rate_num(int rate); int get_rate_num(int rate);
void free_font_files(struct font_files *ff);
void save_font_files(struct font_files *fonts);
struct font_files *read_font_files(int *count);
void load_font_files(void);
int find_font_id(char *name);
#endif #endif
...@@ -33,7 +33,7 @@ char* syncterm_version = "SyncTERM 0.6" ...@@ -33,7 +33,7 @@ char* syncterm_version = "SyncTERM 0.6"
; ;
char *inpath=NULL; char *inpath=NULL;
int default_font; int default_font=0;
char *font_names[sizeof(conio_fontdata)/sizeof(struct conio_font_data_struct)]; char *font_names[sizeof(conio_fontdata)/sizeof(struct conio_font_data_struct)];
#ifdef _WINSOCKAPI_ #ifdef _WINSOCKAPI_
...@@ -87,7 +87,7 @@ void parse_url(char *url, struct bbslist *bbs, int dflt_conn_type, int force_def ...@@ -87,7 +87,7 @@ void parse_url(char *url, struct bbslist *bbs, int dflt_conn_type, int force_def
bbs->port=(dflt_conn_type==CONN_TYPE_TELNET)?23:513; bbs->port=(dflt_conn_type==CONN_TYPE_TELNET)?23:513;
bbs->loglevel=LOG_INFO; bbs->loglevel=LOG_INFO;
bbs->music=CTERM_MUSIC_BANSI; bbs->music=CTERM_MUSIC_BANSI;
bbs->font=default_font; strcpy(bbs->font,"Codepage 437 English");
} }
p1=url; p1=url;
if(!strnicmp("rlogin://",url,9)) { if(!strnicmp("rlogin://",url,9)) {
...@@ -347,14 +347,6 @@ int main(int argc, char **argv) ...@@ -347,14 +347,6 @@ int main(int argc, char **argv)
initciolib(ciolib_mode); initciolib(ciolib_mode);
for(i=0; conio_fontdata[i].desc != NULL; i++) {
font_names[i]=conio_fontdata[i].desc;
if(!strcmp(conio_fontdata[i].desc,"Codepage 437 English")) {
default_font=i;
}
}
font_names[i]="";
gettextinfo(&txtinfo); gettextinfo(&txtinfo);
if((txtinfo.screenwidth<40) || txtinfo.screenheight<24) { if((txtinfo.screenwidth<40) || txtinfo.screenheight<24) {
fputs("Window too small, must be at least 80x24\n",stderr); fputs("Window too small, must be at least 80x24\n",stderr);
...@@ -396,6 +388,7 @@ int main(int argc, char **argv) ...@@ -396,6 +388,7 @@ int main(int argc, char **argv)
if(!winsock_startup()) if(!winsock_startup())
return(1); return(1);
load_font_files();
while(bbs!=NULL || (bbs=show_bbslist(BBSLIST_SELECT))!=NULL) { while(bbs!=NULL || (bbs=show_bbslist(BBSLIST_SELECT))!=NULL) {
gettextinfo(&txtinfo); /* Current mode may have changed while in show_bbslist() */ gettextinfo(&txtinfo); /* Current mode may have changed while in show_bbslist() */
if(!conn_connect(bbs->addr,bbs->port,bbs->reversed?bbs->password:bbs->user,bbs->reversed?bbs->user:bbs->password,bbs->syspass,bbs->conn_type,bbs->bpsrate)) { if(!conn_connect(bbs->addr,bbs->port,bbs->reversed?bbs->password:bbs->user,bbs->reversed?bbs->user:bbs->password,bbs->syspass,bbs->conn_type,bbs->bpsrate)) {
...@@ -417,7 +410,8 @@ int main(int argc, char **argv) ...@@ -417,7 +410,8 @@ int main(int argc, char **argv)
} }
} }
uifcbail(); uifcbail();
setfont(bbs->font,TRUE); load_font_files();
setfont(find_font_id(bbs->font),TRUE);
switch(bbs->screen_mode) { switch(bbs->screen_mode) {
case SCREEN_MODE_80X25: case SCREEN_MODE_80X25:
textmode(C80); textmode(C80);
...@@ -442,6 +436,13 @@ int main(int argc, char **argv) ...@@ -442,6 +436,13 @@ int main(int argc, char **argv)
return(1); return(1);
exit_now=doterm(bbs); exit_now=doterm(bbs);
setfont(default_font,TRUE); setfont(default_font,TRUE);
for(i=CONIO_FIRST_FREE_FONT; i<256; i++) {
FREE_AND_NULL(conio_fontdata[i].eight_by_sixteen);
FREE_AND_NULL(conio_fontdata[i].eight_by_fourteen);
FREE_AND_NULL(conio_fontdata[i].eight_by_eight);
FREE_AND_NULL(conio_fontdata[i].desc);
}
load_font_files();
textmode(txtinfo.currmode); textmode(txtinfo.currmode);
settitle("SyncTERM"); settitle("SyncTERM");
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment