diff --git a/src/syncterm/bbslist.c b/src/syncterm/bbslist.c index c16f2e2f3adb3ceb2d89d4fce89dc0556c09ceb3..982616a2d50eca5bbec67649dcdd81ff4b42e333 100644 --- a/src/syncterm/bbslist.c +++ b/src/syncterm/bbslist.c @@ -496,6 +496,7 @@ void change_settings(void) char *opt[4]; int i,j; char str[64]; + int cur=0; get_syncterm_filename(inipath, sizeof(inipath), SYNCTERM_PATH_INI, FALSE); if((inifile=fopen(inipath,"r"))!=NULL) { @@ -509,13 +510,12 @@ void change_settings(void) for(i=0; i<4; i++) opt[i]=opts[i]; - i=0; opts[3][0]=0; for(;;) { sprintf(opts[0],"Confirm Program Exit: %s",settings.confirm_close?"Yes":"No"); sprintf(opts[1],"Startup Video Mode: %s",screen_modes[settings.startup_mode]); sprintf(opts[2],"Scrollback Buffer Lines: %d",settings.backlines); - switch(uifc.list(WIN_MID|WIN_SAV,0,0,0,&i,NULL,"Program Settings",opt)) { + switch(uifc.list(WIN_MID|WIN_SAV,0,0,0,&cur,NULL,"Program Settings",opt)) { case -1: goto write_ini; case 0: @@ -524,8 +524,9 @@ void change_settings(void) break; case 1: j=settings.startup_mode; - for(;;) { - switch(uifc.list(WIN_SAV,0,0,0,&j,NULL,"Startup Video Mode",screen_modes)) { + i=0; + for(;i!=-1;) { + switch(i=uifc.list(WIN_SAV,0,0,0,&j,NULL,"Startup Video Mode",screen_modes)) { case -1: continue; default: diff --git a/src/syncterm/menu.c b/src/syncterm/menu.c index ee34d9a6ee9cb3f01c5ca080994b2a7e8d982353..ff09150940c5b2e11501da87b46dd79c1767848d 100644 --- a/src/syncterm/menu.c +++ b/src/syncterm/menu.c @@ -27,8 +27,9 @@ void viewscroll(void) y=wherey(); uifcbail(); gettextinfo(&txtinfo); - scrollback=(char *)malloc((term.width*2*settings.backlines)+(txtinfo.screenheight*txtinfo.screenwidth*2)); - memcpy(scrollback,cterm.scrollback,term.width*2*settings.backlines); + scrollback=(char *)malloc((scrollback_buf==NULL?0:(term.width*2*settings.backlines))+(txtinfo.screenheight*txtinfo.screenwidth*2)); + if(cterm.scrollback != NULL) + memcpy(scrollback,cterm.scrollback,term.width*2*settings.backlines); gettext(1,1,txtinfo.screenwidth,txtinfo.screenheight,scrollback+(cterm.backpos)*cterm.width*2); drawwin(); top=cterm.backpos; diff --git a/src/syncterm/syncterm.h b/src/syncterm/syncterm.h index c556691b4f0675c897edc9f7c67193acc7634011..e4272aa42721f1b4ed035c0be55df9013fc290c9 100644 --- a/src/syncterm/syncterm.h +++ b/src/syncterm/syncterm.h @@ -17,6 +17,7 @@ struct syncterm_settings { extern char *inpath; extern char *syncterm_version; +extern unsigned char *scrollback_buf; extern struct syncterm_settings settings; void parse_url(char *url, struct bbslist *bbs, int dflt_conn_type, int force_defaults); extern int default_font; diff --git a/src/syncterm/term.c b/src/syncterm/term.c index 6700c1c1a1ce28c402792d7d497c75181a63fdec..6edb69ad333ce95a8e50d9a81d7d79ec4e6ee45d 100644 --- a/src/syncterm/term.c +++ b/src/syncterm/term.c @@ -838,7 +838,6 @@ BOOL doterm(struct bbslist *bbs) unsigned char prn[BUFSIZE]; int key; int i,j,k; - unsigned char *scrollback; unsigned char *p; BYTE zrqinit[] = { ZDLE, ZHEX, '0', '0', 0 }; /* for Zmodem auto-downloads */ BYTE zrinit[] = { ZDLE, ZHEX, '0', '1', 0 }; /* for Zmodem auto-uploads */ @@ -860,9 +859,9 @@ BOOL doterm(struct bbslist *bbs) ciomouse_addevent(CIOLIB_BUTTON_1_DRAG_END); ciomouse_addevent(CIOLIB_BUTTON_3_CLICK); ciomouse_addevent(CIOLIB_BUTTON_2_CLICK); - scrollback=malloc(term.width*2*settings.backlines); - memset(scrollback,0,term.width*2*settings.backlines); - cterm_init(term.height,term.width,term.x-1,term.y-1,settings.backlines,scrollback); + if(scrollback_buf != NULL) + memset(scrollback_buf,0,term.width*2*settings.backlines); + cterm_init(term.height,term.width,term.x-1,term.y-1,settings.backlines,scrollback_buf); cterm.music_enable=bbs->music; ch[1]=0; zrqbuf[0]=0; @@ -886,7 +885,6 @@ BOOL doterm(struct bbslist *bbs) switch(inch) { case -1: if(!is_connected(NULL)) { - free(scrollback); cterm_end(); conn_close(); uifcmsg("Disconnected","`Disconnected`\n\nRemote host dropped connection"); @@ -959,7 +957,7 @@ BOOL doterm(struct bbslist *bbs) getmouse(&mevent); switch(mevent.event) { case CIOLIB_BUTTON_1_DRAG_START: - mousedrag(scrollback); + mousedrag(scrollback_buf); break; case CIOLIB_BUTTON_2_CLICK: case CIOLIB_BUTTON_3_CLICK: @@ -1098,7 +1096,6 @@ BOOL doterm(struct bbslist *bbs) uifcbail(); free(buf); cterm_end(); - free(scrollback); conn_close(); hidemouse(); return(key==0x2d00 /* Alt-X? */); @@ -1131,7 +1128,6 @@ BOOL doterm(struct bbslist *bbs) continue; #endif cterm_end(); - free(scrollback); conn_close(); hidemouse(); return(FALSE); @@ -1176,7 +1172,6 @@ BOOL doterm(struct bbslist *bbs) continue; #endif cterm_end(); - free(scrollback); conn_close(); hidemouse(); return(TRUE);