diff --git a/src/syncterm/bbslist.c b/src/syncterm/bbslist.c index dc4f6221ad43627a6568aecc77ffe6eea19cb55f..f246aa84a1af1415414f095f7a812b898fc40d5d 100644 --- a/src/syncterm/bbslist.c +++ b/src/syncterm/bbslist.c @@ -162,11 +162,7 @@ int edit_list(struct bbslist *item,char *listpath,int isdefault) fclose(listfile); } else { - if((listfile=fopen(listpath,"w"))==NULL) - return(0); - fclose(listfile); - if((listfile=fopen(listpath,"r"))==NULL) - return(0); + inifile=strListInit(); } if(isdefault) @@ -490,331 +486,58 @@ void del_bbs(char *listpath, struct bbslist *bbs) } } -void free_font_files(struct font_files *ff) -{ - int i; - - if(ff==NULL) - return; - for(i=0; ff[i].name != NULL; i++) { - FREE_AND_NULL(ff[i].name); - FREE_AND_NULL(ff[i].path8x8); - FREE_AND_NULL(ff[i].path8x14); - FREE_AND_NULL(ff[i].path8x16); - } - FREE_AND_NULL(ff); -} - -void save_font_files(struct font_files *fonts) +void change_settings(void) { - FILE *inifile; char inipath[MAX_PATH]; - char newfont[MAX_PATH]; - char *fontid; - str_list_t ini_file; - str_list_t fontnames; - int i; + FILE *inifile; + str_list_t inicontents; + char opts[3][80]; + char *opt[3]; + int i,j; get_syncterm_filename(inipath, sizeof(inipath), SYNCTERM_PATH_INI, FALSE); if((inifile=fopen(inipath,"r"))!=NULL) { - ini_file=iniReadFile(inifile); + inicontents=iniReadFile(inifile); fclose(inifile); } else { - ini_file=strListInit(); - } - - fontnames=iniGetSectionList(ini_file, "Font:"); - - /* TODO: Remove all sections... we don't *NEED* to do this */ - while((fontid=strListPop(&fontnames))!=NULL) { - iniRemoveSection(&ini_file, fontid); - } - - if(fonts != NULL) { - for(i=0; fonts[i].name && fonts[i].name[0]; i++) { - sprintf(newfont,"Font:%s",fonts[i].name); - if(fonts[i].path8x8) - iniSetString(&ini_file, newfont, "Path8x8", fonts[i].path8x8, &ini_style); - if(fonts[i].path8x14) - iniSetString(&ini_file, newfont, "Path8x14", fonts[i].path8x14, &ini_style); - if(fonts[i].path8x16) - iniSetString(&ini_file, newfont, "Path8x16", fonts[i].path8x16, &ini_style); - } - } - if((inifile=fopen(inipath,"w"))!=NULL) { - iniWriteFile(inifile,ini_file); - fclose(inifile); - } - else { - uifc.msg("Cannot write to the .ini file!"); - } - - strListFreeStrings(fontnames); - strListFreeStrings(ini_file); -} - -struct font_files *read_font_files(int *count) -{ - FILE *inifile; - char inipath[MAX_PATH]; - char fontpath[MAX_PATH]; - char *fontid; - str_list_t fonts; - struct font_files *ret=NULL; - struct font_files *tmp=NULL; - - *count=0; - get_syncterm_filename(inipath, sizeof(inipath), SYNCTERM_PATH_INI, FALSE); - if((inifile=fopen(inipath, "r"))==NULL) { - return(ret); - } - fonts=iniReadSectionList(inifile, "Font:"); - while((fontid=strListPop(&fonts))!=NULL) { - if(!fontid[5]) - continue; - (*count)++; - tmp=(struct font_files *)realloc(ret, sizeof(struct font_files)*(*count+1)); - if(tmp==NULL) { - count--; - continue; - } - ret=tmp; - ret[*count].name=NULL; - ret[*count-1].name=strdup(fontid+5); - if((ret[*count-1].path8x8=iniReadString(inifile,fontid,"Path8x8",NULL,fontpath))!=NULL) - ret[*count-1].path8x8=strdup(fontpath); - if((ret[*count-1].path8x14=iniReadString(inifile,fontid,"Path8x14","",fontpath))!=NULL) - ret[*count-1].path8x14=strdup(fontpath); - if((ret[*count-1].path8x16=iniReadString(inifile,fontid,"Path8x16",NULL,fontpath))!=NULL) - ret[*count-1].path8x16=strdup(fontpath); - } - fclose(inifile); - strListFreeStrings(fonts); - 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++; + inicontents=strListInit(); } - 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) -{ - int i,j; - int cur=0; - int bar=0; - int fcur=0; - int fbar=0; - int count=0; - int size=0; - struct font_files *fonts; - char *opt[256]; - char opts[5][80]; - struct font_files *tmp=NULL; - char str[128]; - - fonts=read_font_files(&count); - opts[4][0]=0; + for(i=0; i<3; i++) + opt[i]=opts[i]; + i=0; + opts[2][0]=0; for(;;) { - uifc.helpbuf= "`Font Management`\n\n" - "Allows you to add and remove font files to/from the default font set.\n\n" - "`INS` Adds a new font.\n" - "`DEL` Removes an existing font.\n\n" - "Selecting a font allows you to set the files for all three font sizes:\n" - "8x8, 8x14, and 8x16."; - if(fonts) { - for(j=0;fonts[j].name && fonts[j].name[0]; j++) - opt[j]=fonts[j].name; - opt[j]=""; - } - else { - opts[0][0]=0; - opt[0]=opts[0]; - } - i=uifc.list(WIN_SAV|WIN_INS|WIN_INSACT|WIN_DEL|WIN_XTR,0,0,0,&cur,&bar,"Font",opt); - if(i==-1) { - save_font_files(fonts); - free_font_files(fonts); - return; - } - for(;;) { - char *fontmask; - int show_filepick=0; - char **path; - - if(i&MSK_DEL) { - FREE_AND_NULL(fonts[cur].name); - FREE_AND_NULL(fonts[cur].path8x8); - FREE_AND_NULL(fonts[cur].path8x14); - FREE_AND_NULL(fonts[cur].path8x16); - memmove(&(fonts[cur]),&(fonts[cur+1]),sizeof(struct font_files)*(count-cur-1)); - count--; - break; - } - if(i&MSK_INS) { - str[0]=0; - if(uifc.input(WIN_SAV|WIN_MID,0,0,"Font Name",str,50,0)==-1) - break; - count++; - tmp=(struct font_files *)realloc(fonts, sizeof(struct font_files)*(count+1)); - if(tmp==NULL) { - uifc.msg("realloc() failure, cannot add font."); - count--; - break; - } - fonts=tmp; - memmove(fonts+cur+1,fonts+cur,sizeof(struct font_files)*(count-cur)); - memset(&(fonts[count]),0,sizeof(fonts[count])); - fonts[cur].name=strdup(str); - fonts[cur].path8x8=NULL; - fonts[cur].path8x14=NULL; - fonts[cur].path8x16=NULL; - } - for(i=0; i<5; i++) - opt[i]=opts[i]; - sprintf(opts[0],"Name: %.50s",fonts[cur].name?fonts[cur].name:"<undefined>"); - sprintf(opts[1],"8x8 %.50s",fonts[cur].path8x8?fonts[cur].path8x8:"<undefined>"); - sprintf(opts[2],"8x14 %.50s",fonts[cur].path8x14?fonts[cur].path8x14:"<undefined>"); - sprintf(opts[3],"8x16 %.50s",fonts[cur].path8x16?fonts[cur].path8x16:"<undefined>"); - opts[4][0]=0; - i=uifc.list(WIN_SAV|WIN_INS|WIN_DEL,0,0,0,&fcur,&fbar,"Font",opt); - if(i==-1) + sprintf(opts[0],"Confirm Program Exit: %s",settings.confirm_close?"Yes":"No"); + sprintf(opts[1],"Startup Video Mode: %s",screen_modes[settings.startup_mode]); + switch(uifc.list(WIN_MID|WIN_SAV,0,0,0,&i,NULL,"Program Settings",opt)) { + case -1: + goto write_ini; + case 0: + settings.confirm_close=!settings.confirm_close; + iniSetBool(&inicontents,"SyncTERM","ConfirmClose",settings.confirm_close,&ini_style); break; - switch(i) { - case 0: - SAFECOPY(str,fonts[cur].name); - free(fonts[cur].name); - uifc.input(WIN_SAV|WIN_MID,0,0,"Font Name",str,50,K_EDIT); - fonts[cur].name=strdup(str); - show_filepick=0; - break; - case 1: - sprintf(str,"8x8 %.50s",fonts[cur].name); - path=&(fonts[cur].path8x8); - fontmask="*.f8"; - show_filepick=1; - break; - case 2: - sprintf(str,"8x14 %.50s",fonts[cur].name); - path=&(fonts[cur].path8x14); - fontmask="*.f14"; - show_filepick=1; - break; - case 3: - sprintf(str,"8x16 %.50s",fonts[cur].name); - path=&(fonts[cur].path8x16); - fontmask="*.f16"; - show_filepick=1; - break; - } - if(show_filepick) { - int result; - struct file_pick fpick; - char *savbuf; - struct text_info ti; - - gettextinfo(&ti); - savbuf=(char *)malloc((ti.screenheight-2)*ti.screenwidth*2); - if(savbuf==NULL) { - uifc.msg("malloc() failure."); - continue; - } - gettext(1,2,ti.screenwidth,ti.screenheight-1,savbuf); - result=filepick(&uifc, str, &fpick, ".", fontmask, UIFC_FP_ALLOWENTRY); - if(result!=-1 && fpick.files>0) { - free(*path); - *(path)=strdup(fpick.selected[0]); + case 1: + j=settings.startup_mode; + for(;;) { + switch(uifc.list(WIN_SAV,0,0,0,&j,NULL,"Startup Video Mode",screen_modes)) { + case -1: + continue; + default: + settings.startup_mode=j; + iniSetInteger(&inicontents,"SyncTERM","VideoMode",settings.startup_mode,&ini_style); + break; + } } - filepick_free(&fpick); - puttext(1,2,ti.screenwidth,ti.screenheight-1,savbuf); - free(savbuf); - } } } +write_ini: + if((inifile=fopen(inipath,"w"))!=NULL) { + iniWriteFile(inifile,inicontents); + fclose(inifile); + } } /* @@ -844,7 +567,7 @@ struct bbslist *show_bbslist(int mode) ,"Program Settings" ,"" }; - int settings=0; + int at_settings=0; struct mouse_event mevent; struct bbslist defaults; char shared_list[MAX_PATH]; @@ -865,8 +588,8 @@ struct bbslist *show_bbslist(int mode) uifc.list(WIN_T2B|WIN_RHT|WIN_IMM|WIN_INACT ,0,0,0,&sopt,&sbar,"SyncTERM Settings",settings_menu); for(;;) { - if (!settings) { - for(;!settings;) { + if (!at_settings) { + for(;!at_settings;) { uifc.helpbuf= "`SyncTERM Dialing Directory`\n\n" "Commands:\n\n" "~ CTRL-D ~ Quick-dial a URL\n" @@ -898,7 +621,7 @@ struct bbslist *show_bbslist(int mode) uifc.list((listcount<MAX_OPTS?WIN_XTR:0) |WIN_T2B|WIN_IMM|WIN_INACT ,0,0,0,&opt,&bar,mode==BBSLIST_SELECT?"Directory":"Edit",(char **)list); - settings=!settings; + at_settings=!at_settings; break; case -7: /* CTRL-E */ #ifdef PCM @@ -932,10 +655,8 @@ struct bbslist *show_bbslist(int mode) } break; case -1: /* ESC */ - #ifdef PCM - if(!confirm("Are you sure you want to exit?",NULL)) + if(settings.confirm_close && !confirm("Are you sure you want to exit?",NULL)) continue; - #endif free_list(&list[0],listcount); return(NULL); } @@ -1062,7 +783,7 @@ struct bbslist *show_bbslist(int mode) } } else { - for(;settings;) { + for(;at_settings;) { uifc.helpbuf= "`SyncTERM Settings Menu`\n\n"; if(oldopt != -2) settitle(syncterm_version); @@ -1075,13 +796,11 @@ struct bbslist *show_bbslist(int mode) case -11: /* TAB */ uifc.list(WIN_T2B|WIN_RHT|WIN_IMM|WIN_INACT ,0,0,0,&sopt,&sbar,"SyncTERM Settings",settings_menu); - settings=!settings; + at_settings=!at_settings; break; case -1: /* ESC */ - #ifdef PCM - if(!confirm("Are you sure you want to exit?",NULL)) + if(settings.confirm_close && !confirm("Are you sure you want to exit?",NULL)) continue; - #endif free_list(&list[0],listcount); return(NULL); case 0: /* Edit default connection settings */ @@ -1145,7 +864,7 @@ struct bbslist *show_bbslist(int mode) font_management(); break; case 4: /* Program settings */ - uifc.msg("This section not yet functional"); + change_settings(); break; } } diff --git a/src/syncterm/bbslist.h b/src/syncterm/bbslist.h index d73bdda91b0aaa87f3adb5640be095043801178e..9f4513e2aa54b3848972020478ad9e2a41500ff3 100644 --- a/src/syncterm/bbslist.h +++ b/src/syncterm/bbslist.h @@ -6,6 +6,7 @@ #include <stdio.h> /* FILE * */ #include "gen_defs.h" #include "dirwrap.h" /* MAX_PATH */ +#include "ini_file.h" #include <time.h> #define LIST_NAME_MAX 30 @@ -58,26 +59,15 @@ struct bbslist { char font[80]; }; -struct font_files { - char *name; - char *path8x8; - char *path8x14; - char *path8x16; -}; - struct bbslist *show_bbslist(int mode); extern char *log_levels[]; extern char *rate_names[]; extern int rates[]; +extern ini_style_t ini_style; void read_item(FILE *listfile, struct bbslist *entry, char *bbsname, int id, int type); void read_list(char *listpath, struct bbslist **list, struct bbslist *defaults, int *i, int type); void free_list(struct bbslist **list, int listcount); void add_bbs(char *listpath, struct bbslist *bbs); 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 diff --git a/src/syncterm/fonts.c b/src/syncterm/fonts.c new file mode 100644 index 0000000000000000000000000000000000000000..50d7f86b206cd09cb3b221ee81232360026f47ac --- /dev/null +++ b/src/syncterm/fonts.c @@ -0,0 +1,343 @@ +#include <stdio.h> +#include <string.h> + +#include "gen_defs.h" +#include "ini_file.h" + +#include "ciolib.h" +#include "allfonts.h" + +#include "uifc.h" +#include "filepick.h" + +#include "bbslist.h" +#include "fonts.h" +#include "syncterm.h" +#include "uifcinit.h" + +void free_font_files(struct font_files *ff) +{ + int i; + + if(ff==NULL) + return; + for(i=0; ff[i].name != NULL; i++) { + FREE_AND_NULL(ff[i].name); + FREE_AND_NULL(ff[i].path8x8); + FREE_AND_NULL(ff[i].path8x14); + FREE_AND_NULL(ff[i].path8x16); + } + FREE_AND_NULL(ff); +} + +void save_font_files(struct font_files *fonts) +{ + FILE *inifile; + char inipath[MAX_PATH]; + char newfont[MAX_PATH]; + char *fontid; + str_list_t ini_file; + str_list_t fontnames; + int i; + + get_syncterm_filename(inipath, sizeof(inipath), SYNCTERM_PATH_INI, FALSE); + if((inifile=fopen(inipath,"r"))!=NULL) { + ini_file=iniReadFile(inifile); + fclose(inifile); + } + else { + ini_file=strListInit(); + } + + fontnames=iniGetSectionList(ini_file, "Font:"); + + /* TODO: Remove all sections... we don't *NEED* to do this */ + while((fontid=strListPop(&fontnames))!=NULL) { + iniRemoveSection(&ini_file, fontid); + } + + if(fonts != NULL) { + for(i=0; fonts[i].name && fonts[i].name[0]; i++) { + sprintf(newfont,"Font:%s",fonts[i].name); + if(fonts[i].path8x8) + iniSetString(&ini_file, newfont, "Path8x8", fonts[i].path8x8, &ini_style); + if(fonts[i].path8x14) + iniSetString(&ini_file, newfont, "Path8x14", fonts[i].path8x14, &ini_style); + if(fonts[i].path8x16) + iniSetString(&ini_file, newfont, "Path8x16", fonts[i].path8x16, &ini_style); + } + } + if((inifile=fopen(inipath,"w"))!=NULL) { + iniWriteFile(inifile,ini_file); + fclose(inifile); + } + else { + uifc.msg("Cannot write to the .ini file!"); + } + + strListFreeStrings(fontnames); + strListFreeStrings(ini_file); +} + +struct font_files *read_font_files(int *count) +{ + FILE *inifile; + char inipath[MAX_PATH]; + char fontpath[MAX_PATH]; + char *fontid; + str_list_t fonts; + struct font_files *ret=NULL; + struct font_files *tmp=NULL; + + *count=0; + get_syncterm_filename(inipath, sizeof(inipath), SYNCTERM_PATH_INI, FALSE); + if((inifile=fopen(inipath, "r"))==NULL) { + return(ret); + } + fonts=iniReadSectionList(inifile, "Font:"); + while((fontid=strListPop(&fonts))!=NULL) { + if(!fontid[5]) + continue; + (*count)++; + tmp=(struct font_files *)realloc(ret, sizeof(struct font_files)*(*count+1)); + if(tmp==NULL) { + count--; + continue; + } + ret=tmp; + ret[*count].name=NULL; + ret[*count-1].name=strdup(fontid+5); + if((ret[*count-1].path8x8=iniReadString(inifile,fontid,"Path8x8",NULL,fontpath))!=NULL) + ret[*count-1].path8x8=strdup(fontpath); + if((ret[*count-1].path8x14=iniReadString(inifile,fontid,"Path8x14","",fontpath))!=NULL) + ret[*count-1].path8x14=strdup(fontpath); + if((ret[*count-1].path8x16=iniReadString(inifile,fontid,"Path8x16",NULL,fontpath))!=NULL) + ret[*count-1].path8x16=strdup(fontpath); + } + fclose(inifile); + strListFreeStrings(fonts); + 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) +{ + int i,j; + int cur=0; + int bar=0; + int fcur=0; + int fbar=0; + int count=0; + int size=0; + struct font_files *fonts; + char *opt[256]; + char opts[5][80]; + struct font_files *tmp=NULL; + char str[128]; + + fonts=read_font_files(&count); + opts[4][0]=0; + + for(;;) { + uifc.helpbuf= "`Font Management`\n\n" + "Allows you to add and remove font files to/from the default font set.\n\n" + "`INS` Adds a new font.\n" + "`DEL` Removes an existing font.\n\n" + "Selecting a font allows you to set the files for all three font sizes:\n" + "8x8, 8x14, and 8x16."; + if(fonts) { + for(j=0;fonts[j].name && fonts[j].name[0]; j++) + opt[j]=fonts[j].name; + opt[j]=""; + } + else { + opts[0][0]=0; + opt[0]=opts[0]; + } + i=uifc.list(WIN_SAV|WIN_INS|WIN_INSACT|WIN_DEL|WIN_XTR,0,0,0,&cur,&bar,"Font",opt); + if(i==-1) { + save_font_files(fonts); + free_font_files(fonts); + return; + } + for(;;) { + char *fontmask; + int show_filepick=0; + char **path; + + if(i&MSK_DEL) { + FREE_AND_NULL(fonts[cur].name); + FREE_AND_NULL(fonts[cur].path8x8); + FREE_AND_NULL(fonts[cur].path8x14); + FREE_AND_NULL(fonts[cur].path8x16); + memmove(&(fonts[cur]),&(fonts[cur+1]),sizeof(struct font_files)*(count-cur-1)); + count--; + break; + } + if(i&MSK_INS) { + str[0]=0; + if(uifc.input(WIN_SAV|WIN_MID,0,0,"Font Name",str,50,0)==-1) + break; + count++; + tmp=(struct font_files *)realloc(fonts, sizeof(struct font_files)*(count+1)); + if(tmp==NULL) { + uifc.msg("realloc() failure, cannot add font."); + count--; + break; + } + fonts=tmp; + memmove(fonts+cur+1,fonts+cur,sizeof(struct font_files)*(count-cur)); + memset(&(fonts[count]),0,sizeof(fonts[count])); + fonts[cur].name=strdup(str); + fonts[cur].path8x8=NULL; + fonts[cur].path8x14=NULL; + fonts[cur].path8x16=NULL; + } + for(i=0; i<5; i++) + opt[i]=opts[i]; + sprintf(opts[0],"Name: %.50s",fonts[cur].name?fonts[cur].name:"<undefined>"); + sprintf(opts[1],"8x8 %.50s",fonts[cur].path8x8?fonts[cur].path8x8:"<undefined>"); + sprintf(opts[2],"8x14 %.50s",fonts[cur].path8x14?fonts[cur].path8x14:"<undefined>"); + sprintf(opts[3],"8x16 %.50s",fonts[cur].path8x16?fonts[cur].path8x16:"<undefined>"); + opts[4][0]=0; + i=uifc.list(WIN_SAV|WIN_INS|WIN_DEL,0,0,0,&fcur,&fbar,"Font",opt); + if(i==-1) + break; + switch(i) { + case 0: + SAFECOPY(str,fonts[cur].name); + free(fonts[cur].name); + uifc.input(WIN_SAV|WIN_MID,0,0,"Font Name",str,50,K_EDIT); + fonts[cur].name=strdup(str); + show_filepick=0; + break; + case 1: + sprintf(str,"8x8 %.50s",fonts[cur].name); + path=&(fonts[cur].path8x8); + fontmask="*.f8"; + show_filepick=1; + break; + case 2: + sprintf(str,"8x14 %.50s",fonts[cur].name); + path=&(fonts[cur].path8x14); + fontmask="*.f14"; + show_filepick=1; + break; + case 3: + sprintf(str,"8x16 %.50s",fonts[cur].name); + path=&(fonts[cur].path8x16); + fontmask="*.f16"; + show_filepick=1; + break; + } + if(show_filepick) { + int result; + struct file_pick fpick; + char *savbuf; + struct text_info ti; + + gettextinfo(&ti); + savbuf=(char *)malloc((ti.screenheight-2)*ti.screenwidth*2); + if(savbuf==NULL) { + uifc.msg("malloc() failure."); + continue; + } + gettext(1,2,ti.screenwidth,ti.screenheight-1,savbuf); + result=filepick(&uifc, str, &fpick, ".", fontmask, UIFC_FP_ALLOWENTRY); + if(result!=-1 && fpick.files>0) { + free(*path); + *(path)=strdup(fpick.selected[0]); + } + filepick_free(&fpick); + puttext(1,2,ti.screenwidth,ti.screenheight-1,savbuf); + free(savbuf); + } + } + } +} diff --git a/src/syncterm/fonts.h b/src/syncterm/fonts.h new file mode 100644 index 0000000000000000000000000000000000000000..f3659aa313657308c8ed68099bdf33caf1d32b22 --- /dev/null +++ b/src/syncterm/fonts.h @@ -0,0 +1,17 @@ +#ifndef _SYNCTERM_FONTS_H +#define _SYNCTERM_FONTS_H + +struct font_files { + char *name; + char *path8x8; + char *path8x14; + char *path8x16; +}; + +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 diff --git a/src/syncterm/objects.mk b/src/syncterm/objects.mk index 47936e418dbfde67cd268611649cbb9e31d7d0aa..bc4343941b71468ae690aa584027bbc14896983b 100644 --- a/src/syncterm/objects.mk +++ b/src/syncterm/objects.mk @@ -2,6 +2,7 @@ OBJS = \ $(MTOBJODIR)$(DIRSEP)bbslist$(OFILE) \ $(MTOBJODIR)$(DIRSEP)uifcinit$(OFILE) \ $(MTOBJODIR)$(DIRSEP)filepick$(OFILE) \ + $(MTOBJODIR)$(DIRSEP)fonts$(OFILE) \ $(MTOBJODIR)$(DIRSEP)conn$(OFILE) \ $(MTOBJODIR)$(DIRSEP)telnet$(OFILE) \ $(MTOBJODIR)$(DIRSEP)telnet_io$(OFILE) \ diff --git a/src/syncterm/syncterm.c b/src/syncterm/syncterm.c index bf643664b044bfaaf9de9e8ac25354b1ee3c6b85..09d10727b24cf4a1a68297280531fea0e41d11e5 100644 --- a/src/syncterm/syncterm.c +++ b/src/syncterm/syncterm.c @@ -16,6 +16,7 @@ #include "cterm.h" #include "allfonts.h" +#include "fonts.h" #include "syncterm.h" #include "bbslist.h" #include "conn.h" @@ -34,6 +35,7 @@ char* syncterm_version = "SyncTERM 0.6" char *inpath=NULL; int default_font=0; +struct syncterm_settings settings; char *font_names[sizeof(conio_fontdata)/sizeof(struct conio_font_data_struct)]; #ifdef _WINSOCKAPI_ @@ -257,6 +259,20 @@ char *get_syncterm_filename(char *fn, int fnlen, int type, int shared) return(fn); } +void load_settings(struct syncterm_settings *set) +{ + FILE *inifile; + char inipath[MAX_PATH]; + + get_syncterm_filename(inipath, sizeof(inipath), SYNCTERM_PATH_INI, FALSE); + inifile=fopen(inipath,"r"); + set->confirm_close=iniReadBool(inifile,"SyncTERM","ConfirmClose",FALSE); +fprintf(stderr,"Confirm: %d\n",set->confirm_close); + set->startup_mode=iniReadInteger(inifile,"SyncTERM","VideoMode",FALSE); + if(inifile) + fclose(inifile); +} + int main(int argc, char **argv) { struct bbslist *bbs=NULL; @@ -335,9 +351,6 @@ int main(int argc, char **argv) case 'T': conn_type=CONN_TYPE_TELNET; break; - case 'V': - textmode(atoi(argv[i]+2)); - break; default: goto USAGE; } @@ -345,7 +358,26 @@ int main(int argc, char **argv) SAFECOPY(url,argv[i]); } + load_settings(&settings); + initciolib(ciolib_mode); + switch(settings.startup_mode) { + case SCREEN_MODE_80X25: + textmode(C80); + break; + case SCREEN_MODE_80X28: + textmode(C80X28); + break; + case SCREEN_MODE_80X43: + textmode(C80X43); + break; + case SCREEN_MODE_80X50: + textmode(C80X50); + break; + case SCREEN_MODE_80X60: + textmode(C80X60); + break; + } gettextinfo(&txtinfo); if((txtinfo.screenwidth<40) || txtinfo.screenheight<24) { @@ -489,7 +521,6 @@ int main(int argc, char **argv) " W = Win32 native mode\n" #endif " A = ANSI mode\n" - "-v# = set video mode to # (default=auto)\n" "-l# = set screen lines to # (default=auto-detect)\n" "-t = use telnet mode if URL does not include the scheme\n" "-r = use rlogin mode if URL does not include the scheme\n" diff --git a/src/syncterm/syncterm.h b/src/syncterm/syncterm.h index 52af75218cb259f962f3754dc067f96d52c37a80..e71c7fffb64f69f5f50e2c8dc94f2f055877391d 100644 --- a/src/syncterm/syncterm.h +++ b/src/syncterm/syncterm.h @@ -9,11 +9,18 @@ enum { ,SYNCTERM_DEFAULT_TRANSFER_PATH }; +struct syncterm_settings { + int confirm_close; + int startup_mode; +}; + extern char *inpath; extern char *syncterm_version; +extern struct syncterm_settings settings; void parse_url(char *url, struct bbslist *bbs, int dflt_conn_type, int force_defaults); extern int default_font; extern char *font_names[]; char *get_syncterm_filename(char *fn, int fnlen, int type, int shared); +void load_settings(struct syncterm_settings *set); #endif diff --git a/src/syncterm/uifcinit.c b/src/syncterm/uifcinit.c index 155f1253ea368d715e2e91e4ec0a145056ce3a7c..5dfdb442daa0985d8d2fb9793029a0e3936513a6 100644 --- a/src/syncterm/uifcinit.c +++ b/src/syncterm/uifcinit.c @@ -117,7 +117,7 @@ int confirm(char *msg, char *helpbuf) init_uifc(FALSE, FALSE); if(uifc_initialized) { uifc.helpbuf=helpbuf; - if(uifc.list(WIN_MID|WIN_ACT,0,0,0,&copt,NULL,msg,options)!=0) + if(uifc.list(WIN_MID|WIN_SAV,0,0,0,&copt,NULL,msg,options)!=0) ret=FALSE; } if(!i) {