Commit 5c60559b authored by deuce's avatar deuce
Browse files

Maintain the currently selected if possible...

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