diff --git a/src/sbbs3/js_global.c b/src/sbbs3/js_global.c
index 7a9721e164250b14e364a73ac50c027f8332843a..49eb0d1b99188abe7bc332ff0a4410d55599c0eb 100644
--- a/src/sbbs3/js_global.c
+++ b/src/sbbs3/js_global.c
@@ -900,7 +900,7 @@ js_html_encode(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rva
 					tmpbuf[j++]=inbuf[i];
 				else if(inbuf[i]<' ') /* unknown control chars */
 				{
-					if(ansi && inbuf[i]=='\e')
+					if(ansi && inbuf[i]==ESC)
 					{
 						esccount++;
 						tmpbuf[j++]=inbuf[i];
@@ -948,7 +948,7 @@ js_html_encode(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rva
 				}
 				outbuf=param;
 			}
-			if(tmpbuf[i]=='\e' && tmpbuf[i+1]=='[')
+			if(tmpbuf[i]==ESC && tmpbuf[i+1]=='[')
 			{
 				if(nodisplay)
 					continue;
@@ -1344,7 +1344,7 @@ js_html_encode(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rva
 							lastcolor=(blink?(1<<7):0) | (bg << 4) | (bold?(1<<3):0) | fg;
 							j+=sprintf(outbuf+j,"%s%s%s",HTML_COLOR_PREFIX,htmlansi[lastcolor],HTML_COLOR_SUFFIX);
 						}
-						if(hpos>=79 && tmpbuf[i+1] != '\r' && tmpbuf[i+1] != '\n' && tmpbuf[i+1] != '\e')
+						if(hpos>=79 && tmpbuf[i+1] != '\r' && tmpbuf[i+1] != '\n' && tmpbuf[i+1] != ESC)
 						{
 							hpos=0;
 							currrow++;
@@ -1936,6 +1936,26 @@ js_directory(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
     return(JS_TRUE);
 }
 
+static JSBool
+js_freediskspace(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
+{
+	int32		unit=0;
+	char*		p;
+
+	*rval = JSVAL_VOID;
+
+	if((p=JS_GetStringBytes(JS_ValueToString(cx, argv[0])))==NULL) 
+		return(JS_TRUE);
+
+	if(argc>1)
+		JS_ValueToInt32(cx,argv[1],&unit);
+
+	JS_NewNumberValue(cx,getfreediskspace(p,unit),rval);
+
+    return(JS_TRUE);
+}
+
+
 static JSBool
 js_socket_select(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 {
@@ -1994,7 +2014,7 @@ js_socket_select(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *r
 				continue;
 			sock=*psock;
 		} else 
-			JS_ValueToInt32(cx,val,&sock);
+			JS_ValueToInt32(cx,val,(int32*)&sock);
 		FD_SET(sock,&socket_set);
 		if(sock>maxsock)
 			maxsock=sock;
@@ -2245,7 +2265,12 @@ static jsMethodSpec js_global_functions[] = {
 	,JSDOCSTR("returns an array of directory entries, "
 		"<i>pattern</i> is the path and filename or wildcards to search for (e.g. '/subdir/*.txt'), "
 		"<i>flags</i> is a bitfield of optional <tt>glob</tt> flags (default is <tt>GLOB_MARK</tt>)")
-	},		
+	},
+	{"dir_freespace",	js_freediskspace,	2,	JSTYPE_NUMBER,	JSDOCSTR("string directory [,unit_size]")
+	,JSDOCSTR("returns the amount of available disk space in the specified <i>directory</i> "
+		"using the specified <i>unit_size</i> in bytes (default: 1), "
+		"specify a <i>unit_size</i> of <tt>1024</tt> to return the available space in <i>kilobytes</i>.")
+	},
 	{"socket_select",	js_socket_select,	0,	JSTYPE_ARRAY,	JSDOCSTR("[array of socket objects or descriptors] [,number timeout] [,bool write]")
 	,JSDOCSTR("checks an array of socket objects or descriptors for read or write ability (default is <i>read</i>), "
 		"default timeout value is 0.0 seconds (immediate timeout), "