From 044729bb055d0474d7f3b89107e799971cc24d96 Mon Sep 17 00:00:00 2001
From: rswindell <>
Date: Tue, 15 Jul 2003 11:16:29 +0000
Subject: [PATCH] word_wrap() method doesn't count Ctrl-A codes as printable
 characters.

---
 src/sbbs3/js_global.c | 18 ++++++++++++------
 1 file changed, 12 insertions(+), 6 deletions(-)

diff --git a/src/sbbs3/js_global.c b/src/sbbs3/js_global.c
index 3db003ec7b..dd345061d1 100644
--- a/src/sbbs3/js_global.c
+++ b/src/sbbs3/js_global.c
@@ -479,7 +479,7 @@ js_word_wrap(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 	if(argc>1)
 		JS_ValueToInt32(cx,argv[1],&len);
 
-	if((linebuf=(char*)malloc(len+1))==NULL)
+	if((linebuf=(char*)malloc((len*2)+2))==NULL) /* room for ^A codes */
 		return(JS_FALSE);
 
 	outbuf[0]=0;
@@ -492,18 +492,24 @@ js_word_wrap(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 		else if(inbuf[i]=='\t') {
 			if((col%8)==0)
 				col++;
-			while(col%8)
-				col++;
+			col+=(col%8);
+		} else if(inbuf[i]==CTRL_A && inbuf[i+1]!=0) {
+			if(l<(len*2)) {
+				strncpy(linebuf+l,inbuf+i,2);
+				l+=2;
+			}
+			i+=2;
+			continue;
 		} else if(inbuf[i]>=' ')
 			col++;
 		linebuf[l]=inbuf[i++];
-		if(col<=len && l<=len) {
+		if(col<=len) {
 			l++;
 			continue;
 		}
 		/* wrap line here */
 		k=l;
-		while(k && linebuf[k]>' ') k--;
+		while(k && linebuf[k]>' ' && linebuf[k-1]!=CTRL_A) k--;
 		if(k==0)	/* continuous printing chars, no word wrap possible */
 			strncat(outbuf,linebuf,l+1);
 		else {
@@ -514,7 +520,7 @@ js_word_wrap(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 		}
 		strcat(outbuf,"\r\n");
 		/* skip white space (but no more than one LF) for starting of new line */
-		while(inbuf[i] && inbuf[i]<=' ' && inbuf[i]!='\n') i++;	
+		while(inbuf[i] && inbuf[i]<=' ' && inbuf[i]!='\n' && inbuf[i]!=CTRL_A) i++;	
 		if(inbuf[i]=='\n') i++;
 		l=0;
 		col=1;
-- 
GitLab