From 72c25b0043ede182fe1169cb7c288ecd9d256010 Mon Sep 17 00:00:00 2001
From: deuce <>
Date: Mon, 28 Nov 2005 18:28:47 +0000
Subject: [PATCH] Fix initial video mode setting. Make scrollback buffer
 shared.

---
 src/syncterm/bbslist.c  |  9 +++++----
 src/syncterm/menu.c     |  5 +++--
 src/syncterm/syncterm.h |  1 +
 src/syncterm/term.c     | 13 ++++---------
 4 files changed, 13 insertions(+), 15 deletions(-)

diff --git a/src/syncterm/bbslist.c b/src/syncterm/bbslist.c
index c16f2e2f3a..982616a2d5 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 ee34d9a6ee..ff09150940 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 c556691b4f..e4272aa427 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 6700c1c1a1..6edb69ad33 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);
-- 
GitLab