diff --git a/src/syncterm/bbslist.c b/src/syncterm/bbslist.c index c3c291011f95b435ecd74a421d80a98ecb7468af..4ad325119b763436265ebb56a5c57a51471a7736 100644 --- a/src/syncterm/bbslist.c +++ b/src/syncterm/bbslist.c @@ -374,7 +374,8 @@ int listcmp(const void *aptr, const void *bptr) return(0); } -void sort_list(struct bbslist **list, int *listcount) { +void sort_list(struct bbslist **list, int *listcount, int *cur, int *bar, int id) { + int i; #if 0 struct bbslist *tmp; unsigned int i,j,swapped=1; @@ -409,6 +410,16 @@ void sort_list(struct bbslist **list, int *listcount) { #else qsort(list, *listcount, sizeof(struct bbslist *), listcmp); #endif + if(cur && id>=0) { + for(i=0; i<*listcount; i++) { + if(list[i]->id==id) { + *cur=i; + if(bar) + *bar=i; + break; + } + } + } } void write_sortorder(void) @@ -444,7 +455,7 @@ void write_sortorder(void) strListFree(&inicontents); } -void edit_sorting(struct bbslist **list, int *listcount) +void edit_sorting(struct bbslist **list, int *listcount, int *ocur, int *obar, int id) { char opt[sizeof(sort_order)/sizeof(struct sort_order_info)][80]; char *opts[sizeof(sort_order)/sizeof(struct sort_order_info)+1]; @@ -526,7 +537,7 @@ void edit_sorting(struct bbslist **list, int *listcount) /* Write back to the .ini file */ write_sortorder(); - sort_list(list, listcount); + sort_list(list, listcount, ocur, obar, id); } void free_list(struct bbslist **list, int listcount) @@ -1300,7 +1311,7 @@ write_ini: } } -void load_bbslist(struct bbslist **list, size_t listsize, struct bbslist *defaults, char *listpath, size_t listpathsize, char *shared_list, size_t shared_listsize, int *listcount) +void load_bbslist(struct bbslist **list, size_t listsize, struct bbslist *defaults, char *listpath, size_t listpathsize, char *shared_list, size_t shared_listsize, int *listcount, int *cur, int *bar, int id) { free_list(&list[0],*listcount); *listcount=0; @@ -1313,14 +1324,14 @@ void load_bbslist(struct bbslist **list, size_t listsize, struct bbslist *defaul /* System BBS List */ if(stricmp(shared_list, listpath)) /* don't read the same list twice */ read_list(shared_list, list, defaults, listcount, SYSTEM_BBSLIST); - sort_list(list, listcount); + sort_list(list, listcount, cur, bar, id); } /* * Displays the BBS list and allows edits to user BBS list * Mode is one of BBSLIST_SELECT or BBSLIST_EDIT */ -struct bbslist *show_bbslist(int mode) +struct bbslist *show_bbslist(int mode, int id) { struct bbslist *list[MAX_OPTS+1]; int i,j; @@ -1356,7 +1367,7 @@ struct bbslist *show_bbslist(int mode) get_syncterm_filename(listpath, sizeof(listpath), SYNCTERM_PATH_LIST, FALSE); get_syncterm_filename(shared_list, sizeof(shared_list), SYNCTERM_PATH_LIST, TRUE); - load_bbslist(list, sizeof(list), &defaults, listpath, sizeof(listpath), shared_list, sizeof(shared_list), &listcount); + load_bbslist(list, sizeof(list), &defaults, listpath, sizeof(listpath), shared_list, sizeof(shared_list), &listcount, &opt, &bar, id); uifc.list(WIN_T2B|WIN_RHT|WIN_IMM|WIN_INACT ,0,0,0,&sopt,&sbar,"SyncTERM Settings",settings_menu); @@ -1393,7 +1404,7 @@ struct bbslist *show_bbslist(int mode) uifc.list((listcount<MAX_OPTS?WIN_XTR:0) |WIN_T2B|WIN_IMM|WIN_INACT|WIN_HLP ,0,0,0,&opt,&bar,mode==BBSLIST_SELECT?"Directory":"Edit",(char **)list); - edit_sorting(list,&listcount); + edit_sorting(list,&listcount, &opt, &bar, list[opt]?list[opt]->id:-1); break; case -2-0x3000: /* ALT-B - Scrollback */ //viewofflinescroll(); @@ -1411,16 +1422,11 @@ struct bbslist *show_bbslist(int mode) break; case -7: /* CTRL-E */ if(list[opt]) { - i=list[opt]->id; uifc.list((listcount<MAX_OPTS?WIN_XTR:0) |WIN_T2B|WIN_IMM|WIN_INACT|WIN_HLP ,0,0,0,&opt,&bar,mode==BBSLIST_SELECT?"Directory":"Edit",(char **)list); if(edit_list(list, list[opt],listpath,FALSE)) { - load_bbslist(list, sizeof(list), &defaults, listpath, sizeof(listpath), shared_list, sizeof(shared_list), &listcount); - for(j=0;list[j]!=NULL && list[j]->name[0];j++) { - if(list[j]->id==i) - opt=j; - } + load_bbslist(list, sizeof(list), &defaults, listpath, sizeof(listpath), shared_list, sizeof(shared_list), &listcount, &opt, &bar, list[opt]->id); oldopt=-1; } } @@ -1516,11 +1522,7 @@ struct bbslist *show_bbslist(int mode) } else { add_bbs(listpath,list[listcount-1]); - load_bbslist(list, sizeof(list), &defaults, listpath, sizeof(listpath), shared_list, sizeof(shared_list), &listcount); - for(j=0;list[j]!=NULL && list[j]->name[0];j++) { - if(list[j]->id==listcount-1) - opt=j; - } + load_bbslist(list, sizeof(list), &defaults, listpath, sizeof(listpath), shared_list, sizeof(shared_list), &listcount, &opt, &bar, list[opt]?list[opt]->id:-1); oldopt=-1; } break; @@ -1559,7 +1561,8 @@ struct bbslist *show_bbslist(int mode) if(uifc.list(WIN_MID|WIN_SAV,0,0,0,&i,NULL,str,YesNo)!=0) break; del_bbs(listpath,list[opt]); - load_bbslist(list, sizeof(list), &defaults, listpath, sizeof(listpath), shared_list, sizeof(shared_list), &listcount); + load_bbslist(list, sizeof(list), &defaults, listpath, sizeof(listpath), shared_list, sizeof(shared_list), &listcount, NULL, NULL, -1); + oldopt=-1; break; case MSK_EDIT: if(safe_mode) { @@ -1569,13 +1572,8 @@ struct bbslist *show_bbslist(int mode) uifc.msg("Cannot edit list in safe mode"); break; } - i=list[opt]->id; if(edit_list(list, list[opt],listpath,FALSE)) { - load_bbslist(list, sizeof(list), &defaults, listpath, sizeof(listpath), shared_list, sizeof(shared_list), &listcount); - for(j=0;list[j]!=NULL && list[j]->name[0];j++) { - if(list[j]->id==i) - opt=j; - } + load_bbslist(list, sizeof(list), &defaults, listpath, sizeof(listpath), shared_list, sizeof(shared_list), &listcount, &opt, &bar, list[opt]?list[opt]->id:-1); oldopt=-1; } break; @@ -1590,13 +1588,8 @@ struct bbslist *show_bbslist(int mode) uifc.msg("Cannot edit list in safe mode"); break; } - i=list[opt]->id; if(edit_list(list, list[opt],listpath,FALSE)) { - load_bbslist(list, sizeof(list), &defaults, listpath, sizeof(listpath), shared_list, sizeof(shared_list), &listcount); - for(j=0;list[j]!=NULL && list[j]->name[0];j++) { - if(list[j]->id==i) - opt=j; - } + load_bbslist(list, sizeof(list), &defaults, listpath, sizeof(listpath), shared_list, sizeof(shared_list), &listcount, &opt, &bar, list[opt]?list[opt]->id:-1); oldopt=-1; } } diff --git a/src/syncterm/bbslist.h b/src/syncterm/bbslist.h index e489cf88e566430c351ad9d77f34811ef7f2f6e3..8bf6afed409526a3e2c6de431c5f1eef55a91e3c 100644 --- a/src/syncterm/bbslist.h +++ b/src/syncterm/bbslist.h @@ -78,7 +78,7 @@ struct bbslist { char font[80]; }; -struct bbslist *show_bbslist(int mode); +struct bbslist *show_bbslist(int mode, int id); extern char *log_levels[]; extern char *rate_names[]; extern int rates[]; diff --git a/src/syncterm/syncterm.c b/src/syncterm/syncterm.c index 60a9826f71d3d15c4bad2fb0b1b951fa10902367..dfeeae5d5f4053846a61dcf30071cddb50316d13 100644 --- a/src/syncterm/syncterm.c +++ b/src/syncterm/syncterm.c @@ -1177,7 +1177,7 @@ int main(int argc, char **argv) return(1); load_font_files(); - while(bbs!=NULL || (bbs=show_bbslist(BBSLIST_SELECT))!=NULL) { + while(bbs!=NULL || (bbs=show_bbslist(BBSLIST_SELECT, bbs?bbs->id:-1))!=NULL) { gettextinfo(&txtinfo); /* Current mode may have changed while in show_bbslist() */ if(!conn_connect(bbs)) { /* ToDo: Update the entry with new lastconnected */